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

348 lines
25 KiB
Markdown
Raw Normal View History

2024-06-13 21:01:37 +03:00
> [!WARNING] Дисклеймер
> Чтобы сэкономить нам обоим время, предлагаю договориться так: если в какой-то момент собеседования я пойму, что вы точно не подходите, или вы поймёте, что мы вам точно не подходим, озвучиваем этот момент сразу, даже если это произойдёт через несколько минут после начала нашей беседы.
## Входящие вопросы
2024-06-19 19:38:52 +03:00
- Представь, что у нас есть транзакционный метод. В этом методе мы находим запись в БД по id и меняем поле флага, потом идем в другой сервис. Сервис нам может вернуть либо true, либо false. Если false, то мы должны вернуть флаг в изначальное состояние. Разработчик решил бросать исключение, чтобы транзакция откатила эти изменения.
2024-06-13 21:01:37 +03:00
- Что такое репликаяи в БД? Как реализуется? Какие виды есть?
- Нужно придумать задачи для 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 уже нет. Как будешь реализовывать такую проверку?
- [ ] Нужно реализовать безопасность в приложении. У в проекте всё на простых сервлетах, и начальник говорит, что пишем на них и точка. Как будешь подходить к этой задаче?