Я уже 4 месяца как работаю, но в моей голове свежи воспоминания о собеседованиях. Итак, какие вопросы мне задавали.
Java:
- Какие бывают коллекции и какова сложность операций с ними? На всех собеседованиях спрашивали.
- Как внутри устроены различные коллекции (load factor / capacity / коллизии)? Почти на всех был такой вопрос.
- Как сделать HashMap потокобезопасной и оптимизировать производительность?
- Есть ArrayList и LinkedList. В каком листе будет быстрее перебрать 1 000 000 элементов и почему? Как это сделать?
- Есть HashMap. Какая худшая сложность и в каких случаях? Можно ли её улучшить? Если да, то как? (тут вопрос с подвохом)
- Какие способы существуют для кеширования картинок? Реализуй свой механизм. Сложный вопрос не для джуниоров, который был только на одном собеседовании.
- Как устроен Handler, Looper и MessageQueue. Что там внутри и как они взаимодействуют? Вопрос был на 30% собеседований.
- Есть List<String> list. Надо сложить все строки в листе в одну. Как это сделать?
- Почему плохо сделать через String a += list[i]? Там же всё равно GC всё соберёт, так что какая разница?
- Что такое PriorityQueue? Когда бы ты его использовала?
- Предположим, мы хотим список имен без повторений и упорядоченный по алфавиту. Что ты будешь использовать и почему?
- Какие виды ссылок ты знаешь и чем они отличаются? Как бы ты использовала WeakReference в своём проекте?
- Предположим, ты не знаешь формулу для помещения элементов в HashMap. Напиши свою.
- Дженерики. Зачем нужны?
Android:
- Какие способы работы с многопоточностью знаешь? На каждом собеседовании был такой вопрос.
- Есть жалоба, что RecyclerView тормозит при скролле. Как бы ты это чинила? Всё ещё считаю, что это вопрос не для джуниоров. Задавали его только на одном собеседовании, где, видимо, просто хотели вежливо избавиться от меня.
- Parcelable vs Serializable
- Как работает GC?
- Что за Task и зачем он нужен? Какие флаги там могут быть?
- Зачем нужны сервисы, если можно просто в новом треде написать?
- Какие существуют сервисы? В чём отличия и какие там жизненные циклы? В каком потоке выполняются?
- Как жизненный цикл фрагмента связан с жизненным циклом активити? Надо объяснить каждый метод из фрагмента и его связать с активити.
- Как вызвать метод активити из фрагмента?
- Предположим есть кнопка. При нажатии на неё надо менять цвет. Реализуй это через потоки.
- Почему нельзя реализовывать через анонимный Thread?
- В onCreate есть некий код. Потом написано finish(), а дальше ещё код. Что тут произойдёт?
- Почему в onCreate плохо писать if(условие) return?
- Как найти ширину кнопки в активити в onCreate?
- Что такое broadcastReceiver и зачем он нужен?
- Как бы ты сверстала макет, где список картинок, а рядом с ними имя, фамилия кнопка с лайком, а под именем небольшое описание?
- Какие состояния обязательно надо обработать?
- Как работает основной поток?
- Как вообще работает запрос? Что нам приходит в ответе?
- Предположим, есть фрагмент. Мы вызываем второй фрагмент с помощью replace и addtoBackstack. Что будет, когда мы нажмем назад на втором фрагменте? Какой жизненный цикл будет у первого?
Общие вопросы:
- Что такое http? В чём отличие от https?
- Что такое транзакция? Я не готова была к вопросам по БД, так что дальше мы не продолжили эту тему. Впрочем, это было только на одном собеседовании.
- Разбор каждого оператора в RX: single, maybe и т.п. Где там по умолчанию выполняется код и какие потоки существуют?
- Разница между POST и GET.
- Пишут цепочку RX с разными потоками и просят рассказать построчно, что и где выполняется.
- Говорят, надо знать про СОЛИД и архитектуру, но у меня не спрашивали это.
Про котлин совсем немного:
- Чем !! отличается от ?
- var vs val
- sealed class — что это такое?
- data class — что это и какие методы там генерируются?
Все говорили, что надо учить алгоритмы, но мне задали только один такой вопрос и всего на одном собеседовании:
- Что такое бинарный поиск?