В этой заметке будут собираться различные вопросы, которые задают на собеседованиях, а также ответы на них в виде отдельных статей. Это, своего рода, шпаргалка для подготовки. Пост будет дополняться и обновляться.
Общие вопросы по программированию
Основы программирования
- Что такое переменная и как она используется в программировании?
- Как работает оператор условия (if-else) и где он применяется?
- Что такое циклы (for, while) и как они работают?
- Как реализовать функцию/метод в программировании?
- Что такое рекурсия и когда ее следует использовать?
Объектно-ориентированное программирование (ООП)
- Что такое класс и объект в ООП?
- Как работает наследование в ООП и зачем оно нужно?
- Что такое полиморфизм и как его реализовать?
- Как работает инкапсуляция и зачем она нужна?
- Что такое абстракция и как она используется в ООП?
Принципы SOLID
- Что такое Single Responsibility Principle (SRP) и как его применять?
- Как работает Open/Closed Principle (OCP) и что он обеспечивает?
- Что такое Liskov Substitution Principle (LSP) и почему он важен?
- Как работает Interface Segregation Principle (ISP) и где он применяется?
- Что такое Dependency Inversion Principle (DIP) и как его реализовать?
Другие принципы программирования
- Что такое KISS (Keep It Simple, Stupid) и как он помогает писать чистый код?
- Как работает принцип DRY (Don’t Repeat Yourself) и почему он важен?
- Что такое YAGNI (You Aren’t Gonna Need It) и как его применять?
- Как работает принцип DDD (Domain-Driven Design) и где он используется?
- Что такое TDD (Test-Driven Development) и как его внедрить в проект?
Управление зависимостями и модульность
- Что такое Dependency Injection и как его можно реализовать?
- Как работает IoC (Inversion of Control) контейнер и для чего он нужен?
- Что такое модульность и как она улучшает структуру приложения?
- Как использовать пакеты и модули для организации кода?
Исключения и обработка ошибок
- Что такое исключение (exception) и как его обрабатывать?
- Как работает try-catch блок и когда его использовать?
- Что такое checked и unchecked исключения и в чем их разница?
- Как правильно организовать логирование ошибок в приложении?
Производительность и оптимизация
- Какие методы существуют для оптимизации производительности кода?
- Что такое профилирование (profiling) и как его использовать для анализа производительности?
Java core
Основы Java
- Что такое Java и как она работает?
- Как устроена JVM (Java Virtual Machine)?
- Что такое байт-код и как он исполняется?
- Какие основные типы данных существуют в Java?
- В чем разница между примитивными типами и объектами?
- Что такое автобоксинг и анбоксинг в Java?
- Как работают массивы в Java?
- Что такое классы и объекты в Java?
- Как наследование реализуется в Java?
- Что такое интерфейсы и как они используются?
- Чем отличается abstract class от interface? (https://t.me/java_developer/920)
Коллекции
- Какие основные интерфейсы коллекций существуют в Java?
- В чем разница между ArrayList и LinkedList?
- Как работает HashMap и какие его особенности?
- Что такое HashSet и как он отличается от TreeSet?
- Как работает метод equals() и hashCode() в коллекциях?
- Как использовать Queue и Deque в Java?
- Что такое Concurrent Collections и зачем они нужны?
- Как работает ConcurrentHashMap?
- Какие методы предоставляет Collection Framework для работы с данными?
- Как настроить и оптимизировать производительность коллекций?
Generics
- Что такое Generics и зачем они нужны?
- Как объявлять и использовать generic классы и методы?
- Что такое wildcard в Generics и как их использовать?
- В чем разница между bounded и unbounded wildcards?
- Как работает type erasure в Java Generics?
Stream API
- Что такое Stream API и зачем оно используется?
- Как создавать потоки данных с помощью Stream API?
- Какие основные операции поддерживает Stream API (map, filter, reduce)?
- Что такое терминальные и промежуточные операции в Stream API?
- Как использовать параллельные потоки (parallel streams) в Java?
- Что такое Collector и как его использовать в Stream API?
- Как обрабатывать исключения в Stream API?
- Как оптимизировать производительность при использовании Stream API?
Java Memory Model
- Что такое Java Memory Model (JMM) и зачем она нужна?
- Как работает модель памяти в многопоточных приложениях?
- Что такое видимость переменных в многопоточных приложениях?
- Как работает volatile в Java и для чего он используется?
- Что такое happens-before relationship в JMM?
Многопоточность и синхронизация
- Что такое потоки (threads) и как их создавать в Java?
- Как работает метод join() для потоков?
- Что такое synchronized и как его использовать?
- Как работает блокировка мониторов в Java?
- Что такое Deadlock и как его избежать?
- Как работает wait(), notify() и notifyAll() в Java?
- Что такое ExecutorService и как его использовать?
- Как создавать и управлять пулов потоков (thread pools)?
- Что такое Callable и Future и как их использовать?
- Как работает CompletableFuture в Java?
- Что такое ForkJoinPool и как его использовать?
- Как использовать атомарные переменные (AtomicInteger, AtomicReference)?
Ключевые нововведения в различных версиях JDK
- Какие ключевые изменения были введены в JDK 8 (например, Lambda Expressions, Stream API)?
- Что нового было добавлено в JDK 9 (например, модульная система Project Jigsaw)?
- Какие новые возможности появились в JDK 10 (например, var для локальных переменных)?
- Что нового появилось в JDK 11 (например, удаление Applet API, добавление HttpClient)?
- Какие изменения были введены в JDK 12 (например, switch expressions)?
- Что нового появилось в JDK 13 (например, текстовые блоки)?
- Какие ключевые изменения были введены в JDK 14 (например, записи, sealed классы)?
- Что нового появилось в JDK 15 (например, запечатанные классы)?
- Какие изменения были введены в JDK 16 (например, запись Pattern Matching for instanceof)?
- Что нового появилось в JDK 17 (например, долгосрочная поддержка LTS)?
Дополнительные вопросы по многопоточности и синхронизации
- Что такое виртуальные потоки (virtual threads) и как они работают в Project Loom?
- Как использовать Lock и Condition в Java?
- Что такое ReadWriteLock и как его использовать?
- Как работает Phaser в Java?
- Что такое CountDownLatch и CyclicBarrier и как их использовать?
- Как использовать Semaphore для управления доступом к ресурсам?
- Что такое Exchanger и как его использовать?
- Как работает ForkJoinPool в Java?
- Как использовать ParallelStream для параллельной обработки данных?
- Как работает пул потоков Executors.newFixedThreadPool()?
Продвинутые концепции Java
- Что такое рефлексия и как ее использовать в Java?
- Как работает сериализация и десериализация в Java?
- Что такое аннотации и как их использовать?
- Как использовать лямбда-выражения и функциональные интерфейсы в Java?
- Что такое функциональное программирование в контексте Java?
- Как использовать Optional для работы с nullable значениями?
- Что такое Records и как их использовать в Java?
- Как работает механизм загрузки классов в Java?
- Как работает garbage collector в Java и какие стратегии сборки мусора существуют?
- Приведите примеры сборщиков мусора
Продвинутые вопросы по коллекциям и многопоточности
- Как использовать CopyOnWriteArrayList в многопоточных приложениях?
- Что такое BlockingQueue и как его использовать?
- Как работает DelayQueue в Java?
- Что такое PriorityBlockingQueue и как его использовать?
- Как использовать SynchronousQueue для координации потоков?
- Что такое LinkedTransferQueue и как его использовать?
- Как работает метод parallelSort() в Java?
- Как использовать Spliterator для разделения потока данных?
- Что такое CompletionService и как его использовать?
- Как работает метод computeIfAbsent() в Map интерфейсе?
Паттерны проектирования
Общие вопросы о паттернах проектирования
- Что такое паттерны проектирования и зачем они нужны?
- Какие основные категории паттернов проектирования существуют (структурные, поведенческие, порождающие)?
- В чем разница между классическими паттернами проектирования и современными подходами?
Порождающие паттерны
- Что такое Singleton и как его правильно реализовать в Java?
- Как работает паттерн Factory Method и где он применяется?
- Что такое Abstract Factory и как он отличается от Factory Method?
- Как работает паттерн Builder и для чего он используется?
- Что такое Prototype и как его реализовать в Java?
Структурные паттерны
- Что такое Adapter и как он решает проблемы несовместимости интерфейсов?
- Как работает паттерн Bridge и зачем он нужен?
- Что такое Composite и как он упрощает работу с древовидными структурами данных?
- Как работает паттерн Decorator и как его применять на практике?
- Что такое Facade и как он упрощает взаимодействие с сложными системами?
- Как работает паттерн Proxy и какие его виды существуют (виртуальный, защитный, удаленный)?
Поведенческие паттерны
- Что такое Strategy и как его использовать для выбора алгоритма на этапе выполнения программы?
- Как работает паттерн Observer и где он наиболее часто используется?
- Что такое Command и как он позволяет инкапсулировать запросы как объекты?
- Как работает паттерн State и как он изменяет поведение объекта в зависимости от его состояния?
- Что такое Chain of Responsibility и как он передает запросы по цепочке обработчиков?
- Как работает паттерн Iterator и как его реализовать в Java?
- Что такое Mediator и как он уменьшает связность между объектами?
- Как работает паттерн Memento и как он сохраняет состояние объекта?
- Что такое Visitor и как он позволяет добавлять новые операции к объектам без изменения их классов?
Современные и расширенные паттерны
- Что такое Dependency Injection и как его можно реализовать в Java?
- Как работает паттерн Service Locator и когда его следует использовать?
- Что такое Repository и как он абстрагирует доступ к данным?
- Как работает паттерн Specification и как он позволяет динамически строить запросы?
Практические задачи и примеры использования
- Как реализовать паттерн Singleton в многопоточной среде с использованием volatile и synchronized?
- Как реализовать паттерн Factory Method для создания различных типов продуктов в зависимости от входных данных?
- Как реализовать паттерн Observer для уведомления подписчиков о событиях в системе?
Spring
Основы Spring Framework
- Что такое Spring Framework и каковы его основные принципы?
- Как работает Dependency Injection (DI) в Spring?
- Что такое Inversion of Control (IoC), и как это связано с DI?
- Какие способы внедрения зависимостей существуют в Spring?
- Что такое ApplicationContext и чем он отличается от BeanFactory?
- Какие виды контекстов приложения существуют в Spring?
- Что такое Bean и как он управляется в Spring?
- Как Spring решает проблему циклических зависимостей между бинами?
- Что такое Scope бина в Spring и какие типы Scope существуют?
- Как настроить Spring-приложение с использованием XML-конфигурации?
Spring Configuration
- Как настроить Spring-приложение с использованием аннотаций?
- Что такое @Configuration и @Bean аннотации?
- Как использовать @ComponentScan для автоматического сканирования компонентов?
- Как настроить конфигурацию Spring через Java Config?
- Какие преимущества имеет Java-based конфигурация перед XML-конфигурацией?
- Что такое PropertyPlaceholderConfigurer и как его использовать?
- Как использовать профили (Profiles) в Spring для управления конфигурацией?
Spring AOP (Aspect-Oriented Programming)
- Что такое AOP и как оно используется в Spring?
- Какие виды советов (advice) существуют в Spring AOP?
- Как создать аспект в Spring с использованием аннотаций?
- Что такое Join Point и Pointcut в AOP?
- Как работает Around advice в Spring AOP?
- Какие ограничения у Spring AOP по сравнению с AspectJ?
Spring MVC
- Что такое Spring MVC и как он работает?
- Как настроить контроллер в Spring MVC?
- Что такое @RequestMapping и как его использовать?
- Как обрабатывать параметры запроса и пути в контроллере?
- Что такое ModelAndView и как его использовать?
- Как работают ViewResolver и View в Spring MVC?
- Как реализовать RESTful сервисы в Spring MVC?
- Что такое @RestController и чем он отличается от @Controller?
Spring Data
- Что такое Spring Data JPA и как он упрощает работу с базами данных?
- Как создать репозиторий с использованием Spring Data JPA?
- Что такое JpaRepository и как его использовать?
- Как работает пагинация и сортировка в Spring Data JPA?
- Что такое Query Methods и как их использовать в Spring Data JPA?
- Как настроить транзакции в Spring Data JPA?
Spring Boot
- Что такое Spring Boot и каковы его основные преимущества?
- Как создать простое приложение на Spring Boot?
- Что такое Spring Boot Starter и как он упрощает конфигурацию?
- Как настроить внешние свойства в Spring Boot?
- Что такое Actuator и как его использовать для мониторинга приложения?
- Как настроить логирование в Spring Boot?
Тестирование в Spring
- Как тестировать бины в Spring?
- Что такое @MockBean и как его использовать в тестировании?
- Как настроить интеграционные тесты в Spring?
- Что такое TestContext и как он работает?
Прочее
- Как настроить безопасность в Spring Security?
- Что такое Spring Cloud и как он помогает в разработке микросервисов?
- Как организовать управление версиями зависимостей в проекте на Spring?
Базы данных
Основы баз данных
- Что такое база данных и как она используется в приложениях?
- В чем разница между реляционными и нереляционными базами данных?
- Какие основные типы моделей данных существуют (реляционная, документная, графовая, ключ-значение)?
- Что такое схема базы данных и зачем она нужна?
Реляционные СУБД
- Что такое реляционная база данных и какие основные компоненты она включает?
- Как работает язык SQL и какие его основные команды?
- Что такое индексы в реляционных базах данных и зачем они нужны?
- Как создать таблицу в PostgreSQL/MySQL/Oracle?
- Что такое первичный ключ и как его использовать?
- Что такое внешний ключ и как он обеспечивает целостность данных?
Транзакции и ACID
- Что такое транзакция и для чего она используется?
- Что такое ACID свойства и как они обеспечиваются в базе данных?
- Как реализовать транзакцию в SQL (BEGIN, COMMIT, ROLLBACK)?
- Что такое уровни изоляции транзакций и какие они бывают?
- Какой уровень изоляции транзакций поддерживается по умолчанию в PostgreSQL/MySQL/Oracle?
- Что такое фантомное чтение и как его предотвратить?
План выполнения и оптимизация запросов
- Что такое план выполнения запроса и как его просмотреть в PostgreSQL/MySQL/Oracle?
- Какие инструменты можно использовать для анализа производительности запросов?
- Что такое объяснение запроса (EXPLAIN) и как его использовать?
- Как оптимизировать запросы на выборку данных?
- Что такое денормализация и когда ее следует применять?
- Как использовать индексы для улучшения производительности запросов?
Популярные реляционные СУБД
- Какие особенности имеет PostgreSQL и чем она отличается от других СУБД?
- Какие преимущества предоставляет MySQL и где она наиболее часто используется?
- Что такое Oracle Database и какие уникальные функции она предлагает?
- Как настроить репликацию в PostgreSQL/MySQL/Oracle?
- Как настроить автоматическое резервное копирование в PostgreSQL/MySQL/Oracle?
Нереляционные (NoSQL) базы данных
- Что такое NoSQL база данных и какие основные типы NoSQL баз данных существуют?
- Что такое MongoDB и как она работает?
- Какие особенности имеет Cassandra и где она применяется?
- Что такое Redis и для каких задач она предназначена?
- Какие преимущества предоставляют графовые базы данных (например, Neo4j)?
Распределенные базы данных
- Что такое распределенная база данных и для чего она используется?
- Как работает шардинг (sharding) в распределенных базах данных?
- Что такое репликация и как она влияет на отказоустойчивость базы данных?
- Как настроить конфигурацию мастера-реплики в PostgreSQL/MySQL?
Безопасность и управление доступом
- Как настроить аутентификацию и авторизацию в PostgreSQL/MySQL/Oracle?
- Что такое роли и привилегии в базе данных и как их использовать?
- Как защитить данные в базе данных от несанкционированного доступа?
Производительность и масштабируемость
- Какие стратегии можно использовать для повышения производительности базы данных?
- Как настроить кэширование для улучшения производительности запросов?
- Как настроить горизонтальное и вертикальное масштабирование базы данных?
Миграция данных
- Что такое миграция данных и миграция схемы?
- Какие способы миграции схем вы знаете и использовали?
Современные технологии и тренды
- Что такое NewSQL и как она сочетает в себе преимущества реляционных и NoSQL баз данных?
- Какие новые возможности появились в последних версиях PostgreSQL/MySQL/Oracle?
Примеры использования и практика
- Какие проблемы могут возникнуть при миграции с одной СУБД на другую?
- Как выбрать подходящую базу данных для конкретного проекта?
- Какие лучшие практики существуют для проектирования базы данных?
- Как тестировать и отлаживать сложные SQL-запросы?
Hibernate Framework
Основы Hibernate
- Что такое Hibernate и зачем он используется?
- Как работает ORM (Object-Relational Mapping) и какую роль играет Hibernate в этом процессе?
- Как настроить и конфигурировать Hibernate для работы с базой данных?
- Что такое SessionFactory и как его создать и использовать?
- Что такое Session и какие основные методы он предоставляет?
Моделирование данных
- Как аннотировать классы и поля для их маппинга на таблицы базы данных?
- Что такое аннотации @Entity, @Table, @Id и @Column?
- Как работают аннотации @OneToOne, @OneToMany, @ManyToOne и @ManyToMany для моделирования связей между таблицами?
- Что такое CascadeType и как его использовать?
- Как реализовать наследование в Hibernate (SINGLE_TABLE, JOINED, TABLE_PER_CLASS)?
Работа с сессиями и транзакциями
- Как правильно управлять сессиями в Hibernate (открытие, закрытие, управление транзакциями)?
- Как работает метод persist() и чем он отличается от save()?
- Что такое merge() и когда его следует использовать?
- Как работает метод delete() и как удалить объект из базы данных?
- Как управлять транзакциями в Hibernate (begin, commit, rollback)?
Запросы и критерии
- Какие способы выполнения запросов существуют в Hibernate (HQL, Criteria API, Native SQL)?
- Что такое HQL (Hibernate Query Language) и как его использовать?
- Как работает Criteria API и как его применять для динамических запросов?
- Что такое Named Queries и как их объявлять и использовать?
- Как выполнять нативные SQL-запросы в Hibernate?
Кэширование и оптимизация
- Как работает первичный (Level 1) и вторичный (Level 2) кэш в Hibernate?
- Как настроить и использовать вторичный кэш в Hibernate?
- Что такое фильтры (filters) и как их использовать для оптимизации запросов?
- Как использовать ленивую загрузку (lazy loading) и жадную загрузку (eager loading) для повышения производительности?
- В чем заключается проблема N+1 запросов? Как минимизировать N+1 проблему при работе с ассоциациями? (аннотация EntityGraph или join fetch)
Управление состоянием и жизненным циклом объектов
- Какие состояния объектов существуют в Hibernate (transient, persistent, detached)?
- Как происходит переход объектов между различными состояниями?
- Что такое dirty checking и как Hibernate отслеживает изменения объектов?
- Как обрабатывать версионирование объектов (Optimistic Locking) в Hibernate?
Конфигурация и расширение
- Как настроить Hibernate для использования различных диалектов SQL и баз данных?
- Как использовать аннотацию @Formula для вычисляемых полей?
- Что такое интерцепторы (Interceptor) и как их использовать для расширения функциональности Hibernate?
- Как настроить автоматическое создание/обновление схемы базы данных с помощью Hibernate?
- Как интегрировать Hibernate с Spring Framework?
Очереди
Основы очередей и брокеров сообщений
- Что такое очередь сообщений и зачем она используется?
- Как работает брокер сообщений? Приведите примеры популярных брокеров.
- В чем разница между синхронной и асинхронной передачей сообщений?
- Какие основные типы обмена сообщениями существуют (например, публикация/подписка, точка-точка)?
- Что такое топики (topics) и как они используются в системах сообщений?
Apache Kafka
- Что такое Apache Kafka и какие у него основные компоненты?
- Как работает модель производитель/потребитель (producer/consumer) в Kafka?
- Что такое партиции (partitions) в Kafka и для чего они нужны?
- Как работает репликация в Kafka и зачем она нужна?
- Какие настройки могут повлиять на производительность Kafka?
RabbitMQ
- Что такое RabbitMQ и как он отличается от других брокеров сообщений?
- Как работает модель обмена сообщениями в RabbitMQ (exchange, queue, binding)?
- Что такое Dead Letter Exchange (DLX) и как его использовать в RabbitMQ?
- Как настроить приоритеты сообщений в RabbitMQ?
- Как RabbitMQ обеспечивает отказоустойчивость и масштабируемость?
Гарантии доставки
- Какие уровни гарантий доставки сообщений существуют в системах сообщений?
- Что такое At-Most-Once Delivery и как его реализовать?
- Что такое At-Least-Once Delivery и как его реализовать?
- Что такое Exactly-Once Delivery и как его реализовать?
- Какие проблемы могут возникнуть при использовании различных уровней гарантий доставки?
Конфигурация и оптимизация
- Как настроить время хранения сообщений в Kafka и RabbitMQ?
- Как настроить максимальный размер сообщения в Kafka и RabbitMQ?
- Как настроить автоматическое перезапуск потребителей в случае сбоя?
- Как настроить мониторинг и логирование в Kafka и RabbitMQ?
- Как настроить горизонтальное масштабирование в Kafka и RabbitMQ?
Производительность и отказоустойчивость
- Какие факторы влияют на производительность брокера сообщений?
- Как настроить отказоустойчивость и восстановление после сбоев в Kafka и RabbitMQ?
- Какие стратегии можно использовать для балансировки нагрузки в системе сообщений?
- Как предотвратить потерю сообщений в случае сбоя сети или оборудования?
Сравнение и выбор технологии
- Какие критерии следует учитывать при выборе между Kafka и RabbitMQ для конкретного проекта?
Алгоритмы
Основы алгоритмов
- Что такое алгоритм? Какие характеристики определяют хороший алгоритм?
- Что такое временная сложность алгоритма? Как она обозначается?
- Что такое пространственная сложность алгоритма? Почему это важно?
- Объясните разницу между O(1), O(n), O(log n) и O(n²).
- Что такое рекурсия? Когда ее лучше использовать?
- Какой самый простой способ определить, является ли число простым?
- Что такое биг-о (Big-O) нотация? Приведите пример.
- Что такое структура данных? Как она связана с алгоритмами?
- Какая разница между алгоритмом и протоколом?
- Что такое инвариант цикла? Почему он важен?
Поиск и сортировка
- Как работает линейный поиск? Какова его временная сложность?
- Что такое бинарный поиск? В каких случаях его можно применять?
- Как работает алгоритм сортировки пузырьком? Какова его сложность?
- Объясните принцип работы быстрой сортировки (QuickSort). Какова ее средняя и худшая временная сложность?
- Что такое слиянием сортировка (MergeSort)? Какова ее временная сложность?
- Как работает сортировка подсчетом (Counting Sort)? В каких случаях она эффективна?
- Что такое сортировка кучей (HeapSort)? Как она связана с бинарной кучей?
- Какую сортировку лучше использовать для больших массивов? Почему?
- Что такое Timsort? Где он используется?
- Как найти k-й минимальный элемент в неотсортированном массиве?
Рекурсия и динамическое программирование
- Что такое динамическое программирование? Приведите пример задачи, где оно применяется.
- Как решить задачу «чисел Фибоначчи» с помощью рекурсии? Как улучшить производительность?
- Объясните принцип мемоизации. Как она помогает при решении задач рекурсивным методом?
- Как решить задачу «найти наибольшую общую подпоследовательность» (LCS)?
- Как решить задачу «минимального пути в матрице» с использованием динамического программирования?
- Что такое рюкзаковая проблема (Knapsack Problem)? Как ее решить?
- Как найти количество способов достичь верхней правой клетки в сетке размером n×m?
- Как решить задачу «размена монет» с помощью динамического программирования?
- Что такое принцип «разделяй и властвуй»? Приведите пример.
- Как решить задачу «поиска медианы» с использованием рекурсии?
Графовые алгоритмы
- Что такое граф? Какие типы графов существуют?
- Как работает обход графа в ширину (BFS)? Для чего он используется?
- Как работает обход графа в глубину (DFS)? Для чего он используется?
- Как найти кратчайший путь между двумя вершинами в невзвешенном графе?
- Как работает алгоритм Дейкстры для поиска кратчайшего пути в взвешенном графе?
- Что такое алгоритм Беллмана-Форда? В чем его преимущество перед Дейкстрой?
- Как работает алгоритм Флойда-Уоршелла для поиска всех пар кратчайших путей?
- Что такое минимальное остовное дерево (MST)? Как его найти с помощью алгоритма Краскала?
- Как работает алгоритм Прима для поиска минимального остовного дерева?
- Что такое топологическая сортировка? Где она применяется?
Строковые алгоритмы
- Как работает алгоритм поиска подстроки в строке (например, KMP)?
- Что такое суффиксный автомат? Где он применяется?
- Как найти все анаграммы строки в другом тексте?
- Как реализовать алгоритм Рабина-Карпа для поиска подстроки?
- Что такое префиксная функция? Как она используется в алгоритме КМП?
Деревья и множества
- Что такое бинарное дерево поиска (BST)? Какие операции оно поддерживает?
- Как сбалансировать бинарное дерево? Что такое AVL-дерево?
- Что такое красно-черное дерево? Как оно отличается от AVL-дерева?
- Как работает тройчатое дерево (Trie)? Где оно применяется?
- Что такое множество (Set) и как его эффективно реализовать?