Android junior тестовое задание

Вопросы и задачи с собеседований на Android разработчика

В прошлом посте я подробно описал процесс поиска работы в Берлине. В течение этого процесса я сталкивался с вопросами, алгоритмическими задачками и Code challenge. В этом посте я распишу свой опыт в этом деле.

Вопросы

После каждого интервью я записывал вопросы, которые удалось вспомнить. Привожу полный список. Ответы не даю, потому что не знаю, правильно ли я отвечал.

Архитектура, паттерны

  • Какие паттерны знаете?
  • Считаете ли вы Singleton антипаттерном?
  • Опишите принципы MVP. Какие еще есть похожие MV*, в чем разница между ними?
  • Объясните принцип DI
  • Объясните принципы SOLID
  • Объясните принципы Clean Architecture

Android

  • Как можно выявить проблемы в скорости UI и устранить их?
  • Какие проблемы были с использованием Dagger?
  • Приходилось ли использовать Guard?
  • Что такое multidex?
  • Приходилось ли сталкиваться с миграцией с Dalvik на новую технологию ART?
  • Начиная с какой версии пишете под Android? Какие были сложности с разницей версий?
  • Асинхронные механизмы загрузки в Android
  • В чем отличие AsyncTask от Thread?
  • Минусы AsyncTask
  • Опишите, что такое Activity
  • Чем Fagment отличается от Activity?
  • Разница между Service и IntentService. Пример использования Service.
  • Зачем нужен Headless fragment (без View и с setReatinInstance = true)? Приходилось ли использовать?
  • Какие новшества были в последней версии Android?
  • Как определяете, какой layout надо использовать для смартфона, а какой для планшета?
  • Как в коде определите: планшет это или смартфон?
  • Пример использования BroadcastReceiver
  • Опишите LifeCycle Activity
  • Отличия Serializable и Parcelable
  • Контракт hashcode и equals
  • Виды коллекций в Java: List, Set, Queue, Stack
  • Разница между ArrayList и LinkedList. В каком случае что лучше использовать?
  • Принцип работы HashMap и HashSet
  • Что такое Generic?
  • Когда используем bounded type: «T extends Class» и «T super Class»? Каковы их ограничения.
  • Отличия Abstract от Interface, когда какой лучше использовать?
  • Разница между pull и fetch
  • Разница между merge and rebase

Прочее

  • Минусы использования сторонних библиотек
  • Что вы будете делать, если ваше решение не совпадает с решением коллег или лида?
  • Какие свои качества работы в команде вы можете описать?
  • Если бы вы могли вернуться на 3-4 года назад, что бы вы изучали?
  • У вас есть команда, какие правила вы установите, чтобы писать тесты?
  • Какую книгу вы можете посоветовать? Необязательно про программирование.
  • Ваша жена не против релокации?

Алгоритмические задачки

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

  • Реализация merge сортировки из двух списков
  • Реверс массива
  • Из «abaaeba» получить (a: 4, b:2, e:1)
  • Реализация Set с помощью List (методы int count, boolean add, boolean remove)
  • Калькулятор, который парсит строки типа «1+2», «1 + 2 * 3 + 4» и возвращает вычисленное значение. Из операторов могут встречаться только + и *.
  • Написать Reentrant блокировку
  • Посмотреть код, где несколько потоков меняют одну Integer переменную. Сказать, какое значение получится в итоге. Предложить варианты исправления.
Читайте также:  Clubhouse как зарегистрироваться с андроида

Code challenge

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

Я убрал реальные адреса серверов из ссылок, чтобы не палить конторы.

1) Приложение, отображающее список сообщений

На сервере есть json файлы. До них можно добраться по ссылке: https:// /endpoint/.json, где PAGE — номер файла от 0 до какого-то произвольного числа, например, 15.

Каждый файл — это json массив из 50 сообщений. Сообщение содержит поля id, time и text.

Приложение должно загрузить сообщения с сервера и показать их в списке.

Юзер может удалить сообщение. Предпочтительно — свайпом, но можно и долгим нажатием.

При реализации можете добавлять фичи, чтобы показать свой уровень. Приветствуется чистый и тестируемый код.

  • постраничная подгрузка при скролле
  • кэширование, чтобы приложение при старте показывало ранее загруженные сообщения
  • некоторые сообщения в поле text вместо текста содержат ссылку на картинку, хорошо бы подгрузить и показать эту картинку

Срок выполнения — 5 дней. Про тесты ничего не сказано.

Я от себя добавил:

  • action mode, чтобы удалять сообщения
  • Retry кнопку, если была ошибка при загрузке данных
  • отдельный экран для просмотра сообщения из списка. Переход на экран был с анимацией Activity Transition. Картинка показывалась сначала из кэша в плохом качестве (как в списке), а затем грузилась полная версия.

2) Приложение с картой и поиском

Приложение должно найти и показать на карте 5 объектов, ближайших к вашей текущей локации.

Пример запроса: https:// /places/search?at=52.5311%2C13.3847&q=restaurant

В at передаем координаты своего местоположения, а в q — поисковый запрос. Результат приходит в json формате.

Результаты надо показать на карте. Можно использовать Google Maps. Но у этой компании было свое SDK для отображения карты, и я изучил и использовал его. Тем самым показал, что быстро могу разобраться в новом для себя SDK. При этом я заметил несколько вещей, которые можно было улучшить/исправить в SDK и на последующем собеседовании рассказал об этом.

Приоритет — качество. Про тесты ничего не сказано. Срок выполнения — неделя.

3) Приложение, отображающее список квартир.

По запросу на сервер приходит такой ответ:

items — список квартир. Для каждой квартиры указаны название, цена, локация, фото.

Необходимо в списке отобразить все полученные items. Каждая квартира должна показать первое из доступных фото, заголовок, цену и адрес. Примерный макет layout прилагался, но можно и что-то свое придумать.

Каждая квартира в списке может быть добавлена в избранное. Т.е. надо в layout квартиры добавить какую-то метку (например, звездочку), которая будет кликабельна и отобразит статус: в избранном или нет. Информация о том, что квартира добавлена в избранное, должна храниться локально. Т.е. после перезапуска приложения вы должны видеть, какие квартиры были отмечены

В приложении должен быть экран с картой, которая отображает локации всех квартир из списка.

Про тесты ничего не сказано. Срок выполнения — 5 дней.

Я все сделал и добавил несколько фич:

  • поддержка альбомной ориентации. В этом случае слева отображался список, а справа — карта.
  • нажатие на иконку в action bar покажет/скроет карту
  • нажатие на квартиру в списке центрирует ее на карту
  • и наоборот, нажатие на маркер квартиры на карте проскроллит список до этой квартиры
Читайте также:  Аналог obs для android

4) Выбор машины

Необходимо сделать что-то типа визарда для выбора автомобиля. На первом экране выбирается производитель (марка), на втором — модель, на третьем — год.

Соответственно, на сервере есть три метода, которые вам необходимо вызывать для получения этих данных.

— первый возвращает список производителей (id, name).

— второй принимает выбранный id из первого и возвращает список моделей этого производителя (name)

— третий метод принимает id из первого методы и name из второго и возвращает годы выпуска.

Первые два метода поддерживают постраничную подгрузку — у них есть параметры page и pageSize, и они возвращают totalPageCount.

Каждый экран должен отображать результаты выбора предыдущих экранов. Четвертый экран должен показать все, что в итоге было выбрано на предыдущих трех.

  • минимальный API — 16
  • постраничная загрузка на первом и втором экранах. Размер страницы — 15
  • идеально, если переход между экранами будет с анимацией
  • сделайте разные layout для четных и нечетных строк списка
  • поворот экрана должен работать без проблем

Опционально: на втором экране вместо постраничной загрузки грузите все сразу и добавьте текстовый фильтр по названию модели.

Вся работа по идее должна занять 5-6 часов, но они там понимают, что у вас есть дела/работа и вам дают неделю. Тесты писать необязательно, но если напишете, это будет большим плюсом.

5) Список разных данных

Надо собрать данные с двух разных API и отобразить их в одном списке.

1) Получить 50 репозиториев указанного юзера на github, используя GraphQL (https://developer.github.com/v4/)
2) Получить 50 фото с поиска Flickr. Там обычный json или xml (https://www.flickr.com/services/api/flickr.photos.search.html)

Вывести эти результаты в одном списке, чередуя друг с другом (репозиторий, картинка, репозиторий, картинка, . ).

Изначально экран не должен отображать данные. Есть только кнопка Load, по нажатию на которую начинается загрузка. Последующие нажатия на кнопку должны перезапускать загрузку.

Github данные должны отображаться просто как имя репозитория. Flickr данные должны отображаться как картинка. Нажатие на любой пункт списка должен перезапускать загрузку данных.

Можно писать на Kotlin. Про тесты ничего не сказано. Срок выполнения — 2 рабочих дня.

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

Для всех этих заданий я делал тесты. В качестве архитектуры использовал MVP, а в двух последних еще и Clean Architecture. По возможности старался сделать чуть больше, чем надо, и добавлял какие-то навороты и удобства. Но уложиться в срок и сделать все качественно и красиво — всегда было приоритетом.

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Google Android — это несложно

Добро пожаловать на форум сайта

Готовимся к собеседованию 2. Реальные задания.

Готовимся к собеседованию 2. Реальные задания.

Сообщение rezak90 » 03 сен 2013, 21:24

Re: Готовимся к собеседованию 2. Реальные задания.

Сообщение rezak90 » 03 сен 2013, 21:26

Читайте также:  Moments pro для андроид

GEO TASK (Android Junior)

Приложение состоит из 3х экранов
1. Сплеш (картинка с неоднородным фоном на весь экран)
2. Активити ввода начальной и конечной точки
Содержит:
а) 2 таба Откуда и Куда.
Внутри таба:
• Поле ввода для поиска при вводе геоенкодер определяет вариант и координаты (до 7 штук)
• Список найденных вариантов (видимы 3 шт остальное скролл). Клик по элементу выбирает его.
• Карта показывает место выбранного варианта на карте
б) Кнопка поиска пути. При нажатии переход
на Форму результата.
3. Форма результата:
Карта, смасштабированная таким образом что включает:
• Местоположение пользователя по геолокации
• Путь от точки Откуда в точку Куда, полученный с помошью прямого запроса (HTTP GET) к Google сервису DirectionsAPI (https://developers.google.com/maps/docu . irections/).
Ответ от DirectionsAPI принимаем в виде JSON. Нас интересуют только координаты детали пути не важны. Отрисовываем в виде Polyline черного цвета.
После получения ответа от сервиса выше карты пишем:
Found или Unknown в зависимости от ответа Google.

Общие требования:
Портрет и ландшафт
Разрещения от 480х800 до 1080х1920
Android 2.3 4.2
Желательно оформление в стиле Android 4.x (Actionbar etc)

Facebook Client (Android Junior)

Реализовать приложение, которое подключается к публичному API произвольной соц. сети (предпочтительно FB/VK) или к другому сервису, который может отдать данные для их последующего отображения.
Если сервис отдает данные с координатами (например, instagram/foursquare), сделать возможность отображения полученных данных на карте.

Приложение должно:
1. Выводить список друзей/follower/фотографов, с фотографиями и минимальным описанием.
2. Выполнять просмотр более детальной информации/списка фотографий.
3. Выполнять просмотр больших фотографий (фотографии должны кешироваться на устройстве).

Network Android Miner (Android Junior)

Описание:
Реализовать Android-игру Miner, которая позволяет играть двум людям по сети.

Требования к исполнению:
1. Java SE 6.0
2. Использование сторонних библиотек запрещено.
3. Ожидаемый результат: исходные коды, исполняемый/установочный apk-файл.
4. Ограничение работы программы по объёму используемой памяти – 32 М
5. Визульный интерфейс реализовывать с помощью стандартные компоненты Android
6. Работу по сети реализовывать с помощью пакета android.bluetooth.
7. Размер игрового поля конфигурируется(Допустимые значения: 32х32, 64х64, 128х128, 256х256)
8. Максимальное количество мин выставленных «Минером» не должно превышать половину количества игровых клеток на поле.

Постановка задачи:
1. Игра начинается с того, что один игрок создает Bluetooth-сервер в своем приложении. Второй игрок соединяется с первым.
2. После успешного соединения выпоняется пункт 3.
3. В приложении есть 2 кнопки: «Be a miner», «Be a sapper». Любой из игроков может выбрать себе соответствующую роль. Но 2 саперов или 2 минеров одновременно быть не может.
4. После выбора роли «Минер» игрок получает доступ к игровому полю(до этого оно должно быть неактивным) и может расставлять мины на свое усмотрение. Плюс в окне игры «Минера» пояляется кнопка «Finish setting of the mines»
5. В случае установки максимального количества мин на поле дожен выводится диалог «Reached maximum number of mines» и игра должна переходить к пункту 7.
6. После завершения установки мин игрок может нажать кнопку «Finish setting of the mines» и передать ход «Саперу», как результат активируется игровое в окне «Сапера».
7. Сапер приступает к игре, как в обыной игре «Сапер»
8. Условие победы «Сапера», если он открывает все мины, «Минера» в противоположном случае.
9. После завершения игры выводится диалог на оба устройства, приветствующий победившего игрока.

Источник

Оцените статью