Техническое собеседование
- Средняя алгоритмическая сложность поиска в отсортированном массиве (бинарный поиск, O(log N))
- Максимальное значение 32-битного int (2³¹ − 1 с учётом знакового бита)
- Средняя сложность быстрой сортировки (O(N log N))
- Сложность сортировки пузырьком (O(N²))
- Переопределение equals() и hashCode() для корректного использования пользовательского класса в HashMap
- Контракт между equals() и hashCode(), коллизии хэш-кодов
- Примеры стандартных типов JVM, у которых не бывает коллизий хэш-кодов (например, для Integer)
- Синхронизация статического метода (synchronized на уровне Class), отличие от синхронизации экземплярного метода (this)
- Основные методы класса Object (hashCode, equals, toString, notify, notifyAll, clone)
- Перехват всех Runtime-исключений в Android (Thread.setDefaultUncaughtExceptionHandler)
- Создание кастомного компоновщика (наследование от ViewGroup и переопределение onMeasure/onLayout)
- Добавление разделителей в RecyclerView через ItemDecoration
- Гарантированный вызов метода на главном потоке (корутины с Dispatchers.Main или Handler.post)
- Поток вызова onStartCommand() у сервиса (главный поток)
- Средства анимации в Android (Jetpack Compose: animate*, AnimatedList, модификаторы; XML-анимации)
- Механизм wait(), notify(), notifyAll() в Java-мониторах (блокировка и пробуждение потоков)
- GC Roots в JVM (потоки, статические поля, ClassLoader)
- Выбор реализации List для адаптера RecyclerView (ArrayList vs LinkedList)
- Разница между invalidate() и requestLayout() в View
- Роль RenderThread в Android (отдельный поток для рендеринга)