348 lines
25 KiB
Markdown
348 lines
25 KiB
Markdown
|
||
> [!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 уже нет. Как будешь реализовывать такую проверку?
|
||
- [ ] Нужно реализовать безопасность в приложении. У в проекте всё на простых сервлетах, и начальник говорит, что пишем на них и точка. Как будешь подходить к этой задаче? |