fbpx

Blog

Как подготовиться к собеседованию на позицию Android-разработчик

В это статье вы узнаете какие вопросы задают чаще всего на собеседованиях на позицию Android-разработчик.

Подготовка

  1. Сколько надо времени на подготовку? Мой ответ: 1–2 недели. Этого вполне достаточно. Ну, конечно же, если вы не метите в Гугл) Тогда сроки однозначно увеличиваются.
  2. Надо ли иметь хорошее «портфолио»? Да!… Конечно же можно и без хорошего аккаунта на GitHub, например,… но меня мои pet-projects не раз спасали от скучных тестовых заданий! И, к тому же, Вы быстрее попадете на техническое собеседование.
  3. Итак, Вы готовы приступить к подготовке… Что дальше? Составьте список вопросов, которые уже задавали другим Android разработчикам (в данном случае просто смотрите часть вторую «ВОПРОСЫ»). И обязательно внимательно посмотрите требования к «интересным» вакансиям! Если там есть «Custom View», то обязательно вызубрите этапы создания этих несчастных вьюх! Спросят 100%!
  4. Дальше…Берёте небольшой блокнонт (размер не больше вашей ладони — просто удобно носить с собой) и пишите: Вопрос («Что такое Observable?») из списка подготовленных (см. пункт 3) и ниже Ответ (Это асинхронный паттерн проектирования, в котором данные представлены в виде потока событий….и так далее). Пишите от руки! Поверьте, это очень важно!
  5. Теперь у Вас есть готовый блоконот с основными вопросами и ответами…едем дальше…Встали с утра, собрались, поехали на метро… открываем блоконт и читаем, читаем, читаем… также едем обратно… читаем, читаем, читаем…
  6. Просто читаем? Нет! Прочитали вопрос…прикрыли блокнот и своими словами пытаемся сами себе рассказать… Забыли? Снова открываем блокнот, читаем ответ, закрываем, отвечаем и так далее пока не запомнили.
  7. Вот вы прочитали вопрос, рассказали самому себе ответ и вроде бы всё хорошо…Анализируйте! Прокрутите в голове свой ответ. Найдите термины, информацию, которая подтолкнет вашего «экзаменатора» на новые вопросы. И обязательно выпишите ответы на них!
  8. Забегая вперед, скажу, после собеседования (или даже, прямо, во время) записывайте вопросы, на которые не ответили. Пишите в копилочку-блокнот и позднее обязательно письменно отвечайте. Пополняем базу знаний)
  9. Так как, в большинстве случаев, вам попадется как минимуму 1 задачка — посмотрите (хотя бы мельком) книгу «Карьера Программиста» Г. Лакман Макдауэлл. Ознакомьтесь хотя бы с подходами к решению классических алгоритмических задач.

Переходим ко второй части…

Вопросы

Здесь я просто перечислю вопросы. Думаю, ответы вы найдете и без меня:)

Java

  1. Модификаторы доступа Java (в порядке от private до public);
  2. Реализация «кучи» (где хранятся объекты);
  3. Где и как используются методы equals() and hashcode();
  4. Что будет, если не переопределить метод hashcode()?
  5. Реализация HashMap (О! Этот вопрос был абсолютно на всех собеседованиях! Очень хорошая статья https://habr.com/ru/post/128017/)
  6. Как разрешается коллизия в HashMap (метод цепочек или открытая адресация);
  7. Виды исключений в Java;
  8. Виды коллекций Java (перечисляете всё, что знаете);
  9. Типы ссылок Java и где используются;
  10. Способы синхронизации Java;
  11. Volatile — что это?
  12. StringBuilder vs String;
  13. Назовите синхронизированную версию HashMap (Hashtable, но устарела);
  14. Реализация ArrayList в Java (на базе массива).
  15. Модификатор final в Java — где используется и что даёт?

Kotlin

  1. MutableList vs List;
  2. Kotlin features (что такого классного в Kotlin?);
  3. data class — в чём преимущество?
  4. Модификатор open в Kotlin — где используется и что даёт?
  5. Модификатор object в Kotlin — где используется и что даёт?
  6. Что такое sealed class?

RxJava

  1. «hot» vs «cold» observable;
  2. Операторы: mapflatMapconcatMapswitchMap — для чего и в чем отличия?
  3. Операторы: fromjust — для чего и в чем отличия?;
  4. Операторы: doOnNext, …Error и так далее — для чего?;
  5. Observable vs Flowable;
  6. Flowable: стратегии работы с backpressure;
  7. SingleCompletableMaybe — случаи использования;
  8. Операторы: defergroupBydebouncecombineLatestwithLatestFrommergeconcatzipswitchOnNext — как работают?
  9. Операторы: observeOn(), subscribeOn() — как работают?
  10. Типы Subjects;
  11. Типы Processors;
  12. Виды Schedulers;
  13. Как работает связка операторов publish и connect;

Android SDK

  1. Launch Modes for activity (standartsingleTopsingleTasksingleInstance);
  2. Intent flags для запуска activity (FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_SINGLE_TOPFLAG_ACTIVITY_CLEAR_TOP);
  3. Что такое ContentProvider?
  4. Типы сервисов (запущенный, привязанный, IntentService), их отличия и жизненные циклы;
  5. HandlerLooperMessageQueue — как это всё работает вместе;
  6. Планировщики задач (отличная сатья тут -> https://habr.com/ru/company/funcorp/blog/434680/)
  7. Serializable vs Parcelable;
  8. Виды Intent;
  9. addOnBackStackChangeListener — что это и для чего?
  10. Dialog vs DialogFragment — отличия;
  11. Реализация сustom View и custom ViewGroup. Отличия в реализациях;
  12. MVCMVPMVVMMVI — рассказать общие принципы;
  13. Clean architecture — рассказать общие принципы;
  14. MVP vs MVVM (отличия);
  15. Dagger 2 (модули, компоненты, сабкомпоненты, скоупы, binds vs provides, named);
  16. Doze Mode — что это?
  17. LiveData (value vs postValueactive() vs onInactive(), MediatorLiveData);
  18. ViewModel — рассказать общие принципы;
  19. Room — рассказать общие принципы;
  20. Moxy — рассказать общие принципы;
  21. Realm — рассказать общие принципы;
  22. Метод invalidate() in view — как работает?
  23. ValueAnimatorObjectAnimator — рассказать общие принципы;
  24. Paging library — виды пагинации;
  25. Zygote — что это и как работает?
  26. Bundle что туда можно положить?
  27. Spannable — для чего используется?
  28. Context activity vs application context;
  29. Что прописываем в манифесте?
  30. setRetainInstance in fragment — что даёт?
  31. AsyncTask — для чего и какие имеет недостатки?

Общие вопросы

  1. Принципы ООП;
  2. SOLID;
  3. Паттерны проектирования
  4. POST vs GET запросы;
  5. Lru Cache — рассказать общие принципы;
  6. Сложность алгоритмов — определение и виды;
  7. Git flow — рассказать общие принципы;
  8. Сложности вставки и поиска в ArrayListLinkedListHasMap;
  9. Виды сортировок — просто перечислить;
  10. Принципы функционального программирования;

Примеры задач

  1. Просто перевернуть строку («мама мыла раму» -> «раму мыла мама»);
  2. Найти в массиве два числа сумма (разница) которых равна заднному;
  3. Дают цепочку вызовов observeOn(), subscribeOn() вперемешку с другими операторами. Надо определить в каком потоке будет вызываться каждый оператор. А чтобы освоить азы разработки под RxJava – рекомендую пройти практический курс с упражнениями по реактивному программированию на RxJava для Android на Stepik
  4. Могут дать сложный UI и спросят как будешь верстать;
  5. Могут дать задачу типа «мини-приложение» и надо будет рассказать как будешь делить по слоям (отсылка к Clean architecture);
  6. Могут дать задачу типа «мини-приложение» на модульность и надо будет рассказать как будешь делить на модули;

Книги для подготовки

  • Карьера Программиста Г. Лакман Макдауэлл
  • Изучаем Java | Сьерра Кэти, Бэйтс Берт
  • Effective Java, Joshua Bloch
  • Java. Библиотека профессионала – Кей С. Хорстманн
  • Книга «Kotlin. Программирование для профессионалов»
  • Cracking the Coding InterviewКнига, Гейл Лаакманн Макдауэлл

На этом все, желаю удачи