26 KiB
26 KiB
zero-link | |
---|---|
|
[!WARNING] Дисклеймер Чтобы сэкономить нам обоим время, предлагаю договориться так: если в какой-то момент собеседования я пойму, что вы точно не подходите, или вы поймёте, что мы вам точно не подходим, озвучиваем этот момент сразу, даже если это произойдёт через несколько минут после начала нашей беседы.
Входящие вопросы
- Представь, что у нас есть транзакционный метод. В этом методе мы находим запись в БД по id и меняем поле флага, потом идем в другой сервис. Сервис нам может вернуть либо true, либо false. Если false, то мы должны вернуть флаг в изначальное состояние. Разработчик решил бросать исключение, чтобы транзакция откатила эти изменения.
- Что такое репликаяи в БД? Как реализуется? Какие виды есть?
- Нужно придумать задачи для SQL
- Объясните принцип работы классов-оберток над примитивными типами.
- Какие есть стратегии кэширования в Hibernate?
- У нас есть таблица в БД. Первичный ключ это UUID. Нам необходимо часто получать случайную запись из таблицы.
- Почему в inmemory-базах используются бинарные деревья, а в классических реляционных не используются
- Дороже операции на чтение с диска, так как каждый узел надо считывать.
- Важен ли порядок полей в составном индексе?
- Да, важен
- Задача 27
- Вопрос на знание блокировок
- Чтение с диска в linux всегда блокирующая операция
- nginx нельзя блокировать
- статические файлы лежат на диске
- почему мы раздаем статику с помощью nginx?
- page cache
- Задача. Отправка кафка событий в транзакции БД
- Код занимает 1 Мб, данные 1 Мб. Сколько нужно памяти после fork'a? А после изменения данных?
- Ответ 2 и 3
Знакомство
-
Рассказать про план собеседования.
- Сначала будет секция про прошлые работы и опыт
- Потом техническая часть с вопросами
- И иногда буду показывать небольшие куски кода
- Нужно сказать что произойдет
- Рассуждать желательно в слух
-
Junior
- Расскажи о себе? Как пришел в Java? Чем занимался до этого?
-
Можешь рассказать про устройство команды?Какой состав? Насколько большая?
-
А в каком виде поступали задачи?Приходилось ли участвовать в анализе?
-
Можешь сказать что вот прям нравилось в работе?
- Возможно долгие ретро-созвоны
-
А теперь наоборот, что не нравилось и что хотелось бы избежать?
- Возможно тошнит от код-ревью
-
Можешь рассказать почему решил сменить работу?
-
Какие интересные задачи доводилось решать?
- Возможно в чем-то удалось разобраться лучше других на проекте.
- Чем больше тут расскажешь, тем меньше вопросов я задам
- С какими трудностями столкнулись и как их преодолели?
-
Middle/Senior
- Приходилось ли быть наставником/тимлидом?
Любопытство
- Используешь ChatGPT или может на его основе делал какие-то проекты?
- Слышал про нативные сборки? Можешь что-нибудь про них рассказать?
Устройство ЭВМ
- Senior
- Как генерируется последовательность случайных чисел?
ООП
- Junior
- Что такое полиморфизм?
- Можешь назвать примеры полиморфизма в Java?
- Интерфейс
- Перегрузка
- Переопределение
- Автоматические преобразование типов
- Можешь назвать примеры полиморфизма в Java?
- Есть ли множественное наследование в Java?
- Что такое полиморфизм?
Устройство Java
- Junior
- Вот мы написали какой-то код, а какой путь он проделывает чтобы начать выполняться?
- Что такое JVM? Какие преимущества и недостатки дает JVM?
- А вот JRE это что такое?
- Что такое байт-код?
- Middle
- Расскажите о механизме работы Class Loader в Java.
- На каких версиях Java довелось работать?
- Какие изменения после Java 8 особенно понравились?
- Слышал про утилиту jlink?
- Как работают аннотации в Java и как создать собственную аннотацию?
- Senior
- Как работает механизм рефлексии в Java?
- Что такое Java Memory Model и как она связана с многопоточностью?
Стек и Куча
- Middle
- Можешь рассказать про стек и кучу?
- Где хранятся примитивы, а где объекты?
- Может ли примитив хранится в куче?
- Знаешь как устроен стек?
- Можешь рассказать про пул строк?
- А есть ли другие пулы?
Garbage Collector
- Middle
- Объясни принципы работы сборщика мусора в Java.
- Когда объект переносится из одной области хипа в другую, что происходит с областью откуда был перемещен объект?
- Что такое Card Table? У Shenandoah GC есть Card Table?
- А в чем отличие G1 от других GC?
- Предсказуемое время сбора
- Сегментация памяти
- Параллелизм и многопоточность
- А в чем отличие G1 от Shenandoah GC?
- Объясни принципы работы сборщика мусора в Java.
- Senior
- Что такое барьеры на чтение и барьеры на запись?
Будущее Java
- Слышал что-нибудь про виртуальные потоки?
- Слышал про проект лилипут?
Java Core
Примитивы
- Junior
- Что такое примитив?
- Может ли примитив быть null?
- Можем ли мы создать свой примитив?
- А что такое классы обертки?
- Задача 10
- Задача 0
- Как быть, если нам нужна точность вычислений?
Операторы
- Junior
Классы
- Junior
- Могу ли я создать класс с именем
Object
? - Что можешь сказать про методы
hashCode()
иequals()
? - Если
hashCode()
у двух объектов одинаковый, то они равны? - Какой класс не наследуется от класса
Object
? - Можно ли создать объект не используя ключевое слово
new
?Class.forName().newInstance()
;ClassLoader loadClass()
clone()
- Дисериализация
- Reflection API
- Что такое приведение типов?
- В чем разница между абстрактным классом и интерфейсом?
- Могу ли я создать класс с именем
Методы
- Junior
- Middle
- Можешь рассказать про статическое и динамическое связывание?
- Представим обычный метод в Java. Это какое связывание?
- Динамическое
- А если мы поставим методу
final
, какое это будет связывание?- Статическое
- Задача 8
Поля класса
- Junior
- Можно ли получить доступ к
private
переменной?
- Можно ли получить доступ к
String
- Junior
- Какая особенность есть у класса
String
?- К какой проблеме приводит эта особенность?
- А в чем разница между
StringBuilder
иStringBuffer
? - Задача 2
- Если задача не решена. Слышал что-нибудь про пул строк?
- А есть ли другие пулы?
- Какая особенность есть у класса
- Задача 14
Исключения
- Junior
- Что такое исключение, зачем они нужны?
- Можешь назвать иерархию исключений?
- А
Throwable
это класс или интерфейс?
- А
- Какие типы исключений знаешь?
- Мы можем обработать все исключения?
- Как создать свое непроверяемое исключение?
- Что такое
try-with-resources
? - Задача 12
- Задача 5
Функциональный подход
- Junior
- Что такое анонимный класс?
- Что такое функциональный интерфйес?
- Что такое лямбда?
- Middle
- Что такое замыкания? И есть ли они в Java замыкания?
- Можешь объяснить как работают лямбда выражения?
- Вот мы создали функциональный интерфейс. А что происходит после, при запуске программы?
- Задача 9
Коллекции
- Junior
- Можешь рассказать иерархию Java Collection Framework?
- Знаешь что такое
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
- Можешь коротко описать как происходит добавление в
- Задача 13
HashSet
- Можешь коротко рассказать про устройство HashSet?
Stream API
- Junior
- Знаешь что такое Stream API?
- У Stream API методы могут быть двух типов, какие это типы?
- Сможешь назвать какие-нибудь методы, а также их тип?
- Можешь сказать в чем отличие методов
map()
отflatMap()
? - Задача 7
- Можно ли собрать результаты стрима в
Map
? - А можно ли собрать результаты стрима в строку?
Многопоточность
- А в чем отличие Parallel от Concurrent?
- Что такое блокировка и как она работает в Java?
- Расскажи о потокобезопасных коллекциях.
- Как работают и когда использовать
Callable
иFuture
? - Объясните разницу между методами
wait()
иsleep()
. Что такое «монитор» в Java?- У стримов есть метод
parallel()
. Знаешь как он под капотом работает?- А есть ли проблема в этой реализации?
- Можешь рассказать про
ForkJoinPool
? Какая у него особенность? - Что называют состоянием гонки?
- Что такое исполнительские сервисы (Executor Services) в Java?
- Расскажи про ключевое слово
volatile
- Можешь рассказать что такое DeadLock:
- А как обнаружить DeadLock?
- А как не допускать DeadLock?
- Слышал что-нибудь про LiveLock?
Секция работы с данными
Базы данных и SQL
- Что такое «нормализация»?
- Что такое «денормализация»? Для чего она применяется?
- Что такое точка сохранения?
Что такое оконная функция?- Senior
- Какие знаешь способы для ускорения запросов к БД?
- Использование индексов
- Кэширование результатов на стороне приложения
- Анализ плана выполнения запроса
- Денормализация
- Пакетная обработка
- Какие знаешь способы для ускорения запросов к БД?
Java
- Объясни принцип работы JDBC?
Hibernate
- Что такое JPA и в чем его преимущества?
- Можешь рассказать про основные компоненты Hibernate и за что они отвечают?
- Сможешь рассказать, в каких состояниях может находиться объект, который отслеживает Hibernate и переходы между этими состояниями?
- Что Hibernate использует под капотом для доступа к БД? JDBC или что-то свое?
- Что можешь рассказать про уровни кэша в Hibernate?
- Кэш первого уровня. Используется в рамках одной и той же сессии Hibernate.
Транзакции
- Назовешь какими свойствами должны обладать транзакции БД?
- Какие проблемы могут возникать при параллельном доступе с использованием транзакции?
- Как можно решить эти проблемы?
- Какие существуют уровни изоляций транзакций БД?
- Задача 15
Реактивная разработка
- Доводилось работать с реактивным стеком?
- Можешь описать в чем суть реактивной разработки?
- Что такое блокирующие операции? Сможешь привести примеры?
- Есть ли какая-то проблема с
ThreadLocal
при реактивном подходе? - Что такое Event Loop?
Фреймворки
Spring
- Junior
- Как можно создать бин из чужой библиотеки?
- Middle
- Есть ли смысл делать интерфейс для сервиса?
- Как работает стартер?
- Как можно реализовать пагинацию в SpringBoot?
- Знаешь какие запросы генерируются для выполнения такой пагинации?
- А в чем проблема этого запроса?
- Есть ли какой-то другой способ пагинации?
Quarkus
- Как тебе работа с кваркусом?
- Какие проблемы встречал при работе с кваркусом?
- Есть ли смысл работать с
Optional
вUni
? - Задача 18
- Задача 19
- Какие есть особенности, если необходимо выполнить блокирующий код?
- Как можно перейти из реактивного стиля в императивный?
- Чем метод
invoke()
отличается от методаcall()
? - Что можно предпринять при вызове другого микросервиса, чтобы избежать кратковременную недоступность этого сервиса?
- У нас есть два разных сервиса с эндпойнтами, которые отдают какую-то информацию о пользователе нашей системы по идентификатору. Как мы можем объединить результаты работы этих двух сервисов?
Системы сборки
- Что такое BOM файл?
Kafka
- Расскажи составляющие кафки
- Сообщения в кафке удаляются после прочтения?
- Влияет ли как-то количество сообщений на производительность?
- Есть ли смысл создавать консьюмер группу с количеством консьюмеров больше, чем есть партиций в топике, из которого мы будем читать?
- А что такое кафка-конект?
Docker
- Middle
- Как можно дебажить приложение, которое запущено в Docker?
- Senior
- Задача 25. Оптимизация Dockerfile.
- Использовать более легкий образ.
- Минимизация содержимого. Использование
.dockerignore
- Расположить JDK выше слоя приложения
- Задача 25. Оптимизация Dockerfile.
Секция Архитектуры
Паттерны
- Что такое IoC?
- Объясните концепцию Dependency Injection.
Архитектура
- Если нет требований по производительности, ты пожертвуешь производительностью метода в угоду его читаемости?
- Можешь рассказать какие плюсы и минусы микросервисной архитектуры?
- Плюсы:
- Single responsibility -> SOLID -> flexibility
- Легче разделить работу
- Проще тестировать
- Проще собирать
- Быстрее поднимать
- Значительно меньше проблем конфликтов версий у зависимостей
- Возможность использовать разные технологии
- Возможность маштабировать нужные части системы
- Минусы:
- Пропадают транзакции
- Плюсы:
- Какие паттерны микросервисной архитектуры знаешь?
- API Gateway
- Saga
- Circle Breaker
- CQRS
- Транзакционный аутбокс
- Какие знаешь способы общения сервисов?
- Есть ли какая-нибудь проблема при горизонтальном масштабировании сервисов в WebSocket?
- В проекте понадобилось хранить файлы, что можно использовать?
- Хорошо, начали использовать S3. Кто-то предложил сделать сервис прокси, с которым будут работать все сервисы и фронт. Идет активное обсуждение этого решения. Что скажешь? Какие есть плюсы, какие минусы?
- Как отнесешься к идеи, если все сервисы в микросервисной архитектуре будут использовать единый BOM файл?
- Проблемы кэширования
- Допустим у нас есть сервис, который запускается в N репликах, какие тут есть проблемы с кэшированием?
- Что если у нас входные параметры метода это коллекция?
Задачи по архитектуре
- Допустим у нас есть 2 сервиса. Один сервис хранит сущность «компании», другой «сделки». У нас у сделок есть идентификатор компании. Как мы на фронте можем получить сделки с именем компании.
- BFF
- Api Gateway
- Один сервис вызывает другой
- Есть приложение, которое умеет принимать какие-то запросы, к примеру, по http. Считаем, что приложение однопоточное и требуется каким-то образом сделать ограничение по запросам за ПОСЛЕДНЮЮ минуту, чтобы 100 проходило, а 101 уже нет. Как будешь реализовывать такую проверку?
- Нужно реализовать безопасность в приложении. У в проекте всё на простых сервлетах, и начальник говорит, что пишем на них и точка. Как будешь подходить к этой задаче?