Какие вопросы задают на собеседовании Android-разработчику

Перечисляем важные темы и даём практические советы
3 минуты16324

Привет! Меня зовут Александр, я декан факультета Android-разработки GeekBrains. За всё время в разработке под Android (а это уже больше шести лет) я прошёл множество собеседований и сам провёл не меньше. А также обсуждал собеседования, которые проходили или проводили коллеги, некоторым помогал подготовиться к встречам.

В этом посте я хочу поделиться опытом — рассказать, какие вопросы обычно задают на собеседовании. Бонусом в конце статьи я прикреплю список вопросов, который сам использую в качестве памятки для проведения интервью. Список довольно обширный, но это не значит, что я обязательно спрошу обо всём. Часто я задаю дополнительные вопросы по ходу собеседования, но в целом интервью не занимает больше часа.

На собеседовании может быть разное количество человек, но чаще всего это один-два разработчика. Иногда в начале присутствует представитель отдела кадров, который всех знакомит и рассказывает о компании. В крупных компаниях, бывает, собирается целая делегация: HR, пара разработчиков, тимлид, проджект-менеджер… Само собеседование условно делится на четыре части:

  1. Знакомство: 5–10 минут на представление собеседников, рассказ о компании и команде, пара слов о сфере деятельности.
  2. Проверка теоретических знаний: 40–60 минут вопросов по языку, платформе, библиотекам и т. п.
  3. Проверка практических навыков: 15–30 минут кодинга на расшаренном экране. Но такое встречается примерно в одном собеседовании из десяти, обычно хватает простого общения без кода.
  4. Вопросы соискателя (если есть): 5–10 минут.

Мы с вами подробно поговорим о второй и третьей частях собеседования. Сначала идут простые разминочные вопросы по языку программирования. Часто бывают уточнения к уже заданным — это помогает понять глубину знаний в определённой области. Постепенно вопросы усложняются. Ниже наиболее частые темы и вопросы, на которые мне приходилось отвечать.

Java

  • класс Object и описание его методов;
  • Garbage collector и работа с памятью;
  • коллекции в Java: 
  • какие бывают коллекции;
  • чем отличается Map от остальных;
  • отличия ArrayList от LinkedList;
  • как работает Map под капотом;
  • что такое Array;
  • как работает ArrayList под капотом;
  • как коллекции работают с многопоточностью.
  • многопоточность:
    • какие способы асинхронной работы есть в Java;
    • volatile;
    • synchronized;
    • lock, reentrantLock;
    • Semaphore, CountDownLatch, CyclicBarrier, Phaser, Exchanger;
    • с какими проблемами может столкнуться разработчик: deadlock, livelock.
  • ошибки в Java;
  • сериализация, transient;
  • рефлексия;
  • дженерики.

Kotlin

  • Extension functions;
  • Inline functions;
  • свойства properties: методы get и set;
  • ключевые слова object, data class, lazy, companion object;
  • корутины.

По Kotlin задают не очень много вопросов, потому что Java покрывает большинство ответов: эти языки работают по схожим принципам. Но баланс, скорее всего, будет сдвигаться в сторону Kotlin.

Android

  • принципы SOLID и чистая архитектура;
  • активити и методы жизненного цикла, onSaveInstanceState/onRestoreInstanceState;
  • фрагмент и методы жизненного цикла;
  • контекст;
  • сервисы;
  • Broadcast Receiver;
  • интенты;
  • Handler/Looper;
  • AsyncTask;
  • что такое процесс;
  • Inter Process Communication;
  • сериализация и парселизация;
  • view: жизненный цикл, кастомные view;
  • Flavours/Builds;
  • архитектура MVP и MVVM;
  • многомодульность;
  • что такое OkHttp и зачем он нужен;
  • RxJava:
    • Hot и Cold observables;
    • разница между map и flatMap;
    • как создавать Observable;
    • разница между RxJava 1 и RxJava 2;
    • что такое BackPressure.
  • Dagger 2:
    • аннотация Named;
    • скоупы в Dagger 2.

Проверка навыков программирования происходит нечасто. Обычно кандидату дают какой-либо сайт, где можно писать псевдокод прямо в окне браузера. Его видят обе стороны собеседования. Часто дают небольшие задачи по сортировке элементов в списке или получению того или иного элемента. Вот что нужно, чтобы подготовиться к таким задачам:

  • тренироваться в ветвлениях и условиях;
  • знать, что такое предикат;
  • знать основные методы пакетов Colleсtions, Array, которые работают с преобразованием коллекций и сортировкой;
  • решать задачи на алгоритмы и сортировки.

Все задачи обычно очень разные, но при этом достаточно типовые. Для приобретения навыка их решения можно просто тренироваться на одном из множества сайтов, которые предлагают задачи к решению и содержат ответы. По одной задаче в день в течение месяца будет достаточно, чтобы освоиться.

Практические советы

Я рекомендую составить карту памяти или памятку/шпаргалку, по которой вы будете быстро вспоминать, что недавно читали. Так удобнее готовиться к интервью (см. бонус №2 в конце статьи).

Для лучшего запоминания ответов и концепций можно использовать Anki. Это ресурс, которым я и сам пользуюсь. На каждую задачу нужно завести карточку с вопросом и ответом. Anki вам задаёт эти вопросы с определённой периодичностью, пока вы не запомните ответы. Каждый день — новый вопрос из вашей коллекции. Anki есть на десктопе, также предусмотрена мобильная версия. Чтобы карточки синхронизировались во всех приложениях, на ресурсе нужно зарегистрироваться.

Если не знаете ответ на какой-либо вопрос — отвечайте на знакомую смежную тему или расскажите то, что знаете по теме. Например: «Я не уверен, что помню ответ на этот вопрос, но вот тут это делается так...». Не стоит говорить «Я не знаю/не помню», потому что это очень хорошо запомнит собеседующий. Если вы совсем не знаете тему, лучше просто порассуждайте вслух, предположите что-то на основе своих знаний — это покажет, что вы склонны к размышлению и поиску ответа.

Бонус № 1. Мой список вопросов

Java Core:

  • OOP;
  • Class Object;
  • Reference; 
  • Garbage collector;
  • Error/Exception; 
  • Collections;
  • Network: URL, urlconnection, json, xml;
  • Generics/wildcards;
  • Reflection;
  • Enum;
  • Java.util.concurrent (Thread, Runnable, Executor, Future, Synchronized, Volatile, Synchronized collections) и всё, что связано с асинхронной работой в Java: Lesson: Concurrency (The Java™ Tutorials > Essential Classes).

Kotlin:

  • Extension functions;
  • Null Safety;
  • Inline functions;
  • Delegates;
  • Sequences;
  • Sealed classes;
  • Unit, Any, Nothing.

Android:

  • Mafinest;
  • Intent & Intent Filters;
  • Serialization/parcelization;
  • Android tasks and backstack; 
  • Notifications;
  • Permissions;
  • Resources;
  • Styles and Themes;
  • RecyclerView;
  • Custom views and animation;
  • Service (IBinder, Message Handler);
  • IPC/AIDL;
  • ContentProvider;  
  • BroadcastReceiver ;
  • Activity;
  • Fragment;
  • Handler/Looper;
  • Context;
  • всё, что связано с асинхронной работой в Android + сколько есть способов выполнения асинхронной работы в Android;
  • Android architecture components;
  • MVP/MVVM.

Common:

  • Patterns (GoF);
  • DI;
  • Git;
  • Gradle + Flavours/Builds.

Бонус № 2

И, наконец, карты памяти для Android-разработчика. Предлагаю не одну, а две — выберите самую удобную. Удачи!

программированиеandroid
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!
Posts popup