search icon search icon ВЕРСИЯ ДЛЯ СЛАБОВИДЯЩИХ

Инженерный тур. 3 этап

Общая информация

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

Легенда задачи

В компании S контроль доступа в офис осуществляется с помощью СКУД (системы контроля управления доступом). На данный момент у каждого сотрудника есть карта-пропуск с NFC-меткой, а у каждой входной двери — считыватель с обеих ее сторон. При поднесении карты к считывателю дверь открывается, и информация о времени входа или выхода сотрудника фиксируется в базе данных.

Администрации компании S требуется мобильное приложение (как для рядовых сотрудников, так и для администрации) с возможностью просмотра посещений и работой электронного пропуска как временной замены обычного (при помощи сканировании QR-кода, который находится на считывателе). В приложении есть возможность использовать телефон как пропуск, поэтому к безопасности данных, находящихся внутри него, предъявляются повышенные требования.

Сервер и клиент разрабатываются на основе командного решения второго этапа.

Требования к команде и компетенциям участников

Количество участников в команде: 2–3 человека.

Роли:

  • Android-разработчик: отвечает за разработку клиентской части программного продукта (Android-приложение), которое будет взаимодействовать с сервером. Необходимые hard-скиллы:

    • Язык программирования: знание Java и/или Kotlin как основных языков для разработки приложений под Android.
    • Android SDK: понимание и умение работать с Android Software Development Kit, включая библиотеки, инструменты и различные API, с помощью которых создаются нативные Android-приложения.
    • Инструменты разработки: умение использовать Android Studio и Gradle для разработки, сборки и развертывания приложений.
    • Архитектура приложений: знание архитектурных паттернов (MV*, Clean Architecture) для организации кода и улучшения его читаемости и поддерживаемости.
    • Работа с данными: опыт работы с SQLite, библиотекой Room или другими базами данных, а также навыки работы с RESTful API и JSON для обмена данными с сервером.
    • Тестирование: опыт написания unit-тестов с использованием соответствующих фреймворков для обеспечения надежности и стабильности кода.
  • UI/UX-дизайнер: проектирование интерфейса, создающего комфортный пользовательский опыт Android-приложения. Необходимые hard-скиллы (роли «Android-разработчик» и «UI/UX-дизайнер» могут совмещаться):

    • Инструменты дизайна: умение работать с инструментами для создания дизайна и прототипов, такими как Figma или Sketch.
    • Платформенные гайды: знание Android Material Design Guidelines или One UI, что позволяет создавать интерфейсы, соответствующие стандартам и рекомендациям платформы.
    • Верстка интерфейсов: владение XML или библиотекой JetPack Compose для создания макетов пользовательского интерфейса и определения ресурсов.
    • Инструменты для создания графики: владение Gimp и Inkscape или другими аналогичными растровыми и векторными редакторами для создания графических элементов и иконок, необходимых для приложений.
  • Бэкенд-разработчик: реализация серверной части программного продукта, которая будет предоставлять необходимую информацию Android-приложению. Необходимые hard-скиллы:

    • Языки программирования: владение языками программирования, такими как Java, Kotlin или другими популярными языками, которые используются для написания серверной логики.
    • Базы данных: знание реляционных баз данных (например, PostgreSQL, MySQL) и нереляционных баз данных (например, MongoDB), а также умение создавать запросы.
    • API-разработка: опыт разработки и интеграции RESTful, включая создание и документирование эндпоинтов, а также обеспечение безопасности и производительности.
    • Фреймворки и библиотеки: знание Spring Boot, который упрощает разработку серверной части и управление зависимостями в Spring-приложениях.
    • Архитектура приложений: понимание принципов архитектуры приложений, включая микросервисную, модульную и монолитную архитектуру. Способность проектировать системы с учетом масштабируемости и отказоустойчивости. Знание архитектурных паттернов.
    • Тестирование: опыт написания unit-тестов с использованием соответствующих фреймворков для проверки корректности серверной логики.
  • Тимлид (один из членов команды): координация работы команды, а также коммуницирование с организаторами профиля. Необходимые hard-скиллы:

    • Обзорное представление обо всем, что описано выше.
    • Управление проектами и Agile: опыт работы с инструментами управления проектами (JIRA, Kaiten). Умение знать и применять Agile-методологии (Scrum, Kanban).

В команде не может быть человека ТОЛЬКО с ролью тимлида, эта роль всегда совмещается с перечисленными выше ролями Android-разработчика, UI/UX-дизайнера, бэкенд-разработчика.

Рекомендации по взаимодействию в команде можно найти в мастер-классе Samsung Android Bootcamp 2025: https://vkvideo.ru/video-226950057_456239557?list=ln-MJ9lFnFzNXnSU4jA4n (для просмотра видео необходимо подписаться).

Оборудование и программное обеспечение
Наименование Описание
JDK 11 Java Development Kit — все, что нужно для разработки на языке Java
JetBrains IntelliJ IDEA Community Edition Ladybug Feature Drop 2024.2.2 Среда разработки на языке Java; для разработки бэкэнда
Android Studio Ladybug Feature Drop 2024.2.2 (minimum sdk 28, target sdk 34) и встроенным эмулятором Среда разработки для Android; для разработки фронтэнда
Postman 11.31.4 Приложение для работы с API
Insomnia 10.3.0 Приложение для работы с API
MySQL 9.2.0 СУБД
PostgreSQL 17.2 СУБД
DBeaver Community 24.3.4 Приложение с графическим интерфейсом для работы с СУБД
Docker Desktop Приложение для контейнеризации
Git Система контроля версий
Описание задачи
Создание мобильного приложения. Клиентская часть

Системные требования к приложению:

  • Минимальная версия ОС: Android 9.0 (API 28).
  • Целевая версия ОС: Android 14 (API 34).
  • Работоспособность приложения для платформ: mobile (смартфоны), tablet (планшеты).
  • Поддерживаемая ориентация: портретная, альбомная.
  • Поддержка языков: русский, английский.
  • Разрешения: доступ к интернету, камера (только при необходимости).

Техническое задание

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

  • Экран авторизации: доработать авторизацию, добавив поле пароля; при успешной аутентификации необходимо реализовать Basic-авторизацию.
  • Главный экран: дополнить прокручиваемым списком (на основе компонента RecyclerView), в каждом элементе которого содержится информация:

    • время сканирования считывателя,
    • идентификатор или название считывателя,
    • тип прохода (карта или вход через смартфон).
  • Экран администратора: разработать новый экран, доступ к которому будет только у пользователей с правами администратора; на нем должно содержаться поле ввода логина сотрудника (после успешного ввода он может просмотреть информацию о сотруднике), а также кнопка блокировки и разблокировки пропуска с помощью смартфона сотрудника.
Создание мобильного приложения. Серверная часть

Техническое задание

Доработать сервер. Реализовать ролевую модель, разделив права доступа к эндпоинтам. Данные обо всех сотрудниках, с детализацией их посещений офиса, должны быть доступны только пользователям с ролью «Администратор». Остальные эндпоинты, кроме аутентификации, должны быть у всех авторизованных пользователей.

Сведения, необходимые для аутентификации и авторизации, сохраняются в базе данных. Пароль обязательно хранится в зашифрованном виде. Для реализации аутентификации и авторизации рекомендовано использовать Spring Security.

Где необходимо разместить сервер

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

Система оценивания

Оценка решения задачи проводится в два этапа:

  • техническая экспертиза;
  • защита перед жюри.

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

Критерии технической экспертизы представлены ниже.

Критерии Backend
Название Описание Балл
K1 Нормализация данных в БД

Оценивается структура базы данных, ее соответствие принципам нормализации. Проверяется, избегаются ли дублирующиеся данные, эффективно ли используются связи между таблицами, а также грамотно ли выбраны типы данных для столбцов:

  • использование 1NF — 4 балла,
  • использование 2NF — 6 балла,
  • использование 3NF — 6 балла,
  • оптимизация индексов и грамотный выбор типов данных — 4 балла.
20
К2 Архитектура микросервиса

Оценивается модульность и согласованность компонентов микросервиса. Проверяется соблюдение принципов SOLID, четкое разделение слоев (Controller, Service, Repository) и использование Dependency Injection. Учитывается, насколько удобно расширять и модифицировать микросервис, а также соответствие архитектуры задачам. Дополнительным плюсом будет использование паттернов проектирования, таких как DTO, Factory, Builder и т. д.:

  • четкое разделение слоев (Controller, Service, Repository) — 6 баллов,
  • применение принципов SOLID — 6 баллов,
  • использование Dependency Injection — 4 балла,
  • расширяемость и модифицируемость — 4 балла,
  • использование паттернов проектирования — 4 балла.
24
К3 Обработка исключений

Оценивается, насколько эффективно и полно обрабатываются возможные исключения. Проверяется, есть ли централизованный механизм обработки ошибок (например, @ControllerAdvice и @ExceptionHandler), предоставление информативных сообщений об ошибках клиенту, а также защита системы от некорректного ввода или неожиданных сбоев:

  • наличие централизованного механизма обработки ошибок — 6 баллов,
  • информативные сообщения об ошибках — 4 балла,
  • защита от некорректного ввода и сбоев — 4 балла,
  • работа с кастомными исключениями — 2 балла.
16
К4 Аутентификация и авторизация

Оценивается реализация безопасной аутентификации и авторизации, включая использование современных протоколов (например, JWT, OAuth2 или Basic). Проверяется корректность настройки цепочки фильтров безопасности (Spring Security):

  • реализация аутентификации с использованием современных протоколов (JWT, OAuth2, Basic) — 8 баллов,
  • настройка фильтров безопасности в Spring Security — 8 баллов.
16
К5 Реализация ролевой модели

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

  • разграничение доступа по ролям — 6 баллов,
  • роли вынесены в отдельную таблицу, реализована связь многие ко многим (или один ко многим) — 4 балла,
  • наличие документации и тестов, подтверждающих корректность ролевой модели — 4 балла.
14
К6 Оптимизация

Оценивается оптимизация запросов к БД:

  • решена проблема N+1 — 4 балла,
  • реализована пагинация — 4 балла.
8
К7 Тесты

Более 30% логики покрыто unit-тестами. Подключены механизмы анализа покрытия кода тестами (например: JaCoCo):

  • покрытие логики тестами более 30% — 1 балл,
  • использование библиотек по анализу покрытия кода тестами — 1 балл.
2
К8 Объем самостоятельной работы Оценка самостоятельной работы каждого участника 0–100%

Итоговый балл рассчитывается по формуле: \[(K1 + K2 + K3 + K4 + K5 + K6 + K7) \times K8.\]

Максимальный балл — 100.

Критерии Frontend
Название Описание Балл
K1 Наличие всех базовых элементов интерфейса

Приложение должно включать следующие интерфейсы:

  • Авторизация (3).
  • Главный экран (3).
  • Экран сканирования QR кода (1).
  • Экран с результатом сканирования QR кода (3).
10
К2 Основной функционал
  • Реализована авторизация с паролем (12):

    • используется для всех запросов в приложении (6);
    • выполнена обработка при устаревании данных авторизации (4);
    • используется ли шифрование при локальном хранении данных авторизации (2).
  • Реализован список последних входов (12):

    • при смене конфигурации список сохраняет свою позицию (2);
    • список загружается постранично (4);
    • список содержит информации не меньше, чем описано в требованиях (3);
    • элементы списка переиспользуются (3).
  • Реализован экран администратора (16):

    • поиск сотрудника по логину (2);
    • возможность заблокировать и разблокировать пропуск (2);
    • просмотр истории пользователя (6);
    • визуальное скрытие раздела для пользователей без доступа (4);
    • обработка состояния блокировки пропуска при считывании QR (2).
40
К3

Наличие дополнительного функционала

(если К2 = 0 — не оценивается)

Выбрать одно:

  • дополнительного функционала, не оговоренного заданием, нет — 0;
  • присутствует несложный дополнительный функционал или улучшение текущего — 4;
  • присутствует функционал, добавляющий дополнительные сценарии использования приложения — 6;
  • выполнены значительные качественные доработки и внедрен совершенно новый сценарий использования — 10.
10
К4 UX-приложения

В приложении должны быть реализованы следующие механики:

  • Авторизация. Вывод информации об ошибке (2).
  • Главный экран. Обработка состояний отсутствия интернета с возможностью повторить попытку (1,5).
  • Экран обработки результата. Обработка состояния отсутствия интернета с возможностью повторить попытку (1,5).
5
К5 Архитектура
  • Код разделен на три слоя: представление, домен, данные (2).
  • Правильно выстроены зависимости между слоями (1).
  • Для более 75% кода правильно выбран слой (1).
  • Для представления выбран MV* паттерн (2).
6
К6 Код
  • Код декомпозирован на классы и методы (3).
  • Более 90% кода не дублируется (3).
  • Кодовая база не содержит устаревших библиотек или вызовов API (2).
8
К7 Тесты Более 30% логики покрыто unit-тестами 7
К8 Использование технологий
  • Использование нестандартного обмена данными (например, GraphQL) (1).
  • Использование локального хранилища данных на основе ORM (1).
  • Использование библиотек многопоточности и использование ее для всех длительных операций (1).
  • Использование альтернативных способов считывания меток (NFC) (1).
  • Критерий субъективный: можно добавить балл за библиотеку/технологию, которая достойна быть дополнительно оценена.
4
К9 Работоспособность приложения Приложение работает и запускается без сбоев на всех поддерживаемых версиях Android: если да — полный балл, иначе — 0. 10
К10 Объем самостоятельной работы Оценка самостоятельной работы каждого участника 0–100%

Формула для расчета итогового балла: \[(K1 + K2 + \cdots + K8 + K9) \times K10.\]

Максимальный балл — 100.

Критерии UI/UX
Название Описание Балл
K1 Соответствие UI-гайдлайнам

Экранные формы приложения выполнены в соответствии с гайдлайнами Material Design 3 / One UI:

  • Интерфейс строго соответствует гайдлайнам (15).
  • Есть небольшие отклонения, но общая концепция соблюдена (10).
  • Применены базовые принципы, но гайдлайны нарушены (5).
  • Интерфейс полностью игнорирует гайдлайны (0).
15
К2 Основной функционал

Экранные формы полностью реализуют заявленный функционал:

  • Авторизация (2).
  • Главный экран (2).
  • Экран сканирования QR кода (2).
  • Экран с результатом сканирования QR кода (2).
  • Экран администратора (2).
10
К3 Единая визуальная стилистика и согласованность элементов

Экранные формы приложения:

  • выполнены в едином стиле, элементы выглядят согласованно (5);
  • выполнены с небольшими помарками (разные шрифты, отступы, несоответствие цветов) (3);
  • выполнены хаотично, элементы не связаны (0).
5
К4 Качество проработки цветовой палитры и типографики

Выбрать одно:

  • Цвета, шрифты и размеры текста грамотно подобраны (5).
  • Есть небольшие ошибки (нечитабельность, плохой контраст) (3).
  • Полностью неудачное сочетание цветов и шрифтов (0).
5
К5 Использование графики и иллюстраций

Выбрать одно:

  • Используются качественные иконки, иллюстрации, изображения в правильном формате (иконографика — векторная, svg.: фото — растровое, webp) (5).
  • Используются иконки/иллюстрации/изображения в неправильном формате (3).
  • Дизайн без иконок/иллюстраций (0).
5
К6 Логичность и интуитивность навигации

Выбрать одно:

  • Интерфейс интуитивно понятен, и пользователю не требуются инструкции для его освоения (10).
  • Есть небольшие сложности в навигации (5).
  • Навигация сложная, непонятная (0).
10
К7 Проработанность пользовательских сценариев

Выбрать одно:

  • Все важные сценарии продуманы и протестированы (5).
  • Частично продуманы, но есть узкие места (3).
  • Некоторые сценарии не проработаны (0).
5
К8 Удобство ввода данных и обработки ошибок

Выбрать одно:

  • Формы ввода удобные, ошибки обрабатываются понятно (5).
  • Ошибки отображаются, но не всегда корректно или представлены в непонятном виде (3).
  • Ошибки игнорируются, пользователю сложно вводить данные (0).
5
К9 Адаптивность

Выбрать одно:

  • Интерфейс корректно отображается на разных устройствах и экранах, включая поворот (портретная и альбомная ориентации) (10).
  • Есть незначительные проблемы с адаптацией (например, мелкие несоответствия в размерах элементов) (5).
  • Интерфейс ломается при изменении разрешения экрана или повороте устройства (0).
10
К10 Оптимизация производительности

Выбрать одно:

  • Верстка оптимизирована. Минимизирована вложенность View (XML) или композиций (Compose) (5).
  • Есть незначительные проблемы с оптимизацией: например, небольшая избыточная вложенность (3).
  • Верстка не оптимизирована (0).
5
К11 Наличие и качество макета

Выбрать одно:

  • Макет предоставлен, полностью детализирован (включая размеры, отступы, цвета, шрифты, состояния элементов) (15).
  • Макет предоставлен, но есть небольшие недочеты (например, отсутствие некоторых размеров или состояний элементов) (10).
  • Макет предоставлен, но недостаточно детализирован (например, только основные экраны без учета всех состояний) (5).
  • Макет отсутствует (0).
15
К12 Соответствие макетам

Выбрать одно:

  • Верстка полностью соответствует созданному макету. Все элементы расположены правильно, соблюдены размеры, отступы, цвета и шрифты (10).
  • Есть незначительные отклонения от макета (например, небольшие расхождения в отступах или размерах элементов) (5).
  • Верстка не соответствует макету Figma: элементы расположены неправильно, размеры, отступы или цвета не соблюдены (0).
10
К13 Объем самостоятельной работы Оценка самостоятельной работы каждого участника 0-100%

Формула расчета итогового балла: \[(K1 + K2 + \cdots + K11 + K12) \times K13.\]

Максимальный балл — 100.

Решение задачи
Описание решения для серверной части

Ссылка с исходным кодом: https://gitnto.innovationcampus.ru/Bugdroid/Bugdroid-Back.

Серверная часть реализована с использованием Spring Boot. Написанный микросервис обернут в Docker-контейнер. Все миграции БД осуществляются при помощи liquibase, что при необходимости позволяет легко перенести схему и данные из одной базы в другую. В качестве основной реляционной СУБД выбрана PostgreSQL. Серверная часть, реализованная backend-разработчиком, полностью удовлетворяет ТЗ финального этапа.

База данных

В разработанной схеме база данных (далее БД) все данные атомарны и исключены транзитивные зависимости. Корректно расставлены связи между таблицами.

Архитектура микросервиса

Код серверной части грамотно разделен на три слоя:

  • Controller,
  • Service,
  • Repository.

Используются принципы SOLID.

Существует разделение на сущности (классы слоя работы с БД) и DTO (классы слоя общения с клиентской частью).

Описанное выше позволяет легко модифицировать и расширять полученное решение.

Обработка исключений

Реализована централизованная обработка ошибок, возникающих на стороне сервера.

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

Все исключения содержат точное описание, которое позволит на стороне клиентской части сформировать понятное пользователю сообщение об ошибке.

Аутентификация и авторизация

В качестве аутентификации и авторизации выбрана Basic Spring Security.

Данные о пользователе хранятся в базе в зашифрованном виде.

Реализовано разделение ролей (USER, ADMIN).

Роли вынесены в отдельную таблицу БД, что упрощает расширение ролевой модели в случае необходимости.

Оптимизация

Реализована пагинация, что позволяет осуществить постраничную выгрузку данных.

Тесты и документация

В проекте написаны интеграционные тесты, которые проверяют все три слоя (Controller, Service, Repository).

Присутствует Swagger-документация с расширенным описанием API.

Описание решения для клиентской части

Ссылка с исходным кодом: https://gitnto.innovationcampus.ru/Bugdroid/Bugdroid-Front.

Android приложение реализовано на языке Kotlin с использованием технологий:

  • XML для создания верстки;
  • RecyclerView для отрисовки списков;
  • Paging 3 для реализации пагинации;
  • Ktor client для реализации клиент-серверного взаимодействия.

Проект разделен на слои: data, domain, ui (presentation), что позволяет масштабировать его в дальнейшем и соответствует современным стандартам индустрии в архитектуре Android-приложений.

Согласно техническому заданию, команда успешно выполнила:

  • авторизацию с паролем и применила ее для всех запросов в приложении;
  • постраничную загрузку списка с информацией о последних входах, в котором было обработано сохранение состояния позиции, а также наличие всей информации, согласно техническому заданию; элементы переиспользовались;
  • экран администратора, на котором есть возможность осуществить поиск сотрудника по логину с возможностью блокировки пропуска.

Сильные стороны проекта

Интерфейс пользователя

Разработанное приложение полностью соответствует требованиям по наличию всех базовых элементов интерфейса. Экран авторизации предоставляет понятный интерфейс для входа с использованием логина и пароля. Главный экран реализует отображение списка проходов с использованием RecyclerView, а встроенный функционал сканирования QR-кода обеспечивает основной механизм идентификации пользователей. Все элементы интерфейса логично связаны между собой, имеют единообразный дизайн и обеспечивают интуитивно понятную навигацию.

Авторизация и безопасность

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

Список проходов и работа с данными

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

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

Функциональность администратора

Экран администратора реализует все необходимые функции согласно техническому заданию. Интерфейс позволяет осуществлять поиск сотрудников по логину и предоставляет доступ к информации о каждом пользователе.

Особенно стоит отметить функциональность блокировки и разблокировки пропуска, которая не только изменяет статус в системе, но и корректно обрабатывается при последующих попытках сканирования QR-кода.

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

Обработка ошибок и сетевых проблем

Приложение демонстрирует высокий уровень устойчивости к сбоям благодаря продуманной системе обработки ошибок. На экране авторизации выводятся сообщения в случае проблем с входом. Реализована корректная обработка отсутствия интернет-соединения как на главном экране.

Архитектура и код

В архитектуре приложения применен паттерн MVVM, что обеспечивает четкое разделение бизнес-логики и пользовательского интерфейса. Это решение существенно упрощает тестирование и дальнейшую поддержку кода.

Команда правильно выстроила зависимости между слоями, что минимизирует связанность компонентов. Код хорошо декомпозирован на классы и методы с четким разделением ответственности.

Весь проект написан с использованием современных библиотек и API, без применения устаревших решений, что обеспечивает производительность и совместимость с новыми версиями Android.

Материалы для подготовки

Буткемпы IT-школы

  1. Буткемп IT школы Samsung 2023 г. [Электронный ресурс]: видеокурс / YouTube. — URL: https://www.youtube.com/playlist?list=PLa2T1zmZ6w5IEH3toqEA8wXPXzvNhkmQ2.
  2. Буткемп IT-школы Samsung 2024 г. [Электронный ресурс]: видеокурс / YouTube. — URL: https://www.youtube.com/playlist?list=PLa2T1zmZ6w5LvGpFM9whAqkHB9Iq38cSn.

Курс по Java

  1. Курс по Java [Электронный ресурс]: обучающие материалы / Яндекс.Диск.
  2. Модуль 1. — URL: https://disk.yandex.ru/i/w6y7vcEfpygzZg.
  3. Модуль 2. — URL: https://disk.yandex.ru/i/TR4Ubr1HWkqqMw.
  4. Модуль 3. — URL: https://disk.yandex.ru/i/n1U7ISb6EzZ6_w.
  5. Модуль 4. — URL: https://disk.yandex.ru/i/CbXW6VygzLqeaQ.
  6. Модуль 5. — URL: https://disk.yandex.ru/i/X9nuXVJG5eLakw.
  7. Модуль 6. — URL: https://disk.yandex.ru/i/WP3gV5nBb4ksvg.
  8. Модуль 7. — URL: https://disk.yandex.ru/i/OIO-L5ZPQ74_Rg.
  9. Модуль 8. — URL: https://disk.yandex.ru/i/nWrw9nYtdX-Crg.
  10. Модуль 9. — Ч. 1: https://disk.yandex.ru/i/01C71e2PKx2Htw; Ч. 2: https://disk.yandex.ru/i/mQHYwTy12aHC-A.
  11. Модуль 10. — URL: https://disk.yandex.ru/i/RfmOYylnVr3RhQ.
  12. Модуль 11. — URL: https://disk.yandex.ru/i/Pg0bhPANFsjtKQ.

Курс по Spring Framework

  1. Курс по Spring Framework [Электронный ресурс]: обучающие материалы / Яндекс.Диск.
  2. Модуль 1. — Ч. 1: https://disk.yandex.ru/i/q4Df2mH-0KI2Ug; Ч. 2: https://disk.yandex.ru/i/gb2RK9L7BOC89w.
  3. Модуль 2. — Ч. 1: https://disk.yandex.ru/i/E34JfcAK8nA4Vw; Ч. 2: https://disk.yandex.ru/i/9TNQ8D5V3cPjrg.
  4. Модуль 3. — Ч. 1: https://disk.yandex.ru/i/-pBq185elh1a9Q; Ч. 2: https://disk.yandex.ru/i/3WpYIOxD-26GiQ.
  5. Модуль 4. — Ч. 1: https://disk.yandex.ru/i/Yn5EWPLotD7EPg; Ч. 2: https://disk.yandex.ru/i/wJR4SB2fVxMhLA; Ч. 3: https://disk.yandex.ru/i/UgHtBE-hS64Img.
  6. Модуль 5. — Ч. 1: https://disk.yandex.ru/i/YnjoEBPRF9htHQ; Ч. 2: https://disk.yandex.ru/i/5_V2B5qIimFyJg.
  7. Модуль 6. — URL: https://disk.yandex.ru/i/hM_Jhiw2OZw0CA.
  8. Модуль 7. — Ч. 1: https://disk.yandex.ru/i/840Kmro-SBRK_Q; Ч. 2: https://disk.yandex.ru/i/_ASfB9ZxtMnADA; Ч. 3: https://disk.yandex.ru/i/Q0UXf700ycN8zQ.

Курсы по Kotlin

  1. Kotlin Bootcamp for programmers [Электронный ресурс]: онлайн-курс / Android Developers. — URL: https://developer.android.com/courses/kotlin-bootcamp/overview.
  2. Developing Android Apps with Kotlin [Электронный ресурс]: онлайн-курс / Udacity. — URL: https://www.udacity.com/course/developing-android-apps-with-kotlin--ud9012.
text slider background image text slider background image
text slider background image text slider background image text slider background image text slider background image