Как успешно пройти собеседование Android-разработчику?
Рассказывает Александр Аникин, декан факультета Android-разработки GeekBrains:
За всё время в разработке под Android я прошёл множество собеседований и сам провёл не меньше. А также обсуждал собеседования, которые проходили или проводили коллеги, некоторым помогал подготовиться к встречам.
В этом посте я хочу поделиться опытом — рассказать, какие вопросы обычно задают на собеседовании. Бонусом в конце статьи я прикреплю список вопросов, который сам использую в качестве памятки для проведения интервью. Список довольно обширный, но это не значит, что я обязательно спрошу обо всём. Часто я задаю дополнительные вопросы по ходу собеседования, но в целом интервью не занимает больше часа.
На собеседовании может быть разное количество человек, но чаще всего это один-два разработчика. Иногда в начале присутствует представитель отдела кадров, который всех знакомит и рассказывает о компании. В крупных компаниях, бывает, собирается целая делегация: HR, пара разработчиков, тимлид, проджект-менеджер… Само собеседование условно делится на четыре части:
- Знакомство: 5–10 минут на представление собеседников, рассказ о компании и команде, пара слов о сфере деятельности.
- Проверка теоретических знаний: 40–60 минут вопросов по языку, платформе, библиотекам и т. п.
- Проверка практических навыков: 15–30 минут кодинга на расшаренном экране. Но такое встречается примерно в одном собеседовании из десяти, обычно хватает простого общения без кода.
- Вопросы соискателя (если есть): 5–10 минут.
[spacing size=”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;
- рефлексия;
- дженерики.
[spacing size=”12″]
Kotlin
- Extension functions;
- Inline functions;
- свойства properties: методы get и set;
- ключевые слова object, data class, lazy, companion object;
- корутины.
[spacing size=”10″]
По Kotlin задают не очень много вопросов, потому что Java покрывает большинство ответов: эти языки работают по схожим принципам. Но баланс, скорее всего, будет сдвигаться в сторону Kotlin.
[spacing size=”12″]
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.
[spacing size=”14″]
Проверка навыков программирования происходит нечасто. Обычно кандидату дают какой-либо сайт, где можно писать псевдокод прямо в окне браузера. Его видят обе стороны собеседования. Часто дают небольшие задачи по сортировке элементов в списке или получению того или иного элемента. Вот что нужно, чтобы подготовиться к таким задачам:
- тренироваться в ветвлениях и условиях;
- знать, что такое предикат;
- знать основные методы пакетов Colleсtions, Array, которые работают с преобразованием коллекций и сортировкой;
- решать задачи на алгоритмы и сортировки.
[spacing size=”12″]
Все задачи обычно очень разные, но при этом достаточно типовые. Для приобретения навыка их решения можно просто тренироваться на одном из множества сайтов, которые предлагают задачи к решению и содержат ответы. По одной задаче в день в течение месяца будет достаточно, чтобы освоиться.
[spacing size=”40″]
Начни карьеру разработчика с нуля за 1 месяц
Три интенсивных онлайн-курса
“Разработка под Android”
Вы освоите Android-разработку и сделаете свое первое приложение.
Оплата в рассрочку.
[spacing size=”50″]
Практические советы
Я рекомендую составить карту памяти или памятку/шпаргалку, по которой вы будете быстро вспоминать, что недавно читали. Так удобнее готовиться к интервью.
Если не знаете ответ на какой-либо вопрос — отвечайте на знакомую смежную тему или расскажите то, что знаете по теме.
Например: «Я не уверен, что помню ответ на этот вопрос, но вот тут это делается так…». Не стоит говорить «Я не знаю/не помню», потому что это очень хорошо запомнит собеседующий. Если вы совсем не знаете тему, лучше просто порассуждайте вслух, предположите что-то на основе своих знаний — это покажет, что вы склонны к размышлению и поиску ответа.
Бонус. Мой список вопросов
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.
[spacing size=”12″]
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.
[spacing size=”12″]
Common:
- Patterns (GoF);
- DI;
- Git;
- Gradle + Flavours/Builds
[spacing size=”20″]
[spacing size=”20″]
Реклама. Информация о рекламодателе по ссылкам в статье.