А ты готов?! Или о том, как удачно пройти собеседование на позицию Android developer…

Veselina Zatsepina
6 min readAug 13, 2019

--

Шпаргалка для собеседования

Статья состоит из 3-х частей.

В первой части «ПОДГОТОВКА» вы найдете информацию о процессе подготовки к собеседованию, во второй «ВОПРОСЫ» я расскажу о вопросах и задачах с которыми столкнулась в процессе прохождения собеседований, а в третьем разделе «СОВЕТЫ» вы сможете найти общие советы на тему «к чему готовиться» и «чего ожидать». Что ж, надеюсь, статья будет полезной…Начнём… буду писать кратко и по делу:)

P.S.: Советы по «ПОДГОТОВКЕ» являются лишь рекомендациями…если для вас это не актуально — просто переходите к пункту 2 «ВОПРОСЫ».

Часть первая: «ПОДГОТОВКА»

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

Например:

Эказаменатор: «Чем отличается Flowable от Observable?»

Я: «Ну Flowable поддерживает backpressure с помощью стратегий, а Observable нет.»

Эказаменатор: «А что за стратегии?»

Я: «Зачем я это сказала…»

Либо говорите чётко без лишних терминологий и, возможно, вас не спросят… либо умело этим пользуйтесь) И тогда есть шанс направить «экзаменатора» в нужное русло:) там, где вы чувствуете себя уверенно.

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. Операторы: map, flatMap, concatMap, switchMap — для чего и в чем отличия?
  3. Операторы: from, just — для чего и в чем отличия?;
  4. Операторы: doOnNext, …Error и так далее — для чего?;
  5. Observable vs Flowable;
  6. Flowable: стратегии работы с backpressure;
  7. Single, Completable, Maybe — случаи использования;
  8. Операторы: defer, groupBy, debounce, combineLatest, withLatestFrom, merge, concat, zip, switchOnNext — как работают?
  9. Операторы: observeOn(), subscribeOn() — как работают?
  10. Типы Subjects;
  11. Типы Processors;
  12. Виды Schedulers;
  13. Как работает связка операторов publish и connect;

Android:

  1. Launch Modes for activity (standart, singleTop, singleTask, singleInstance);
  2. Intent flags для запуска activity (FLAG_ACTIVITY_NEW_TASK, FLAG_ACTIVITY_SINGLE_TOP, FLAG_ACTIVITY_CLEAR_TOP);
  3. Что такое ContentProvider?
  4. Типы сервисов (запущенный, привязанный, IntentService), их отличия и жизненные циклы;
  5. Handler, Looper, MessageQueue — как это всё работает вместе;
  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. MVC, MVP, MVVM, MVI — рассказать общие принципы;
  13. Clean architecture — рассказать общие принципы;
  14. MVP vs MVVM (отличия);
  15. Dagger 2 (модули, компоненты, сабкомпоненты, скоупы, binds vs provides, named);
  16. Doze Mode — что это?
  17. LiveData (value vs postValue, active() vs onInactive(), MediatorLiveData);
  18. ViewModel — рассказать общие принципы;
  19. Room — рассказать общие принципы;
  20. Moxy — рассказать общие принципы;
  21. Realm — рассказать общие принципы;
  22. Метод invalidate() in view — как работает?
  23. ValueAnimator, ObjectAnimator — рассказать общие принципы;
  24. Paging library — виды пагинации;
  25. Zygote — что это и как работает?
  26. Bundle что туда можно положить?
  27. Spannable — для чего используется?
  28. Context activity vs application context;
  29. Что прописываем в манифесте?
  30. setRetainInstance in fragment — что даёт?
  31. AsyncTask — для чего и какие имеет недостатки?

General:

  1. Thread pool vs creating your own threads;
  2. Принципы ООП;
  3. SOLID;
  4. Паттерны проектирования (статья на все времена -> https://habr.com/ru/company/mailru/blog/325492/);
  5. POST vs GET запросы;
  6. Lru Cache — рассказать общие принципы;
  7. Сложность алгоритмов — определение и виды;
  8. Git flow — рассказать общие принципы;
  9. Сложности вставки и поиска в ArrayList, LinkedList, HasMap;
  10. Виды сортировок — просто перечислить;
  11. Принципы функционального программирования;

ЗАДАЧИ:

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

Поехали дальше…

Часть третья: «СОВЕТЫ»

  1. Будьте готовы к курьезным случаям… и не злитесь на бедных эйчаров, помогайте им:)

Пример:

HR: «Добрый день! Я ищу Android developer в проект заказчика. У них всё на Java. Интересно?»

Я: «Добрый день! А на Kotlin не планируется переходить?»

HR: «Я перезвоню — узнаю»

Я: «Окей»

Перезванивает

HR: «К сожалению переход на Kotlin не планируется. У них все на «нативе» написано.»

// Я подозреваю что-то неладное…

Я: «В смысле на ReactNative?»

HR: «Да»

Я: «Может вам нужен JavaScript?»

HR: « Java…JavaScript…а это не одно и то же?»

Занавес… Я подробно объяснила разницу в терминологиях и мы закончили разговор на позитивной ноте:)

Продолжаем…

2. Если Вам грубят на собеседовании — уходите! Я пару раз сталкивалась с откровенной грубостью и.. уходила… не тратьте свое драгоценное время на нехороших людей!

3. Затягивают сроки с фидбэками… ищите другую компанию. Скорее всего вам назначили статус «on hold». И даже пройдя все этапы вы вряд ли получите оффер;

4. Если ЗП стоит от 200 000 руб., то в большинестве случаве это до 200 000 и при этом до вычета налогов. Уточняйте зарплатную вилку!

5. Выполянйте тестовое задание только лишь тогда, когда оно полезно вам. Не сталкивались с многомодульными архитектурами? А задание выпало именно на эту тематику? Обязательно сделайте! И попросите фидбэк) А если снова «ответ запроса в апишку отобразите в списке…» даже не беритесь!

6. Выучите как «Отче наш» HashMap, flatMap, SOLID!!!!!

7. Разминайтесь на «простых» компаниях потом переходите к «куда хочу»;

8. Обязательно посмотрите рабочее место, спросите как трекают рабочее время, какое железо дают! Обязательно!

9. И в конце концов просто слушайте свое сердце! Задайте себе вопрос: «Захочу ли я приходить в эту компанию каждый день?»;

Ну вот и всё! Всем спасибо за внимание!

И успехов!:)

--

--