| Обозначение | Уровень важности |
|---|---|
| (****) | Без изучения этого материала невозможно успешное прохождение темы |
| (***) | Материал, без которого сложно успешно завершить изучение темы |
| (**) | Важный материал, рекомендуемый к изучению |
| (*) | Полезная литература, улучшающая навыки |
Для ментора первостепенно понимать, сколько именно времени тратится на ту или иную задачу. Поэтому логирование времени осуществяется следующим образом.
- Логируем в саму задачу:
- Время, затраченное на выполнение практического задания;
- Время на прочтение теории, необходимой для выполнения практического задания;
- Логируем в Разработка/Прочая активность/Другое:
- Время, затраченное на ожидание проверки выполненного задания ментором;
- Время на прочтение прочей учебной литературы (список рекомендуемой литературы представлен в конце);
Программа обучения разделена на секции. Каждая секция состоит из
- Теоретической части;
- Базовой части (опционально)
- Практической части;
- Теста;
Для каждой секции выполняется практическое задание. Теоретический материал изучается по мере необходимости для выполнения практики. После завершения практического задания необходимо в gitlab создать merge request на ментора, чтобы он смог проверить задание. Если задание выполнено успешно, то ментор предоставляет тест по пройденной секции. Для успешного прохождения теста в большинстве случаев достаточно знаний, полученных в ходе выполнения практического задания и прочтения необходимой для него теории. Если присутствует задание на реализацию методов, их можно проверять Unit тестами на правильность выполнения, до отправки на проверку ментору.
Стоит отметить, что ментор в силу различных обстоятельств не всегда может оперативно проверять merge request'ы и предоставлять тесты. Поэтому, если ментор вам говорит, что сможет проверить задание/предоставить тест только через несколько часов - приступайте к выполнению следующей секции программы обучения. Важно одновременно непроверенным может быть не более одной секции программы обучения. То есть, чтобы приступить к 5ой секции, Ваше практическое задание по 3ей секции должно быть одобрено, а тест пройден.
В случае возникновения вопросов во время выполнения практического задания, можно просить помощи у ментора. Однако не стоит подходить к ментору с недекомпозированной задачей из разряда "Я не понимаю, как сверстать экран". Декомпозируйте задачу, чтобы задать ментору более конкретный вопрос. Также не стоит сразу же спрашивать ментора, как только возникла трудность. Для начала попробуйте самостоятельно найти ответ на свой вопрос в интернете.
1. ООП
- Основные принципы (****)
2. Работа с Git, gitflow
- Основные команды : init, clone, add, status, stash, commit (-m, -am, --amend), fetch, pull, push, branch, checkout, merge (****)
- Что такое git flow (***)
- Первоначальная настройка: конфигурация username и email (***)
3. Ведение проектов
4. Создание проекта, среда разработки Android Studio
- Установка Android Studio (****)
- Создание нового проекта (****)
- Основы интерфейса Android Studio (****)
- Горячие клавиши Android Studio (**)
- Горячие клавиши Android Studio, повышение производительности (***)
5. Gradle
- Gradle (***)
- При старте работ над практическим заданием, необходимо получить доступ к issue в системе PS. Создать task с названием "I. Основные принципы разработки. Git. Flow проектов" и обновить статус задачи на "В процессе".
- В корпоративном gitlab создать новый репозиторий и следуя инструкциям, склонировать его к себе на компьютер. В настройках репозитория дать доступ ментору и руководителю отдела.
- В глобальных конфигурациях git прописать корректное имя пользователя и e-mail, которые будут использоваться для подписи коммитов.
- Добавить
.gitignore. Содержание файла можно взять с ресурса: https://www.gitignore.io/api/androidstudio. Cделать коммит и запушить изменения на remote-сервер вmasterветку - Переключиться на новую ветку
develop. - Создать новый android-проект (Phone and Tablet -> Empty Activity).
- Добавить в gradle-файл библиотеку retrofit http://square.github.io/retrofit/
- Запустить проект на симуляторе
- Запустить проект на телефоне
- Сделать коммит и запушить изменения на remote-сервер в
developветку - После завершения работ над заданием перевести задачу в PS в статус "Завершен" и залогировать затраченное время.
Основы
- Java-платформа (**)
- Типы данных и переменные (****)
- Преобразования базовых типов данных (****)
- Операции языка Java (****)
- Массивы (****)
- Условные конструкции (****)
- Циклы (****)
- Методы (****)
- Рекурсивные функции (***)
- Введение в обработку исключений (**)
- Java Code Conventions - Oracle (****)
Отладка
Все задачи должны быть выполнены в указанном репозитории в отдельной ветке, вида training/lastname_firstname_date. После выполнения должен быть создан merge request на ментора.
Важно! Весь код должен быть написан по предоставленному Java Code Conventions
- Создать task в PS с заголовком "II. Java. Часть 1" и взять ее в работу.
- Работа с примитивными типами
- Работа со строками
- Работа с массивами
- Завершить task в PS и залогировать затраченное время
1. Классы
- Классы и объекты (****)
- Пакеты (****)
- Модификаторы доступа и инкапсуляция (****)
- Статические члены и модификатор static (****)
- Объекты как параметры методов (****)
- Наследование, полиморфизм и ключевое слово super (****)
- Абстрактные классы (****)
- Иерархия наследования и преобразование типов (****)
- Внутренние классы (****)
- Интерфейсы (****)
- Интерфейсы в механизме обратного вызова (***)
- Перечисления enum (****)
- Класс Object и его методы (***)
- Обобщенные типы и методы (***)
- Наследование и обобщения (***)
- Типы ссылок (***)
- Ссылочные типы и клонирование объектов (***)
2. Обработка исключений
- Оператор throws (****)
- Классы исключений (****)
- try-with-resources (****)
- Создание своих классов исключений (**)
3. Коллекции
- Введение в коллекции в Java (****)
- Класс ArrayList и интерфейс List (****)
- Структуры данных в картинках. ArrayList (****)
- Класс LinkedList (**)
- Структуры данных в картинках. LinkedList (**)
- Класс HashSet (****)
- Класс TreeSet (***)
- Интерфейсы Comparable и Comporator. Сортировка (***)
- Очереди и класс ArrayDeque (**)
- Отображения и класс HashMap (****)
- Структуры данных в картинках. HashMap (****)
- Класс TreeMap (**)
- Итераторы (**)
4. Работа со строками
- Введение в строки. Класс String (****)
- Основные операции со строками (****)
- StringBuffer и StringBuilder (***)
- Регулярные выражения (**)
5. Лямбда-выражения
- Введение в лямбда-выражения (****)
- Лямбды как параметры методов и ссылки на методы (****)
- Встроенные функциональные интерфейсы (**)
Все задачи должны быть выполнены в указанном репозитории в отдельной ветке, вида training/lastname_firstname_date. После выполнения должен быть создан merge request на ментора.
Все задачи должны быть реализованы в одном файле и разделены комментариями, указывающими на номер или текст задания.
Важно! Весь код должен быть написан по предоставленному Java Code Conventions
- Создать task в PS с заголовком "II. Java. Часть 2" и взять ее в работу.
- Настроить проект для java 8
- Написать простое лямбда-выражение в переменной
myClosure, лямбда-выражение должно выводить в консоль фразу "I love Java". Вызвать это лямбда-выражение. Далее написать функцию, которая будет запускать заданное лямбда-выражение заданное количество раз. Объявить функцию так:public void repeatTask (int times, Runnable task). Функция должна запускатьtimesраз лямбда-выражениеtask. Используйте эту функцию для печати "I love Java" 10 раз. - Условия: есть начальная позиция на двумерной плоскости, можно осуществлять последовательность шагов по четырем направлениям up, down, left, right. Размерность каждого шага равна 1. Задание:
- Создать enum
Directionsс возможными направлениями движения - Создать метод, принимающий координаты и одно из направлений и возвращающий координату после перехода по направлению
- Создать метод, осуществляющий несколько переходов от первоначальной координаты и выводящий координату после каждого перехода. Для этого внутри метода следует определить переменную
locationс начальными координатами (0,0) и массив направлений, содержащий элементы [up, up, left, down, left, down, down, right, right, down, right], и програмно вычислить какие будут координаты у переменнойlocationпосле выполнения этой последовательности шагов. Для вычисленеия результата каждого перемещения следует использовать созданный ранее метод перемещения на один шаг.
- Создать интерфейс Shape с двумя методами perimeter и area, выводящими периметр и площадь фигуры соответственно, после чего реализовать и использовать для вывода периметра и площади следующие классы, реализующие интерфейс Shape:
Rectangle- прямоугольник с двумя свойствами: ширина и длинаSquare- квадрат с одним свойством: длина стороныCircle- круг с одним свойством: диаметр круга
- Завершить task в PS и залогировать затраченное время
В случае если по ссылке встречается пошаговый гайд - рекомендуется его выполнить в отдельном проекте.
1. Начало разработки под Android
- Начало разаработки (****)
2. Верстка
3. Типы layout'ов
- Frame Layout (****)
- Linear Layout (****)
- Relative Layout (****)
4. Splash Screen
- Как правильно реализовать (****)
4. BottomNavigationView
- Обзор (****)
5. App Bar
- Обзор (****)
6. Constraint Layout
- Документация (****)
- Работа с различными свойствами (****)
7. Ресурсы
- Обзор (****)
- Локализация (**)
- Типы ресурсов (**)
- Шрифты в XML (**)
- Загружаемые шрифты (**)
- Поддержка разных экранов (**)
- Zeplin (***)
Важно В компании при разработке любого мобильного приложения считается правилом хорошего тона придерживаться нефункциональных требований, описанных в данной статье
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку layouts и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop.
Код должен быть читабельным и написан согласно code-style. В системе PS также необходимо создать созвучную задачу, в которую после завершения будет залогировано время.
- Создать task в PS с заголовком "IV. Верстка" и взять ее в работу.
- Сделать так, чтобы на домашнем экране Android отображалась иконка и название приложения "Хочу помочь". Ресурсы иконок тут.
- Реализовать Splash Screen согласно макету.
- Реализовать экран "Профиль" согласно макету.
- Экран "Профиль" необходимо отображать после Splash Screen. По нажатию стрелки назад, приложение закрывается.
- Необходимо реализовать нижний элемент навигации с помощью стандартного
BottomNavigationView. Пункт "Помочь" визуально не должен отличаться от остальных четырех. - В нижнем меню навигации по-умолчанию должен быть выбран пункт "Профиль".
- Верстка должна быть реализована в xml.
- Верстка должна быть выполнена с учетом "pixel perfect" - когда все элементы дизайна расположены и имеют размеры абсолютно идентичные макету для экрана с теми же размерами, что и макет, и адекватно масштабироваться для других размеров и разрешений.
- Все переиспользуемые размеры в xml должны быть вынесены в dimes, цвета в colors, а строки в strings.
- Никаких "магических чисел", все должно иметь понятные названия.
- Завершить task в PS и залогировать затраченное время
1. Android OS
- История Android (**)
- Архитектура Android (**)
2. Application
- Application (***)
- Context (***)
- Файл Manifest (****)
3. Activity
- Activity - основы (****)
- Управление жизненным циклом Activity (****)
- Обработка изменений конфигурации экрана (****)
- Task и Back Stack (**)
- Передача данных между Activity. Обзор (****)
- Передача данных между Activity. Интерфейс Parcelable (****)
4. Fragment
- Fragment - основы (****)
- Диалоговые окна (****)
- Передача данных между Fragment (****)
- Target fragment (**)
5. SearchView
- Обзор (****)
6. ViewPager
- Обзор (****)
7. Списки
- ListView (**)
- RecyclerView и Adapter (****)
8. Работа со сторонними приложениями и permissions
- Run-time permissions(****)
- Intent и фильтры(****)
- Взаимодействие с другими приложениями(****)
- Получение фото с камеры(****)
9. BroadcastReceiver
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку fragments и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop.
Код должен быть читабельным и написан согласно code-style.
- Создать task в PS с заголовком "V. Фрагменты" и взять ее в работу.
- Реализовать диалог согласно макету
- Диалог необходимо открывать при нажатии на изображение пользователя на экране "Профиль".
- По нажатию на кнопку "Выбрать фото" не должно ничего происходить.
- По нажатию на кнопку "Сделать снимок" необходимо запускать камеру устройства. Сделанное фото должно заменять текущее на экране профиля
- По нажатию на кнопку "Удалить" необходимо удалять текущее изображение пользователя на экране профиля
- Реализовать экран "Категории помощи" приложения согласно макету.
- Экран "Категории помощи" необходимо отображать после Splash Screen. По нажатию стрелки назад, приложение закрывается. Переход на экран профиля теперь происходит при выборе пункта "Профиль" в нижнем меню.
- В нижнем меню навигации по-умолчанию должен быть выбран пункт "Помочь".
- Экран должен представлять из себя activity с
RecyclerView.
- Реализовать экран "Поиск" согласно макету. Переход на этот экран осуществляется при выборе пункта "Поиск" в нижнем меню
- Экран необходимо построить с использованием
SearchView,ViewPagerи фрагментов. - У
SearchViewнеобходимо реализовать только верстку без логики. - Необходимо реализовать возможность изменять выбранную вкладку перелистыванием с плавной анимацией.
- В качестве названий для результатов необходимо использовать произвольные случайные строки.
- Данные для отображения результата необходимо генерировать случайным образом при каждом перелистывании
ViewPager.
- Завершить task в PS и залогировать затраченное время
1. Работа с файлами в java. Сериализация
- Потоки ввода-вывода (****)
- Закрытие потоков (****)
- Чтение и запись файлов. FileInputStream и FileOutputStream (****)
- Классы ByteArrayInputStream и ByteArrayOutputStream (**)
- Буферизуемые потоки. Классы BufferedInputStream и BufferedOuputStream (****)
- Чтение и запись текстовых файлов. FileReader и FileWriter (**)
- Буферизируемые символьные потоки. BufferedReader и BufferedWriter (**)
- Сериализация объектов (**)
- Класс File. Работа с файлами и каталогами (****)
- Работа с ZIP-архивами (**)
2. JSON
- Понятие (****)
- Парсинг в Android (****)
- Gson (****)
3. Работа с файловой системой Android
- SharedPreferences (****)
- Настройки через Preferences (**)
- Android data storage (****)
- FileProvider (***)
4. Работа с датой и временем
- Date, Calendar (****)
- Date в Java 8 (****)
- Работа со временем в java (**)
5. DiffUtils
- Обзор (****)
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку data_structures и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop.
Код должен быть читабельным и написан согласно code-style. Верстка экранов должна быть выполнена по принципу pixel-perfect.
- Создать task в PS с заголовком "VI. Структуры данных" и взять ее в работу.
- Доработать логику диалога на экране "Профиль".
- По нажатию на кнопку "Выбрать фото" необходимо открывать галерею устройства. Выбранное в галерее фото должно заменять текущее на экране профиля
- Подключить к проекту ThreeTenABP. Все операции с датой и временем должны быть реализованы через классы данной библиотеки.
- Сверстать экран "Новости" согласно макету. Переход на этот экран осуществляется при выборе пункта "Новости" в нижнем меню. Экран содержит список благотворительных событий, относящихся к выбранным категориям.
- Одно событие может относиться сразу к нескольких категориям помощи.
- Сверстать экран "Фильтр" согласно макету. Переход на этот экран осуществляется при клике на иконку в правом верхнем углу экрана "Новости".
- На экране вместо фразы "Как вы хотите помочь?" необходимо отображать "Категории помощи" и ниже список всех возможных категорий.
- При смене категорий в фильтре обновлять список на экране "Новости" обязательно при помощи DiffUtils.
- Сверстать экран "Детальное описание события" согласно макету. Переход на этот экран осуществляется при выборе любого события из списка. Данный экран должен получить информацию о том, какое событие было выбрано на предыдущем шаге.
- Необходимо создать два json'а. Содержащих в себе массивы категорий и благотворительных событий. Информация об объектах должна быть достаточной для формирования отображений на экранах, а также для корректного разделения по категориям помощи. Каждый объект должен обладать уникальным (среди объектов своего типа) идентификатором. Проверить корректность созданных json-ов через online-parser. Записать их в 2 файла и поместить в папку assets проекта.
- Необходимо создать сущности соответствующие понятиям Категория и Событие.
- Создать класс, который будет читать созданные json из файлов, парсить их и преобразовывать в массивы.
- Наполнить экраны полученными данными.
- Завершить task в PS и залогировать затраченное время
1. Базовые понятия
- Многопоточность. Определение (****)
- Мьютекс (**)
- Семафор (**)
- Дэдлок (***)
- Starvation and Livelock (***)
- Атомарные операции (***)
- Atomic типы (***)
2. Многопоточность в java
- Thread (****)
- Синхронизация потоков. Оператор synchronized (****)
- Синхронизированные коллекции (***)
- Executors (****)
3. Фоновая работа в Android
- Looper, Handler, and HandlerThread. Видео (***)
- Loader (**)
- AsyncTask (***)
4. Service
- Service - основы (****)
- IntentService (****)
- Job Scheduler (****)
- Background Execution Limits Android 8.0+ (**)
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку concurrency и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop.
Код должен быть читабельным и написан согласно code-style.
- Создать task в PS с заголовком "VII. Многопоточность" и взять ее в работу.
- В рамках предыдущего задания было реализовано чтение из файла. Реализовать чтение из файла и парсинг в background-потоке каждым из предложенных способов. С помощью AsyncTask, Executor, IntentService. При повороте экрана не должно происходить повторное чтение из файла.
- Перед отправкой данных остановить рабочий background-поток (Thread.sleep(5000)), для показательного отображения Progress Indicator (имитация запроса к сети).
- Реализовать Progress Indicator на экранах "Категории помощи" и "Новости". Индикатор должен показываться с момента запроса данных до момента их отображения на экране. Внимание! Все действия c UI должны совершаться в главном потоке.
- Для сохранения и восстановления данных при смене конфигурации использовать savedInstanceState.
- Завершить task в PS и залогировать затраченное время
1. Понятие реактивности
2. RxJava
- RxJava (****)
- reactivex (**)
- Введение в RxJava: Почему Rx? (**)
3. Android расширения
- RxAndroid (позволяет легко переключаться на main поток) (***)
- RxBinding (***)
- Использование RxJava совместно с RxBinding (***)
Работа должна производится в созданном ранее проекте.
Важно! Для пункта 2 используется отдельный проект, указанный в задании
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключиться на ветку rx_java и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop.
Код должен быть читабельным и написан согласно code-style. В системе PS также необходимо создать созвучную задачу, в которую после завершения будет залогировано время.
- Создать task в PS с заголовком "X. Реактивное программирование" и взять ее в работу.
- Клонировать проект и реализовать все методы так, чтобы тесты проходили.
- Все методы должны быть реализованы в указанном репозитории в отдельной ветке, вида training/lastname_firstname_date. После выполнения должен быть создан merge request на ментора.
- Подключить фреймворк
RxJava, а так же библиотекиRxAndroidиRxBinding. - Создать экран "Авторизация" согласно макету.
- Кнопка "Войти" активна только в момент, когда в поля логин и пароль введено по 6 или более символов. В противном случае кнопка неактивна. Реализовать данное поведение с помощью
RxJava. - В неактивном состоянии кнопка "Войти" имеет серый фон вместо зеленого.
- При повороте экрана данные, введенные в поля ввода, должны сохраняться.
- Экран "Авторизация" необходимо отображать после Splash Screen. По нажатию стрелки назад, приложение закрывается. Переход на экран "Категории помощи" происходит при нажатии на активную кнопку "Войти".
- Доработать вкладку "По мероприятиям" экрана "Поиск"
- Реализовать логику работы
SearchView. Поиск происходит в тот момент, когда пользователь 500 мс ничего не вводил в строку и не удалял из нее. То есть, если пользователь быстро вводит слово в строку поиска, поиск отрабатывает только 1 раз для всего слова целиком. Реализовать данное поведение с помощьюRxJava. - Данные для отображения результата необходимо брать из событий из созданных ранее json файлов.
- Если в строку поиска ничего не ввели, то вместо результатов поиска отображаем заглушку как на макете.
- Если введенная в поиск строка не соответствует названию ни одного события, то отображаем пустой список результатов.
- При повороте экрана, а также при перелистывании
ViewPagerна вкладку "По НКО" и обратно строка, введенная в поиске, список результатов и позиция списка должны сохраняться.
- Завершить task в PS и залогировать затраченное время
1. Базовые понятия
- HTTP (***)
- HTTP codes (***)
- RESTful (***)
- RESTful API — ложь (*)
- WebSocket (**)
- Handling API calls using Retrofit 2 and RxJava 2 (*)
2. Библиотеки
- OkHttp (****)
- Retrofit (****)
- OkHttp. Interceptors (***)
- OkHttp which ignores all SSL errors (***)
- Logging interceptor for okhttp
3. Firebase
- Документация (****)
4. Отладка. Перехват и подмена трафика мобильных устройств
- Postman (**)
- Fiddler (**)
- Charles (**)
- Перехват и подмена трафика мобильных устройств (*)
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку networking и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop.
Код должен быть читабельным и написан согласно code-style.
- Создать task в PS с заголовком "IX. Работа с сетью" и взять ее в работу.
- Необходимо реализовать транспортный слой приложения, который будет осуществалять загрузку данных с сервера. Для этого требуется использовать firebase. Документация по работе с firebase тут.
- Все "тяжелые" операции должны быть реализованы в фоновом потоке
- На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
- Заменить загрузку из файла на старте приложения на загрузку с сервера. В случае если ответ от сервера ошибочен - загрузить данные из файла.
- Все "тяжелые" операции должны быть реализованы в фоновом потоке
- На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
- Завершить task в PS и залогировать затраченное время
1. Android SQLite
- Работа с SQLite средствами Android SDK (**)
- ORM (**)
2. Основы Realm
- Документация по Realm (****)
- DatabaseProvider в androidbase (**)
3. Основы Room
- Документация по Room (****)
- Codelab по Room Java (***)
- Codelab по Room Kotlin (***)
- Room и Rx (****)
4. Content Provider
- Основы (**)
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку data_base и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop.
Код должен быть читабельным и написан согласно code-style. В системе PS также необходимо создать созвучную задачу, в которую после завершения будет залогировано время.
- Создать task в PS с заголовком "VIII. Базы данных" и взять ее в работу.
- Необходимо создать базу данных с использованием Room для хранения сущностей Категории и Благотворительных событий.
- При первом получении данных для сущностей Категории и Благотворительные события, сохранять данные в базе данных, и дальнейшее получение производить из нее. Обновление данных должно происходить только для новой сессии.
- Чтение и запись должны быть реализованы в фоновом потоке
- На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
- Наполнение экранов Категории и Благотворительных событий должно происходить из созданной базы данных
- Все "тяжелые" операции должны быть реализованы в фоновом потоке
- На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
- Завершить task в PS и залогировать затраченное время
1. Архитектура
- Принципы SOLID (****)
- MVC, MVP, MVVM (**)
- Moxy - ссылка на библиотеку(****)
- Moxy — статья о том, как она работает (****)
2. Clean Architecture
- Статья самого Дядюшки Боба (****)
- Хороший цикл статей (****)
- Видео-доклад "Чистая архитектура. Погружение" (****)
- Пример использования архитектуры (***)
- Заблуждения Clean Architecture (***)
- Руководство по применению чистой архитектуры в Android проектах (**)
3. DI
- Dagger 2 - ссылка на библиотеку (****)
- Dagger 2 - хороший цикл статей (****)
- Dagger 2 - еще один хороший цикл статей (****)
- Toothpick (**)
4. Многомодульность
- Многомодульность (**)
Переписать свое приложение, применяя архитектурный подход Clean Architecture. В реализации presentation слоя применить архитектурный паттерн MVP с использованием библиотеки Moxy. Для предоставления зависимостей в соотвествии с техникой DI использовать библиотеку Dagger 2. Для работы с базой данных использовать библиотеку Room.
Материал для подготовки к собеседованиям
- Записи собеседований коллег Пароль: mobile (**)
- Вопросы, задаваемые на собеседованиях (**)
- Список полезных ссылок на материалы по разным темам (**)
Система грейдов одной из компаний
- Документ (**)
Как доставлять сборки до QA
Java
- Философия java Брюс Эккель (**)
- Effective Java (**)
- Герберт Шилдт "Java. Полное руководство" (*)
- http://kb.simbirsoft/java-education-core/ (*)
Паттерны проектирования
Методологии Agile
Порталы, подкасты и дайджесты
- YouTube канал Android Developers (***)
- Подкаст про разработку (***)
- Статьи Хабра про Android разработку (***)
- Пример дайджеста, бывает много интересного (***)
- Hannes Dorfmann (**)
- Stfalcon (**)
Телеграм
- Канал андроида (**)
- Канал подкаста (**)
- Канал архитектуры (*)
Прочие ресурсы
- Склад библиотек (*)
- Иконки (*)