Android Mobile | YeaHub
430 subscribers
331 photos
21 videos
593 links
Теория, подготовка к интервью и курсы для Android разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#Собес #unique #null #database
🤔 Как обеспечить уникальность необязательного поля (например, рабочего телефона) с учётом NULL-значений?

💬 Кратко:

Для обеспечения уникальности необязательного поля с NULL нужно использовать уникальный индекс, который в большинстве СУБД позволяет несколько NULL значений. Альтернативно можно использовать default значение вместо NULL или частичный индекс только для NOT NULL значений. Также можно создать вычисляемую колонку или использовать триггеры для кастомной валидации. Самый простой способ — полагаться на поведение уникального индекса с NULL.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#course #ии
📚 Мини-курс о применении ИИ в разработке

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

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🍌1
#Собес #coroutine #infinite_loop #delay
🤔 Как корутины ведут себя при использовании бесконечного цикла (например, while(true))?

💬 Кратко:

Если в корутине используется бесконечный цикл без suspend-вызовов, она заблокирует поток, в котором выполняется, поскольку не отдаёт управление планировщику. Чтобы корутина оставалась отзывчивой и переключалась, внутри цикла нужно вставлять точки приостановки (delay, yield) или вызывать неблокирующие операции.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #coroutine #dispatcher
🤔 Какие подходы можно использовать для разделения ответственности между слоями при работе с многопоточностью?

💬 Кратко:

Обычно управление потоками делят между слоями так: presentation-слой отвечает за запуск корутин и управление жизненным циклом, domain-слой использует dispatcher’ы для выполнения бизнес-логики, а data-слой работает с сетью и базой данных на своих потоках. Такой подход упрощает тестирование, делает код предсказуемым и предотвращает утечки ресурсов. Каждый слой работает только с данными своего уровня, не нарушая границы архитектуры.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #database #one-to-many #relational_model
🤔 Почему связь один-ко-многим предпочтительнее для поиска?

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

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#book #kotlin
📚 Kotlin in Action
Авторы: Дмитрий Жемеров, Светлана Исакова (2016)


Kotlin — это статически типизированный язык программирования, разрабатываемый компанией JetBrains. Благодаря тому, что Kotlin может компилироваться в байт-код Java, его использование возможно также и в операционной системе Android, а хороший синтаксис и понятная типизация делают этот язык приятнее в разработке. Книга написана создателями языка и содержит не только основы, но и информацию по совместному использованию Java и Kotlin.

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #broadcast #manifest #runtime
🤔 В чём отличие регистрации BroadcastReceiver в манифесте и в коде (runtime-регистрация)?

💬 Кратко:

При объявлении в манифесте приёмник работает даже если приложение не запущено (до Android 8.0, с ограничениями в O+), а runtime-регистрация (registerReceiver) действует только пока жив активный компонент (Activity/Service) и служит для динамических фильтров. Manifest-регистрация удобна для системных событий, runtime — для событий в пределах экрана.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
👍1
#Собес #adb #install #apk
🤔 Как происходит установка APK или AAB на устройство при запуске через Android Studio?

💬 Кратко:

APK передаётся на устройство напрямую через ADB и устанавливается одним файлом. AAB не устанавливается как есть — Android Studio генерирует набор split APK, которые затем отправляются на устройство. После проверки подписи система размещает файлы приложения и запускает его. Процесс включает оптимизацию и инкрементальные обновления.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
👍1
#article #kotlin
📚 Чем занимается Android-разработчик, или Хватит уже спрашивать у них алгоритмы

Автор, опытный Android-разработчик, развенчивает мифы о том, что на собеседованиях и в реальной работе главное — знать алгоритмы, и подробно рассказывает, чем действительно занимается мобильный разработчик: работу в команде (ревью кода, коммуникация), планирование и дизайн фич, верстку UI, написание логики приложения, управление многопоточностью, взаимодействие с инструментами сборки и публикацию в магазины приложений. Он подчеркивает, что ключевые навыки — это практический опыт, знание инструментов (например Git, Gradle, Kotlin/Java) и умение решать реальные инженерные задачи, а не только теорию алгоритмов

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #generic #type_erasure #inline
🤔 Как работают дженерики в Kotlin «под капотом»?

💬 Кратко:

Kotlin-дженерики реализованы через стирание типов (type erasure) на JVM, аналогично Java: информация о конкретном параметре типа недоступна в рантайме. Компилятор проверяет типы во время компиляции, а затем генерирует код без параметризации. Для сохранения информации о типе используют реифицированные (reified) параметры в inline-функциях.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #kotlin #nullability
🤔 Когда использовать Int vs Int??

💬 Кратко:

- Int — когда значение всегда есть (например, возраст).
- Int? — если значение может отсутствовать (например, ID несуществующего элемента).

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #group #count
🤔 Как посчитать количество записей для каждого значения поля в таблице?

💬 Кратко:

Для подсчета количества записей используется GROUP BY вместе с COUNT(). Записи группируются по значению поля, и для каждой группы считается количество строк. Это стандартный способ агрегации в SQL. Такой запрос часто используется для статистики и отчетов.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#podcast #всё
📚 TeachMeSkills IT-школа

Это серия выпусков от "TeachMeSkills Школа программирования"
Речь пойдет об актуальные направления и технологии в IT; перспективы роста начинающих специалистов; холиварные топики из жизни разработчиков.


Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
👎1
#Собес #lazycolumn #recomposition #profiling
🤔 Как исследовать причину фризов при скролле LazyColumn в Jetpack Compose?

💬 Кратко:

Используйте Layout Inspector, CPU Profiler и Composition Tracing для анализа. Причины часто в тяжёлых recomposition и modifiers.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #zygote #activity #thread
🤔 Как создаётся и запускается новый процесс приложения при старте Activity?

💬 Кратко:

При запуске Activity система сначала проверяет, существует ли процесс приложения. Если он отсутствует, Android создаёт новый процесс через Zygote — базовый процесс, содержащий заранее загруженные классы. Затем запускается главный поток приложения, инициализируется ActivityThread и создаётся Application. После этого через AMS запускается нужная Activity, вызывая её методы жизненного цикла.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #PostgreSQL #CAST #type_conversion
🤔 Как работает CAST в PostgreSQL?

💬 Кратко:
CAST в PostgreSQL используется для явного преобразования значения из одного типа данных в другой. Синтаксис: CAST(expression AS target_type) или expression::target_type. Это необходимо, когда нужно привести данные к нужному формату, например, при сравнении или вычислениях. Без CAST PostgreSQL может неявно преобразовывать типы, но это не всегда безопасно.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#article #jetpackcompose
📚 Создание кастомного Toolbar с Jetpack Compose. Подробный разбор всех попыток и решений

В статье Android-разработчик из ПСБ подробно показывает, как он создавал кастомный Toolbar на Jetpack Compose, решая ключевую проблему — корректное центрирование заголовка и подзаголовка при динамическом содержимом слева и справа. Через примеры реализации с Row и весами (weight) автор объясняет ограничения простых подходов и приходит к использованию компонента Layout, который даёт полный контроль над измерениями и позиционированием элементов, снижает ненужные рекомпозиции и делает интерфейс более стабильным и предсказуемым.

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #kotlin #null_safety #coroutine
🤔 Чем Kotlin выигрывает у Java в контексте Android-разработки?

💬 Кратко:

Kotlin лаконичнее (уменьшает boilerplate), безопаснее (null-safety), поддерживает расширения, корутины и современные концепции (коллекции, DSL), что делает код чище и меньше ошибок. Он полностью совместим с Java, позволяет плавно мигрировать существующие проекты и улучшает опыт разработки через встроенные инструменты в Android Studio.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #flow #state_flow #shared_flow
🤔 StateFlow vs SharedFlow

💬 Кратко:

StateFlow хранит последнее значение и всегда возвращает его новым подписчикам. Он похож на "живое состояние". SharedFlow не хранит состояние по умолчанию, а работает как "событийный поток", где данные могут быть потеряны, если никто не слушает. В целом: StateFlow используют для состояния экрана, SharedFlow — для одноразовых событий.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #idempotency #api #design
🤔 Что такое idempotency key и как он применяется?

💬 Кратко:

Idempotency Key — это уникальный идентификатор, который клиентская система генерирует для каждой логической операции (например, создания платежа) и отправляет вместе с запросом к API. Сервер использует этот ключ, чтобы отслеживать, был ли такой запрос уже обработан. Если ключ новый — операция выполняется, а её результат сохраняется вместе с ключом. Если ключ повторяется — сервер не выполняет операцию заново, а возвращает сохранённый ранее результат. Это предотвращает дублирование действий из-за повторных отправок запроса.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
👍1
#podcast #все
📚 Kolesa Podcast

Podcast by IT-компания Kolesa Group. В целом он обо всём и вся. Интересно для прослушивания на досуге

Перейти к материалу

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа