Telegram Web Link
Какие методы есть в Stream API?

В Stream API есть несколько основных категорий методов:

1. Создание потока:

stream() создаёт поток из коллекции.
of() создаёт поток из переданных элементов.
iterate() создаёт поток с элементами, вычисляемыми по определенному правилу.
generate() создаёт поток с элементами, генерируемыми функцией.

2. Промежуточные операции (возвращают новый поток):


map() преобразует элементы потока.
filter() фильтрует элементы потока.
distinct() удаляет дубликаты.
sorted() сортирует элементы.
peek() позволяет наблюдать за элементами в потоке.

3. Терминальные операции (возвращают результат, завершают поток):

collect() собирает элементы в коллекцию.
reduce() сводит элементы потока к одному значению.
forEach() выполняет действие для каждого элемента.
count() возвращает количество элементов.
anyMatch(), allMatch(), noneMatch() проверка условия для элементов.

4. Операции для работы с примитивными типами (IntStream, LongStream, DoubleStream):

mapToInt(), mapToLong(), mapToDouble() — преобразуют элементы в соответствующие типы.
sum(), average(), min(), max() — для статистики.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥62
В чём разница между IO и NIO в Java?

IO (Input/Output) — это традиционное блокирующее взаимодействие с вводом и выводом, где каждый запрос на чтение или запись блокирует поток до завершения операции. В IO используется модель потоков (Streams), и операции выполняются синхронно, что может привести к снижению производительности при работе с большим количеством соединений.

В свою очередь, NIO (New IO), введённый в Java 1.4, использует неблокирующий подход. Вместо потоков здесь используются каналы (Channels) и буферы (Buffers), а операции могут выполняться асинхронно. Это позволяет работать с несколькими каналами одновременно и эффективно использовать ресурсы при высоких нагрузках, так как операции не блокируют потоки. Также NIO поддерживает такие механизмы, как селекторы, которые позволяют обрабатывать несколько соединений с минимальными затратами времени.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍133🔥2🤩1
Что такое Diamond Problem?

Diamond Problem — это ситуация в ООП, когда класс наследуется от двух (или более) классов, которые имеют общий предок. Это приводит к неясности, какой из методов или свойств из общего предка должен быть использован в дочернем классе.

Например, класс D реализует интерфейсы B и C, которые оба наследуют от A. В случае наличия однотипных методов в B и C, возникает неясность, какой метод использовать.

Java не поддерживает множественное наследование классов, поэтому Diamond Problem возникает только в контексте интерфейсов. И решается путём явного переопределения реализации в дочернем классе.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👏2
💬 Обратная связь

Какие вопросы публиковать больше?

👍🏼 — Классика с собесов, чтобы точно набить руку на ближайший
🤔 — Вопросы, которые не встречаются в каждой статье вида "N вопросов для собеса"
🔥 — Больше практики, а то одна теория
Please open Telegram to view this post
VIEW IN TELEGRAM
👍46🔥16🤔16
Чем различаются Thread и Runnable в Java?

Thread — это класс, который представляет поток выполнения. Вы можете создать объект Thread, передав в его конструктор объект, реализующий интерфейс Runnable, или наследовать Thread и переопределить метод run().

Runnable — это интерфейс, который представляет задачу, которую можно выполнить в потоке. Он определяет единственный метод run(), который будет содержать код, выполняемый в потоке.

Thread является более "тяжелым" объектом, так как он сам управляет жизненным циклом потока, тогда как Runnable лишь описывает задачу, а поток (например, объект Thread) управляет её выполнением.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍52
Что такое Propagation в Spring?

Propagation — это режимы управления транзакциями, которые определяют, как транзакции должны вести себя при вызове метода внутри другого метода, который уже находится в транзакции.

▪️ Основные режимы:

— REQUIRED (по умолчанию): если транзакция существует, то текущий метод будет работать в рамках этой транзакции. Если транзакция не существует, создается новая.

REQUIRES_NEW: создается новая транзакция, даже если уже существует текущая. Текущая транзакция будет приостановлена до завершения новой.

— NESTED: в рамках текущей транзакции создается вложенная транзакция. В случае отката внешней транзакции будет откатана и вложенная.

MANDATORY: метод должен быть вызван в рамках существующей транзакции. Если транзакции нет, выбрасывается исключение.

— NEVER: метод не должен выполняться в рамках транзакции. Если транзакция существует, выбрасывается исключение.

SUPPORTS: если транзакция существует, метод будет выполнен в ее рамках. Если транзакции нет, метод будет выполнен без транзакции.

— NOT_SUPPORTED: метод выполняется без транзакции. Если транзакция существует, она приостанавливается на время выполнения метода.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥42
Опишите подход Test-Driven Development

Test-Driven Development (TDD) — это методология разработки программного обеспечения, при которой сначала пишутся тесты, а затем реализуется функциональность, чтобы эти тесты прошли.

Процесс включает три основных этапа:

▪️ Красный — пишем тест, который изначально не проходит (так как функциональность еще не реализована).
▪️ Зеленый — пишем минимально необходимый код для того, чтобы тест прошел.
▪️ Рефакторинг — улучшаем код, при этом тесты должны по-прежнему проходить.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤‍🔥2🔥2
Что такое this?

this — это ссылочная переменная, доступная внутри нестатических методов и конструкторов, которая указывает на текущий экземпляр класса.

Она используется, чтобы:

Отличать поля класса от параметров метода
Вызывать другие конструкторы текущего класса через this(...)
Передавать текущий объект в качестве аргумента
Получить доступ к текущему объекту из вложенного класса.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122🔥1
Что такое optimistic и pessimistic locking?

Optimistic locking — подход, при котором предполагается, что конфликты редки. Данные читаются без блокировки, а при обновлении проверяется, что никто не изменил их параллельно (обычно через version-поле). Если данные изменились — операция отклоняется, вызывается исключение, и клиент решает, что делать дальше.

Используется, например, с JPA (@Version) и хорошо работает при низкой конкуренции.

Pessimistic locking
— подход, при котором при чтении или обновлении данных сразу накладывается блокировка, чтобы другие потоки/транзакции не могли изменить их до окончания текущей операции. Это снижает риск конфликтов, но уменьшает параллелизм.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥41
Что такое bytecode в Java?

Bytecode — это промежуточный машинно-независимый код, в который компилируется Java-программа. Он создаётся компилятором и сохраняется в .class файлах. Этот код не исполняется напрямую процессором, а выполняется виртуальной машиной Java (JVM), которая интерпретирует или компилирует его в машинный код на лету (через JIT-компиляцию).

Bytecode позволяет Java оставаться кроссплатформенной: один и тот же .class файл можно запускать на любой платформе с установленной JVM.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍6🔥3
💬 Обратная связь

Ежемесячный опрос по грейдам. Проверим, сколько среди нас джедаев синьоров.
Ваш грейд:

🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
😁54👍3326🔥23
Что такое SOLID?

SOLID — это аббревиатура из пяти принципов объектно-ориентированного проектирования, помогающих писать поддерживаемый и расширяемый код.

▪️ S — Single Responsibility Principle (SRP)
Каждый класс должен иметь одну и только одну причину для изменения.

▪️ O — Open/Closed Principle (OCP)
Сущности должны быть открыты для расширения, но закрыты для модификации.

▪️ L — Liskov Substitution Principle (LSP)
Объекты подклассов должны заменять объекты суперклассов без нарушения логики.

▪️ I — Interface Segregation Principle (ISP)
Лучше иметь несколько специализированных интерфейсов, чем один общий.

▪️ D — Dependency Inversion Principle (DIP)
Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа должны зависеть от абстракций.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3👏2
🔥 Последняя неделя перед стартом курса по AI-агентам

Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место

На курсе:
разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах

📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями

И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»

👉 Курс здесь
1😁1
В чем разница между == и .equals()?

== сравнивает ссылки на объекты, т.е. проверяет, указывают ли две переменные на один и тот же объект в памяти.

.equals() — это метод класса Object, который используется для проверки логического равенства объектов. По умолчанию метод работает как оператор ==, но многие классы (например, классы обёртки, коллекции), переопределяют его для сравнения значений объектов. В других случаях метод нужно переопределить вручную.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112🔥2
Что такое денормализация в базах данных?

Денормализация — это процесс преднамеренного добавления избыточности в структуру базы данных для повышения производительности чтения. В отличие от нормализации, цель которой — устранить дублирование и обеспечить целостность, денормализация может включать дублирование данных, объединение таблиц или добавление агрегированных колонок.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥32
Как устроена под капотом HashMap?

Это структура данных, основанная на хешировании, реализующая интерфейс Map. Она использует массив бакетов, где каждый элемент хранится в виде пары "ключ-значение".

Основные моменты:

🔹 Хеширование: для каждого ключа вычисляется хеш-код с помощью метода hashCode(). Этот код используется для определения индекса в массиве бакетов.

🔹 Коллизии: если два разных ключа имеют одинаковый хеш-код (коллизия), они помещаются в один бакет. До Java 8 коллизии обрабатывались с помощью связанного списка, начиная с Java 8 — с помощью сбалансированных деревьев.

🔹 Динамическое расширение: когда нагрузка достигает 75% от текущего размера массива (порог загрузки), HashMap увеличивает размер массива в два раза и перераспределяет элементы, чтобы уменьшить вероятность коллизий.

🔹 Балансировка дерева: если в бакете больше 8 элементов, то список преобразуется в сбалансированное дерево, что улучшает производительность при большом количестве коллизий.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥1
Чем отличается ArrayList от LinkedList в Java?

ArrayList основан на массиве, LinkedList — на двусвязном списке. ArrayList быстрее при случайном доступе по индексу, но вставки и удаления в середину — дорогие, т.к. нужно сдвигать элементы.

LinkedList — наоборот: доступ по индексу медленный, но вставка и удаление в начале или середине — быстрые (при наличии ссылки на элемент).

Когда использовать:

🔹 ArrayList — если чаще нужен быстрый доступ по индексу и мало вставок/удалений.
🔹 LinkedList — если часто добавляешь/удаляешь элементы в начале или середине списка.

На практике ArrayList почти всегда предпочтительнее. LinkedList используется редко из-за своей громоздкости и плохой кэш-локальности.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1
Что такое лямбда?

Лямбда — это краткий способ описания анонимной функции, которая может быть передана как аргумент или возвращена из метода. В Java лямбда-выражения реализуют функциональные интерфейсы (интерфейс с одним абстрактным методом).

Синтаксис:
(parameters) -> expression


Используются для упрощения работы с функциональными API (например, Stream API), сокращают бойлерплейт-код.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥3
Какие объекты стоит использовать в качестве ключей в HashMap?

Потенциальные ключи должны быть иммутабельными, а также правильно реализовывать методы equals() и hashCode().

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3👏2
Для чего нужен Garbage Collector?

Garbage Collector автоматически освобождает память, удаляя объекты, на которые больше нет ссылок. Это помогает избежать утечек памяти и ручного управления памятью.

Основные функции GC:

Освобождение памяти.
Предотвращение утечек памяти.
Оптимизация работы приложения.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍4🔥3
2025/07/09 11:10:23
Back to Top
HTML Embed Code: