+
+
+
+
+ com.mysql.cj.jdbc.Driver
+ jdbc:mysql://localhost:3306/personsDB
+ root
+ 1111
+
+
+ 5
+ 20
+ 300
+ 50
+ 3000
+
+
+ org.hibernate.dialect.MySQLDialect
+
+
+ true
+
+ thread
+
+ update
+
+
+
+
+
\ No newline at end of file
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task1/Person.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task1/Person.java
new file mode 100644
index 0000000..7102191
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task1/Person.java
@@ -0,0 +1,16 @@
+package Seminars.Lesson2.task1;
+
+public class Person {
+ private String name;
+ private int age;
+
+ public Person() {
+ this.name = "Name";
+ this.age = 25;
+ }
+
+ public void displayInfo(){
+
+ System.out.printf("Имя: %s; Возраст: %d\n%n", name, age);
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task1/Program.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task1/Program.java
new file mode 100644
index 0000000..aaeedf3
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task1/Program.java
@@ -0,0 +1,29 @@
+package Seminars.Lesson2.task1;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+
+public class Program {
+
+
+ public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
+ Class> personalClass = Class.forName("Seminars.Lesson2.task1.Person");
+
+ //Получить список всех полей.
+ Field[] fields = personalClass.getDeclaredFields();
+ for (Field field:fields){
+ System.out.println("Поле: " + field.getName());
+ }
+
+ //Получение список всех конструкторов
+ Constructor[] constructors = personalClass.getConstructors();
+
+ Object personInstance = constructors[0].newInstance(null);
+
+ Field nameField = personalClass.getDeclaredField("name");
+ nameField.setAccessible(true);
+ nameField.set(personInstance, "Alice");
+
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task2/Car.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task2/Car.java
new file mode 100644
index 0000000..0ab15a2
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task2/Car.java
@@ -0,0 +1,13 @@
+package Seminars.Lesson2.task2;
+
+public class Car {
+ String model;
+ String color;
+ int year;
+
+ public Car(String model, String color, int year) {
+ this.model = model;
+ this.color = color;
+ this.year = year;
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task2/Program.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task2/Program.java
new file mode 100644
index 0000000..afb9066
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task2/Program.java
@@ -0,0 +1,31 @@
+package Seminars.Lesson2.task2;
+
+import java.lang.reflect.Field;
+
+public class Program {
+
+ /**
+ Задача 2: Применение Reflecttion Api в рфзработке
+ ======================================================
+
+ Реализуйте обобщенный метод, который принимает объект и выводит в консоль значения всех полей.
+ Создайте класс Car с различными полями.
+ Применити Reflection Api для вывода значений полей созданного объейкта класса Car
+ с использованием ранее созданного метода.
+ **/
+
+ public static void main(String[] args) throws IllegalAccessException {
+ Car car = new Car("Toyota", "blue", 2012);
+ task2(car);
+ }
+
+ private static void task2(T obj) throws IllegalAccessException {
+ Class> obClass = obj.getClass();
+
+ Field[] fields = obClass.getDeclaredFields();
+ for (Field field:fields){
+ field.setAccessible(true); // разрешает доступ к закрытым полям
+ System.out.printf("%s: %s\n", field.getName(), field.get(obj));
+ }
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Column.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Column.java
new file mode 100644
index 0000000..16b37bd
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Column.java
@@ -0,0 +1,14 @@
+package Seminars.Lesson2.task3;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface Column {
+
+ String name();
+ boolean primaryKey() default false;
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Employee.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Employee.java
new file mode 100644
index 0000000..6485fff
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Employee.java
@@ -0,0 +1,44 @@
+package Seminars.Lesson2.task3;
+
+import java.util.UUID;
+
+@Entity
+@Table(name = "users")
+public class Employee {
+
+ @Column(name = "id", primaryKey = true)
+ private UUID id;
+ @Column(name = "username")
+ private String username;
+ @Column(name = "email")
+ private String emal;
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getEmal() {
+ return emal;
+ }
+
+ public void setEmal(String emal) {
+ this.emal = emal;
+ }
+
+ public Employee(String username, String emal) {
+ this.username = username;
+ this.emal = emal;
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Entity.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Entity.java
new file mode 100644
index 0000000..cf694b2
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Entity.java
@@ -0,0 +1,12 @@
+package Seminars.Lesson2.task3;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface Entity {
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Program.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Program.java
new file mode 100644
index 0000000..70caab9
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Program.java
@@ -0,0 +1,45 @@
+package Seminars.Lesson2.task3;
+
+import java.util.UUID;
+
+public class Program {
+ /*
+ Задача 3: Реализовать простой фреймворк для создания SQL-запросов на основе Java объектов
+
+ Фреймворк должен позволять аннотировать классы и поля для связывания их
+ с таблицами и столбцами в базе данных.
+
+ 1. Аннотации для маппинга:
+ Создайте аннотации, такие как @Entity, @Table, @Column для маппинга классов,
+ таблиц и полей в базе данных.
+
+ 2. Механизм генерации SQL-запросов:
+ Реализуйте класс QueryBuilder, который может принимать объект и генерировать
+ SQL-запросы для выполнения операций CRUD (Create, Read, Update, Delete) на основе аннотаци.
+ Используйте Reflection для получения метаданных класса,
+ аннотированного объекта, чтобы построить соответствующий SQL-запрос.
+ 3. Пример использования:
+ Создайте простой класс, аннотированный для маппинга с базой данных.
+ Используйте ваш фреймворк для генерации SQL-запросов для различных операций,
+ таких как вставка, выборка, обновление и удаление.
+
+ */
+
+
+ public static void main(String[] args) throws IllegalAccessException {
+ Employee user = new Employee("Stanislav", "sample@gmail.com");
+ UUID pk = UUID.randomUUID();
+ user.setId(pk);
+
+ QueryBuilder queryBuilder = new QueryBuilder();
+ String insertQuery = queryBuilder.buildInsertQuery(user);
+ System.out.printf("Insert Query: %s\n", insertQuery);
+
+ String selectQuery = queryBuilder.buildSelectQuery(Employee.class, pk);
+ System.out.printf("Select Query: %s\n", selectQuery);
+
+ String updateQuery = queryBuilder.buildUpdateQuery(user);
+ System.out.printf("Update Query: %s\n", updateQuery);
+
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/QueryBuilder.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/QueryBuilder.java
new file mode 100644
index 0000000..e5e6e85
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/QueryBuilder.java
@@ -0,0 +1,111 @@
+package Seminars.Lesson2.task3;
+
+import java.lang.reflect.Field;
+import java.util.UUID;
+
+public class QueryBuilder {
+
+ public String buildInsertQuery(Object obj) throws IllegalAccessException {
+ Class> clazz = obj.getClass();
+ StringBuilder query = new StringBuilder("INSERT INTO ");
+
+ if (clazz.isAnnotationPresent(Table.class)){
+ Table tableAnnatation = clazz.getAnnotation(Table.class);
+ query.append(tableAnnatation.name())
+ .append(" (");
+
+ Field[] fields = clazz.getDeclaredFields();
+ for (Field field:fields){
+ if(field.isAnnotationPresent(Column.class)){
+ Column columnAnotation = field.getAnnotation(Column.class);
+ query.append(columnAnotation.name()).append(", ");
+ }
+ }
+ if (query.charAt(query.length() - 2) == ',') {
+ query.delete(query.length() - 2, query.length());
+ }
+
+ query.append(") VALUE(");
+
+ for (Field field:fields){
+ if(field.isAnnotationPresent(Column.class)){
+ field.setAccessible(true);
+ query.append("'").append(field.get(obj)).append("', ");
+ }
+ }
+ if (query.charAt(query.length() - 2) == ',') {
+ query.delete(query.length() - 2, query.length());
+ }
+ query.append(")");
+ return query.toString();
+ }
+ else {
+ return null;
+ }
+ }
+
+
+
+ public String buildSelectQuery(Class> clazz, UUID primaryKey) {
+ StringBuilder query = new StringBuilder("SELECT * FROM ");
+
+ if (clazz.isAnnotationPresent(Table.class)) {
+ Table tableAnnatation = clazz.getAnnotation(Table.class);
+ query.append(tableAnnatation.name())
+ .append(" WHERE ");
+ }
+ Field[] fields = clazz.getDeclaredFields();
+ for (Field field : fields) {
+ if (field.isAnnotationPresent(Column.class)) {
+ Column columnAnotation = field.getAnnotation(Column.class);
+ if (columnAnotation.primaryKey()) {
+ query.append(columnAnotation.name()).append(" =").append(primaryKey);
+ break;
+ }
+ }
+ }
+ return query.toString();
+ }
+
+ public String buildUpdateQuery(Object obj) throws IllegalAccessException {
+ Class> clazz = obj.getClass();
+ StringBuilder query = new StringBuilder("UPDATE ");
+
+ if (clazz.isAnnotationPresent(Table.class)) {
+ Table tableAnnotation = clazz.getAnnotation(Table.class);
+ query.append(tableAnnotation.name()).append(" SET ");
+ Field[] fields = clazz.getDeclaredFields();
+ for (Field field : fields) {
+ if (field.isAnnotationPresent(Column.class)){
+ field.setAccessible(true);
+ Column columnAnantation = field.getAnnotation(Column.class);
+ if (columnAnantation.primaryKey())
+ continue;
+ query.append(columnAnantation.name()).append(" = '").append(field.get(obj)).append("', ");
+ }
+
+ }
+ if (query.charAt(query.length() - 2) == ',') {
+ query.delete(query.length() - 2, query.length());
+ }
+
+ query.append(" WHERE ");
+ for (Field field : fields) {
+ if (field.isAnnotationPresent(Column.class)){
+ field.setAccessible(true);
+ Column columnAnantation = field.getAnnotation(Column.class);
+ if (columnAnantation.primaryKey()){
+ query.append(columnAnantation.name()).append(" = '").append(field.get(obj)).append("'");
+ break;
+ }
+ }
+
+ }
+ return query.toString();
+
+ } else {
+ return null;
+ }
+
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Table.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Table.java
new file mode 100644
index 0000000..511fd80
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson2/task3/Table.java
@@ -0,0 +1,14 @@
+package Seminars.Lesson2.task3;
+
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface Table {
+
+ String name();
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task1/Program.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task1/Program.java
new file mode 100644
index 0000000..db01785
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task1/Program.java
@@ -0,0 +1,49 @@
+package Seminars.Lesson3.task1;
+
+import java.io.*;
+
+public class Program {
+
+
+ /*
+* Задача 1
+* <р>
+* Создайте класс UserData с поляки String name, inт age, transient String password
+* Попе password должно быть отмечено ключем словом transient
+* Реализуйте интерфейс Seriazeble в вашем классе
+* В методе main создоиге экземпляр класса UserData и инициализируйте его данными.
+* Сериализуйте этот объект в файл используя ObjectOutputStream в сочетании с FileOutputStream»
+* <р>
+
+* * <р>
+ Задача 2
+* просериализуйте объект из ранее созданного файла обратно в объект Java,
+* используя ObjectInputStream в сочетании с FilelInputStream
+* Выведите данные десериализованного объекта UserData
+* Сравните данные оо сериализации и после десериализации.
+* особенно обратите внимание на поле.
+* помеченное как transient.
+* Обсудите почему это поле не было сохранено после десериализации
+ */
+
+ public static void main(String[] args) throws IOException, ClassNotFoundException {
+ UserData userData = new UserData("Dima", 31, "see");
+
+ try (FileOutputStream fileOutputStream = new FileOutputStream("userdata.bin");
+ ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream)){
+ objectOutputStream.writeObject(userData);
+ System.out.println("Данные сериализованы");
+ }
+
+ try (FileInputStream fileInputStream = new FileInputStream("userdata.bin");
+ ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream)){
+ userData = (UserData)objectInputStream.readObject();
+ System.out.println("Данные десериализованы");
+ }
+
+ System.out.println("Имя " + userData.getName());
+ System.out.println("Возраст " + userData.getAge());
+ System.out.println("Пароль " + userData.getPassword());
+
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task1/UserData.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task1/UserData.java
new file mode 100644
index 0000000..b036503
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task1/UserData.java
@@ -0,0 +1,29 @@
+package Seminars.Lesson3.task1;
+
+import java.io.Serializable;
+
+public class UserData implements Serializable {
+
+ private String name;
+ private int age;
+ transient String password;
+
+ public UserData(String name, int age, String password) {
+ this.name = name;
+ this.age = age;
+ this.password = password;
+ }
+
+
+ public String getName() {
+ return name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task2/Program.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task2/Program.java
new file mode 100644
index 0000000..493fafc
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task2/Program.java
@@ -0,0 +1,61 @@
+package Seminars.Lesson3.task2;
+
+import java.io.File;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+import static Seminars.Lesson3.task2.ToDoListApp.*;
+
+public class Program {
+ public static void main(String[] args) {
+ List tasks;
+ File f = new File(FILE_JSON);
+ if (f.exists() && !f.isDirectory())
+ tasks = loadTasksFromFile(FILE_JSON);
+ else
+ tasks = prepareTasks();
+ ToDoListApp.saveTasksToFile(FILE_JSON, tasks);
+ ToDoListApp.saveTasksToFile(FILE_BIN, tasks);
+ ToDoListApp.saveTasksToFile(FILE_XML, tasks);
+
+
+ displayTasks(tasks);
+ Scanner scanner = new Scanner(System.in);
+ while (true){
+ System.out.println("Выберете действие:");
+ System.out.println("1. Добавить новую задачу");
+ System.out.println("2. Отметить задачу как выполненую");
+ System.out.println("3. Выйти");
+
+ switch (scanner.nextLine()){
+ case "1":
+ addNewTask(scanner, tasks);
+ break;
+ case "2":
+ markTaskAsDone(scanner, tasks);
+ break;
+ case "3":
+ saveTasksToFile(FILE_JSON,tasks);
+ saveTasksToFile(FILE_BIN,tasks);
+ saveTasksToFile(FILE_XML,tasks);
+ break;
+ }
+ displayTasks(tasks);
+
+
+ }
+
+
+ }
+
+ static List prepareTasks(){
+
+ ArrayList list = new ArrayList<>();
+ list.add(new ToDo("Сходить в магазин"));
+ list.add(new ToDo("Погулять с собакой"));
+ list.add(new ToDo("Заменить лампочку"));
+ return list;
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task2/ToDo.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task2/ToDo.java
new file mode 100644
index 0000000..a851da2
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task2/ToDo.java
@@ -0,0 +1,45 @@
+package Seminars.Lesson3.task2;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+public class ToDo implements Externalizable {
+ private String title;
+ private boolean isDone;
+
+ public ToDo() {
+ }
+
+ public ToDo(String title) {
+ this.title = title;
+ this.isDone = false;
+ }
+
+
+
+ @Override
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject(title);
+ out.writeBoolean(isDone);
+ }
+
+ @Override
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ title = (String) in.readObject();
+ isDone = in.readBoolean();
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public boolean isDone() {
+ return isDone;
+ }
+
+ public void setDone(boolean done) {
+ isDone = done;
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task2/ToDoListApp.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task2/ToDoListApp.java
new file mode 100644
index 0000000..7a047b0
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson3/task2/ToDoListApp.java
@@ -0,0 +1,104 @@
+package Seminars.Lesson3.task2;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+public class ToDoListApp {
+
+ public static final String FILE_JSON = "tasks.json";
+ public static final String FILE_BIN = "tasks.bin";
+ public static final String FILE_XML = "tasks.xml";
+ public static final ObjectMapper objectMapper = new ObjectMapper();
+ public static final XmlMapper xmlMapper = new XmlMapper();
+
+
+ public static void addNewTask(Scanner scanner, List tasks){
+ System.out.println("Введите название новой задачи: \n");
+ String newTaskTitle = scanner.nextLine();
+ tasks.add(new ToDo(newTaskTitle));
+ saveTasksToFile(FILE_JSON, tasks);
+ saveTasksToFile(FILE_BIN, tasks);
+ saveTasksToFile(FILE_XML, tasks);
+
+
+ System.out.println("Новая задача добавлена.");
+ }
+
+ public static void saveTasksToFile(String filename, List tasks) {
+ try {
+ if (filename.endsWith(".json")) {
+ objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
+ objectMapper.writeValue(new File(filename), tasks);
+ } else if (filename.endsWith(".bin")){
+ try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))){
+ oos.writeObject(tasks);
+ }
+ } else if (filename.endsWith(".xml")){
+ xmlMapper.writeValue(new File(filename), tasks);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static List loadTasksFromFile(String fileName) {
+ List tasks = new ArrayList<>();
+
+ File file = new File(fileName);
+ if (file.exists()) {
+ try {
+ if (fileName.endsWith(".json")) {
+ tasks = objectMapper.readValue(file, objectMapper.getTypeFactory().constructCollectionType(List.class, ToDo.class));
+ } else if (fileName.endsWith(".bin")) {
+ try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {
+ tasks = (List) ois.readObject();
+ }
+ } else if (fileName.endsWith(".xml")) {
+ xmlMapper.readValue(file, xmlMapper.getTypeFactory().constructCollectionType(List.class, ToDo.class));
+ }
+ } catch (IOException | ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return tasks;
+ }
+
+ public static void markTaskAsDone(Scanner scanner, List tasks) {
+ System.out.println("Введите порядковый номер задачи для отметки как выполненой:");
+ String input = scanner.nextLine();
+ try {
+ int taskNumber = Integer.parseInt(input) - 1;
+ if (taskNumber >= 0 && taskNumber < tasks.size()) {
+ tasks.get(taskNumber).setDone(true);
+ saveTasksToFile(FILE_JSON, tasks);
+ saveTasksToFile(FILE_BIN, tasks);
+ saveTasksToFile(FILE_XML, tasks);
+ System.out.println("Задача отмечена как выполненная.");
+ } else {
+ System.out.println("Некорректный номер задачи. Попробуйте снова.");
+ }
+ } catch (NumberFormatException e) {
+ System.out.println("Некоректный ввод. Попробуйте снова.");
+ }
+ }
+
+ public static void displayTasks(List tasks) {
+ System.out.println("Список задач:");
+ int i = 0;
+ for (ToDo task : tasks) {
+ i++;
+ System.out.printf("%s. %s %s\n", i, task.isDone() ? "[x]" : "[ ]", task.getTitle());
+ }
+ }
+
+
+
+
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task1/Program.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task1/Program.java
new file mode 100644
index 0000000..6502295
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task1/Program.java
@@ -0,0 +1,137 @@
+package Seminars.Lesson4.task1;
+
+import Seminars.Lesson4.task1.models.Student;
+
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Random;
+
+public class Program {
+ private static Random random = new Random();
+
+
+ public static void main(String[] args) throws SQLException {
+ String url = "jdbc:mysql://localhost:3306/";
+ String user = "root";
+ String password = "1111";
+
+ try (Connection connection = DriverManager.getConnection(url, user, password)) {
+
+
+ createDatabase(connection);
+ System.out.println("Database created successfully");
+
+ useDatabase(connection);
+ System.out.println("Use database successfully");
+
+ createTable(connection);
+ System.out.println("Create table successfully");
+
+
+ int count = random.nextInt(5);
+// System.out.println(count);
+ for (int i = 0; i < count; i++) {
+ Student student = Student.create();
+// System.out.println(student);
+ insertData(connection, student);
+ }
+ System.out.println("Insert data successfully");
+
+ Collection students = readData(connection);
+ for (var student : students)
+ System.out.println(student);
+ System.out.println("Read data");
+
+ for (var student : students) {
+ student.updateName();
+ student.updateAge();
+ updateData(connection, student);
+ }
+ System.out.println("Update data");
+
+ students = readData(connection);
+ for (var student : students)
+ System.out.println(student);
+ System.out.println("Read data");
+
+// for (var student : students)
+// deleteData(connection, student.getId());
+// System.out.println("Delete data");
+
+ connection.close();
+ System.out.println("Database is closed successfully");
+
+ }
+ }
+
+ private static void insertData(Connection connection, Student student) throws SQLException {
+ String insertDataSQL = "INSERT INTO students (name, age) VALUES (?,?);";
+ try (PreparedStatement statement = connection.prepareStatement(insertDataSQL)){
+ statement.setString(1, student.getName());
+ statement.setInt(2, student.getAge());
+ statement.executeUpdate();
+ }
+ }
+
+
+
+
+ private static void createDatabase(Connection connection) throws SQLException {
+ String createDatabaseSQL = "CREATE DATABASE IF NOT EXISTS studentsDB;";
+ try (PreparedStatement statement = connection.prepareStatement(createDatabaseSQL)){
+ statement.execute();
+ }
+ }
+
+ private static void useDatabase(Connection connection) throws SQLException {
+ String useDatabaseSQL = "USE studentsDB;";
+ try (PreparedStatement statement = connection.prepareStatement(useDatabaseSQL)){
+ statement.execute();
+ }
+
+ }
+
+ private static void createTable(Connection connection) throws SQLException {
+ String createTableSQL = "CREATE TABLE IF NOT EXISTS students (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT);";
+ try (PreparedStatement statement = connection.prepareStatement(createTableSQL)){
+ statement.execute();
+ }
+ }
+
+ private static Collection readData(Connection connection) throws SQLException {
+ ArrayList studentList = new ArrayList<>();
+ String readDataSQL = "SELECT * FROM students;";
+ try (PreparedStatement statement = connection.prepareStatement(readDataSQL)){
+ ResultSet resultSet = statement.executeQuery();
+ while (resultSet.next()){
+ int id = resultSet.getInt("id");
+ String name = resultSet.getString("name");
+ int age = resultSet.getInt("age");
+ studentList.add(new Student(id,name,age));
+ }
+ return studentList;
+ }
+ }
+
+ private static void updateData(Connection connection, Student student) throws SQLException {
+ String updateDataSQL = "UPDATE students SET name=?, age=? WHERE id=?;";
+ try (PreparedStatement statement = connection.prepareStatement(updateDataSQL)){
+ statement.setString(1, student.getName());
+ statement.setInt(2, student.getAge());
+ statement.setInt(3, student.getId());
+ statement.executeUpdate();
+ }
+ }
+
+ private static void deleteData(Connection connection, int id) throws SQLException {
+ String deteleDataSQL = "DELETE FROM students WHERE id = ?;";
+ try (PreparedStatement statement = connection.prepareStatement(deteleDataSQL)){
+ statement.setInt(1, id);
+ statement.executeUpdate();
+ }
+ }
+}
+
+
+
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task1/models/Student.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task1/models/Student.java
new file mode 100644
index 0000000..b69574b
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task1/models/Student.java
@@ -0,0 +1,73 @@
+package Seminars.Lesson4.task1.models;
+
+
+import java.util.Random;
+
+public class Student {
+
+ private static final Random random = new Random();
+ private static final String[] names = new String[]{"Анатолий", "Владислав", "Владимир", "Дмитрий", "Александр", "Евгений"};
+
+ private int id;
+ private String name;
+ private int age;
+
+ public void updateAge(){
+ age = random.nextInt(26);
+ }
+
+ public void updateName(){
+ name = names[random.nextInt(names.length)];
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ @Override
+ public String toString() {
+ return "Student{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", age=" + age +
+ '}';
+ }
+
+ public Student(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public Student() {
+ }
+
+ public Student(int id, String name, int age) {
+ this.id = id;
+ this.name = name;
+ this.age = age;
+ }
+
+ public static Student create(){
+ return new Student(names[random.nextInt(names.length)], random.nextInt(20));
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task2/Program.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task2/Program.java
new file mode 100644
index 0000000..8c0fc80
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task2/Program.java
@@ -0,0 +1,52 @@
+package Seminars.Lesson4.task2;
+
+
+import Seminars.Lesson4.task2.models.Student;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Configuration;
+
+public class Program {
+
+ public static void main(String[] args) {
+
+ try (SessionFactory sessionFactory = new Configuration().
+ configure("hibernate.cfg.xml").
+ addAnnotatedClass(Student.class).
+ buildSessionFactory()){
+ Session session = sessionFactory.getCurrentSession();
+ session.beginTransaction();
+
+ //Создание объекта
+ Student student = Student.create();
+ session.save(student);
+ System.out.println("Object student save successfully");
+
+
+ //Чтение объекта из базы данных
+ Student retriStudent = session.get(Student.class, student.getId());
+ System.out.println("Object student rerived successfully");
+ System.out.println("Retrieved student object: " + retriStudent);
+
+ //Обновление объекта
+// retriStudent.updateName();
+ retriStudent.updateAge();
+ session.update(retriStudent);
+ System.out.println("Object student update successfully");
+
+ //Чтение объекта из базы данных
+ retriStudent = session.get(Student.class, student.getId());
+ System.out.println("Object student rerived successfully");
+ System.out.println("Retrieved student object: " + retriStudent);
+
+
+ session.getTransaction().commit();
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+
+
+
+
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task2/models/Student.java b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task2/models/Student.java
new file mode 100644
index 0000000..c8cc51c
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/java/Seminars/Lesson4/task2/models/Student.java
@@ -0,0 +1,79 @@
+package Seminars.Lesson4.task2.models;
+
+
+
+import javax.persistence.*;
+import java.util.Random;
+
+@Entity
+@Table(name="students")
+public class Student {
+
+ private static final Random random = new Random();
+ private static final String[] names = new String[]{"Анатолий", "Владислав", "Владимир", "Дмитрий", "Александр", "Евгений"};
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+ private String name;
+ private int age;
+
+ public void updateAge(){
+ age = random.nextInt(26);
+ }
+
+ public void updateName(){
+ name = names[random.nextInt(names.length)];
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ @Override
+ public String toString() {
+ return "Student{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", age=" + age +
+ '}';
+ }
+
+ public Student(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public Student() {
+ }
+
+ public Student(int id, String name, int age) {
+ this.id = id;
+ this.name = name;
+ this.age = age;
+ }
+
+ public static Student create(){
+ return new Student(names[random.nextInt(names.length)], random.nextInt(20));
+ }
+}
diff --git a/JavaJunior/Lesson1-4/src/main/resources/hibernate.cfg.xml b/JavaJunior/Lesson1-4/src/main/resources/hibernate.cfg.xml
new file mode 100644
index 0000000..13c4807
--- /dev/null
+++ b/JavaJunior/Lesson1-4/src/main/resources/hibernate.cfg.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+ com.mysql.cj.jdbc.Driver
+ jdbc:mysql://localhost:3306/studentsDB
+ root
+ 1111
+
+
+ 5
+ 20
+ 300
+ 50
+ 3000
+
+
+ org.hibernate.dialect.MySQLDialect
+
+
+ true
+
+ thread
+
+ update
+
+
+
+
+
\ No newline at end of file
diff --git a/JavaJunior/Lesson5/chat-client/pom.xml b/JavaJunior/Lesson5/chat-client/pom.xml
new file mode 100644
index 0000000..db1adf6
--- /dev/null
+++ b/JavaJunior/Lesson5/chat-client/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ ru.geekbrains
+ Lesson5
+ 1.0-SNAPSHOT
+
+
+ chat-client
+
+
+ 17
+ 17
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/JavaJunior/Lesson5/chat-client/src/main/java/ru/geekbrains/chatclient/Client.java b/JavaJunior/Lesson5/chat-client/src/main/java/ru/geekbrains/chatclient/Client.java
new file mode 100644
index 0000000..783171d
--- /dev/null
+++ b/JavaJunior/Lesson5/chat-client/src/main/java/ru/geekbrains/chatclient/Client.java
@@ -0,0 +1,86 @@
+package ru.geekbrains.chatclient;
+
+import java.io.*;
+import java.net.Socket;
+import java.util.Scanner;
+
+public class Client {
+
+ private final Socket socket;
+ private final String userName;
+
+ private BufferedWriter bufferedWriter;
+ private BufferedReader bufferedReader;
+
+
+ public Client(Socket socket, String userName) {
+ this.socket = socket;
+ this.userName = userName;
+
+ try {
+ bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
+ bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+ } catch (IOException e) {
+ closeEveryThing(socket, bufferedReader, bufferedWriter);
+ }
+ }
+
+ /*
+ Слушатель для входящих сообщений
+ */
+ public void listenForMessage() {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ String message;
+ while (socket.isConnected()){
+ try {
+ message = bufferedReader.readLine();
+ System.out.println(message);
+ } catch (IOException e){
+ closeEveryThing(socket, bufferedReader, bufferedWriter);
+ }
+ }
+ }
+ }).start();
+ }
+
+ /*
+ Отправить сообщенеи
+ */
+ public void sendMessage() {
+ try {
+ bufferedWriter.write(userName);
+ bufferedWriter.newLine();
+ bufferedWriter.flush();
+
+ Scanner scanner = new Scanner(System.in);
+ while (socket.isConnected()) {
+ String message = scanner.nextLine();
+ bufferedWriter.write(userName + ":" + message);
+ bufferedWriter.newLine();
+ bufferedWriter.flush();
+ }
+ }catch (IOException e){
+ closeEveryThing(socket,bufferedReader, bufferedWriter);
+ }
+
+ }
+
+ private void closeEveryThing(Socket socket, BufferedReader bufferedReader, BufferedWriter bufferedWriter) {
+ try {
+ if (bufferedReader != null) {
+ bufferedReader.close();
+ }
+ if (bufferedWriter != null) {
+ bufferedWriter.close();
+ }
+ if (socket != null) {
+ socket.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+}
diff --git a/JavaJunior/Lesson5/chat-client/src/main/java/ru/geekbrains/chatclient/Program.java b/JavaJunior/Lesson5/chat-client/src/main/java/ru/geekbrains/chatclient/Program.java
new file mode 100644
index 0000000..83ff059
--- /dev/null
+++ b/JavaJunior/Lesson5/chat-client/src/main/java/ru/geekbrains/chatclient/Program.java
@@ -0,0 +1,42 @@
+package ru.geekbrains.chatclient;
+
+import javax.imageio.IIOException;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.util.Scanner;
+
+public class Program {
+
+ public static void main(String[] args) {
+
+ try {
+
+
+ Scanner scanner = new Scanner(System.in);
+ System.out.println("Введите свое имя: ");
+ String name = scanner.nextLine();
+
+ Socket socket = new Socket("localhost", 1400);
+ Client client = new Client(socket, name);
+
+ InetAddress inetAddress = socket.getInetAddress();
+ System.out.println("InetAdress: " + inetAddress);
+ String remoteIp = inetAddress.getHostAddress();
+ System.out.println("Remote IP: " + remoteIp);
+ System.out.println("LocalPort: " + socket.getLocalPort());
+
+
+ client.listenForMessage();
+ client.sendMessage();
+
+ }
+ catch (UnknownHostException e){
+ e.printStackTrace();
+ }
+ catch (IOException e){
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/JavaJunior/Lesson5/chat-server/pom.xml b/JavaJunior/Lesson5/chat-server/pom.xml
new file mode 100644
index 0000000..6f0be3a
--- /dev/null
+++ b/JavaJunior/Lesson5/chat-server/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ ru.geekbrains
+ Lesson5
+ 1.0-SNAPSHOT
+
+
+ chat-server
+
+
+ 17
+ 17
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/JavaJunior/Lesson5/chat-server/src/main/java/ru/geekbrains/chatserever/ClientManager.java b/JavaJunior/Lesson5/chat-server/src/main/java/ru/geekbrains/chatserever/ClientManager.java
new file mode 100644
index 0000000..d8eb749
--- /dev/null
+++ b/JavaJunior/Lesson5/chat-server/src/main/java/ru/geekbrains/chatserever/ClientManager.java
@@ -0,0 +1,83 @@
+package ru.geekbrains.chatserever;
+
+import java.io.*;
+import java.net.Socket;
+import java.util.ArrayList;
+
+public class ClientManager implements Runnable{
+ private Socket socket;
+ private BufferedReader bufferedReader;
+ private BufferedWriter bufferedWriter;
+
+ private String name;
+
+ public final static ArrayList clients = new ArrayList<>();
+
+ public ClientManager(Socket socket) {
+ try {
+ this.socket = socket;
+ bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+ bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
+ name = bufferedReader.readLine();
+ clients.add(this);
+ System.out.println(name + " подключился к чату");
+ broadcastMessage("Server: " + name + " подключился к чату. ");
+ } catch (IOException e) {
+ closeEveryThing(socket, bufferedReader, bufferedWriter);
+ }
+ }
+
+ private void closeEveryThing(Socket socket, BufferedReader bufferedReader, BufferedWriter bufferedWriter) {
+ removeClient();
+ try {
+ if (bufferedReader != null) {
+ bufferedReader.close();
+ }
+ if (bufferedWriter != null) {
+ bufferedWriter.close();
+ }
+ if (socket != null) {
+ socket.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void removeClient(){
+ clients.remove(this);
+ System.out.println(name + " покинул чат.");
+ broadcastMessage("Server: " + name + " покинул чат");
+ }
+
+ @Override
+ public void run() {
+ String messageFromClient;
+ while (socket.isConnected()){
+ try {
+ messageFromClient = bufferedReader.readLine();
+
+ broadcastMessage(messageFromClient);
+ } catch (IOException e){
+ closeEveryThing(socket,bufferedReader,bufferedWriter);
+ break;
+ }
+
+ }
+ }
+
+ private void broadcastMessage(String message) {
+ for (ClientManager client : clients) {
+ try {
+ if (!client.name.equals(name)) {
+ client.bufferedWriter.write(message);
+ client.bufferedWriter.newLine();
+ client.bufferedWriter.flush();
+ }
+ } catch (IOException e) {
+ closeEveryThing(socket, bufferedReader, bufferedWriter);
+ }
+ }
+
+ }
+}
diff --git a/JavaJunior/Lesson5/chat-server/src/main/java/ru/geekbrains/chatserever/Program.java b/JavaJunior/Lesson5/chat-server/src/main/java/ru/geekbrains/chatserever/Program.java
new file mode 100644
index 0000000..46a9e33
--- /dev/null
+++ b/JavaJunior/Lesson5/chat-server/src/main/java/ru/geekbrains/chatserever/Program.java
@@ -0,0 +1,23 @@
+package ru.geekbrains.chatserever;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.UnknownHostException;
+
+public class Program {
+ public static void main(String[] args) {
+ try {
+
+ ServerSocket serverSocket = new ServerSocket(1400);
+ Server server = new Server(serverSocket);
+ server.runServer();
+
+ } catch (UnknownHostException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+
+ }
+}
diff --git a/JavaJunior/Lesson5/chat-server/src/main/java/ru/geekbrains/chatserever/Server.java b/JavaJunior/Lesson5/chat-server/src/main/java/ru/geekbrains/chatserever/Server.java
new file mode 100644
index 0000000..9a5db8c
--- /dev/null
+++ b/JavaJunior/Lesson5/chat-server/src/main/java/ru/geekbrains/chatserever/Server.java
@@ -0,0 +1,40 @@
+package ru.geekbrains.chatserever;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.List;
+
+public class Server {
+ private ServerSocket serverSocket;
+
+ public Server(ServerSocket serverSocket) {
+ this.serverSocket = serverSocket;
+ }
+
+ public void runServer() {
+ System.out.println("Server is started...");
+ while (!serverSocket.isClosed()) {
+ try {
+ Socket socket = serverSocket.accept();
+ ClientManager clientManager = new ClientManager(socket);
+ System.out.println("Подключен новый клиент");
+ Thread thread = new Thread(clientManager);
+ thread.start();
+ } catch (IOException e) {
+ closeSocket();
+
+ }
+ }
+
+ }
+
+ private void closeSocket() {
+ try {
+ if (serverSocket != null)
+ serverSocket.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/JavaJunior/Lesson5/pom.xml b/JavaJunior/Lesson5/pom.xml
new file mode 100644
index 0000000..fb20c8c
--- /dev/null
+++ b/JavaJunior/Lesson5/pom.xml
@@ -0,0 +1,22 @@
+
+
+ 4.0.0
+
+ ru.geekbrains
+ Lesson5
+ 1.0-SNAPSHOT
+ pom
+
+ chat-server
+ chat-client
+
+
+
+ 17
+ 17
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 13dca74..00e0e5d 100644
--- a/README.md
+++ b/README.md
@@ -3,27 +3,31 @@
# Вопросы для собеседования на Java Developer
-+ [ООП](#ООП) ![icon][done]
-+ [JVM](#jvm) ![icon][done]
++ [ООП](#ООП)
++ [JVM](#jvm)
+ [Java Core](#java-core) ![icon][done]
-+ [Java Collections Framework](#java-collections) ![icon][done]
-+ [Java 8](#java-8) ![icon][done]
-+ [Потоки ввода-вывода в Java](#Потоки-вводавывода-в-java) ![icon][done]
-+ [Сериализация](#Сериализация) ![icon][done]
-+ [Многопоточность](#Многопоточность) ![icon][done]
-+ [Servlets, JSP, JSTL](#servlets-jsp-jstl) ![icon][done]
-+ [Базы данных](#Базы-данных) ![icon][done]
-+ [SQL](#sql) ![icon][done]
-+ [JDBC](#jdbc) ![icon][done]
-+ [Тестирование](#Тестирование) ![icon][done]
-+ [Журналирование](#Журналирование) ![icon][done]
-+ [UML](#uml) ![icon][done]
-+ [XML](#xml) ![icon][done]
-+ [Шаблоны проектирования](#Шаблоны-проектирования) ![icon][done]
-+ [Основы HTML](#Основы-html) ![icon][done]
-+ [Основы CSS](#Основы-css) ![icon][done]
-+ [Основы Web](#Основы-web) ![icon][done]
-+ [Дополнительные материалы](#Дополнительные-материалы) ![icon][done]
++ [Java Collections Framework](#java-collections)
++ [Java 8](#java-8)
++ [Потоки ввода-вывода в Java](#Потоки-вводавывода-в-java)
++ [Сериализация](#Сериализация)
++ [Многопоточность](#Многопоточность)
++ [Servlets, JSP, JSTL](#servlets-jsp-jstl)
++ [Базы данных](#Базы-данных)
++ [SQL](#sql)
++ [JDBC](#jdbc)
++ [Тестирование](#Тестирование)
++ [Журналирование](#Журналирование)
++ [UML](#uml)
++ [XML](#xml)
++ [Шаблоны проектирования](#Шаблоны-проектирования)
++ [Основы HTML](#Основы-html)
++ [Основы CSS](#Основы-css)
++ [Основы Web](#Основы-web)
++ [Дополнительные материалы](#Дополнительные-материалы)
++ [Курсы](Corses.md#)
++ [Примеры кода:курс geekbrain-java. Java Junior](https://github.com/dmitriySem/java-interview/tree/master/JavaJunior/Lesson1_Lambda_StreamApi/src/macro)
++ [Примеры кода](https://github.com/dmitriySem/java-interview/tree/master/examples/src/main)
+
[done]:done.png
diff --git a/core.md b/core.md
index f20e28b..e8d3443 100644
--- a/core.md
+++ b/core.md
@@ -224,7 +224,7 @@ public static void main(String[] args) {}
[к оглавлению](#java-core)
## Дайте определение понятию _«интерфейс»_. Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
-Ключевое слово `interface` используется для создания полностью абстрактных классов. Основное предназначение интерфейса - определять каким образом мы можем использовать класс, который его реализует. Создатель интерфейса определяет имена методов, списки аргументов и типы возвращаемых значений, но не реализует их поведение. Все методы неявно объявляются как `public`.
+Основное предназначение интерфейса - определять каким образом мы можем использовать класс, который его реализует. Создатель интерфейса определяет имена методов, списки аргументов и типы возвращаемых значений, но не реализует их поведение. Все методы неявно объявляются как `public`.
Начиная с Java 8 в интерфейсах разрешается размещать реализацию методов по умолчанию `default` и статических `static` методов.
@@ -241,10 +241,25 @@ public static void main(String[] args) {}
Абстрактные классы содержат частичную реализацию, которая дополняется или расширяется в подклассах. При этом все подклассы схожи между собой в части реализации, унаследованной от абстрактного класса, и отличаются лишь в части собственной реализации абстрактных методов родителя. Поэтому абстрактные классы применяются в случае построения иерархии однотипных, очень похожих друг на друга классов. В этом случае наследование от абстрактного класса, реализующего поведение объекта по умолчанию может быть полезно, так как позволяет избежать написания повторяющегося кода. Во всех остальных случаях лучше использовать интерфейсы.
+Абстрактный класс:
++ Может садержать абстрактные и не абстрактные методы
++ Может содержать изменяемые переменные
++ Может содержать не статические переменные
++ Простые классы наследуются от него через extends
++ Может наследовать свойства одного абстрактного класса
++ Может реализовать несколько интерфейсов без обязательной реализации методов
+Интерфейс:
++ Может содержать только методы без реализации
++ Может содержать только неизменяемые переменные
++ Может содержать только татические переменные
++ Простые классы реализуют его через implement
++ Не может наследовать свойства абстрактного класса
++ Может наследовать свойства нескольких интерфейсов
+
[к оглавлению](#java-core)
## Почему в некоторых интерфейсах вообще не определяют методов?
-Это так называемые _маркерные интерфейсы_. Они просто указывают что класс относится к определенному типу. Примером может послужить интерфейс `Clonable`, который указывает на то, что класс поддерживает механизм клонирования.
+Это так называемые _маркерные интерфейсы_. Они просто указывают что класс относится к определенному типу. Примером может послужить интерфейс `Clonable`, который указывает на то, что класс поддерживает механизм клонирования (`Serializable` и др).
[к оглавлению](#java-core)
diff --git a/examples/README.md b/examples/README.md
index 0e3a2d0..8b13789 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -1,6 +1 @@
-# Learning Java
-1. [Homeworks](https://github.com/enhorse/learningJava/tree/master/src/main/java/xyz/enhorse/javarush) for the course from [Java Rush](http://javarush.ru/)
-2. [Homeworks](https://github.com/enhorse/learningJava/tree/master/src/main/java/xyz/enhorse/m101j) for the course [M101J: MongoDB for Java Developers](https://university.mongodb.com/courses/M101J/about)
-3. [Homeworks](https://github.com/enhorse/learningJava/tree/master/src/main/java/xyz/enhorse/stepic/algo) for the course [Алгоритмы: теория и практика. Методы](https://stepic.org/course/217)
-4. [Homeworks](https://github.com/enhorse/learningJava/tree/master/src/main/java/xyz/enhorse/stepic/djwebservice) for the course [Разработка веб сервиса на Java (часть 1)](https://stepic.org/course/146)
-5. [Homeworks](https://github.com/enhorse/learningJava/tree/master/src/main/java/xyz/enhorse/stepic/hadoop) for the course [Hadoop. Система для обработки больших объемов данных](https://stepic.org/course/150)
\ No newline at end of file
+
diff --git a/oop.md b/oop.md
index baa3e7b..3993a01 100644
--- a/oop.md
+++ b/oop.md
@@ -269,7 +269,7 @@ user.callAnotherUser(224466,videoPhone);
[к оглавлению](#ООП)
## Что такое _«абстракция»_?
-_Абстрагирование_ – это способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Соответственно, __абстракция__ – это набор всех таких характеристик.
+_Абстрагирование_ – это способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Соответственно, __абстракция__ – это набор всех таких характеристик. Абстрактный класс не может иметь эземпляр класса.
>Представьте, что водитель едет в автомобиле по оживлённому участку движения. Понятно, что в этот момент он не будет задумываться о химическом составе краски автомобиля, особенностях взаимодействия шестерёнок в коробке передач или влияния формы кузова на скорость (разве что, автомобиль стоит в глухой пробке и водителю абсолютно нечем заняться). Однако, руль, педали, указатель поворота он будет использовать регулярно.