- 18 вопросов для собеседования с Android разработчиком
- Хотите нанять разработчика Android? Если вы сами не являетесь разработчиком Android, или если вы предприниматель или основатель стартапа, который впервые решает заняться подбором ит персонала, знать, о чем спросить, может быть проблемой.
- Какие вопросы задают на собеседовании Android-разработчику
- Kotlin
- Android
- Практические советы
- Бонус № 1. Мой список вопросов
- Бонус № 2
- Kotlin
- Android
- Практические советы
- Бонус № 1. Мой список вопросов
- Бонус № 2
18 вопросов для собеседования с Android разработчиком
Хотите нанять разработчика Android? Если вы сами не являетесь разработчиком Android, или если вы предприниматель или основатель стартапа, который впервые решает заняться подбором ит персонала, знать, о чем спросить, может быть проблемой.
Разработчики Android несут ответственность за разработку и улучшение мобильных приложений на платформе Android. Во время собеседования вы можете сосредоточиться на портфолио ваших кандидатов и прошлом опыте, чтобы определить тех, кто может повысить ценность вашей компании, внедряя инновационные идеи. Вы также можете использовать эти вопросы вместе с заданием, чтобы проверить способность кандидатов писать функциональный код и разрабатывать удобные для пользователя приложения.
Мы поделимся 18 вопросами и ответами на собеседование по Android, которые станут для вашего кандидата хорошей проверкой, а также получим полезное представление об их отношении к разработке Android.
18 вопросов для собеседования с Android разработчиком
1. В чем разница между неявным и явным намерением?
Явное намерение , где вы сообщаете систему, активность или компонент системы, который следует использовать , чтобы реагировать на это намерение. Неявные намерения позволяют вам объявить действие, которое вы хотите выполнить; Затем система Android проверит, какие компоненты зарегистрированы для обработки этого действия.
Здесь вы ищете понимание того, когда следует использовать каждый тип намерения, поскольку в подавляющем большинстве случаев вы будете использовать явные намерения для запуска компонентов в собственном приложении, в то время как неявные намерения чаще всего используются для связи с компоненты из сторонних приложений.
2. Когда следует использовать фрагмент, а не действие?
Это все еще очень обсуждаемая тема, но код, используемый для создания Activity, существенно более сложен, чем код, используемый для создания фрагмента. Старое действие должно быть уничтожено, приостановлено или остановлено, а новое действие должно быть создано. Разработчик должен признать, что лучше всего использовать Activity только тогда, когда вам нужно поменять местами весь экран, и использовать фрагменты повсюду.
Бонусные баллы, если разработчик Android упоминает любой из следующих вариантов использования, в которых вы почти всегда будете использовать фрагмент, а не действие:
- Когда вы работаете с компонентами пользовательского интерфейса или поведением, которое вы собираетесь использовать в нескольких Activity.
- Когда вы используете один из методов навигации, которые тесно связаны с фрагментами, например, прокрутки.
- Когда вашим пользователям будет полезно видеть два разных макета рядом.
- Когда у вас есть данные, которые должны сохраняться при перезапусках Activity (т.е. вам нужно использовать сохраненные фрагменты).
3. Вы заменяете один фрагмент другим — как обеспечить, чтобы пользователь мог вернуться к предыдущему фрагменту, нажав кнопку «Назад»?
Этот вопрос дает представление о том, как разработчик приложения понимает жизненный цикл динамических фрагментов, а также транзакций фрагментов и обратного стека.
Если кнопка «Назад» вернет пользователя к предыдущему фрагменту, тогда вам нужно будет сохранять каждую транзакцию фрагмента в задний стек, вызывая эту транзакцию addToBackStack()перед вами commit().
Разработчик определенно не должен предлагать создавать кнопку «Назад» специально для управления перемещением между фрагментами, но бонусные баллы, если они упоминают, что вы никогда не должны пытаться зафиксировать FragmentTransaction после вызова onSaveInstanceState(), так как это может привести к исключению.
4. Как бы вы могли создать многопоточное приложение для Android без использования класса Thread?
Если вам нужно только переопределить run()метод, а не другие методы Thread, вам следует реализовать Runnable.
В частности, на смотровой для андроида разработчика , демонстрирующего понимание того, что вы должны только расширить из класса , когда вам нужно изменить некоторые из его функциональных возможностей .
5. Что такое пул потоков? И действительно ли это более эффективно, чем использование нескольких отдельных потоков?
ThreadPool состоит из очереди задач и группы рабочих потоков, что позволяет ему запускать несколько параллельных экземпляров задачи.
Здесь вы оцениваете понимание разработчиком приложения того, как многопоточность может улучшить производительность приложения, а также как она может отрицательно повлиять на производительность при неправильном использовании.
Использование ThreadPool более эффективно, чем ожидание выполнения нескольких операций в одном потоке, но оно также помогает избежать значительных накладных расходов на создание и уничтожение потока каждый раз, когда вам требуется рабочий поток.
6. Какая связь между жизненным циклом AsyncTask и жизненным циклом Activity? К каким проблемам это может привести и как их избежать?
AsyncTask не связан с жизненным циклом деятельности , который его содержит. Если Activity уничтожается и создается новый экземпляр Activity, AsyncTask не будет уничтожен. Это может привести к ряду проблем, но основные из них, о которых должен знать разработчик Android:
После завершения AsyncTask он попытается обновить предыдущий экземпляр Activity, что приведет к исключению IllegalArgumentException.
Поскольку AsyncTask поддерживает ссылку на предыдущий экземпляр Activity, это Activity не будет собираться мусором, что приведет к утечке памяти.
Решение состоит в том, чтобы избегать использования AsyncTasks для длительных фоновых задач.
7. Как бы вы могли получить доступ к данным в ContentProvider?
Для начала убедитесь, что у вашего приложения Android есть необходимые разрешения на чтение. Затем получите доступ к объекту ContentResolver, вызвав getContentResolver()объект Context и получив данные, создав запрос с использованием ContentResolver.query().
ContentResolver.query()Метод возвращает курсор, так что вы можете получить данные из каждого столбца с использованием методов управления курсором.
Доступ к данным — одна из задач, которая, скорее всего, заблокирует основной поток, поэтому разработчик должен подчеркнуть важность выполнения запросов к данным в отдельном потоке.
8. В чем разница между Serializable и Parcelable?
Serializable — это стандартный интерфейс Java, который легко интегрировать в ваше приложение, поскольку он не требует никаких методов. Несмотря на простоту реализации, Serializable использует API отражения Java, что делает его медленным процессом, создающим множество временных объектов.
Parcelable оптимизирован для Android, поэтому он быстрее, чем Serializable. Он также полностью настраивается, поэтому вы можете четко указать процесс сериализации, что приведет к уменьшению количества мусорных объектов.
Хотя разработчик может признать, что реализация Parcelable требует дополнительной работы, преимущества в производительности означают, что им следует рекомендовать использовать Parcelable вместо сериализации, где это возможно.
9. Что такое адаптер?
Здесь вы проверяете, понимает ли разработчик Android, что вам нужен дополнительный компонент для подключения AdapterView (например, ListView или GridView) к внешнему источнику данных. Адаптер действует как этот мост, а также отвечает за преобразование каждой записи данных в представление, которое затем можно добавить в AdapterView.
10. Что такое ошибка приложения «Не отвечает» (ANR) и как предотвратить ее появление в своем приложении?
Этот вопрос проверяет, знает ли разработчик о золотом правиле многопоточности в Android: никогда не выполняйте длительные или интенсивные операции с основным потоком.
Диалоговое окно ANR появляется, если ваш пользовательский интерфейс не отвечает более 5 секунд, обычно из-за того, что вы заблокировали основной поток. Чтобы избежать ошибок ANR, вам следует перенести как можно больше работы из основного потока.
11. Опишите процесс создания пользовательских представлений.
Это сложная тема, поэтому вам нужен только общий обзор необходимых шагов. Однако разработчик должен прояснить, что вы всегда должны создавать подкласс View, который больше всего похож на настраиваемый компонент, который вы хотите создать — очень редко вы расширяете класс View.
После расширения класса вам необходимо выполнить следующие шаги:
- Создайте файл res / values / attrs.xml и объявите атрибуты, которые вы хотите использовать в своем пользовательском представлении.
- В своем классе View добавьте метод конструктора, создайте экземпляр объекта Paint и получите свои настраиваемые атрибуты.
- Заменить либо onSizeChanged()или onMeasure().
- Нарисуйте свой вид, переопределив onDraw().
12. Что такое BuildType в Gradle? И для чего это можно использовать?
Типы сборки определяют свойства, которые Gradle использует при создании и упаковке вашего Android-приложения.
Этот вопрос позволяет вам проверить, может ли разработчик различать разновидности продукта, варианты сборки и типы сборки, поскольку это очень похожие концепции, которые часто вызывают путаницу:
Тип сборки определяет, как создается модуль, например, запускается ли ProGuard.
Аромат продукта определяет, что создается , например, какие ресурсы включены в сборку.
Gradle создает вариант сборки для всех возможных комбинаций вкусов и типов сборки вашего проекта.
13. В чем основное различие между ListView и RecyclerView?
Между ListView и RecyclerView есть много различий , но разработчик Android должен знать, в частности, следующее:
- Шаблон ViewHolder не является обязательным в ListView, но он встроен в RecyclerView.
- ListView поддерживает только вертикальную прокрутку, но RecyclerView не ограничивается списками с вертикальной прокруткой.
14. Кратко опишите некоторые способы оптимизации использования представления.
Существует несколько методов, но наиболее эффективными являются следующие:
- Проверка на чрезмерную перегрузку : установите приложение на устройство Android, а затем включите параметр «Обзор отладки графического процессора».
- Сглаживание иерархии представлений : проверьте иерархию представлений с помощью инструмента Android Studio «Просмотр иерархии».
- Измерение времени, необходимого каждому представлению для выполнения этапов измерения, макета и рисования. Вы также можете использовать Hierarchy Viewer, чтобы определить любые части конвейера рендеринга, которые необходимо оптимизировать.
15. Для чего обычно используется Handler?
Вы используете Handler для связи между потоками, чаще всего для передачи действия из фонового потока в основной поток Android.
Этот вопрос позволяет вам проверить, понимает ли разработчик еще одну фундаментальную концепцию многопоточности в Android: вы не можете обновлять пользовательский интерфейс из любого потока, кроме основного.
16. Какие шаги необходимы для создания связанной службы с помощью языка определения интерфейса Android (AIDL)?
Определите интерфейс AIDL в файле .aidl.
Сохраните этот файл в каталоге src / приложения, в котором размещается Activity, и любого другого приложения, которое необходимо привязать к этой службе — последнее особенно важно и часто игнорируется.
Создайте свое приложение. Инструменты Android SDK затем сгенерируют файл интерфейса IBinder в вашем каталоге gen.
Реализуйте этот интерфейс, расширив сгенерированный интерфейс Binder и реализовав методы, унаследованные от файла .aidl.
Расширьте Service и переопределите, onBind()чтобы вернуть вашу реализацию класса-заглушки.
17. В чем разница между onCreate () и onStart ()?
Метод onCreate () вызывается один раз в течение жизненного цикла Activity, либо при запуске приложения, либо когда Activity было уничтожено, а затем воссоздано, например, во время изменения конфигурации.
Метод onStart () вызывается всякий раз, когда Activity становится видимым для пользователя, обычно после onCreate()или onRestart().
18. Когда можно использовать FrameLayout?
Здесь вы хотите понять, что вы всегда должны использовать максимально простой макет для того, чего вы хотите достичь, поскольку FrameLayouts предназначены для содержания одного элемента, что делает их эффективным выбором, когда вам нужно отображать одно представление.
Если вы добавляете несколько представлений в FrameLayout, они складываются друг над другом, поэтому FrameLayouts также полезны, если вам нужны перекрывающиеся представления, например, если вы реализуете наложение или элемент HUD.
Завершите собеседование с разработчиками Android
Технические собеседования и просмотры являются важной частью найма разработчика приложения, будь то разработчик Android, разработчик iOS или любой разработчик мобильных приложений, знакомый с созданием приложений для обеих операционных систем. С помощью этих вопросов для собеседования вы сможете должным образом проверить технические навыки ваших кандидатов в разработке Android, даже если вы не знакомы с этой технологией.
Источник
Какие вопросы задают на собеседовании Android-разработчику
Привет! Меня зовут Александр, я декан факультета Android-разработки GeekBrains. За всё время в разработке под Android (а это уже больше шести лет) я прошёл множество собеседований и сам провёл не меньше. А также обсуждал собеседования, которые проходили или проводили коллеги, некоторым помогал подготовиться к встречам.
В этом посте я хочу поделиться опытом — рассказать, какие вопросы обычно задают на собеседовании. Бонусом в конце статьи я прикреплю список вопросов, который сам использую в качестве памятки для проведения интервью. Список довольно обширный, но это не значит, что я обязательно спрошу обо всём. Часто я задаю дополнительные вопросы по ходу собеседования, но в целом интервью не занимает больше часа.
На собеседовании может быть разное количество человек, но чаще всего это один-два разработчика. Иногда в начале присутствует представитель отдела кадров, который всех знакомит и рассказывает о компании. В крупных компаниях, бывает, собирается целая делегация: HR, пара разработчиков, тимлид, проджект-менеджер… Само собеседование условно делится на четыре части:
- Знакомство: 5–10 минут на представление собеседников, рассказ о компании и команде, пара слов о сфере деятельности.
- Проверка теоретических знаний: 40–60 минут вопросов по языку, платформе, библиотекам и т. п.
- Проверка практических навыков: 15–30 минут кодинга на расшаренном экране. Но такое встречается примерно в одном собеседовании из десяти, обычно хватает простого общения без кода.
- Вопросы соискателя (если есть): 5–10 минут.
Мы с вами подробно поговорим о второй и третьей частях собеседования. Сначала идут простые разминочные вопросы по языку программирования. Часто бывают уточнения к уже заданным — это помогает понять глубину знаний в определённой области. Постепенно вопросы усложняются. Ниже наиболее частые темы и вопросы, на которые мне приходилось отвечать.
- класс 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:
Бонус № 2
И, наконец, карты памяти для Android-разработчика. Предлагаю не одну, а две — выберите самую удобную. Удачи!
Привет! Меня зовут Александр, я декан факультета Android-разработки GeekBrains. За всё время в разработке под Android (а это уже больше шести лет) я прошёл множество собеседований и сам провёл не меньше. А также обсуждал собеседования, которые проходили или проводили коллеги, некоторым помогал подготовиться к встречам.
В этом посте я хочу поделиться опытом — рассказать, какие вопросы обычно задают на собеседовании. Бонусом в конце статьи я прикреплю список вопросов, который сам использую в качестве памятки для проведения интервью. Список довольно обширный, но это не значит, что я обязательно спрошу обо всём. Часто я задаю дополнительные вопросы по ходу собеседования, но в целом интервью не занимает больше часа.
На собеседовании может быть разное количество человек, но чаще всего это один-два разработчика. Иногда в начале присутствует представитель отдела кадров, который всех знакомит и рассказывает о компании. В крупных компаниях, бывает, собирается целая делегация: HR, пара разработчиков, тимлид, проджект-менеджер… Само собеседование условно делится на четыре части:
- Знакомство: 5–10 минут на представление собеседников, рассказ о компании и команде, пара слов о сфере деятельности.
- Проверка теоретических знаний: 40–60 минут вопросов по языку, платформе, библиотекам и т. п.
- Проверка практических навыков: 15–30 минут кодинга на расшаренном экране. Но такое встречается примерно в одном собеседовании из десяти, обычно хватает простого общения без кода.
- Вопросы соискателя (если есть): 5–10 минут.
Мы с вами подробно поговорим о второй и третьей частях собеседования. Сначала идут простые разминочные вопросы по языку программирования. Часто бывают уточнения к уже заданным — это помогает понять глубину знаний в определённой области. Постепенно вопросы усложняются. Ниже наиболее частые темы и вопросы, на которые мне приходилось отвечать.
- класс 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:
Бонус № 2
И, наконец, карты памяти для Android-разработчика. Предлагаю не одну, а две — выберите самую удобную. Удачи!
Источник