Собеседование Java Junior | Подготовка к реальному собеседованию | Jetbulb

YOUTUBE · 18.11.2025 18:54

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

Введение

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

Представление гостя

0:52
  • Представление Виктории, которая впервые участвует в тестовом собеседовании на канале.
  • Объяснение цели тестового собеседования: выявление и устранение проблемных мест перед реальным собеседованием.
  • Подчёркивание важности поддержки Виктории в комментариях.

Начало интервью

1:52
  • Вопросы о методологии ООП и её четырёх столпах: абстракция, инкапсуляция, наследование, полиморфизм.
  • Сравнение ООП с процедурным программированием: в ООП объекты обладают поведением и состоянием, в процедурном программировании операции выполняются над данными.

Инкапсуляция

4:52
  • Объяснение инкапсуляции: скрытие данных внутри класса и запрет доступа к ним извне.
  • Обсуждение модификаторов доступа и возможности инкапсуляции на уровне пакета.

Тренировочная платформа

6:52
  • Представление тренировочной платформы «Ай-Проди».
  • Описание преимуществ платформы: получение коммерческого опыта, участие в реальных проектах, обратная связь от высококвалифицированных специалистов.
  • Призыв присоединиться к платформе для повышения квалификации.

Наследование

10:23
  • Объяснение смысла наследования: создание новых классов на основе существующих.
  • Возможность переопределения методов и добавления своих методов в наследниках.
  • Обсуждение модификатора доступа final и его влияния на наследование.

Запрет переопределения методов

12:08
  • Возможность запрета переопределения методов через метод file.
  • Необходимость серьёзных оснований для запрета переопределения.
  • Часто запрет переопределения является ошибкой дизайна.

Шаблоны проектирования

13:08
  • Перечисление шаблонов: примитивный синглтон, рота, тип адаптер, фасад, причный метод.
  • Адаптер позволяет работать с несовместимыми интерфейсами, например, конвертировать XML в JSON.

Синглтон в многопоточной среде

14:08
  • Синглтон создаёт и поддерживает один экземпляр.
  • В многопоточной среде необходимо синхронизировать метод getInstance.
  • Предпочтение синхронизированным блокам перед методами.

Синхронизация без методов

15:08
  • Обсуждение других способов синхронизации, например, использование lock.
  • Упоминание о драйт локах из пакета concurrency.

Жадный и ленивый синглтон

16:08
  • Жадный синглтон создаётся сразу, ленивый — при первом обращении.
  • Преимущества ленивого синглтона: экономия ресурсов.

Стринг пул

17:02
  • Стринг пул экономит ресурсы, сохраняя ссылки на строки.
  • Сравнение строк через двойное равно сравнивает ссылки, а не содержимое.

Сравнение строк

18:54
  • Метод equals сравнивает содержимое строк, а не только ссылки.
  • Различие между ссылочным и структурным сравнением.

Конкатинация строк

20:54
  • Проблема множественной конкатинации строк в цикле.
  • Решение: использование String Builder для избежания антропирования.
  • String Builder позволяет изменять строки без создания новых объектов.

Коллекции в Java

22:54
  • Разница между коллекцией и словарем: коллекция хранит объекты, словарь — ключи и значения.
  • Различия между ArrayList и LinkedList: ArrayList использует массив, LinkedList — связанный список.
  • LinkedList эффективен при большом количестве изменений в списке.

Скорость доступа в LinkedList

24:48
  • Скорость доступа к первому и последнему значению в LinkedList — O(1).
  • LinkedList хранит ссылки на первый и последний объект.
  • Каждая нода LinkedList хранит ссылки на впереди стоящую и позади стоящую ноду.

Структура LinkedList

26:40
  • LinkedList хранит ссылки на первый и последний элементы отдельно.
  • Доступ к элементам осуществляется через методы getFirst и getLast.
  • В основе LinkedList лежит двойная очередь.

Итерация и изменение коллекций

27:40
  • Во время итерации по коллекции нельзя удалять элементы.
  • При попытке удаления во время итерации возникает исключение UnsupportedOperationException.
  • Для изменения коллекции во время итерации нужно создать её копию.

Копирование коллекций

28:40
  • Создание копии коллекции не решает проблему одновременного удаления элементов.
  • Специализированные коллекции могут создавать копию во время итерации.
  • Пример такой коллекции — ConcurrentLinkedList из пакета concurrent.

Рефлексия в Java

31:40
  • Рефлексия позволяет обращаться к классам, полям, методам и конструкторам как к объектам.
  • Для доступа к приватным методам и свойствам используется специальное свойство accessors.
  • После выполнения операции свойство accessors нужно закрыть.

Аннотации в Java

34:26
  • Аннотации позволяют добавлять функциональность к классам, полям, методам и конструкторам.
  • УровеньRetention определяет, доступна ли аннотация во время выполнения программы.
  • Существуют три уровняRetention: compiletime, runtime и both.

Синхронизация в Java

37:11
  • Ключевое слово synchronized ограничивает многопоточность, заставляя все потоки ждать завершения одного метода.
  • Новый пакет concurrency решает эту проблему с помощью классов Lock и ReentrantLock.
  • Атомарность обеспечивает выполнение нескольких операций как единого целого.

Консистентность и атомарность

39:11
  • Консистентность гарантирует, что данные после работы над ними будут в согласованном состоянии.
  • Пример атомарной операции — инкремент, который выполняется как единое целое.
  • В Java 15 введено понятие strict concurrency, позволяющее обрабатывать множество задач как единый объём работы.

Синхронизированные коллекции

41:11
  • Для создания синхронизированных коллекций можно использовать хэшмапы, копии, релисты и линкеты.
  • В классе Collections есть статический метод synchronized для синхронизации коллекций.
  • Хэштейбл синхронизирован, но его использование не рекомендуется из-за снижения производительности.

Рекомендации по синхронизации

42:57
  • Синхронизация не даётся бесплатно, она может привести к просадке производительности.
  • Рекомендуется использовать синхронизацию только при необходимости.
  • Пример: StringBuilder для управления созданием строк, StringBuffer для многопоточной среды.

Исключения в Java

43:57
  • Ключевое слово throw используется для выброса исключений.
  • Ключевое слово throwable указывает на возможность передачи исключения в сигнатуре метода.
  • Checked исключения должны обрабатываться в блоках try-catch, unchecked исключения не требуют обработки.

Обработка исключений

44:57
  • Компилятор требует обработки checked исключений, иначе возникает ошибка.
  • Unchecked исключения можно выбросить наверх, но это может привести к ошибкам компиляции.
  • Ключевое слово throwable позволяет указать, что исключение будет выброшено наверх.

Блоки try-catch и ресурсы

46:57
  • Блок try-catch может быть без catch, но это теряет смысл.
  • Несколько блоков try-catch возможны, но нужно соблюдать иерархию исключений.
  • В блоке try можно объявить ресурсы, которые будут автоматически закрыты после выполнения кода или при выбрасывании исключений.

Улучшенный цикл for

48:57
  • Улучшенный цикл for позволяет итерироваться по коллекции или массиву.
  • Можно создать собственный класс и использовать его в цикле for, если он реализует Iterable.
  • Пример использования: работа с элементами документа Excel.

Работа с базами данных

51:43
  • Управление таблицами включает добавление ограничений, таких как primary key, unique, not null.
  • Primary key должен быть уникальным и не содержать null.
  • Foreign keys используются для связывания таблиц и создания взаимоотношений между ними.

Каскадные удаления

54:43
  • При удалении записи из одной таблицы связанные записи могут быть удалены автоматически, если настроен каскадный тип удаления.
  • Без каскадного типа удаления связанные записи останутся нетронутыми.

Операции union и join

55:43
  • Join объединяет данные из нескольких таблиц в одну сводную таблицу.
  • Типы joins: inner join, left join, right join.
  • В случае left join недостающие

Операции JOIN и UNION

57:43
  • При выполнении операции JOIN не обязательно соответствие структур таблиц.
  • Важно указать поле для соединения таблиц.
  • UNION соединяет таблицы по принципу структурного соответствия.

Различия между UNION и UNION ALL

59:29
  • UNION возвращает уникальные значения, UNION ALL — с учётом дубликатов.

Принципы транзакций

1:00:29
  • Атомарность: операции в рамках одной транзакции воспринимаются как единое целое.
  • Консистентность: данные должны быть согласованы после изменений.
  • Изоляция: одна транзакция не мешает другой.
  • Дюрабилити: зафиксированные данные должны отражаться в таблице.

Роль rollback в транзакциях

1:02:29
  • Rollback позволяет откатить изменения в случае ошибки.
  • Необходимо открыть соединение, выполнить операцию и добавить rollback при возникновении исключения.

Задача на реализацию функции

1:05:29
  • Реализовать функцию, которая принимает значение в виде int и возвращает массив слов в зависимости от кратности числа трём или пяти.
  • Покрыть функцию тестами с использованием JUnit.

Решение задачи и тестирование

1:10:37
  • Исправить ошибки в тестах, связанные с сравнением ссылок на массивы.
  • Использовать метод assertEquals для корректного сравнения массивов.
  • Завершить тестирование, убедившись в успешном прохождении всех тестов.

Улучшение кода

1:18:01
  • Обсуждение возможности улучшения кода для удаления одного условного выражения.
  • Предложение использовать конкатенацию или стринг-билдер для оптимизации.
  • Цель — сохранить прохождение тестов при минимизации условных выражений.

Анализ кода

1:20:01
  • Проверка необходимости третьего условного выражения для проверки пустого значения строки.
  • Обсуждение преимуществ и недостатков различных подходов к оптимизации.

Завершение задачи

1:22:40
  • Успешное завершение задачи после внесения изменений в код.
  • Подчёркивание важности понимания специфики работы кода вместо запоминания терминов.

Обсуждение интервью

1:23:40
  • Оценка участником своих знаний после интервью.
  • Обсуждение психологического аспекта и преодоления стресса.
  • Важность практики для улучшения навыков.

Рекомендации по подготовке

1:26:32
  • Рекомендация книги Джорджа Дейта для изучения теории баз данных.
  • Обсуждение преимуществ чтения книг перед короткими топиками.
  • Упоминание о важности интуитивного подхода к подготовке к собеседованиям.

Заключение

1:29:32
  • Подведение итогов тестового собеседования.
  • Поздравление участницы с успешным прохождением реального собеседования.
  • Напоминание о важности упорной работы и регулярного обучения.
  • Призыв подписываться на канал и участвовать в телеграм-канале.