Собеседование на позицию Java junior #3 Ильяс

YOUTUBE · 30.11.2025 09:07

Ключевые темы и таймкоды

Введение и представление

0:03
  • Приветствие и представление господина Ильяса.
  • Ильяс работает мидл-инженером по сопровождению в Сбербанке.
  • Последние девять месяцев активно изучает Java для автоматизации рутинных процессов.

Образование и опыт

0:53
  • Ильяс не имеет опыта продуктовой разработки, но участвовал в учебных проектах и автоматизированных сервисах.
  • Учился через Google, Хабр, JavaRush и Яндекс Практику.
  • В настоящее время готовится к защите диплома.

Полиморфизм

2:44
  • Объяснение принципа полиморфизма в объектно-ориентированном программировании.
  • Пример с интерфейсом Flyable, который может быть реализован как птицей, так и самолетом.
  • Полиморфизм позволяет объектам, реализующим один интерфейс, вести себя по-разному.

Наследование и интерфейсы

4:58
  • Различие между интерфейсом и абстрактным классом.
  • Интерфейс задает поведение класса, а абстрактный класс позволяет создавать подклассы.
  • Интерфейс может содержать только абстрактные методы, а абстрактный класс может иметь как абстрактные, так и дефолтные методы.

Статические переменные

8:32
  • Объяснение статических переменных и их доступа.
  • В интерфейсе статические переменные доступны только через класс, а в абстрактном классе они могут быть изменены.
  • В интерфейсе атрибуты являются константами и неизменяемыми.

Интерфейс-маркер

11:17
  • Объяснение интерфейса-маркера и его использования.
  • Пример с методом clone в классе Object, который ожидает интерфейс Cloneable.
  • Интерфейс-маркер позволяет использовать методы, которые ожидают определенный интерфейс.

Формат данных JSON

13:41
  • JSON используется для хранения данных в формате ключ-значение.
  • Применяется для обмена сообщениями по HTTP.
  • В Spring используется для создания объектов из JSON.

Формат данных YAML

15:43
  • YAML используется для хранения информации в формате ключ-значение.
  • Позволяет обрабатывать данные и создавать объекты.
  • Имеет атрибуты, которые можно обрабатывать.

Создание проекта

17:08
  • Обсуждение создания проекта в Java.
  • Проблемы с отображением экрана и настройкой разрешения.
  • Решение создать новый проект для лучшего отображения.

Создание класса "Машина"

20:13
  • Создание класса "Машина" с полем даты выпуска.
  • Использование LocalDate для хранения даты.
  • Создание трех экземпляров класса и их сортировка по дате выпуска.

Сортировка по дате

24:02
  • Сортировка списка автомобилей по дате выпуска.
  • Использование метода sort с компаратором для сортировки по убыванию.
  • Применение компаратора для сравнения дат и вывода самой поздней машины.

Интерфейс и функции

27:25
  • Интерфейс сравнивает значения даты и времени.
  • Функция принимает дженерик и возвращает дженерик другого типа.
  • Проблема с реализацией компаратора для сортировки в обратном порядке.

Решение проблемы с компаратором

29:27
  • Обсуждение возможных решений для сортировки в обратном порядке.
  • Предложение использовать структуру данных для хранения порядка элементов.
  • Эксперимент с перестановкой строк для проверки корректности работы.

Использование функционального интерфейса

34:01
  • Возможность передачи функционального интерфейса вместо компаратора.
  • Решение проблемы с сортировкой без использования метода sort.
  • Обсуждение необходимости копирования интерфейса компаратора.

Обработка исключений и проверка данных

37:18
  • Обсуждение предотвращения исключений при работе с коллекциями.
  • Проверка наличия элементов в коллекции перед выполнением метода.
  • Пример реализации метода для корректной работы с пустыми коллекциями.

Заключение и переход к следующему этапу

41:04
  • Подведение итогов и обсуждение пробелов в знаниях.
  • Переход к следующему этапу обучения, который включает в себя использование Excel.

Селектор SELECT

41:39
  • Селектор SELECT позволяет запрашивать данные из базы данных по определенному условию.
  • Пример: SELECT * FROM table выводит все строки и столбцы из таблицы.
  • Пример: SELECT name FROM cars выводит только имена из таблицы cars.

Сортировка и уникальность данных

43:45
  • Для сортировки данных по определенному столбцу используется ORDER BY.
  • Пример: SELECT name, price FROM cars ORDER BY price DESC.
  • Для создания уникального столбца используется UNIQUE.

Работа с Git

46:00
  • Использование Git для создания проекта и коммита изменений.
  • Пример: git init создает новый репозиторий и ветку.
  • Для коммита изменений используется git commit -m.

Удаленные репозитории

47:20
  • Подключение к удаленному репозиторию через Git.
  • Пример: git clone создает локальную копию репозитория.
  • Проверка наличия удаленных связей с помощью git config.

Конфликты при слиянии

49:07
  • Конфликты возникают при расхождении хэш-комитов.
  • Пример: если в удаленной версии и локальной версии разные изменения, возникает конфликт.
  • Git автоматически выбирает более правильную версию.

Отмена изменений

52:21
  • Возможность отмены изменений в удаленном репозитории.
  • Пример: если глава три не нужна, можно отменить комит в удаленном репозитории.
  • Использование команды git revert для отмены изменений.

Введение в Spring

54:03
  • Spring - фреймворк для Java-разработки, активно используемый повсеместно.
  • Позволяет упрощать работу разработчиков, упрощая настройку и использование баз данных и клиентов.
  • Spring имеет модули, такие как Spring Boot, который использует автоконфигурацию и внедрение зависимостей.

Контекст и контейнеры в Spring

55:22
  • Spring использует контейнеры для упрощения настройки и подключения объектов.
  • Инверсия контроля и внедрение зависимостей позволяют переложить настройку на Spring.
  • Пример с классами "человек", "машина" и "водка" показывает, как Spring обрабатывает зависимости.

Dependency Injection и его особенности

58:08
  • Dependency Injection позволяет внедрять зависимости в классы.
  • В примере с "водкой" и "машиной" видно, что "водка" не является бином.
  • Dependency Injection используется, когда один класс использует методы или атрибуты другого класса.

Проблемы с зависимостями и их решение

1:00:17
  • Проблема с зависимостями может возникнуть, если два класса зависят друг от друга.
  • Решение - использование ленивой инициализации для предотвращения закольцованности.
  • Пример с сервисами, где можно избежать зависимости, внедряя репозиторий в один из сервисов.

Spring Data и его особенности

1:01:57
  • Spring Data используется для работы с базами данных, облегчая работу с репозиториями.
  • В отличие от Hibernate, Spring Data структурирует пространство сущностей, где каждый объект представляет таблицу.
  • Пример с интерфейсом репозитория, который генерирует SQL-запросы на основе методов.

Заключение и личные впечатления

1:04:47
  • Собеседник делится своими впечатлениями от собеседования и благодарит зрителей.
  • Призывает писать в комментарии, если есть желание пообщаться лично.