В это статье вы узнаете какие вопросы задают чаще всего на собеседованиях на позицию Android-разработчик.
Подготовка
Сколько надо времени на подготовку? Мой ответ: 1–2 недели. Этого вполне достаточно. Ну, конечно же, если вы не метите в Гугл) Тогда сроки однозначно увеличиваются.
Надо ли иметь хорошее «портфолио»? Да!… Конечно же можно и без хорошего аккаунта на GitHub, например,… но меня мои pet-projects не раз спасали от скучных тестовых заданий! И, к тому же, Вы быстрее попадете на техническое собеседование.
Итак, Вы готовы приступить к подготовке… Что дальше? Составьте список вопросов, которые уже задавали другим Android разработчикам (в данном случае просто смотрите часть вторую «ВОПРОСЫ»). И обязательно внимательно посмотрите требования к «интересным» вакансиям! Если там есть «Custom View», то обязательно вызубрите этапы создания этих несчастных вьюх! Спросят 100%!
Дальше…Берёте небольшой блокнонт (размер не больше вашей ладони — просто удобно носить с собой) и пишите: Вопрос («Что такое Observable?») из списка подготовленных (см. пункт 3) и ниже Ответ (Это асинхронный паттерн проектирования, в котором данные представлены в виде потока событий….и так далее). Пишите от руки! Поверьте, это очень важно!
Теперь у Вас есть готовый блоконот с основными вопросами и ответами…едем дальше…Встали с утра, собрались, поехали на метро… открываем блоконт и читаем, читаем, читаем… также едем обратно… читаем, читаем, читаем…
Просто читаем? Нет! Прочитали вопрос…прикрыли блокнот и своими словами пытаемся сами себе рассказать… Забыли? Снова открываем блокнот, читаем ответ, закрываем, отвечаем и так далее пока не запомнили.
Вот вы прочитали вопрос, рассказали самому себе ответ и вроде бы всё хорошо…Анализируйте! Прокрутите в голове свой ответ. Найдите термины, информацию, которая подтолкнет вашего «экзаменатора» на новые вопросы. И обязательно выпишите ответы на них!
Забегая вперед, скажу, после собеседования (или даже, прямо, во время) записывайте вопросы, на которые не ответили. Пишите в копилочку-блокнот и позднее обязательно письменно отвечайте. Пополняем базу знаний)
Так как, в большинстве случаев, вам попадется как минимуму 1 задачка — посмотрите (хотя бы мельком) книгу «Карьера Программиста» Г. Лакман Макдауэлл. Ознакомьтесь хотя бы с подходами к решению классических алгоритмических задач.
Переходим ко второй части…
Вопросы
Здесь я просто перечислю вопросы. Думаю, ответы вы найдете и без меня:)
Java
- Модификаторы доступа Java (в порядке от private до public);
- Реализация «кучи» (где хранятся объекты);
- Где и как используются методы equals() and hashcode();
- Что будет, если не переопределить метод hashcode()?
- Реализация HashMap (О! Этот вопрос был абсолютно на всех собеседованиях! Очень хорошая статья https://habr.com/ru/post/128017/)
- Как разрешается коллизия в HashMap (метод цепочек или открытая адресация);
- Виды исключений в Java;
- Виды коллекций Java (перечисляете всё, что знаете);
- Типы ссылок Java и где используются;
- Способы синхронизации Java;
- Volatile — что это?
- StringBuilder vs String;
- Назовите синхронизированную версию HashMap (Hashtable, но устарела);
- Реализация ArrayList в Java (на базе массива).
- Модификатор final в Java — где используется и что даёт?
Kotlin
- MutableList vs List;
- Kotlin features (что такого классного в Kotlin?);
- data class — в чём преимущество?
- Модификатор open в Kotlin — где используется и что даёт?
- Модификатор object в Kotlin — где используется и что даёт?
- Что такое sealed class?
RxJava
- «hot» vs «cold» observable;
- Операторы: map, flatMap, concatMap, switchMap — для чего и в чем отличия?
- Операторы: from, just — для чего и в чем отличия?;
- Операторы: doOn…Next, …Error и так далее — для чего?;
- Observable vs Flowable;
- Flowable: стратегии работы с backpressure;
- Single, Completable, Maybe — случаи использования;
- Операторы: defer, groupBy, debounce, combineLatest, withLatestFrom, merge, concat, zip, switchOnNext — как работают?
- Операторы: observeOn(), subscribeOn() — как работают?
- Типы Subjects;
- Типы Processors;
- Виды Schedulers;
- Как работает связка операторов publish и connect;
💡Кстати! Эти и многие другие вопросы мы разбираем на интенсиве по Android-разработке на Kotlin. Вы научитесь использовать продвинутые операторы RxJava, объединять запросы и обрабатывать ошибки. Мы рассмотрим продвинутые операторы: zip, merge, concat, combineLatest, concatMap и другие, научимся использовать Subject и обуздаем Backpressure. Подробнее 👈
Android SDK
- Launch Modes for activity (standart, singleTop, singleTask, singleInstance);
- Intent flags для запуска activity (FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_SINGLE_TOP, FLAG_ACTIVITY_CLEAR_TOP);
- Что такое ContentProvider?
- Типы сервисов (запущенный, привязанный, IntentService), их отличия и жизненные циклы;
- Handler, Looper, MessageQueue — как это всё работает вместе;
- Планировщики задач (отличная сатья тут -> https://habr.com/ru/company/funcorp/blog/434680/)
- Serializable vs Parcelable;
- Виды Intent;
- addOnBackStackChangeListener — что это и для чего?
- Dialog vs DialogFragment — отличия;
- Реализация сustom View и custom ViewGroup. Отличия в реализациях;
- MVC, MVP, MVVM, MVI — рассказать общие принципы;
- Clean architecture — рассказать общие принципы;
- MVP vs MVVM (отличия);
- Dagger 2 (модули, компоненты, сабкомпоненты, скоупы, binds vs provides, named);
- Doze Mode — что это?
- LiveData (value vs postValue, active() vs onInactive(), MediatorLiveData);
- ViewModel — рассказать общие принципы;
- Room — рассказать общие принципы;
- Moxy — рассказать общие принципы;
- Realm — рассказать общие принципы;
- Метод invalidate() in view — как работает?
- ValueAnimator, ObjectAnimator — рассказать общие принципы;
- Paging library — виды пагинации;
- Zygote — что это и как работает?
- Bundle что туда можно положить?
- Spannable — для чего используется?
- Context activity vs application context;
- Что прописываем в манифесте?
- setRetainInstance in fragment — что даёт?
- AsyncTask — для чего и какие имеет недостатки?
Общие вопросы
- Принципы ООП;
- SOLID;
- Паттерны проектирования
- POST vs GET запросы;
- Lru Cache — рассказать общие принципы;
- Сложность алгоритмов — определение и виды;
- Git flow — рассказать общие принципы;
- Сложности вставки и поиска в ArrayList, LinkedList, HasMap;
- Виды сортировок — просто перечислить;
- Принципы функционального программирования;
Примеры задач
- Просто перевернуть строку («мама мыла раму» -> «раму мыла мама»);
- Найти в массиве два числа сумма (разница) которых равна заднному;
- Дают цепочку вызовов observeOn(), subscribeOn() вперемешку с другими операторами. Надо определить в каком потоке будет вызываться каждый оператор. А чтобы освоить азы разработки под RxJava – рекомендую пройти практический курс с упражнениями по реактивному программированию на RxJava для Android на Stepik
- Могут дать сложный UI и спросят как будешь верстать;
- Могут дать задачу типа «мини-приложение» и надо будет рассказать как будешь делить по слоям (отсылка к Clean architecture);
- Могут дать задачу типа «мини-приложение» на модульность и надо будет рассказать как будешь делить на модули;
Книги для подготовки
- Карьера Программиста Г. Лакман Макдауэлл
- Изучаем Java | Сьерра Кэти, Бэйтс Берт
- Effective Java, Joshua Bloch
- Java. Библиотека профессионала – Кей С. Хорстманн
- Книга «Kotlin. Программирование для профессионалов»
- Cracking the Coding InterviewКнига, Гейл Лаакманн Макдауэлл
Ну, а если вы хотите прокачаться до уровня middle с проверкой вашего кода и code-review то приглашаю на свой авторский курс