Обсуждение байт-кода, JVM, JRE и JIT.
JVM выполняет байт-код, JRE - среда разработки, JIT - промежуточное звено между байт-кодом и машиной.
JIT преобразует последовательности кода для повышения производительности.
Основные типы памяти: heap и stack.
Heap используется для создания объектов и примитивных переменных.
Stack используется для вызова методов и локальных переменных.
Пулы: string pool и integer pool.
String pool хранится в heap, integer pool оптимизирован для работы с числами.
Garbage Collection в Java автоматически управляет памятью.
Первый сборщик мусора был Serial, затем Parallel и другие версии.
Принцип работы сборщика мусора: жесткие и мягкие ссылки, объекты и их жизненный цикл.
Основные коллекции: List, LinkedList, Set, Map.
List и LinkedList: реализация и использование.
Map: хэш-карты и их особенности.
Хеширование в HashMap: распределение элементов по корзинам.
Сортировка элементов в HashMap: использование бинарного дерева для ускорения работы.
Streams появились в Java 8.
Используют ленивые конвейеры и фабрики.
Применяются для обработки данных и выполнения функций.
Обсуждение типов методов: изменяющие, тернальные и фильтрующие.
Методы для создания стримов: инициализация, генерация, фильтрация.
Примеры методов: map, flatMap, filter.
Основные интерфейсы для многопоточности: Runnable, Extentible, Thread.
Методы для запуска и управления потоками: start, join, await.
Проблемы многопоточности: deadlocks, race conditions.
Использование volatile и atomic для предотвращения race conditions.
Основные изменения: лямбда-выражения, функциональные интерфейсы, var.
Ресурсы и исключения в Java.
Новые функции: тройные кавычки, блоки текста, рекорды.
Spring как фреймворк для управления объектами.
Внедрение зависимостей через Spring.
Инверсионный контроль и слоеная архитектура.
Жизненный цикл бинов и их настройка.
Этапы жизненного цикла: пристройка, пост-контракт, внедрение зависимости.
Настройка контекста и внедрение зависимостей.
Методы пост-контракт и предострой.
Влияние типа бина на жизненный цикл.
Spring упрощает жизнь программистам, автоматизируя процесс инициализации и управления зависимостями.
Фреймворк Spring предоставляет проверенные зависимости и собирает их в ZIP-архив.
Spring включает библиотеку для работы с REST API.
REST API позволяет клиентам обращаться к приложению через HTTP-запросы GET, POST, PUT и другие.
REST API можно рассматривать как паттерн проектирования, который можно нарушать.
Spring Data JPA упрощает работу с базами данных, используя шаблонный код.
JPA предоставляет абстракции для работы с базами данных, упрощая создание и рефакторинг приложений.
JPA использует аннотации для управления транзакциями и уровнями изоляции.
Аннотации в Spring используются для управления транзакциями и уровнями изоляции.
Аннотации обеспечивают атомарность и консистентность операций.
В JPA транзакции используются для управления сессиями и объектами.
Уровни изоляции в базах данных предотвращают конфликты при многопоточном использовании.
Режимы на чтение и запись блокируют записи в базе данных, предотвращая конфликты.
Полностью заблокированные записи предотвращают одновременные записи и чтения.
SQL создан для бухгалтеров, простой язык для структурированных запросов.
Основные запросы: SELECT, ALTER TABLE, JOIN, GROUP BY, ORDER BY.
JOINS: INNER JOIN, LEFT JOIN, RIGHT JOIN, CROSS JOIN.
Инструменты миграции упрощают обновление баз данных.
Позволяют быстро и легко переносить данные между таблицами.
Примеры: Flyway, Navicat, DBeaver.
Новые SQL-базы данных, такие как Cassandra, используются для хранения документов и ассоциативных данных.
Они быстрее и проще в использовании, чем традиционные базы данных.
Примеры: MongoDB, Redis, Kafka.
Kafka и RabbitMQ используются для передачи сообщений между микросервисами.
Kafka позволяет масштабировать нагрузку и обеспечивает сохранность данных.
Примеры использования: подтверждение по почте, рассылка спама.
Шаблоны проектирования помогают структурировать код и упрощают поддержку.
Примеры: фабрика, адаптер, прокси, декоратор, фасад.
Шаблоны делают код более удобным и прозрачным для пользователей.
Юнит-тесты проверяют работоспособность модулей.
Интеграционные тесты проверяют взаимодействие модулей.
Примеры инструментов: JUnit, Postman, Selenium.
Обсуждение различных библиотек для тестирования, таких как JUnit и Google Test.
JUnit выигрывает по популярности и чаще используется.
Mockito используется для вспомогательных целей, таких как заглушки.
Основные принципы ООП: наследование, полиморфизм, инкапсуляция и абстракция.
Инкапсуляция: объекты содержат данные и методы, которые остаются вместе при перемещении объекта.
Полиморфизм: объекты могут выполнять разные функции в зависимости от ситуации.
Наследование: возможность создания новых классов на основе существующих.
Принцип единственной ответственности SOLID: объекты должны иметь одну ответственность.
Интерфейсы должны содержать только необходимые методы.
Инверсия зависимостей: передача ответственности за выполнение задач, а не их хранение.
Плюсы: бесконечное пространство, автоматизация процессов, надежность.
Минусы: задержки, зависимость от внешних ресурсов, риски.
Облака дешевле и надежнее для мини-стартапов.
Использование Gitlab для интеграции и тестирования.
Автоматизация процесса выкатки на prod.
Настройка интеграции через Docker.
Agile и Scrum: спринты, майклы, стори-поинты.
Анализ задач и планирование времени.
Интервью завершено, обсуждение было глубоким и интересным.