> [!WARNING] Дисклеймер > Чтобы сэкономить нам обоим время, предлагаю договориться так: если в какой-то момент собеседования я пойму, что вы точно не подходите, или вы поймёте, что мы вам точно не подходим, озвучиваем этот момент сразу, даже если это произойдёт через несколько минут после начала нашей беседы. ## Входящие вопросы - Представь, что у нас есть транзакционный метод. В этом методе мы находим запись в БД по id и меняем поле флага, потом идем в другой сервис. Сервис нам может вернуть либо true, либо false. Если false, то мы должны вернуть флаг в изначальное состояние. Разработчик решил бросать исключение, чтобы транзакция откатила эти изменения. - Что такое репликаяи в БД? Как реализуется? Какие виды есть? - Нужно придумать задачи для SQL - Объясните принцип работы классов-оберток над примитивными типами. - Какие есть стратегии кэширования в Hibernate? - У нас есть таблица в БД. Первичный ключ это UUID. Нам необходимо часто получать случайную запись из таблицы. - Почему в inmemory-базах используются бинарные деревья, а в классических реляционных не используются - Дороже операции на чтение с диска, так как каждый узел надо считывать. - Важен ли порядок полей в составном индексе? - Да, важен - [Задача 27](Задача%2027.md) - Вопрос на знание блокировок - Чтение с диска в linux всегда блокирующая операция - nginx нельзя блокировать - статические файлы лежат на диске - почему мы раздаем статику с помощью nginx? - page cache - Задача. Отправка кафка событий в транзакции БД - Код занимает 1 Мб, данные 1 Мб. Сколько нужно памяти после fork'a? А после изменения данных? - Ответ 2 и 3 ## Знакомство - Рассказать про план собеседования. - Сначала будет секция про прошлые работы и опыт - Потом техническая часть с вопросами - И иногда буду показывать небольшие куски кода - Нужно сказать что произойдет - Рассуждать желательно в слух - **Junior** * Расскажи о себе? Как пришел в Java? Чем занимался до этого? - ~~Можешь рассказать про устройство команды?~~ - ~~Какой состав? Насколько большая?~~ - ~~А в каком виде поступали задачи?~~ - ~~Приходилось ли участвовать в анализе?~~ - Можешь сказать что вот прям нравилось в работе? - Возможно долгие ретро-созвоны - А теперь наоборот, что не нравилось и что хотелось бы избежать? - Возможно тошнит от код-ревью - Можешь рассказать почему решил сменить работу? - Какие интересные задачи доводилось решать? - Возможно в чем-то удалось разобраться лучше других на проекте. - Чем больше тут расскажешь, тем меньше вопросов я задам - **Middle/Senior** - Приходилось ли быть наставником/тимлидом? ### Любопытство - [ ] Используешь ChatGPT или может на его основе делал какие-то проекты? - [ ] Слышал про [нативные сборки](Нативные%20сборки%20в%20Java.md)? Можешь что-нибудь про них рассказать? ## Устройство ЭВМ - **Senior** - [ ] Как генерируется последовательность случайных чисел? ## ООП - **Junior** - [ ] Что такое полиморфизм? * [ ] Можешь назвать примеры полиморфизма в Java? * [ ] Интерфейс * [ ] Перегрузка * [ ] Переопределение * [ ] Автоматические преобразование типов - [ ] Есть ли множественное наследование в Java? ## Устройство Java - **Junior** - [ ] Вот мы написали какой-то код, а какой путь он проделывает чтобы начать выполняться? * [ ] Что такое JVM? Какие преимущества и недостатки дает JVM? * [ ] А вот JRE это что такое? * [ ] Что такое байт-код? - **Middle** - [ ] Расскажите о механизме работы [Class Loader](Class%20Loader%20Subsystem.md) в Java. - [ ] На каких версиях Java довелось работать? - [ ] Какие изменения после Java 8 особенно понравились? - [ ] Слышал про утилиту jlink? - [ ] Как работают аннотации в Java и как создать собственную аннотацию? - **Senior** - [ ] Как работает механизм рефлексии в Java? - [ ] Что такое [[Java Memory Model]] и как она связана с многопоточностью? ### Стек и Куча - **Middle** - [ ] Можешь рассказать про стек и кучу? - [ ] Где хранятся примитивы, а где объекты? - [ ] Может ли примитив хранится в куче? - [ ] Знаешь как устроен стек? - [ ] Можешь рассказать про пул строк? - [ ] А есть ли другие пулы? ### [Garbage Collector](Garbage%20Collector.md) - **Middle** - [ ] Объясни принципы работы сборщика мусора в Java. - [ ] Когда объект переносится из одной области хипа в другую, что происходит с областью откуда был перемещен объект? - [ ] Что такое Card Table? У [Shenandoah GC](Shenandoah%20GC.md) есть Card Table? - [ ] А в чем отличие [G1](Garbage%20First.md) от других GC? - Предсказуемое время сбора - Сегментация памяти - Параллелизм и многопоточность - [ ] А в чем отличие [G1](Garbage%20First.md) от [Shenandoah GC](Shenandoah%20GC.md)? - **Senior** - [ ] Что такое [барьеры на чтение](Барьеры%20в%20программировании.md) и [барьеры на запись](Барьеры%20в%20программировании.md)? ### Будущее Java - [ ] Слышал что-нибудь про виртуальные потоки? - [ ] Слышал про проект лилипут? ## Java Core ### Примитивы - **Junior** * [ ] Что такое примитив? * [ ] Может ли примитив быть null? * [ ] Можем ли мы создать свой примитив? * [ ] А что такое классы обертки? * [ ] [Задача 10](Задача%2010.md) * [ ] [Задача 0](Задача%200.md) * [ ] Как быть, если нам нужна точность вычислений? ### Операторы - Junior - [ ] [Задача 11](Задача%2011.md) ### Классы - **Junior** * [ ] Могу ли я создать класс с именем `Object`? * [ ] Что можешь сказать про методы `hashCode()` и `equals()`? * [ ] Если `hashCode()` у двух объектов одинаковый, то они равны? * [ ] Какой класс не наследуется от класса `Object`? * [ ] Можно ли создать объект не используя ключевое слово `new`? * `Class.forName().newInstance()`; * `ClassLoader loadClass()` * `clone()` * Дисериализация * Reflection API * [ ] Что такое приведение типов? * [ ] В чем разница между абстрактным классом и интерфейсом? #### Методы - **Junior** - [ ] Можешь рассказать про модификаторы доступа методов? - [ ] Что такое перегрузка и переопределение метода? - [ ] [Задача 3](Задача%203.md) - [ ] [Задача 1](Задача%201.md) - **Middle** - [ ] Можешь рассказать про статическое и динамическое связывание? - [ ] Представим обычный метод в Java. Это какое связывание? - Динамическое - [ ] А если мы поставим методу `final`, какое это будет связывание? - Статическое - [ ] [Задача 8](Задача%208.md) #### Поля класса - **Junior** - [ ] Можно ли получить доступ к `private` переменной? ### String - **Junior** - [ ] Какая особенность есть у класса `String`? - [ ] К какой проблеме приводит эта особенность? - [ ] А в чем разница между `StringBuilder` и `StringBuffer`? - [ ] [Задача 2](Задача%202.md) - [ ] Если задача не решена. Слышал что-нибудь про пул строк? - [ ] А есть ли другие пулы? - [ ] [Задача 14](Задача%2014.md) ### Исключения - **Junior** - [ ] Что такое исключение, зачем они нужны? - [ ] Можешь назвать иерархию исключений? - [ ] А `Throwable` это класс или интерфейс? - [ ] Какие типы исключений знаешь? - [ ] Мы можем обработать все исключения? - [ ] Как создать свое непроверяемое исключение? - [ ] Что такое `try-with-resources`? - [ ] [Задача 12](Задача%2012.md) - [ ] [Задача 5](Задача%205.md) ### Функциональный подход - **Junior** - [ ] Что такое анонимный класс? - [ ] Что такое функциональный интерфйес? - [ ] Что такое лямбда? - **Middle** - [ ] Что такое замыкания? И есть ли они в Java замыкания? - [ ] Можешь объяснить как работают лямбда выражения? - Вот мы создали функциональный интерфейс. А что происходит после, при запуске программы? - [ ] [Задача 9](Задача%209.md) ### Коллекции - **Junior** - [ ] Можешь рассказать [иерархию Java Collection Framework](collection.png)? - [ ] Знаешь что такое `Iterator`? - [ ] Как он работает? - [ ] Что часто используют для сортировки коллекции? - [ ] Что важнее `Comparable` или **Comparator** при использовании в `TreeSet`? - **Middle** - Слышал про `Spliterator`? #### ArrayList и LinkedList - **Junior** - [ ] Можешь коротко рассказать про устройство `ArrayList`? - [ ] Можешь коротко рассказать про устройство `LinkedList`? - **Middle** - [ ] Доводилось ли работать с реализациями `List`, кроме `ArrayList` и `LinkedList` #### HashMap - **Junior** - [ ] Что такое `Map`? - [ ] Может ли `null` быть ключом в `HashMap`? - **Middle** - [ ] Можешь коротко описать как происходит добавление в `HashMap`? - [ ] Какая ожидаемая скорость доступа к элементу по ключу в `HashMap`? - [ ] Почему `String` это хороший выбор для ключа? - [ ] Что может ухудшить сложность доступа? - [ ] Есть ли какая-то защита от ухудшения сложности доступа? - [ ] [Задача 4](Задача%204.md) - [ ] [Задача 13](Задача%2013.md) #### HashSet - [ ] Можешь коротко рассказать про устройство HashSet? ### Stream API - **Junior** - [ ] Знаешь что такое Stream API? - [ ] У Stream API методы могут быть двух типов, какие это типы? - [ ] Сможешь назвать какие-нибудь методы, а также их тип? - [ ] Можешь сказать в чем отличие методов `map()` от `flatMap()`? - [ ] [Задача 7](Задача%207.md) - [ ] Можно ли собрать результаты стрима в `Map`? - [ ] А можно ли собрать результаты стрима в строку? ## Многопоточность * [ ] А в чем отличие Parallel от Concurrent? * [ ] Что такое блокировка и как она работает в Java? * [ ] Расскажи о потокобезопасных коллекциях. * [ ] Как работают и когда использовать `Callable` и `Future`? * [ ] Объясните разницу между методами `wait()` и `sleep()`. * [ ] ~~Что такое «монитор» в Java?~~ * [ ] У стримов есть метод `parallel()`. Знаешь как он под капотом работает? * [ ] А есть ли проблема в этой реализации? * [ ] Можешь рассказать про `ForkJoinPool`? Какая у него особенность? * [ ] Что называют состоянием гонки? * [ ] Что такое исполнительские сервисы (Executor Services) в Java? * [ ] Расскажи про ключевое слово `volatile` * [ ] Можешь рассказать что такое DeadLock: * [ ] А как обнаружить DeadLock? * [ ] А как не допускать DeadLock? * [ ] Слышал что-нибудь про LiveLock? ## Секция работы с данными ### Базы данных и SQL - [ ] Что такое «нормализация»? - [ ] Что такое «денормализация»? Для чего она применяется? - [ ] Что такое точка сохранения? - [ ] ~~Что такое оконная функция?~~ - **Senior** - [ ] Какие знаешь способы для ускорения запросов к БД? - [ ] Использование индексов - [ ] Кэширование результатов на стороне приложения - [ ] Анализ плана выполнения запроса - [ ] Денормализация - [ ] Пакетная обработка ### Java - [ ] Объясни принцип работы [JDBC](JDBC.md)? ### Hibernate - [ ] Что такое JPA и в чем его преимущества? - [ ] Можешь рассказать про основные компоненты Hibernate и за что они отвечают? - [ ] Сможешь рассказать, в каких [состояниях может находиться объект](Жизненный%20цикл%20объекта%20Hibernate.md), который отслеживает Hibernate и переходы между этими состояниями? - [ ] Что Hibernate использует под капотом для доступа к БД? JDBC или что-то свое? - [ ] Что можешь рассказать про уровни кэша в Hibernate? - Кэш первого уровня. Используется в рамках одной и той же сессии Hibernate. ### Транзакции - [ ] Назовешь какими [свойствами](Свойства%20транзакции%20БД%20(ACID).md) должны обладать транзакции БД? - [ ] Какие [проблемы](Проблемы%20при%20параллельном%20выполнении%20нескольких%20транзакций.md) могут возникать при параллельном доступе с использованием транзакции? * [ ] Как можно решить эти проблемы? * Какие существуют [уровни изоляций транзакций БД](Уровни%20изоляций%20транзакций%20БД.md)? * [ ] [Задача 15](Задача%2015.md) ## Реактивная разработка - [ ] Доводилось работать с реактивным стеком? - [ ] Можешь описать в чем суть реактивной разработки? - [ ] Что такое блокирующие операции? Сможешь привести примеры? - [ ] Есть ли какая-то проблема с `ThreadLocal` при реактивном подходе? - [ ] Что такое [Event Loop](Event%20Loop.md)? ## Фреймворки ### Spring - **Junior** - [ ] Как можно создать бин из чужой библиотеки? - **Middle** * [ ] Есть ли смысл делать интерфейс для сервиса? * [Создание прокси-объектов в SpringBoot](Создание%20прокси-объектов%20в%20SpringBoot.md) - [ ] Как работает стартер? - [ ] Как можно реализовать пагинацию в SpringBoot? - [ ] Знаешь какие запросы генерируются для выполнения такой пагинации? - [ ] А в чем проблема этого запроса? - [ ] Есть ли какой-то другой способ пагинации? ### Quarkus - [ ] Как тебе работа с кваркусом? - [ ] Какие проблемы встречал при работе с кваркусом? - [ ] Есть ли смысл работать с `Optional` в `Uni`? - [ ] [Задача 18](Задача%2018.md) - [ ] [Задача 19](Задача%2019.md) - [ ] Какие есть особенности, если необходимо [выполнить](Выполнение%20блокирующего%20кода%20в%20реактивном%20потоке.md) блокирующий код? - [ ] Как можно [перейти из реактивного стиля в императивный](Переход%20из%20реактивного%20стиля%20в%20императивный.md)? - [ ] Чем метод `invoke()` отличается от метода `call()`? - [ ] Что можно предпринять при вызове другого микросервиса, чтобы избежать кратковременную недоступность этого сервиса? - [ ] У нас есть два разных сервиса с эндпойнтами, которые отдают какую-то информацию о пользователе нашей системы по идентификатору. Как мы можем объединить результаты работы этих двух сервисов? ## Системы сборки - [ ] Что такое BOM файл? ## Kafka - [ ] Расскажи составляющие кафки - [ ] Сообщения в кафке удаляются после прочтения? - [ ] Влияет ли как-то количество сообщений на производительность? - [ ] Есть ли смысл создавать консьюмер группу с количеством консьюмеров больше, чем есть партиций в топике, из которого мы будем читать? - [ ] А что такое кафка-конект? ## Docker - **Middle** - [ ] Как можно дебажить приложение, которое запущено в Docker? - **Senior** - [ ] [Задача 25](Задача%2025.md). Оптимизация Dockerfile. - [ ] Использовать более легкий образ. - [ ] Минимизация содержимого. Использование `.dockerignore` - [ ] Расположить JDK выше слоя приложения ## Секция Архитектуры ### Паттерны - [ ] Что такое [IoC](Inversion%20of%20Control.md)? - [ ] [Задача 22](Задача%2022.md) - [ ] Объясните концепцию [Dependency Injection](Dependency%20Injection.md). - [ ] [Задача 23](Задача%2023.md) ### Архитектура - [ ] Если нет требований по производительности, ты пожертвуешь производительностью метода в угоду его читаемости? - [ ] Можешь рассказать какие плюсы и минусы микросервисной архитектуры? - Плюсы: - Single responsibility -> SOLID -> flexibility - Легче разделить работу - Проще тестировать - Проще собирать - Быстрее поднимать - Значительно меньше проблем конфликтов версий у зависимостей - Возможность использовать разные технологии - Возможность маштабировать нужные части системы - Минусы: - Пропадают транзакции - [ ] Какие паттерны микросервисной архитектуры знаешь? - [ ] API Gateway - [ ] Saga - [ ] Circle Breaker - [ ] [CQRS](CQRS.md) - [ ] [Транзакционный аутбокс](Транзакционный%20аутбокс.md) - [ ] Какие знаешь способы общения сервисов? - [ ] Есть ли какая-нибудь проблема при горизонтальном масштабировании сервисов в WebSocket? - [ ] В проекте понадобилось хранить файлы, что можно использовать? - [ ] Хорошо, начали использовать S3. Кто-то предложил сделать сервис прокси, с которым будут работать все сервисы и фронт. Идет активное обсуждение этого решения. Что скажешь? Какие есть плюсы, какие минусы? - [ ] Как отнесешься к идеи, если все сервисы в микросервисной архитектуре будут использовать единый BOM файл? - [ ] Проблемы кэширования - [ ] Допустим у нас есть сервис, который запускается в N репликах, какие тут есть проблемы с кэшированием? - [ ] Что если у нас входные параметры метода это коллекция? ### Задачи по архитектуре - [ ] Допустим у нас есть 2 сервиса. Один сервис хранит сущность «компании», другой «сделки». У нас у сделок есть идентификатор компании. Как мы на фронте можем получить сделки с именем компании. - BFF - Api Gateway - Один сервис вызывает другой - [ ] Есть приложение, которое умеет принимать какие-то запросы, к примеру, по http. Считаем, что приложение однопоточное и требуется каким-то образом сделать ограничение по запросам за ПОСЛЕДНЮЮ минуту, чтобы 100 проходило, а 101 уже нет. Как будешь реализовывать такую проверку? - [ ] Нужно реализовать безопасность в приложении. У в проекте всё на простых сервлетах, и начальник говорит, что пишем на них и точка. Как будешь подходить к этой задаче?