Собеседование
- Общие технические знания
- Java core
- Java collections
- Алгоритмы
- JMM/Concurency
- JVM/GC
- SQL/NOSQL
- Spring
Общие технические знания
Обычно все начинается с вопросов о текущем используемом стеке и об известных библиотеках/фреймворках.
Я могу поспрашивать почему используется то или иное решение.
Задам вопрос про DevOps и спрошу - а принимал ли ты участие в организации поставок.
Спрошу что-нибудь из аббревиатуры SOLID
Спрошу про паттерны проектирования, может быть, про их типизацию, попрошу в деталях рассказать о парочке наиболее интересных из тех, о которых ты вспомнишь
Java core
Где-то обязательно будет вопрос про неизменяемость строк.
Основное путешествие начнется с equals и hashCode:
- Я спрошу про контракт между ними
- Спрошу про контракт на equals
- Спрошу про тип данных, который возвращает hashCode
- Спрошу про число байтов в int, о том, сколько может быть уникальных хэшкодов, может быть, попрошу представить это в десятичном виде
- Где-то выше мелькнет слово коллизия - задел под хэшмапу
- Спрошу как хэшкод считается по умолчанию, попробую подвести, что можно считать рандомом
- Если был ответ «адрес в памяти» - спрошу про изменяется ли адрес объекта, спрошу про размер адреса, может быть, поговорим о выравнивании адреса и о том, сколько надо байт, чтобы адресовать кучи разных размеров (в том числе, про сжатые ссылки)
- Могу спросить где храниться хэшкод
Java collections
Спрошу про типы коллекций, чем сет отличается от листа, что такое мапа
Для всех реализаций коллекций буду спрашивать сложность доступа по индексу, вставки и удаления
Начну с листов: каким пользовался, почему пользовался линкедлистом (или не пользовался), чем линкедлист хуже, почему вставка в середину не лучше чем в аррэйлист, по какой коллекции проще итерироваться (как коллекция лежит в памяти), сравнить по потреблению памяти линкедлист и аррэйлист
Блок вопросов про хэшмапам: как считается индекс в массиве, как разрешаются коллизии, худший случай по получению значения по ключу, как можно оптимизировать худший случай (про трансформацию списка в дерево). Чем отличается конкарент хэшмапа от обычной.
Тримапы: чем красно-черное дерево отличается от просто бинарного дерева, какие еще бинарные деревья бывают, какая может быть максимальная разница между самым длинным и самым коротким путем от корня до листа, почему такая разница
Алгоритмы
Заход с того: а как отсортировать, например, лист.
Спрошу про то, какие типы сортировок используются в java, какие сортировки не хуже nlogn знаешь еще. Спрошу про то, как работает timsort/quicksort, про худший случай quicksort, как его оптимизировать, про его устойчивость. Если знаешь другие сортировки - спрошу про них
JMM/Concurency
Спрошу, что дает критическая секция. Что будет, если написать synchronized перед методом. Перед статическим методом. Зачем нужны wait, notify, notifyAll. Спрошу про порядок засыпания и пробуждения потоков и кто этот порядок может гарантировать. Может быть, попрошу спроектировать исполнение задачи в средпуле.
Спрошу, что дает volatile. Что за кэш? Через какие физические устройства происходит чтение из оперативной памяти - пока не доберемся до кэшей процессора. Спрошу про happens-before относительно volatile и какие еще бывают.
Чем хороши атомики, кто больше потребляет ресурсов: атомики, критическая секция или volatile.
TBD
Комментариев нет:
Отправить комментарий