en
Feedback
Java | Вопросы собесов

Java | Вопросы собесов

Open in Telegram

📈 Analytical overview of Telegram channel Java | Вопросы собесов

Channel Java | Вопросы собесов (@easy_java_ru) in the Russian language segment is an active participant. Currently, the community unites 11 450 subscribers, ranking 10 899 in the Technologies & Applications category and 57 490 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 11 450 subscribers.

According to the latest data from 05 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 20 over the last 30 days and by 6 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 7.92%. Within the first 24 hours after publication, content typically collects 7.61% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 907 views. Within the first day, a publication typically gains 871 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 0.
  • Thematic interests: Content is focused on key topics such as ставь, void, string, строка, static.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+icUwivvbGOkwNWRi Задачи t.me/+8eqUTboisnkyZjQy Вакансии t.me/+4pspF5nDjgM4MjQy

Thanks to the high frequency of updates (latest data received on 06 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

11 450
Subscribers
+624 hours
-117 days
+2030 days
Posts Archive
🤔 Что такое шардирование? Шардирование – это метод горизонтального разделения базы данных на несколько частей (шардов) для повышения производительности и масштабируемости. 🚩Популярные стратегии шардирования 🟠По диапазону (Range-Based Sharding) Данные делятся по диапазону значений (например, ID 1–1000, 1001–2000). 🟠По хешу (Hash-Based Sharding) Данные распределяются с помощью хеш-функции.
int shardNumber = userId % numberOfShards;
🟠Географическое (Geo-Based Sharding) Данные разделяются по географическому признаку (например, Европа, Азия, США). Минимальная задержка (пользователь получает данные ближе к себе) Некоторые регионы могут перегружаться. Ставь 👍 и забирай 📚 Базу знаний

🤔 Известно ли что-то про цикл forEach? Да. forEach — это удобный способ итерации по коллекции: - используется с лямбдами или методами; - появился с Java 8; - реализован в Iterable и Stream. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое HQL? HQL (Hibernate Query Language) – это язык запросов, используемый в Hibernate (фреймворке для работы с базами данных в Java), который похож на SQL, но оперирует не таблицами и столбцами, а объектами и их свойствами. 🚩Зачем нужен HQL? Когда мы работаем с базами данных в Hibernate, мы используем объектно-реляционное отображение (ORM), где каждая таблица представляется как класс, а строки – как объекты. Однако иногда нам нужно делать запросы к базе данных, например: Получить список объектов, соответствующих определённому критерию Отфильтровать, отсортировать или объединить данные Выполнить массовое обновление или удаление Можно, конечно, использовать чистый SQL, но тогда мы потеряем преимущества ORM, такие как переносимость кода между разными базами данных. HQL решает эту проблему, позволяя писать запросы в объектных терминах, а Hibernate сам преобразует их в правильный SQL для конкретной базы данных. 🚩Как выглядит HQL? HQL очень похож на SQL, но вместо таблиц и столбцов мы используем имена классов и их полей. 🟠Пример 1: Получение списка объектов Допустим, у нас есть класс User, связанный с таблицей users:
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private int age;
    
    // Геттеры и сеттеры
}
Теперь напишем HQL-запрос, чтобы получить всех пользователей старше 18 ле
String hql = "FROM User WHERE age > 18";
List<User> users = session.createQuery(hql, User.class).getResultList();
Выборка только имен пользователей
String hql = "SELECT u.name FROM User u";
List<String> names = session.createQuery(hql, String.class).getResultList();
Запрос с параметрами (предотвращает SQL-инъекции)
String hql = "FROM User WHERE name = :name";
Query<User> query = session.createQuery(hql, User.class);
query.setParameter("name", "Иван");
List<User> users = query.getResultList();
🚩ПлюсыНезависимость от СУБД HQL автоматически адаптируется под MySQL, PostgreSQL, Oracle и другие базы. ➕Оперирование объектами вместо таблиц и столбцов мы работаем с сущностями (классами Java). ➕Безопасность использование параметров (setParameter()) предотвращает SQL-инъекции. ➕Гибкость поддержка JOIN, GROUP BY, ORDER BY и других SQL-конструкций. Ставь 👍 и забирай 📚 Базу знаний

🤔 Может ли один блок catch отлавливать сразу несколько исключений? Да, начиная с Java 7 можно объединить несколько исключений в одном catch с помощью | (pipe). Это упрощает код, если обработка для них одинаковая. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Есть ли возможность создать два Singleton'а в Spring'е В Spring действительно можно создать два синглтона, но тут важно понимать, что Spring использует паттерн Singleton на уровне контейнера, а не на уровне JVM. Давайте разберёмся, как это возможно. 🟠Определение Singleton в Spring В Spring синглтон означает, что в рамках одного контекста (ApplicationContext) создаётся один экземпляр бина.
@Component
public class MySingletonBean {
    public MySingletonBean() {
        System.out.println("Создан экземпляр MySingletonBean");
    }
}
🟠Два Singleton'а в Spring? Как это возможно? Есть несколько способов создать два синглтона. Создание двух контекстов (ApplicationContext) Spring гарантирует синглтонность только в одном контексте. Если создать два контекста, можно получить два независимых синглтона.
AnnotationConfigApplicationContext context1 = new AnnotationConfigApplicationContext(AppConfig.class);
AnnotationConfigApplicationContext context2 = new AnnotationConfigApplicationContext(AppConfig.class);

MySingletonBean bean1 = context1.getBean(MySingletonBean.class);
MySingletonBean bean2 = context2.getBean(MySingletonBean.class);

System.out.println(bean1 == bean2); // false! Два разных объекта
Определение двух бинов одного типа Можно создать два разных бина, просто давая им разные имена в конфигурации.
@Configuration
public class AppConfig {

    @Bean
    public MySingletonBean firstSingleton() {
        return new MySingletonBean();
    }

    @Bean
    public MySingletonBean secondSingleton() {
        return new MySingletonBean();
    }
}
Теперь оба метода создадут разные объекты.
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

MySingletonBean bean1 = context.getBean("firstSingleton", MySingletonBean.class);
MySingletonBean bean2 = context.getBean("secondSingleton", MySingletonBean.class);

System.out.println(bean1 == bean2); // false
Изменение области (scope) бина Если изменить область (@Scope), можно получить два экземпляра в одном контексте, но тогда это уже не будет синглтон.
@Component
@Scope("prototype")
public class MyBean {
    public MyBean() {
        System.out.println("Создан новый экземпляр MyBean");
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Из чего состоит объектно-ориентирование? ООП состоит из четырёх ключевых принципов: 1. Инкапсуляция — скрытие реализации внутри объекта. 2. Наследование — повторное использование кода через иерархию. 3. Полиморфизм — способность объектов вести себя по-разному. 4. Абстракция — выделение ключевых характеристик и игнорирование несущественного. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Чем отличается where от having ? WHERE и HAVING используются для фильтрации записей, но они применяются на разных этапах выполнения запроса и имеют разные цели. 🚩WHERE Применяется до агрегации данных. Это значит, что фильтрация происходит непосредственно на строках исходной таблицы или результата объединения таблиц, до того как произойдет любая операция группировки (GROUP BY) или агрегирования (SUM, COUNT, AVG и т.д.). Используется для фильтрации строк, которые будут включены в результаты группировки или в финальный набор данных, если группировка не используется. Не может использоваться для фильтрации агрегированных значений.
SELECT employee_id, SUM(salary)
FROM salaries
WHERE salary > 1000
GROUP BY employee_id;
🚩HAVING Применяется после агрегации данных. Это означает, что фильтрация происходит уже на агрегированных результатах, полученных после применения GROUP BY и агрегатных функций. Используется для фильтрации групп в результате запроса с группировкой. Может использоваться только с GROUP BY или для фильтрации результатов, полученных с помощью агрегатных функций.
SELECT employee_id, SUM(salary)
FROM salaries
GROUP BY employee_id
HAVING SUM(salary) > 10000;
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое сериализация? Сериализация — это механизм сохранения состояния объекта в виде байтов. Она используется для: - хранения в файле; - передачи по сети; - межпроцессного взаимодействия. Объекты должны реализовать интерфейс Serializable. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Расскажи про способы оптимизации запросов в БД Оптимизация запросов в базе данных (БД) — это процесс улучшения их производительности, чтобы они выполнялись быстрее и использовали меньше ресурсов. Рассмотрим основные способы оптимизации SQL-запросов. 🟠Индексы Индексы ускоряют поиск данных, создавая структуру, похожую на оглавление книги. Вместо полного перебора таблицы (Full Table Scan), БД быстро находит нужные строки по индексу.
CREATE INDEX idx_user_name ON users(name);
🟠Оптимизация `SELECT` Избегайте SELECT *, так как это нагружает систему избыточными данными. Плохо
SELECT * FROM users;
Хорошо
SELECT id, name FROM users;
🟠Использование `EXPLAIN` Перед оптимизацией полезно посмотреть, как БД выполняет запрос.
EXPLAIN SELECT * FROM users WHERE name = 'Ivan';
🟠Ограничение выборки (`LIMIT`, `OFFSET`) Если вам нужно получить только первые N строк, используйте LIMIT, чтобы БД не грузила лишние данные.
SELECT * FROM users ORDER BY id LIMIT 10;
🟠Оптимизация `JOIN` Соединение (JOIN) таблиц может быть дорогостоящим. Вот несколько рекомендаций: - Используйте индексы на полях, участвующих в JOIN. - Если возможно, замените сложные JOIN на подзапросы (EXISTS, IN).
CREATE INDEX idx_orders_user_id ON orders(user_id);
🟠Кеширование запросов Часто повторяющиеся запросы можно кэшировать на уровне БД (QUERY CACHE в MySQL) или в приложении (Redis, Memcached).
SET GLOBAL query_cache_size = 1000000;
🟠Нормализация и денормализация Нормализация уменьшает дублирование данных, разбивая таблицы. Денормализация может ускорить работу, дублируя данные и уменьшая количество JOIN. Ставь 👍 и забирай 📚 Базу знаний

Зарплата 207.000р у Middle-разработчика в Яндекс «В день уходит несколько часов на созвоны, в остальное время закрываю задачк
Зарплата 207.000р у Middle-разработчика в Яндекс «В день уходит несколько часов на созвоны, в остальное время закрываю задачки из спринта, редко перерабатываю. У компании топовый офис, но с коллективом как-то не заладилось. Радуюсь классному ДМС и стабильной зарплате» - middle разработчик из Яндекса. Бигтех по-русски - канал с реальными зарплатами и историями IT-специалистов российского БигТеха. Там уже опубликованы рассказы программистов Альфа-банка, Сбера и Тинькофф 🤯 Читайте: @bigtech_russia

🤔 Что такое BDD? BDD (Behavior-Driven Development) — это подход к разработке, в котором поведение системы описывается на понятном языке (например, Gherkin). BDD помогает: - улучшить коммуникацию между командами; - писать сценарии, ориентированные на поведение; - интегрировать автотесты с требованиями. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Telegram опубликовал список 8 самых быстрорастущих каналов для программистов: Only Python — Подборки приёмов и фич, о которых
Telegram опубликовал список 8 самых быстрорастущих каналов для программистов: Only Python — Подборки приёмов и фич, о которых не рассказывают в курсах. Only Tech — Главные тренды и инсайды из мира технологий, маркетинга и интернет-культуры. Only Hack — Реальные кейсы кибератак, инструменты и методы защиты, которые используют хакеры. Only GitHub — Репозитории, которые решают реальные задачи. Скрипты, фреймворки и готовые решения Only IT — Без мнений и слухов — только факты и важные IT-события. Only Apple — Новые апдейты, утечки и фишки, которые Apple ещё не показала. Only GPT — Промпты, хаки и свежие инструменты, о которых молчат даже AI-каналы. Only Memes — Если ты когда-нибудь деплоил в пятницу вечером — ты поймешь Подписывайтесь и прокачивайте свои скиллы.

📺 База 1000+ реальных собеседований На программиста, тестировщика, аналитика, проджекта и другие IT профы. Есть собесы от ведущих компаний: Сбер, Яндекс, ВТБ, Тинькофф, Озон, Wildberries и т.д. 🎯 Переходи по ссылке и присоединяйся к базе, чтобы прокачать свои шансы на успешное трудоустройство!

🤔 Расскажи что такое inversion of Conrol Inversion of Control (IoC) — это принцип проектирования, при котором управление созданием и жизненным циклом объектов передаётся внешней системе. 🟠Почему нужен IoC? Без IoC код сильно зависит от конкретных классов, что усложняет тестирование и поддержку.
class Car {
    private Engine engine;

    public Car() {
        this.engine = new Engine(); // Прямое создание зависимости ❌
    }
}
С IoC (зависимость передаётся извне)
class Car {
    private final Engine engine;

    public Car(Engine engine) { // Зависимость передаётся через конструктор
        this.engine = engine;
    }
}
🟠Как реализуется IoC? IoC достигается через паттерны проектирования, такие как: Dependency Injection (DI) – передача зависимостей извне (через конструктор, поле или метод). Factory Method – создание объектов через фабрики. Event-driven подход – реакция на события вместо явного вызова методов. 🟠IoC в Spring Spring реализует IoC через контейнер IoC, который управляет созданием объектов (бинов) и их зависимостями.
@Component
class Engine {}

@Component
class Car {
    private final Engine engine;

    @Autowired
    public Car(Engine engine) { // Spring автоматически передаст нужный объект
        this.engine = engine;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Ищете стабильную видеосвязь и мессенджер? ⚡WhatsApp и Telegram работают с перебоями, Skype с октября без техподдержки — публи
Ищете стабильную видеосвязь и мессенджер? ⚡WhatsApp и Telegram работают с перебоями, Skype с октября без техподдержки — публичные мессенджеры не подходят для бизнеса. ✅Российская платформа МТС Линк доступна 99,9% времени. Попробуйте и убедитесь сами. Попробовать #реклама 16+ mts-link.ru О рекламодателе

🤔 Что используете: async/await или send? Если речь о Vue и JavaScript — используется async/await, так как это: - читаемо; - удобно обрабатывать ошибки через try/catch; - лучше сочетается с Promise. (Вероятно, "send" — это опечатка, могли иметь в виду then). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Массив — статическая структура данных или динамическая? 🟠Почему массив – статическая структура? Фиксированный размер – при создании массива его длина задаётся раз и навсегда. Нельзя изменить размер – нельзя добавить или удалить элементы после создания массива.
int[] numbers = new int[5]; // Размер 5, изменить нельзя!
🟠Что делать, если нужен динамический массив? В Java есть динамические структуры данных, например ArrayList.
import java.util.ArrayList;
import java.util.List;

public class DynamicArrayExample {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        
        list.add(1);
        list.add(2);
        list.add(3);
        
        System.out.println(list); // [1, 2, 3]
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Можно ли сделать основной поток программы демоном? Нет, основной поток программы нельзя сделать демоном. Демон-потоки должны быть установлены как демоны до их запуска, но основной поток запускается JVM автоматически. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие минусы Rest в высоконагруженных сис-мах? REST – это удобный и популярный архитектурный стиль, но в высоконагруженных системах у него есть недостатки. 🚩Высокие накладные расходы HTTP (избыточность) Проблема: Каждый REST-запрос передаёт много мета-информации (заголовки, cookies, CORS, JSON/XML).
GET /users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer token123
Content-Type: application/json
В WebSocket/gRPC запрос выглядел бы так
{ "userId": 123 }
🚩REST-запросы неэффективны для чатов и real-time Проблема: REST использует "запрос-ответ", но **не поддерживает real-time. Что происходит в REST? 1. Клиент делает HTTP-запрос к серверу. 2. Сервер обрабатывает и отправляет ответ. 3. Если клиенту нужно новое сообщение, он снова делает запрос (Polling) или использует Long Polling. 🚩Проблемы с кэшированием Проблема: Не все REST-запросы можно кэшировать. Кэшируются только GET-запросы (если сервер поддерживает ETag и Cache-Control). POST, PUT, DELETE – не кэшируются, потому что меняют данные. 🚩REST API неэффективен для сложных запросов Проблема: REST требует много отдельных запросов, если нужно загрузить связанные данные. Пример проблемы REST: Получить пользователя: /users/123 Получить заказы этого пользователя: /users/123/orders Получить детали заказов: /orders/456/details Ставь 👍 и забирай 📚 Базу знаний

🤔 Для чего нужен BiFunction<T, U, R>? Принимает два аргумента и возвращает результат. Используется для логики преобразования или комбинирования двух значений. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний