ОПИСАНИЕ
Если задана строка s, состоящая из слов и пробелов, верните длину последнего слова в строке.
Слово - это максимальная подстрока, состоящая только из символов, не содержащих пробелов.
ПРИМЕРЫ
Input: s = "Hello World"
Output: 5
Explanation: The last word is "World" with length 5.
Input: s = " fly me to the moon "
Output: 4
Explanation: The last word is "moon" with length 4.
Input: s = "luffy is still joyboy"
Output: 6
Explanation: The last word is "joyboy" with length 6.
Please open Telegram to view this post
VIEW IN TELEGRAM
LeetCode
Length of Last Word - LeetCode
Can you solve this real interview question? Length of Last Word - Given a string s consisting of words and spaces, return the length of the last word in the string.
A word is a maximal substring consisting of non-space characters only.
Example 1:
Input:…
A word is a maximal substring consisting of non-space characters only.
Example 1:
Input:…
qa.log
Зачем такая задача?
🔽 Задача обучает работать с данными, содержащими структурированные и неструктурированные фрагменты (например, журнал запросов, CSV, чат‑логи), где нужно быстро выделить последний токен, код операции, ключевое слово и тд.
Можно решать разными способами с и без ориентации на память и скорость, процессно или чисто алгоритмически.
Примитивные примеры:
🟢 Телеграм‑бот, который на последнем слове анализирует команду: например, ввод "помоги мне с оплатой”. Бот должен быстро определить "оплатой".
🟢 Парсер логов, где последние слова - это статусы (OK, FAIL, TIMEOUT). Решение позволяет оперативно извлечь статус.
На Reddit люди обсуждают, как избежать лишнего расхода памяти, предлагая, например, такой подход:
Можно решать разными способами с и без ориентации на память и скорость, процессно или чисто алгоритмически.
Примитивные примеры:
На Reddit люди обсуждают, как избежать лишнего расхода памяти, предлагая, например, такой подход:
“You can just iterate backwards through the string to count the characters till you hit either a whitespace or the start of the string. This prevents the need to waste space by splitting the string up into an array.”
Please open Telegram to view this post
VIEW IN TELEGRAM
Reddit
From the leetcode community on Reddit: how does it get any better https://leetcode.com/problems/length-of-last-word/
Explore this post and more from the leetcode community
This media is not supported in your browser
VIEW IN TELEGRAM
Что еще нам может предложить AI-ассистент?
Рефакторинг.
Выбираем интресующий нас участок кода и запрашиваем предложение по рефакторингу.
В зависимости от используемой модели рекомендации могут быть подобраны с отличиями.
Если предложенный вариант соответсвует ожиданиям - изменения можно применить, если нет - отказаться или отредактировать вручную “на месте”.
Может быть полезно для выявления “незаметных” или неоптимальных мест в коде.
Please open Telegram to view this post
VIEW IN TELEGRAM
ОПИСАНИЕ
Вам дано большое целое число, представленное в виде целочисленного массива digits, где каждая digits[i] - это i-я цифра целого числа. Цифры упорядочены от наибольшего значения к наименьшему в порядке слева направо. Большое целое число не содержит ведущих 0.
Увеличьте большое целое число на единицу и верните полученный массив цифр.
ПРИМЕРЫ
Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.
Incrementing by one gives 123 + 1 = 124.
Thus, the result should be [1,2,4].
Input: digits = [4,3,2,1]
Output: [4,3,2,2]
Explanation: The array represents the integer 4321.
Incrementing by one gives 4321 + 1 = 4322.
Thus, the result should be [4,3,2,2].
Input: digits = [9]
Output: [1,0]
Explanation: The array represents the integer 9.
Incrementing by one gives 9 + 1 = 10.
Thus, the result should be [1,0].
Please open Telegram to view this post
VIEW IN TELEGRAM
LeetCode
Plus One - LeetCode
Can you solve this real interview question? Plus One - You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to…
qa.log
Зачем такая задача?
🔽 Первая мысль, которая пришла в голову - очень большие числа. Числа, которые не помещаются в специализированные форматы
Удобное решение для реализации версионирования
int/long. Удобное решение для реализации версионирования
1.9 → 2.0 или счетчиков в системах аналитики - клики, охваты, просмотры и тп.Please open Telegram to view this post
VIEW IN TELEGRAM
Начнем разговор об исключениях
Please open Telegram to view this post
VIEW IN TELEGRAM
qa.log
Исключения - это механизм, с помощью которого Kotlin (и Java) сигнализирует об ошибочной или нестандартной ситуации во время выполнения (runtime) программы.
🔽 Класс
🔽
↪️ Классы исключений:
Error описывает внутренние ошибки в исполняющей среде Java, а исключения наследуются от класса Exception.RuntimeException является базовым классом для так называемой группы непроверяемых исключений (unchecked exceptions) - компилятор не проверяет факт обработки таких исключений. Такие исключения являются следствием ошибок разработчика, например, неверное преобразование типов или выход за пределы массива.RuntimeException - Исключения, происходящие во время выполнения программыNullPointerException - Возникает, когда приложение пытается использовать null в случае, когда требуется объект.
data class User(val name: String)
fun main() {
val user: User? = null
println(user!!.name) // Возникнет исключение, т.к. значение переменной - null, а мы гарантировали, что там не null
}
IndexOutOfBoundsException - Указывает, что программа пытается получить из массива элемент, позиция которого превышает размер массива.
fun main() {
val daysOfWeek = arrayOf("Понедельник", "Среда", "Пятница")
println(daysOfWeek[6]) // Хотим отобразить "Воскресенье", но элементов в массиве всего 3
}
ArithmeticException - Вызывается при возникновении исключительного арифметического условия. Например, целое число "делится на ноль".
fun main() {
val result = 10 / 0 // Ошибка деления на 0
}
NumberFormatException - Указывает, что приложение попыталось преобразовать строку в один из числовых типов, но строка не имеет соответствующего формата.
fun main() {
val inputData = readln() // вводим "10b" вместо ожидаемоего "10"
val inputNumber = inputData.toInt()
}
NoSuchElementException - Указывает, что запрашиваемый элемент не существует или коллекция пуста.
fun main() {
val petNames = listOf("Bobby", "Luna", "Max")
val searchName = "Charlie"
val result = petNames.first { it == searchName }
println("Найденный питомец: $result")
} // Не найдено совпадений в списке
Please open Telegram to view this post
VIEW IN TELEGRAM
ОПИСАНИЕ
Вы поднимаетесь по лестнице. Чтобы добраться до вершины, нужно сделать n шагов.
Каждый раз вы можете подняться либо на 1, либо на 2 ступеньки. Сколькими разными способами вы можете подняться на вершину?
ПРИМЕРЫ
kotlin
Input: n = 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps
Input: n = 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step
Please open Telegram to view this post
VIEW IN TELEGRAM
LeetCode
Climbing Stairs - LeetCode
Can you solve this real interview question? Climbing Stairs - You are climbing a staircase. It takes n steps to reach the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Example 1:
Input: n = 2…
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Example 1:
Input: n = 2…
qa.log
Зачем такая задача?
🔽 Классическая задачка на числа Фибоначчи, иллюстирующая идею: одно решение может строиться из комбинаций двух предыдущих.
Т.е. чтобы попасть на n-ю ступеньку, необходимо перейти либо:
- с (n-1)-й ступени (шаг на 1),
- либо с (n-2)-й ступени (шаг на 2).
Пример: клиент может списать бонусы по 1 или по 2 единицы за раз. Задача моделирует, сколькими комбинациями он сможет обнулить баланс.
Т.е. чтобы попасть на n-ю ступеньку, необходимо перейти либо:
- с (n-1)-й ступени (шаг на 1),
- либо с (n-2)-й ступени (шаг на 2).
Пример: клиент может списать бонусы по 1 или по 2 единицы за раз. Задача моделирует, сколькими комбинациями он сможет обнулить баланс.
Please open Telegram to view this post
VIEW IN TELEGRAM
qa.log
Зачем такая задача? 🔽 Классическая задачка на числа Фибоначчи, иллюстирующая идею: одно решение может строиться из комбинаций двух предыдущих. Т.е. чтобы попасть на n-ю ступеньку, необходимо перейти либо: - с (n-1)-й ступени (шаг на 1), - либо с (n-2)-й ступени…
Механика их использования крайне популярна в scrum-методологих именно ввиду своей логики: если дана крупная задача, то выдвигается гипотеза о количестве способов её подразделения для уменьшения сложности в реализации.
Видим значение 13 и строим предположение о вариантах разделения этого числа на меньшие обозначения: 8 + 5.
Или 2 + 3 + 3 + 5.
И так далее.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
SUGGEST REFACTORINGSИнтересная функциональность AI-ассистента для самопроверки и случаев, когда кажется, что место ошибки найдено, а сама ошибка - нет.
Логика работы с предложенным рефакторингам единообразна:
Please open Telegram to view this post
VIEW IN TELEGRAM
Итак, ключевые темы 2025 года
🟠 AI, LLM и автоматизация QA:
- «Собеседование QA под нейросетью: когда ИИ говорит „Да“» (Сбер)
- «AI-генерация тестовых данных. От DataFaker к AI-агентам» (Сбер)
- «Взлом AI-агентов: прикладная инструкция к уязвимостям LLM и тулов» (AMA и Т-Банк)
- «Автогенерация тестов в IDE: как RAG + LLM превращают ручные сценарии в код» (Сбер)
- «Переход от автоматизации к роботизации: эволюция QA» (Т-Банк и Explyt)
➡️ Заметен восходящий тренд на активное внедрение LLM и AI-агентов во все этапы тестирования.
- «Собеседование QA под нейросетью: когда ИИ говорит „Да“» (Сбер)
- «AI-генерация тестовых данных. От DataFaker к AI-агентам» (Сбер)
- «Взлом AI-агентов: прикладная инструкция к уязвимостям LLM и тулов» (AMA и Т-Банк)
- «Автогенерация тестов в IDE: как RAG + LLM превращают ручные сценарии в код» (Сбер)
- «Переход от автоматизации к роботизации: эволюция QA» (Т-Банк и Explyt)
Please open Telegram to view this post
VIEW IN TELEGRAM
- «Test Impact Analysis» (Ozon Банк)
- «Тест-кейсы как код» (Ozon Банк)
- «Appium-тесты на ARM» (Okko, Exness)
- «Postman → Hoppscotch» (Koronatech, Tempo)
- «Broken access control через уязвимости бизнес-логики» (ATI SU, Т-Банк)
- «Debug Once, Test Forever» (Explyt, Контур)
- «Как замокать весь МИР» (Ozon Банк)
Please open Telegram to view this post
VIEW IN TELEGRAM
- «Автотесты мобильных приложений 360» (Ozon)
- «Почему ваш сайт ломается, когда его трогают пальцем» (Selectel, Ozon Банк)
- «От „кажется, медленно“ до точных метрик: объективная оценка производительности фронтенда» (2GIS, Т-Банк)
- «Браузерные инструменты: пишем своё расширение» (2ГИС, SM Lab)
- «Прогрессивные веб-приложения и их автотесты» (Ozon Банк, Dodo Engineering)
Please open Telegram to view this post
VIEW IN TELEGRAM
- «Нагрузочное тестирование enterprise NGFW с Cisco TRex» (InfoWatch, Т-Банк)
- «Env-тесты: как упростить жизнь разработчикам и тестировщикам» (РСХБ.цифра, Контур)
- «Как успеть протестировать устройство, пока оно едет по конвейеру» (Яндекс, Гранч)
- «Миграция тестов в Linux» (Сбер, Монитор Электрик)
Please open Telegram to view this post
VIEW IN TELEGRAM
- «Тестирование с заботой» (Effective, Tempo)
- «Как разрабатываются и тестируются новые лекарства» (BIOCAD)
- «Матерюсь — значит, существую» (Афонина, JUG Ru Group)
Please open Telegram to view this post
VIEW IN TELEGRAM
Немного обобщенных наблюдений:
Много докладов от Ozon Банка, Сбера и Т-Банка➡️ три крупных представителя QA-экспертизы в РФ.
Explyt, Tempo, Контур участвуют в почти каждом втором слоте➡️ менее крупные игроки начинают активно заявлять о себе.
Любопытно, что Яндекс практически не представлен. Возможно, из-за самописности.
Присутствуют AI-технологии во всех треках: от тест-кейсов до пост-анализа➡️ набирает ход многосторонний поиск применения искусственного интеллекта. Однако повторяемость участников в этих дисциплинах намекает на высокие потребности в мощностях.
Много докладов от Ozon Банка, Сбера и Т-Банка
Explyt, Tempo, Контур участвуют в почти каждом втором слоте
Любопытно, что Яндекс практически не представлен. Возможно, из-за самописности.
Присутствуют AI-технологии во всех треках: от тест-кейсов до пост-анализа
Please open Telegram to view this post
VIEW IN TELEGRAM
Итоги Heisenbug 2025 Autumn:
🟠 🟠 🟠 QA превращается в R&D-дисциплину
🟠 🟠 🟠 Тестирование становится данными, кодом и частью pipeline-а
🟠 🟠 🟠 В фокусе - автоматизация через AI и сценарное мышление
🟠 🟠 🟠 Новая реальность рынка занятости: адаптация к еще более узкой воронке требований
Please open Telegram to view this post
VIEW IN TELEGRAM
Продолжаем разговор об исключениях
throw и try-catchPlease open Telegram to view this post
VIEW IN TELEGRAM
throwПомимо использования стандартных библиотек для генерирования исключений, мы также можем самостоятельно создавать исключения явным образом, используя оператор
throw. Рассмотрим обработку исключения на примере класса
NoSuchElementException
fun filterPets(petList: List<GetPetResponse>, petId: Long): GetPetResponse {
return petList.find {
it.id == petId
} ?: throw NoSuchElementException("Питомец с $petId отсутствует")
}
petId в списке petList исполнение функции будет прервано на исключение NoSuchElementException("Питомец с $petId отсутствует”)try-catch обертки
fun filterPets(petList: List<GetPetResponse>, petId: Long): GetPetResponse? {
return try {
petList.find {
it.id == petId
} ?: throw NoSuchElementException("Питомец с $petId отсутствует")
} catch (e: Exception) {
println("Неожиданная ошибка при поиске питомца: ${e.message}")
null
}
}
try-catch повсеместно, тк за ними могут скрываться более серьезные ошибки.Please open Telegram to view this post
VIEW IN TELEGRAM