TGViewer
Channel Public Channel
Android Mobile | YeaHub

Android Mobile | YeaHub

@yeahub_android_mobile

Теория, подготовка к интервью и курсы для Android разработчиков

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

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

Для связи: @ruslan_kuyanets
Subscribers
431
Photos
332
Videos
21
Links
597

Showing posts older than #46 · Back to latest

Older Posts 20 shown
Post #45 292
#Собес
🤔 Какие основные типы данных в Kotlin?

В Kotlin есть несколько основных типов данных:
🟠Числа: Int (целые числа), Double (двойной точности числа с плавающей запятой), Float (одинарной точности), Long (длинные целые числа), Short (короткие целые числа) и Byte (байты).

🟠Булевы значения: Тип Boolean , который может быть либо true , либо false .

🟠Символы: Тип Char для одного символа.

🟠Строки: Тип String для последовательности символов.

👉Новости 👉Платформа
  • 👍 2
  • 🔥 1
Post #44 250
#ЛитКод
Задача: 634. Find the Derangement of An Array

В комбинаторной математике отклонение - это перестановка элементов множества таким образом, что ни один элемент не оказывается на прежнем месте. Вам дано целое число n. Изначально имеется массив, состоящий из n целых чисел от 1 до n в порядке возрастания, верните количество отклонений, которые он может породить. Поскольку ответ может быть огромным, верните его по модулю 109 + 7.

Пример:
Input: n = 3
Output: 2


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

1⃣Инициализация массива для хранения результатов
Создайте массив dp для хранения количества отклонений для каждого значения от 0 до n. Установите начальные значения: dp[0] = 1 и dp[1] = 0.

2⃣Вычисление количества отклонений
Используйте динамическое программирование для вычисления количества отклонений для каждого значения от 2 до n. Формула для вычисления: dp[i] = (i - 1) * (dp[i - 1] + dp[i - 2]) % MOD.

3⃣Возвращение результата
Верните значение dp[n], которое будет количеством отклонений для n элементов, по модулю 10^9 + 7.

😎 Решение:
class Solution {
fun countDerangements(n: Int): Int {
val MOD = 1_000_000_007
if (n == 0) return 1
if (n == 1) return 0
val dp = IntArray(n + 1)
dp[0] = 1
dp[1] = 0
for (i in 2..n) {
dp[i] = ((i - 1) * (dp[i - 1] + dp[i - 2].toLong()) % MOD).toInt()
}
return dp[n]
}
}


👉Новости 👉Платформа
  • ❤ 1
  • 👍 1
Post #43 183
#полезное
😊 Koin — это лёгкий и прагматичный фреймворк для внедрения зависимостей (Dependency Injection) на языке Kotlin!

🟠Он поддерживает как Kotlin Multiplatform, так и Android. Koin предоставляет удобный DSL для настройки зависимостей, минимизирует избыточность кода и интегрируется с различными экосистемами, включая Jetpack Compose и Ktor.

👉Новости 👉Платформа
Post #42 172
  • 🤝 1
Post #41 160
#Собес
🤔 Чем Kotlin отличается от Java?

Kotlin и Java оба работают на JVM, но Kotlin предлагает более компактный и читаемый синтаксис. В нем встроены функции безопасности для null-ссылок, что помогает избежать типичных ошибок. Kotlin также поддерживает более современные возможности, такие как корутины для асинхронного программирования и функции расширения, чего нет в Java.

👉Новости 👉Платформа
  • ❤ 2
Post #40 143
#Вакансии
👨‍💻 Kotlin разработчик

Локация: Удаленно
Компания: YARUS
ЗП: от 1 500 до 2 500 $
Занятость: Частичная/Проектная
Город и адрес офиса: Санкт-Петербург

Kotlin – разработчик со опытом CI/CD в GitLab. B2B сегмент, готовый продукт с тестами и CICD, надо дотюнить CI/CD в GitLab (перевод на новые тесты) + пилить новые фичи (опыт работы с SDK Zebra, Honeywell желательно), апа под ТСД. Текущий разработчик проконсультирует, есть качественная дока, НЕ легаси.

🚩Требования
🔵Опыт работы в разработке от 3х лет
🔵Опыт работы с мобильной фермой (STF или аналог), SonarQube
🔵Практические знания архитектурных паттернов (MVC, MVP, MVVM, MVI)
🔵Опыт работы с SDK, Jetpack Compose, Retrofit
🔵Наличие репрезентативного pet-проекта или прод-проекта с целью демонстрации тех. скиллов обязательно

💬 Резюме отправлять: @yarus_y

👉Новости 👉Платформа
  • ❤ 3
Post #39 119
#Полезное
👩‍💻 Android представил свою новую функцию RCS!

RCS (Rich Communication Services) — это стандарт для обмена сообщениями, который улучшает SMS и MMS, предоставляя пользователям более расширенные возможности, такие как передача медиафайлов высокого качества, поддержка групповых чатов, обмен реакциями на сообщения и подтверждения доставки.

Основные особенности RCS:

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

🟠 Групповые чаты и подтверждения: Поддержка групповых чатов с улучшенными функциями, включая подтверждения о доставке и прочтении сообщений.

🟠 Интеграция с интернетом: В отличие от стандартных SMS и MMS, сообщения RCS отправляются через интернет, что позволяет улучшить качество связи и снизить затраты на обмен сообщениями.

👉Новости 👉Платформа
  • 🔥 4
  • ❤ 2
Post #38 103
  • ❤ 1
Post #37 120
#Собес
🤔 Расскажи про анонимные классы и объекты, object u companion object

Анонимные классы в Kotlin создаются с использованием ключевого слова object и не требуют явного обьявления. Они реализуют интерфейсы или наследуют классы и могут использоваться для одноразовых целей. object в Kotlin также используется для объявления объектов-синглтонов (object declaration) и для создания объектов внутри классов (companion object), которые действуют как статические поля.

👉Новости 👉Платформа
  • ❤ 2
Post #36 101
  • ❤ 2
Post #35 107
#ЛитКод
Задача: 632. Smallest Range Covering Elements from K Lists

У вас есть k списков отсортированных целых чисел в неубывающем порядке. Найдите наименьший диапазон, в который входит хотя бы одно число из каждого из k списков. Мы определяем, что диапазон [a, b] меньше диапазона [c, d], если b - a < d - c или a < c, если b - a == d - c.

Пример:
Input: nums = [[4,10,15,24,26],[0,9,12,20],[5,18,22,30]]
Output: [20,24]


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

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

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

3⃣Проверка и обновление диапазона
Продолжайте обновлять кучу и диапазон, пока возможно. Завершите, когда один из списков исчерпан.

😎 Решение:
import java.util.PriorityQueue

data class Element(val value: Int, val row: Int, val col: Int)

class Solution {
fun smallestRange(nums: List<List<Int>>): IntArray {
val minHeap = PriorityQueue<Element> { a, b -> a.value - b.value }
var maxValue = Int.MIN_VALUE

for (i in nums.indices) {
minHeap.add(Element(nums[i][0], i, 0))
maxValue = maxOf(maxValue, nums[i][0])
}

var rangeStart = 0
var rangeEnd = Int.MAX_VALUE

while (minHeap.size == nums.size) {
val minElement = minHeap.poll()
if (maxValue - minElement.value < rangeEnd - rangeStart) {
rangeStart = minElement.value
rangeEnd = maxValue
}

if (minElement.col + 1 < nums[minElement.row].size) {
val value = nums[minElement.row][minElement.col + 1]
minHeap.add(Element(value, minElement.row, minElement.col + 1))
maxValue = maxOf(maxValue, value)
}
}

return intArrayOf(rangeStart, rangeEnd)
}
}


👉Новости 👉Платформа
  • ❤ 2
Post #33 94
#полезное
👨‍💻 Гибрид двух легендарных игр

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

👉Новости 👉Платформа
Post #31 132
#ЧеКак
🤔 Как происходит составление хешмапы, если совпадает хеш-код?

Если два ключа имеют одинаковый хеш-код (коллизия), используются механизмы разрешения:
🟠Связанные списки (chaining): элементы с одинаковым хешем помещаются в один bucket в виде связанного списка.
🟠Сбалансированные деревья: современные реализации (например, в Java) используют деревья вместо списков для ускорения поиска при большом количестве коллизий.
🟠Метод equals используется для проверки уникальности ключей в случае совпадения хеша.

👉Новости 👉Платформа
Post #29 140
#ЧеКак
🤔 Что такое мульти-декларации (destructuring declarations)?

Мульти-декларации (destructuring declarations или деструктуризирующее присваивание) — это способ извлечения значений из объекта и присвоения их сразу нескольким переменным. В Kotlin этот механизм поддерживается с помощью оператора распаковки (destructuring operator) — componentN(), где N — номер компонента.

🟠При создании data класса Kotlin автоматически создает функции componentN() для каждого свойства класса, где N — номер позиции переменной в конструкторе. Функции componentN() возвращают значения свойств в порядке их объявления в конструкторе. Это позволяет использовать мульти-декларации для распаковки значений свойств и присваивания их отдельным переменным.

Например, если у нас есть data класс Person с двумя свойствами name и age, мы можем использовать мульти-декларации, чтобы извлечь эти свойства и присвоить их двум переменным:

data class Person(val name: String, val age: Int)

val person = Person("Alice", 29)
val (name, age) = person

println(name) // Alice
println(age) // 29

Также можно использовать мульти-декларации в циклах, чтобы итерироваться по спискам объектов и распаковывать значения свойств:


val people = listOf(Person("Alice", 30), Person("Bob", 40))
for ((name, age) in people) {
println("$name is $age years old")
}

// Alice is 30 years old
// Bob is 40 years old


Мульти-декларации также могут быть использованы с массивами и другими коллекциями:

val list = listOf("apple", "banana", "orange")
val (first, second, third) = list

println(first) // apple
println(second) // banana
println(third) // orange


👉Новости 👉Платформа
Post #27 102
#ЛитКод
🤔 Задача: 672. Bulb Switcher II

Есть комната с n лампочками, пронумерованными от 1 до n, которые изначально все включены, и четыре кнопки на стене. Каждая из четырех кнопок имеет разную функциональность:

Кнопка 1: Переключает состояние всех лампочек.
Кнопка 2: Переключает состояние всех лампочек с четными номерами (т.е. 2, 4, ...).
Кнопка 3: Переключает состояние всех лампочек с нечетными номерами (т.е. 1, 3, ...).
Кнопка 4: Переключает состояние всех лампочек с номером j = 3k + 1, где k = 0, 1, 2, ... (т.е. 1, 4, 7, 10, ...).
Необходимо сделать ровно presses нажатий кнопок. Для каждого нажатия можно выбрать любую из четырех кнопок для нажатия.

Даны два целых числа n и presses, вернуть количество различных возможных состояний после выполнения всех presses нажатий кнопок.

Пример:
Input: n = 1, presses = 1
Output: 2
Explanation: Status can be:
- [off] by pressing button 1
- [on] by pressing button 2


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

1⃣Рассчитаем возможные множества остатков: то есть какие множества c_i = f_i (mod 2) возможны.

2⃣Так как c_i ≡ f_i и c_i ≤ f_i, если ∑f_i ≠ ∑c_i, или если ∑f_i < ∑c_i, это невозможно. В противном случае это возможно простым построением: выполните операции, указанные c_i, затем выполните операцию номер 1 с четным числом оставшихся операций.

3⃣Для каждого возможного множества остатков симулируем и запоминаем, как будут выглядеть первые 6 лампочек, сохраняя это в структуре Set. В конце возвращаем размер этого множества.

😎 Решение:
class Solution {
fun flipLights(n: Int, m: Int): Int {
val seen = mutableSetOf<Int>()
val n = minOf(n, 6)
val shift = maxOf(0, 6 - n)
for (cand in 0 until 16) {
val bcount = Integer.bitCount(cand)
if (bcount % 2 == m % 2 && bcount <= m) {
var lights = 0
if ((cand shr 0 and 1) > 0) lights = lights xor (0b111111 shr shift)
if ((cand shr 1 and 1) > 0) lights = lights xor (0b010101 shr shift)
if ((cand shr 2 and 1) > 0) lights = lights xor (0b101010 shr shift)
if ((cand shr 3 and 1) > 0) lights = lights xor (0b100100 shr shift)
seen.add(lights)
}
}
return seen.size
}
}


👉Новости 👉Платформа
Post #26 90
#ЧеКак
🤔 Как происходит составление хешмапы, если совпадает хеш-код?

Если два ключа имеют одинаковый хеш-код (коллизия), используются механизмы разрешения:
🟠Связанные списки (chaining): элементы с одинаковым хешем помещаются в один bucket в виде связанного списка.
🟠Сбалансированные деревья: современные реализации (например, в Java) используют деревья вместо списков для ускорения поиска при большом количестве коллизий.
🟠Метод equals используется для проверки уникальности ключей в случае совпадения хеша.

👉Новости 👉Платформа
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →