diff --git a/Corses.md b/Corses.md new file mode 100644 index 0000000..34c1dd8 --- /dev/null +++ b/Corses.md @@ -0,0 +1,6 @@ +# Learning Java + +1. The course [M101J: MongoDB for Java Developers](https://university.mongodb.com/courses/M101J/about) +3. The course [Алгоритмы: теория и практика. Методы](https://stepic.org/course/217) +4. The course [Разработка веб сервиса на Java (часть 1)](https://stepic.org/course/146) +5. The course [Hadoop. Система для обработки больших объемов данных](https://stepic.org/course/150) diff --git a/JavaJunior/Lesson1-4/pom.xml b/JavaJunior/Lesson1-4/pom.xml new file mode 100644 index 0000000..f941e2f --- /dev/null +++ b/JavaJunior/Lesson1-4/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + groupId + Lesson1-4 + 1.0-SNAPSHOT + + + 17 + 17 + + + + + org.hibernate + hibernate-core + 5.6.0.Final + + + + org.hibernate + hibernate-c3p0 + 5.6.0.Final + + + + mysql + mysql-connector-java + 8.0.33 + + + + + com.fasterxml.jackson.core + jackson-databind + 2.16.0 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + 2.16.0 + + + + + + \ No newline at end of file diff --git a/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson1/Lesson1_LamdaStreamApi.java b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson1/Lesson1_LamdaStreamApi.java new file mode 100644 index 0000000..ddb7624 --- /dev/null +++ b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson1/Lesson1_LamdaStreamApi.java @@ -0,0 +1,33 @@ +package Homeworks.Lesson1; + +import java.util.ArrayList; +import java.util.List; +import java.util.OptionalDouble; +import java.util.stream.Collectors; + +public class Lesson1_LamdaStreamApi { + + public static void main(String[] args) { + // write your code here + + /* + Напишите программу, которая использует Stream API для обработки списка чисел. + Программа должна вывести на экран среднее значение всех четных чисел в списке. + */ + + List numbers = new ArrayList<>(); + + numbers.add(1.0); + numbers.add(2.1); + numbers.add(4.0); + numbers.add(5.0); + numbers.add(8.0); + numbers.add(48.0); + + System.out.println(); + OptionalDouble average = numbers.stream().filter(number -> number % 2 == 0).collect(Collectors.toList()).stream().mapToDouble(value -> value).average(); + System.out.println(average.getAsDouble()); + + + } +} diff --git a/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson2/Lesson2_ReflactionApi.java b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson2/Lesson2_ReflactionApi.java new file mode 100644 index 0000000..4776cfe --- /dev/null +++ b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson2/Lesson2_ReflactionApi.java @@ -0,0 +1,22 @@ +package Homeworks.Lesson2; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +public class Lesson2_ReflactionApi { + /* + Используя Reflection API, напишите программу, которая выводит на экран все методы класса String. + */ + + + public static void main(String[] args) throws ClassNotFoundException { + Class stringClass = Class.forName("java.lang.String"); + + Method[] methods = stringClass.getDeclaredMethods(); + for (Method method:methods) + System.out.println("Метод: " + method.getName()); + + } + + +} diff --git a/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson3/Person.java b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson3/Person.java new file mode 100644 index 0000000..63e6486 --- /dev/null +++ b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson3/Person.java @@ -0,0 +1,22 @@ +package Homeworks.Lesson3; + +import java.io.Serializable; + +public class Person implements Serializable { + + public String name; + public int age; + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public int getAge() { + return age; + } +} diff --git a/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson3/Serialization.java b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson3/Serialization.java new file mode 100644 index 0000000..27816c4 --- /dev/null +++ b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson3/Serialization.java @@ -0,0 +1,36 @@ +package Homeworks.Lesson3; + +import Seminars.Lesson3.task1.UserData; + +import java.io.*; + +public class Serialization{ + + + /* + Задание 1: Создайте класс Person с полями name и age. + Реализуйте сериализацию и десериализацию этого класса в файл. + */ + + + public static void main(String[] args) throws IOException, ClassNotFoundException { + Person userData = new Person("Dima", 31); + + 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 = (Person) objectInputStream.readObject(); + System.out.println("Данные десериализованы"); + } + + System.out.println("Имя " + userData.getName()); + System.out.println("Возраст " + userData.getAge()); + } + + +} diff --git a/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson4/Person.java b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson4/Person.java new file mode 100644 index 0000000..fe90b24 --- /dev/null +++ b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson4/Person.java @@ -0,0 +1,77 @@ +package Homeworks.Lesson4; + + +import javax.persistence.*; +import java.util.Random; +@Entity +@Table(name="persons") +public class Person { + + 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 Person(String name, int age) { + this.name = name; + this.age = age; + } + + public Person() { + } + + public Person(int id, String name, int age) { + this.id = id; + this.name = name; + this.age = age; + } + + public static Person create(){ + return new Person(names[random.nextInt(names.length)], random.nextInt(20)); + } +} diff --git a/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson4/Program.java b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson4/Program.java new file mode 100644 index 0000000..613388a --- /dev/null +++ b/JavaJunior/Lesson1-4/src/main/java/Homeworks/Lesson4/Program.java @@ -0,0 +1,57 @@ +package Homeworks.Lesson4; + +import Homeworks.Lesson4.Person; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; + +import java.io.File; +import java.util.Random; + +public class Program { + + /* + Задание: Настройте связь между вашим приложением и базой данных MySQL с использованием Hibernate. + Создайте несколько объектов Person и сохраните их в базу данных. + */ + public static void main(String[] args) { + try (SessionFactory sessionFactory = new Configuration(). + configure(new File("D:\\Geekbrains_homeworks\\java-spora\\java-interview\\JavaJunior\\Lesson1_Lambda_StreamApi\\src\\main\\java\\Homeworks\\Lesson4\\resources\\hibernate.cfg.xml")). + addAnnotatedClass(Homeworks.Lesson4.Person.class). + buildSessionFactory()){ + Session session = sessionFactory.getCurrentSession(); + session.beginTransaction(); + + //Создание объекта + Random random = new Random(); + + for (int i=0; i + + + + + 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); [к оглавлению](#ООП) ## Что такое _«абстракция»_? -_Абстрагирование_ – это способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Соответственно, __абстракция__ – это набор всех таких характеристик. +_Абстрагирование_ – это способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Соответственно, __абстракция__ – это набор всех таких характеристик. Абстрактный класс не может иметь эземпляр класса. >Представьте, что водитель едет в автомобиле по оживлённому участку движения. Понятно, что в этот момент он не будет задумываться о химическом составе краски автомобиля, особенностях взаимодействия шестерёнок в коробке передач или влияния формы кузова на скорость (разве что, автомобиль стоит в глухой пробке и водителю абсолютно нечем заняться). Однако, руль, педали, указатель поворота он будет использовать регулярно.