Подборка объединяет вопросы, отмеченные на этапах интервью в Demius. Здесь можно понять структуру технической проверки и заранее повторить связанные темы. В подборке чаще встречаются темы: backend, architecture, concurrency.
цель: исключить состояния гонки (race conditions) использовать синхронизацию: мьютексы и блокировки (locks) выбирать конкурентные коллекции (ConcurrentHashMap, ConcurrentQueue) по возможности применять атомарные…
Как проверять сервис, работающий с БД и внешними системами? Уровни тестирования: юнит-тесты, интеграционные тесты, e2e На уровне юнит-тестов использовать моки и стабы для внешних API и запросов к БД Проводить…
изучить план выполнения с помощью EXPLAIN/EXPLAIN ANALYZE найти узкие места: сканирование таблиц и отсутствие индексов проверить и создать индексы для часто используемых колонок переписать запрос: упростить JOIN и по…
Как работает многопоточность в Java? Java обеспечивает параллельное выполнение с помощью потоков (Threads) Поток — отдельный исполняемый поток команд в рамках процесса Для создания потоков применяют классы Thread и…
Фреймворки для тестирования на Java JUnit — основной и наиболее распространённый инструмент для модульного тестирования TestNG — расширенные возможности, аннотации и параллельное выполнение Mockito — создание…
Допустимо ли использовать объект с изменяемыми полями в роли ключа HashMap? Контекст: коллекции, HashMap в Java и аналогичные структуры В течение всего времени хранения в мапе ключ должен сохранять неизменные hashCode…
Hashtable — синхронизированная реализация словаря Для всего объекта применяются coarse-grained блокировки При конкурентном доступе производительность снижается Его заменил ConcurrentHashMap с более эффективным…
Индексы увеличивают объём БД и требуют дополнительного дискового пространства Замедляют выполнение операций записи и обновления (INSERT, UPDATE, DELETE), поскольку при них необходимо изменять и индексы Большое…
Future и CompletableFuture: отличия Future — основной интерфейс для представления асинхронного результата в Java Concurrency. С его помощью можно получить итог операции или отменить её выполнение. При этом для…
Чем отличаются git rebase и git merge Git merge объединяет ветки и создаёт merge commit Git rebase перестраивает историю, перенося коммиты на новую базу Merge оставляет всю историю ветвления Rebase формирует линейную…
Что называют чистым и поддерживаемым кодом? код удобно читать и понимать понятные имена переменных и последовательная структура отсутствие лишнего кода и повторяющихся фрагментов возможность без труда вносить…
Мутабельные и иммутабельные типы в Java это подходы к управлению изменяемостью объектов состояние мутабельных объектов можно изменять после их создания содержимое иммутабельных объектов нельзя изменить после создания…