digital-garden/notes/Собеседования/Вопросы для собеседование Java.md

352 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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