PrepBro
Профессии
PrepBro
Профессия:

Подготовка

  • Вопросы3339
  • Задачи12

Аналитика

  • hh статистика
  • Анализ резюме

Практика

  • Тестовое собеседование
  • Mock-собеседование
  • Менторы

Поддержка / отзывы

Telegram админа
Профессия:

Подготовка

  • Вопросы3339
  • Задачи12

Аналитика

  • hh статистика
  • Анализ резюме

Практика

  • Тестовое собеседование
  • Mock-собеседование
  • Менторы

Поддержка / отзывы

Telegram админа
Все 24 профессии
Android DeveloperData AnalystSystem Analyst1С DeveloperiOS DeveloperBusiness AnalystJava DeveloperData ScientistQA EngineerQA AutomationPHP BackendC/C++ BackendDevOps EngineerIT Project ManagerFrontend DeveloperNode.js BackendUnity DeveloperC# BackendProduct AnalystFlutter DeveloperPython DeveloperIT Product ManagerGo DeveloperData Engineer

© 2026 PrepBro. Все права защищены.

Telegram-бот

Задачи по Android Developer

Merge двух отсортированных списков
1.7 Middle🔥 20💬 2

Решение: Merge двух отсортированных списков

1. Базовая реализация O(n+m)

fun mergeSortedLists(list1: List<Int>, list2: List<Int>): List<Int> {
    val result = mutableListOf<Int>()
    var i = 0
    var j = 0
    
    while (i < list1.size && j < list2.size) {
        if (list1[i] <= list2[j]) {
            result.add(list1[i])
            i++
        } else {
            result.add(list2[j])
            j++
        }
    }
    
    while (i < list1.size) {
        result.add(list1[i])
        i++
    }
    
    while (j < list2.size) {
        result.add(list2[j])
        j++
    }
    
    return result
}

2. Обобщённая версия для Comparable типов

Читать полностью ->
GitHub репозитории организации
2.0 Middle🔥 20💬 1

Решение: GitHub репозитории организации с пагинацией и поиском

Архитектура Clean Architecture + MVVM с Paging 3 и обработкой rate limiting

Приложение использует GitHub REST API, поддерживает пагинацию через Paging 3, обработку rate limiting и кэширование с помощью Room.

Структура проекта

Читать полностью ->
Погодное приложение с настройками
1.8 Middle🔥 19💬 1

Решение: Погодное приложение с управлением городами и настройками

Архитектура Clean Architecture + MVVM с DataStore и Navigation

Приложение предоставляет работу с погодой через OpenWeatherMap API, управление городами через DataStore и навигацию между экранами через Navigation Component.

Структура проекта

Читать полностью ->
Поиск двух чисел с заданной суммой
2.2 Middle🔥 16💬 1

Решение: Поиск двух чисел с заданной суммой

Анализ задачи

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

Решение: Оптимальный алгоритм O(n) с HashMap

Лучший подход использует HashMap для решения в одну итерацию:

fun findTwoSum(nums: IntArray, target: Int): Pair<Int, Int>? {
    val seen = mutableMapOf<Int, Int>()  // value -> index
    
    for (i in nums.indices) {
        val complement = target - nums[i]  // какое число нам нужно
        
        // Если нужное число уже видели - нашли пару
        if (seen.containsKey(complement)) {
            return Pair(seen[complement]!!, i)
        }
        
        // Сохраняем текущий элемент в карту
        seen[nums[i]] = i
    }
    
    return null  // Пара не найдена
}

Как это работает

Пример 1: findTwoSum([2, 7, 11, 15], 9)

Читать полностью ->
Приложение с рецептами
1.8 Middle🔥 13💬 1

Решение: Приложение Recipes с поиском, сортировкой и кэшированием

Архитектура Clean Architecture + MVVM

Приложение разделено на три независимых слоя:

  1. Data Layer — API, кэширование (Room), репозитории
  2. Domain Layer — бизнес-логика, use cases
  3. Presentation Layer — UI, ViewModel, State Management

Структура проекта

Читать полностью ->
Реализация Set на основе List
2.0 Middle🔥 12💬 1

Решение: Реализация Set на основе List

1. Базовая реализация MySet

class MySet<T> {
    private val elements: MutableList<T> = mutableListOf()
    
    fun count(): Int = elements.size
    
    fun add(element: T): Boolean {
        if (contains(element)) {
            return false
        }
        elements.add(element)
        return true
    }
    
    fun remove(element: T): Boolean {
        return elements.remove(element)
    }
    
    fun contains(element: T): Boolean {
        return elements.contains(element)
    }
    
    fun clear() {
        elements.clear()
    }
    
    fun isEmpty(): Boolean = elements.isEmpty()
    
    fun toList(): List<T> = elements.toList()
}

2. Реализация с итератором

Читать полностью ->
Реализация RSS Reader
1.8 Middle🔥 12💬 1

Решение: Реализация RSS Reader приложения

Архитектура приложения

Я разработаю RSS Reader с архитектурой MVVM (Model-View-ViewModel), которая идеально подходит для этой задачи. Архитектура разделена на три слоя:

  1. Data Layer — работа с сетью (Retrofit) и локальным хранилищем (Room)
  2. Domain Layer — бизнес-логика
  3. UI Layer — Activity, Fragment, ViewModel, Adapter

Структура проекта

Читать полностью ->
Переворот строки по словам
1.6 Junior🔥 11💬 1

Решение: Переворот строки по словам на Kotlin

Основное решение

fun reverseWords(input: String): String { if (input.isBlank()) { return "" } val words = input.trim().split("\s+".toRegex()) return words.asReversed().joinToString(" ") }

Анализ: O(n) по времени и O(n) по памяти. Разделяем на слова, переворачиваем список, объединяем обратно.

In-place решение для CharArray

fun reverseWordsInPlace(chars: CharArray): Int { reverse(chars, 0, chars.size) var start = 0 for (i in chars.indices) { if (i == chars.size - 1 || chars[i + 1] == ' ') { reverse(chars, start, i + 1) start = i + 2 } } return chars.size }

Сначала переворачиваем всю строку, затем каждое слово. O(n) время, O(1) память.

Unit тесты

Читать полностью ->
Калькулятор с парсингом выражений
3.0 Senior🔥 11💬 1

Решение: Калькулятор с рекурсивным спуском

Реализовал парсер математических выражений методом рекурсивного спуска.

Tokenizer для лексического анализа

Разделяет входную строку на токены: числа, операторы, скобки.

ExpressionParser - Синтаксический анализ

Грамматика:

  • expression = term ((PLUS | MINUS) term)*
  • term = factor ((MULT | DIV) factor)*
  • factor = (MINUS | PLUS) factor | primary
  • primary = NUMBER | LEFT_PAREN expression RIGHT_PAREN

Приоритет операций:

  • Скобки имеют наивысший приоритет
  • Умножение и деление выше чем сложение и вычитание
  • Унарные минус и плюс выше чем бинарные

Unit Tests (14 тестов)

Читать полностью ->
Расписание тренировок фитнес-клуба
2.2 Middle🔥 11💬 1

Решение: Приложение расписания тренировок фитнес-клуба

Архитектура Clean Architecture + MVVM с кэшированием и уведомлениями

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

Структура проекта

Читать полностью ->
Менеджер паролей с шифрованием
3.0 Senior🔥 9💬 1

Решение: Менеджер паролей с шифрованием и биометрией

Архитектура Clean Architecture + MVVM с акцентом на безопасность

Приложение использует Android KeyStore для криптографии, EncryptedSharedPreferences для конфиденциальных данных и Room для хранения зашифрованных записей.

Структура проекта

Читать полностью ->
Рестораны на карте
3.0 Senior🔥 7💬 1

Решение: Приложение для отображения ресторанов на карте

Архитектура Clean Architecture + MVVM

Приложение состоит из трёх слоёв с использованием Google Maps SDK и управлением состоянием через StateFlow.

Структура проекта

Читать полностью ->