#Собес #kotlin #sealed #class
🤔 Middle Android-разработчик (Kotlin) в компанию Ютека
Техническое собеседование. Осень 2024. 200к+. Опыт в резюме 3 года 3 месяца. В конце был большой блок лайвкодинга.
💬 Вопросы:
- Чем Kotlin выигрывает у Java в контексте Android-разработки?
- Какими способами можно запустить корутину в Kotlin?
- При использовании Flow, какой Dispatcher вы бы выбрали для работы с UI и для фоновых задач?
- Как ту же логику организовать через LiveData и в чём отличие от Flow?
- Что такое sealed-классы и для чего они применяются?
👉 Все вопросы из этого собеседования (11)
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Middle Android-разработчик (Kotlin) в компанию Ютека
Техническое собеседование. Осень 2024. 200к+. Опыт в резюме 3 года 3 месяца. В конце был большой блок лайвкодинга.
💬 Вопросы:
- Чем Kotlin выигрывает у Java в контексте Android-разработки?
- Какими способами можно запустить корутину в Kotlin?
- При использовании Flow, какой Dispatcher вы бы выбрали для работы с UI и для фоновых задач?
- Как ту же логику организовать через LiveData и в чём отличие от Flow?
- Что такое sealed-классы и для чего они применяются?
👉 Все вопросы из этого собеседования (11)
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #observability #tracing
🤔 Как обеспечивать observability системы (логирование, метрики, трейсинг)?
💬 Кратко:
Observability достигается через централизованное логирование, метрики, трейсинг, корелляцию запросов, алертинг и визуализацию. Используются стек ELK или Loki, Prometheus/Grafana, Jaeger/OpenTelemetry. Цель — понимать состояние системы и находить проблемы быстро и точно.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как обеспечивать observability системы (логирование, метрики, трейсинг)?
💬 Кратко:
Observability достигается через централизованное логирование, метрики, трейсинг, корелляцию запросов, алертинг и визуализацию. Используются стек ELK или Loki, Prometheus/Grafana, Jaeger/OpenTelemetry. Цель — понимать состояние системы и находить проблемы быстро и точно.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#repository #клоны
📚 Clone Wars
Репо для тех, кто любит учиться на реальных примерах. Тут собрано более сотни опенсорсных клонов популярных сервисов: от Airbnb до YouTube
Каждый проект снабжен ссылками на исходный код, демками, описанием стека и количеством звезд на GitHub. А у некоторых даже есть туторы по созданию
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
📚 Clone Wars
Репо для тех, кто любит учиться на реальных примерах. Тут собрано более сотни опенсорсных клонов популярных сервисов: от Airbnb до YouTube
Каждый проект снабжен ссылками на исходный код, демками, описанием стека и количеством звезд на GitHub. А у некоторых даже есть туторы по созданию
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #multiprocess #isolation #crash_safety
🤔 Какие преимущества даёт запуск Android-приложения в нескольких процессах?
💬 Кратко:
Запуск в нескольких процессах изолирует компоненты, повышает отказоустойчивость и позволяет управлять ресурсами отдельно.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Какие преимущества даёт запуск Android-приложения в нескольких процессах?
💬 Кратко:
Запуск в нескольких процессах изолирует компоненты, повышает отказоустойчивость и позволяет управлять ресурсами отдельно.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #smart_casts #null_safety #data_types
🤔 Объясните концепцию умных приведений типов в Kotlin.
💬 Кратко:
Умные приведения типов в Kotlin позволяют компилятору автоматически преобразовывать переменные в ненулевые типы после проверки на
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Объясните концепцию умных приведений типов в Kotlin.
💬 Кратко:
Умные приведения типов в Kotlin позволяют компилятору автоматически преобразовывать переменные в ненулевые типы после проверки на
null. Это позволяет избежать необходимости вручную указывать типы и повышает безопасность и читаемость кода.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #unique #null #database
🤔 Как обеспечить уникальность необязательного поля (например, рабочего телефона) с учётом NULL-значений?
💬 Кратко:
Для обеспечения уникальности необязательного поля с NULL нужно использовать уникальный индекс, который в большинстве СУБД позволяет несколько NULL значений. Альтернативно можно использовать default значение вместо NULL или частичный индекс только для NOT NULL значений. Также можно создать вычисляемую колонку или использовать триггеры для кастомной валидации. Самый простой способ — полагаться на поведение уникального индекса с NULL.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как обеспечить уникальность необязательного поля (например, рабочего телефона) с учётом NULL-значений?
💬 Кратко:
Для обеспечения уникальности необязательного поля с NULL нужно использовать уникальный индекс, который в большинстве СУБД позволяет несколько NULL значений. Альтернативно можно использовать default значение вместо NULL или частичный индекс только для NOT NULL значений. Также можно создать вычисляемую колонку или использовать триггеры для кастомной валидации. Самый простой способ — полагаться на поведение уникального индекса с NULL.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#course #ии
📚 Мини-курс о применении ИИ в разработке
Он рассчитан на начинающих, пройти его можно всего за час. Конспекты доступны на русском языке
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
📚 Мини-курс о применении ИИ в разработке
Он рассчитан на начинающих, пройти его можно всего за час. Конспекты доступны на русском языке
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🍌1
#Собес #coroutine #infinite_loop #delay
🤔 Как корутины ведут себя при использовании бесконечного цикла (например, while(true))?
💬 Кратко:
Если в корутине используется бесконечный цикл без
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как корутины ведут себя при использовании бесконечного цикла (например, while(true))?
💬 Кратко:
Если в корутине используется бесконечный цикл без
suspend-вызовов, она заблокирует поток, в котором выполняется, поскольку не отдаёт управление планировщику. Чтобы корутина оставалась отзывчивой и переключалась, внутри цикла нужно вставлять точки приостановки (delay, yield) или вызывать неблокирующие операции.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #coroutine #dispatcher
🤔 Какие подходы можно использовать для разделения ответственности между слоями при работе с многопоточностью?
💬 Кратко:
Обычно управление потоками делят между слоями так: presentation-слой отвечает за запуск корутин и управление жизненным циклом, domain-слой использует dispatcher’ы для выполнения бизнес-логики, а data-слой работает с сетью и базой данных на своих потоках. Такой подход упрощает тестирование, делает код предсказуемым и предотвращает утечки ресурсов. Каждый слой работает только с данными своего уровня, не нарушая границы архитектуры.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Какие подходы можно использовать для разделения ответственности между слоями при работе с многопоточностью?
💬 Кратко:
Обычно управление потоками делят между слоями так: presentation-слой отвечает за запуск корутин и управление жизненным циклом, domain-слой использует dispatcher’ы для выполнения бизнес-логики, а data-слой работает с сетью и базой данных на своих потоках. Такой подход упрощает тестирование, делает код предсказуемым и предотвращает утечки ресурсов. Каждый слой работает только с данными своего уровня, не нарушая границы архитектуры.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #database #one-to-many #relational_model
🤔 Почему связь один-ко-многим предпочтительнее для поиска?
💬 Кратко:
Связь один-ко-многим реализуется через внешний ключ в дочерней таблице, ссылающийся на первичный ключ родительской таблицы. Это позволяет эффективно индексировать внешний ключ, что ускоряет поиск всех дочерних записей для заданной родительской. Такая структура избегает избыточности данных и обеспечивает целостность, что делает запросы предсказуемыми и быстрыми. В отличие от связи многие-ко-многим, здесь не требуется промежуточная таблица, что упрощает запросы.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Почему связь один-ко-многим предпочтительнее для поиска?
💬 Кратко:
Связь один-ко-многим реализуется через внешний ключ в дочерней таблице, ссылающийся на первичный ключ родительской таблицы. Это позволяет эффективно индексировать внешний ключ, что ускоряет поиск всех дочерних записей для заданной родительской. Такая структура избегает избыточности данных и обеспечивает целостность, что делает запросы предсказуемыми и быстрыми. В отличие от связи многие-ко-многим, здесь не требуется промежуточная таблица, что упрощает запросы.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#book #kotlin
📚 Kotlin in Action
Авторы: Дмитрий Жемеров, Светлана Исакова (2016)
Kotlin — это статически типизированный язык программирования, разрабатываемый компанией JetBrains. Благодаря тому, что Kotlin может компилироваться в байт-код Java, его использование возможно также и в операционной системе Android, а хороший синтаксис и понятная типизация делают этот язык приятнее в разработке. Книга написана создателями языка и содержит не только основы, но и информацию по совместному использованию Java и Kotlin.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
📚 Kotlin in Action
Авторы: Дмитрий Жемеров, Светлана Исакова (2016)
Kotlin — это статически типизированный язык программирования, разрабатываемый компанией JetBrains. Благодаря тому, что Kotlin может компилироваться в байт-код Java, его использование возможно также и в операционной системе Android, а хороший синтаксис и понятная типизация делают этот язык приятнее в разработке. Книга написана создателями языка и содержит не только основы, но и информацию по совместному использованию Java и Kotlin.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #broadcast #manifest #runtime
🤔 В чём отличие регистрации BroadcastReceiver в манифесте и в коде (runtime-регистрация)?
💬 Кратко:
При объявлении в манифесте приёмник работает даже если приложение не запущено (до Android 8.0, с ограничениями в O+), а 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, которые затем отправляются на устройство. После проверки подписи система размещает файлы приложения и запускает его. Процесс включает оптимизацию и инкрементальные обновления.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как происходит установка APK или AAB на устройство при запуске через Android Studio?
💬 Кратко:
APK передаётся на устройство напрямую через ADB и устанавливается одним файлом. AAB не устанавливается как есть — Android Studio генерирует набор split APK, которые затем отправляются на устройство. После проверки подписи система размещает файлы приложения и запускает его. Процесс включает оптимизацию и инкрементальные обновления.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
👍1
#article #kotlin
📚 Чем занимается Android-разработчик, или Хватит уже спрашивать у них алгоритмы
Автор, опытный Android-разработчик, развенчивает мифы о том, что на собеседованиях и в реальной работе главное — знать алгоритмы, и подробно рассказывает, чем действительно занимается мобильный разработчик: работу в команде (ревью кода, коммуникация), планирование и дизайн фич, верстку UI, написание логики приложения, управление многопоточностью, взаимодействие с инструментами сборки и публикацию в магазины приложений. Он подчеркивает, что ключевые навыки — это практический опыт, знание инструментов (например Git, Gradle, Kotlin/Java) и умение решать реальные инженерные задачи, а не только теорию алгоритмов
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
📚 Чем занимается Android-разработчик, или Хватит уже спрашивать у них алгоритмы
Автор, опытный Android-разработчик, развенчивает мифы о том, что на собеседованиях и в реальной работе главное — знать алгоритмы, и подробно рассказывает, чем действительно занимается мобильный разработчик: работу в команде (ревью кода, коммуникация), планирование и дизайн фич, верстку UI, написание логики приложения, управление многопоточностью, взаимодействие с инструментами сборки и публикацию в магазины приложений. Он подчеркивает, что ключевые навыки — это практический опыт, знание инструментов (например Git, Gradle, Kotlin/Java) и умение решать реальные инженерные задачи, а не только теорию алгоритмов
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #generic #type_erasure #inline
🤔 Как работают дженерики в Kotlin «под капотом»?
💬 Кратко:
Kotlin-дженерики реализованы через стирание типов (type erasure) на JVM, аналогично Java: информация о конкретном параметре типа недоступна в рантайме. Компилятор проверяет типы во время компиляции, а затем генерирует код без параметризации. Для сохранения информации о типе используют реифицированные (
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как работают дженерики в Kotlin «под капотом»?
💬 Кратко:
Kotlin-дженерики реализованы через стирание типов (type erasure) на JVM, аналогично Java: информация о конкретном параметре типа недоступна в рантайме. Компилятор проверяет типы во время компиляции, а затем генерирует код без параметризации. Для сохранения информации о типе используют реифицированные (
reified) параметры в inline-функциях.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #kotlin #nullability
🤔 Когда использовать Int vs Int??
💬 Кратко:
-
-
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Когда использовать Int vs Int??
💬 Кратко:
-
Int — когда значение всегда есть (например, возраст).-
Int? — если значение может отсутствовать (например, ID несуществующего элемента).📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #group #count
🤔 Как посчитать количество записей для каждого значения поля в таблице?
💬 Кратко:
Для подсчета количества записей используется
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как посчитать количество записей для каждого значения поля в таблице?
💬 Кратко:
Для подсчета количества записей используется
GROUP BY вместе с COUNT(). Записи группируются по значению поля, и для каждой группы считается количество строк. Это стандартный способ агрегации в SQL. Такой запрос часто используется для статистики и отчетов.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#podcast #всё
📚 TeachMeSkills IT-школа
Это серия выпусков от "TeachMeSkills Школа программирования"
Речь пойдет об актуальные направления и технологии в IT; перспективы роста начинающих специалистов; холиварные топики из жизни разработчиков.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
📚 TeachMeSkills IT-школа
Это серия выпусков от "TeachMeSkills Школа программирования"
Речь пойдет об актуальные направления и технологии в IT; перспективы роста начинающих специалистов; холиварные топики из жизни разработчиков.
Перейти к материалу
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
👎1
#Собес #lazycolumn #recomposition #profiling
🤔 Как исследовать причину фризов при скролле LazyColumn в Jetpack Compose?
💬 Кратко:
Используйте
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как исследовать причину фризов при скролле LazyColumn в Jetpack Compose?
💬 Кратко:
Используйте
Layout Inspector, CPU Profiler и Composition Tracing для анализа. Причины часто в тяжёлых recomposition и modifiers.📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
#Собес #zygote #activity #thread
🤔 Как создаётся и запускается новый процесс приложения при старте Activity?
💬 Кратко:
При запуске Activity система сначала проверяет, существует ли процесс приложения. Если он отсутствует, Android создаёт новый процесс через Zygote — базовый процесс, содержащий заранее загруженные классы. Затем запускается главный поток приложения, инициализируется
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как создаётся и запускается новый процесс приложения при старте 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 может неявно преобразовывать типы, но это не всегда безопасно.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
🤔 Как работает CAST в PostgreSQL?
💬 Кратко:
CAST в PostgreSQL используется для явного преобразования значения из одного типа данных в другой. Синтаксис: CAST(expression AS target_type) или expression::target_type. Это необходимо, когда нужно привести данные к нужному формату, например, при сравнении или вычислениях. Без CAST PostgreSQL может неявно преобразовывать типы, но это не всегда безопасно.
📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору
📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа