Привет! Меня зовут Александр, я декан факультета Android-разработки GeekBrains. За всё время в разработке под Android (а это уже больше шести лет) я прошёл множество собеседований и сам провёл не меньше. А также обсуждал собеседования, которые проходили или проводили коллеги, некоторым помогал подготовиться к встречам.
В этом посте я хочу поделиться опытом — рассказать, какие вопросы обычно задают на собеседовании. Бонусом в конце статьи я прикреплю список вопросов, который сам использую в качестве памятки для проведения интервью. Список довольно обширный, но это не значит, что я обязательно спрошу обо всём. Часто я задаю дополнительные вопросы по ходу собеседования, но в целом интервью не занимает больше часа.
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Скачивайте и используйте уже сегодня:
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
На собеседовании может быть разное количество человек, но чаще всего это один-два разработчика. Иногда в начале присутствует представитель отдела кадров, который всех знакомит и рассказывает о компании. В крупных компаниях, бывает, собирается целая делегация: HR, пара разработчиков, тимлид, проджект-менеджер… Само собеседование условно делится на четыре части:
- Знакомство: 5–10 минут на представление собеседников, рассказ о компании и команде, пара слов о сфере деятельности.
- Проверка теоретических знаний: 40–60 минут вопросов по языку, платформе, библиотекам и т. п.
- Проверка практических навыков: 15–30 минут кодинга на расшаренном экране. Но такое встречается примерно в одном собеседовании из десяти, обычно хватает простого общения без кода.
- Вопросы соискателя (если есть): 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-разработчик» до 22 декабря
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-разработчика. Предлагаю не одну, а две — выберите самую удобную. Удачи!