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

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

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

Для связи: @ruslan_kuyanets
Download Telegram
#Собес #networks
🤔 Назовите три метода аутентификации пользователя.

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😊 Топ-7 утечек памяти Android

Утечки памяти — тихие убийцы производительности приложений. Даже в 2025 году, когда Jetpack Compose доминирует в разработке пользовательских интерфейсов и появляются новые модные инструменты, эти ошибки все еще преследуют разработчиков.

Автор статьи разберет 7 наиболее распространенных виновников и вооружит вас проверенными в бою решениями.
Читать статью

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 Как ускорить релизную сборку

Из всех докладов на Mobius, которые мне удалось посмотреть, могу выделить классный доклад о том, как в Т-Банке случайно ускорили релизную сборку в два раза.

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

Так что же может значительно увеличивать длительность выполнения этой таски?

1⃣ Неоптимальные правила
Обычно это правила с условием, например, такие встречаются в библиотеке kotlinx-serialization. На них тратится больше всего времени, нужно быть аккуратнее с такими правилами и не дублировать их в своём коде, так как правила для R8 уже поставляются вместе с библиотеками.

2⃣ Огромное количество ресурсов
Таска shrinkResources может потреблять очень много оперативной памяти, и если в вашей дизайн-системе вы предоставляете большую библиотеку иконок, то, возможно, стоит пересмотреть подход и не тащить тысячи иконок, чтобы потом R8 не удалял их очень долго. Как вариант, можно рассмотреть загрузку иконок с CDN по запросу.

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

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
🛞 Extra Ktor Plugins — это набор мощных плагинов для расширения возможностей Ktor-приложений как на стороне сервера, так и на стороне клиента!

Эти плагины помогают решать распространённые задачи, такие как интеграция с Kafka, планирование задач, ограничение частоты запросов и повышение устойчивости через Circuit Breaker.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #docker
🤔 Перечислите компоненты Docker.

Docker состоит из трех основных компонентов: Docker Client, Docker Host и Docker Registry. Docker Client взаимодействует с Docker Host, отправляя команды для управления контейнерами, Docker Host управляет контейнерами и их образами, а Docker Registry хранит образы Docker.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
😬 Kanji Dojo — это приложение с открытым исходным кодом, предназначенное для изучения японского языка!

Оно помогает пользователям запоминать написание и чтение символов хираганы, катаканы и кандзи, а также изучать их значения и связанные слова. Приложение поддерживает обучение в соответствии с уровнями JLPT или школьными классами, предоставляет возможность создавать собственные наборы для изучения и использовать систему повторения на основе интервалов (SRS) для эффективного запоминания. Кроме того, Kanji Dojo включает встроенный словарь для поиска символов и слов, а также режимы обучения с помощью карточек и написания слов. Приложение работает в офлайн-режиме, что позволяет использовать его без постоянного подключения к интернету.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒2
#полезное
😊 How to: реализовать кастомный делегат

Чтобы написать кастомный делегат, нужно определить класс, который реализует интерфейс ReadOnlyProperty для делегата val или ReadWriteProperty для делегата var.

Классы, реализующие ReadOnlyProperty и ReadWriteProperty, содержат два метода:

🟠 getValue(thisRef: T, property: KProperty<*>): R, который должен возвращать значение свойства.

🟠 setValue(thisRef: T, property: KProperty<*>, value: R), который должен устанавливать значение свойства.

Например, рассмотрим создание кастомного делегата для логирования изменения значения свойства:

class LoggingDelegate(private var value: T) : ReadWriteProperty {override fun getValue(thisRef: Any?, property: KProperty): T {println(«Getting value of ${property.name}: $value»)return value}override fun setValue(thisRef: Any?, property: KProperty, value: T) {println(«Setting value of ${property.name} to $value»)this.value = value}} 


Здесь мы определяем класс LoggingDelegate, который реализует интерфейс ReadWriteProperty. Метод getValue выводит в консоль текущее значение свойства и возвращает его, а метод setValue выводит новое значение свойства в консоль и сохраняет его в переменной value.

Затем мы можем использовать наш кастомный делегат следующим образом:

class MyClass {var myProperty: Int by LoggingDelegate(0)}fun main() {val obj = MyClass()obj.myProperty = 42 // Setting value of myProperty to 42println(obj.myProperty) // Getting value of myProperty: 42}


Здесь мы создаем экземпляр класса MyClass, который содержит свойство myProperty, использующее наш кастомный делегат LoggingDelegate. При установке значения свойства или получении его значения будут вызываться соответствующие методы нашего делегата, и мы увидим соответствующие сообщения в консоли.
Подробнее в статье

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😊 Как K2 mode помогает работать IDE быстрее

Режим K2 вводит новый анализатор кода, общий для компилятора Kotlin и IDE. Он заменяет implicit laziness поэтапным подходом к анализу кода, где каждый этап анализирует определённые части кода и добавляет семантическую информацию в абстрактное синтаксическое дерево (AST). Хотя ядро компилятора остаётся однопоточным, логика разрешения теперь устойчива к параллелизму, что позволяет одновременно анализировать несколько инициализаций

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #docker
🤔 Как запустить и остановить Docker-контейнер?

Чтобы запустить Docker-контейнер, используйте команду docker start < container_id› ; для остановки контейнера используйте команду docker stop ‹container_id>.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😎 cryptography-kotlin — это мультиплатформенная библиотека на языке Kotlin, предоставляющая унифицированный API для различных криптографических операций, таких как генерация случайных чисел, шифрование, вычисление хешей, цифровые подписи, вывод ключей и соглашения о ключах!

Библиотека поддерживает алгоритмы, включая AES, RSA, ECDSA, ECDH, SHA, HMAC и PBKDF2. Она не реализует криптографические алгоритмы самостоятельно, а оборачивает проверенные решения, такие как OpenSSL 3.x, WebCrypto и JCA, обеспечивая типобезопасный API с согласованным поведением на разных платформах.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 712. Minimum ASCII Delete Sum for Two Strings

Если даны две строки s1 и s2, верните наименьшую ASCII-сумму удаленных символов, чтобы сделать две строки равными.

Пример:
Input: s1 = "sea", s2 = "eat"
Output: 231


👨‍💻 Алгоритм:

1⃣Создайте двумерный массив dp размером (len(s1) + 1) x (len(s2) + 1), где dp[i][j] будет хранить наименьшую ASCII-сумму удаленных символов для первых i символов s1 и первых j символов s2.

2⃣Заполните первую строку и первый столбец массива dp суммами ASCII значений символов, которые необходимо удалить для достижения пустой строки.

3⃣Заполните оставшуюся часть массива dp следующим образом: Если символы s1[i-1] и s2[j-1] равны, dp[i][j] = dp[i-1][j-1]. Иначе, dp[i][j] = min(dp[i-1][j] + ord(s1[i-1]), dp[i][j-1] + ord(s2[j-1])).

😎 Решение:
fun minimumDeleteSum(s1: String, s2: String): Int {
val dp = Array(s1.length + 1) { IntArray(s2.length + 1) }
for (i in 1..s1.length) {
dp[i][0] = dp[i - 1][0] + s1[i - 1].toInt()
}
for (j in 1..s2.length) {
dp[0][j] = dp[0][j - 1] + s2[j - 1].toInt()
}
for (i in 1..s1.length) {
for (j in 1..s2.length) {
if (s1[i - 1] == s2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1]
} else {
dp[i][j] = minOf(dp[i - 1][j] + s1[i - 1].toInt(), dp[i][j - 1] + s2[j - 1].toInt())
}
}
}
return dp[s1.length][s2.length]
}


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
👍 EtchDroid — это открытое приложение, которое превращает ваш смартфон в инструмент для записи образов ОС на USB-накопители. Оно выручит, если под рукой нет компьютера, а нужно срочно восстановить систему или установить Linux.

Проект поддерживает большинство современных дистрибутивов, но не работает с официальными ISO Windows и старыми образами. Разработчик честно предупреждает о минимальной телеметрии в версиях с GitHub и Google Play.

GitHub
Google Play

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #docker
🤔 Как создать Docker-образ с использованием Dockerfile?

Чтобы создать Docker-образ, необходимо использовать команду docker build, указав путь к каталогу, содержащему Dockerfile. Например, docker build -t myimage:tag . создаст образ с именем myimage и тегом tag из текущего каталога.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👋 Extra Ktor Plugins — это набор мощных плагинов для расширения возможностей Ktor-приложений как на стороне сервера, так и на стороне клиента!

Эти плагины помогают решать распространённые задачи, такие как интеграция с Kafka, планирование задач, ограничение частоты запросов и повышение устойчивости через Circuit Breaker.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤯 Galoisenne — это библиотека на Kotlin, предназначенная для работы с графами, конечными полями и дискретными динамическими системами!

Она реализует новый вычислительный подход, называемый графовыми вычислениями, который отличается от традиционных моделей, таких как машина Тьюринга или λ-исчисление Чёрча. Преимущество этого подхода заключается в возможности прямого преобразования в итеративное умножение матриц на GPU, что открывает широкие возможности для параллельных вычислений.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
❤️‍🔥 Kotlin DataFrame — библиотека для типизированной обработки данных от JetBrains, вдохновленная Pandas.

Проект позволяет загружать данные из CSV/JSON/SQL, фильтровать и агрегировать их через цепочки вызовов в Kotlin-стиле. Интересно, что инструмент поддержи очень быструю генерацию type-safe API: при работе в Jupyter Notebook или с Gradle-плагином система автоматически создаёт extension-свойства для колонок.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#Собес #docker
🤔 Что такое гипервизоры и их функции?

Гипервизор - это программное обеспечение, которое позволяет виртуализировать ресурсы хост-системы, создавая несколько виртуальных машин (VM). Существуют два типа гипервизоров: нативный (bare-metal), который работает напрямую на хост-системе, и хостинг-гипервизор, который работает через операционную систему хоста.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😇 NFCGate — это приложение для Android, предназначенное для захвата, анализа и модификации NFC-трафика!

Основные возможности NFCGate

🟠 Захват на устройстве: позволяет перехватывать NFC-трафик от сторонних приложений, работающих на устройстве.

🟠 Режим ретрансляции: передача NFC-трафика между двумя устройствами через сервер, где одно устройство работает в режиме "ридера", а другое эмулирует NFC-метку с использованием Host Card Emulation (HCE).

🟠 Режим воспроизведения: повторное воспроизведение ранее захваченного NFC-трафика в режиме "ридера" или "метки".

🟠 Клонирование: копирование начальной информации метки, такой как идентификатор (ID).

🟠 Экспорт в pcapng: сохранение захваченного NFC-трафика в формате pcapng для дальнейшего анализа в инструментах, таких как Wireshark.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
😊 Resaca — это библиотека для Jetpack Compose, позволяющая привязывать ViewModel или другие объекты к конкретным Composable функциям, обеспечивая их сохранение во время пересозданий и навигации! Это позволяет создавать более мелкие и переиспользуемые компоненты с собственной логикой, улучшая структуру и поддержку кода.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
👍 Purchases-KMP — это клиентская библиотека для системы отслеживания подписок и покупок RevenueCat, разработанная для Kotlin Multiplatform!

Она предоставляет обертку вокруг BillingClient, StoreKit и серверной части RevenueCat, упрощая реализацию внутриигровых подписок и покупок с валидацией квитанций и отслеживанием статусов.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM