Java | Вопросы собесов
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+icUwivvbGOkwNWRi Задачи t.me/+8eqUTboisnkyZjQy Вакансии t.me/+4pspF5nDjgM4MjQy
Больше📈 Аналитический обзор Telegram-канала Java | Вопросы собесов
Канал Java | Вопросы собесов (@easy_java_ru) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 11 455 подписчиков, занимая 10 891 место в категории Технологии и приложения и 57 522 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 11 455 подписчиков.
Согласно последним данным от 08 июня, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило 11, а за последние 24 часа — 7, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 10.52%. В первые 24 часа после публикации контент обычно набирает 7.55% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 1 205 просмотров. В течение первых суток публикация набирает 865 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 7.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как ставь, void, string, строка, static.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Cайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Тесты t.me/+icUwivvbGOkwNWRi
Задачи t.me/+8eqUTboisnkyZjQy
Вакансии t.me/+4pspF5nDjgM4MjQy”
Благодаря высокой частоте обновлений (последние данные получены 09 июня, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
setPriority(), который принимает значение от 1 до 10:
Thread.MIN_PRIORITY (1) – минимальный приоритет
Thread.NORM_PRIORITY (5) – стандартный приоритет (по умолчанию)
Thread.MAX_PRIORITY (10) – максимальный приоритет
class MyThread extends Thread {
public MyThread(String name, int priority) {
super(name);
setPriority(priority);
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(getName() + " выполняется с приоритетом " + getPriority());
}
}
}
public class Main {
public static void main(String[] args) {
MyThread low = new MyThread("Low Priority", Thread.MIN_PRIORITY);
MyThread high = new MyThread("High Priority", Thread.MAX_PRIORITY);
low.start();
high.start();
}
}
🟠Почему `setPriority()` не даёт 100% контроль?
Приоритет – это всего лишь рекомендация для ОС.
Распределение процессорного времени зависит от планировщика ОС.
В Windows, Linux, macOS приоритеты работают по-разному, и Java не контролирует их на низком уровне.
🟠Как действительно заставить поток выполниться первым?
Реальные способы управления порядком выполнения:
а) Использование join()
Позволяет дождаться выполнения одного потока перед запуском другого.
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread high = new MyThread("High Priority", Thread.MAX_PRIORITY);
Thread low = new MyThread("Low Priority", Thread.MIN_PRIORITY);
high.start();
high.join(); // Ждём, пока high завершится
low.start(); // Теперь запускается low
}
}
б) Использование Executors.newSingleThreadExecutor()
Позволяет гарантированно выполнять потоки по очереди.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> System.out.println("Задача 1"));
executor.submit(() -> System.out.println("Задача 2"));
executor.shutdown();
}
}
Ставь 👍 и забирай 📚 Базу знанийgit add .
git commit -m "Добавлена новая фича"
git push origin feature-branch
🟠CI (Continuous Integration) – Автоматическая сборка и тестирование
После пуша CI-сервер (Jenkins, GitHub Actions, GitLab CI/CD, CircleCI)** запускает автоматические тесты и сборку.
Клонирование репозитория.
Сборка проекта (например, mvn package для Java).
Запуск юнит-тестов (JUnit, Mockito).
Запуск интеграционных тестов (например, TestContainers).
Анализ кода (SonarQube).
name: CI Pipeline
on:
push:
branches:
- main
- develop
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Java
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Build project
run: mvn clean package
- name: Run tests
run: mvn test
🟠CD (Continuous Deployment) – Развёртывание на Staging
После успешного CI код автоматически разворачивается в стейджинг (staging) – это тестовая среда, похожая на продакшен.
Развёртывание может происходить с помощью:
Docker + Kubernetes (K8s)
AWS CodeDeploy, GitLab CD
Terraform + Ansible
FROM openjdk:17
COPY target/app.jar /app.jar
CMD ["java", "-jar", "/app.jar"]
🟠Код проходит код-ревью и одобряется
Проверяется чистота кода, читаемость и ошибки.
В некоторых компаниях код проходит Security Review
git merge feature-branch
git push origin main
🟠CD (Continuous Deployment) – Развёртывание в продакшен
Blue-Green Deployment – новый код разворачивается на отдельном сервере, затем трафик переключается.
Canary Release – новый код деплоится на 5-10% пользователей, если всё хорошо – на всех.
Rolling Deployment – обновление происходит поэтапно, без даунтайма.
deploy:
stage: deploy
script:
- kubectl apply -f deployment.yaml
only:
- main
Ставь 👍 и забирай 📚 Базу знанийjava.util.function.Predicate<T> который принимает объект типа T и возвращает значение типа boolean. Вот пример использования:
Predicate<String> isNotEmpty = s -> !s.isEmpty();
System.out.println(isNotEmpty.test("Hello")); // Выведет true
System.out.println(isNotEmpty.test("")); // Выведет false
Чтобы явно указать, что интерфейс предназначен для использования как функциональный, используется аннотация @FunctionalInterface. Эта аннотация не обязательна (компилятор может определить функциональный интерфейс и без неё), но она помогает в документировании кода и обеспечивает проверку времени компиляции, гарантируя, что интерфейс содержит только один абстрактный метод.
@FunctionalInterface
public interface SimpleFunction {
int apply(int value);
}
// Использование
SimpleFunction triple = value -> value * 3;
System.out.println(triple.apply(5)); // Выведет 15
Ставь 👍 и забирай 📚 Базу знанийequals().
Если a.equals(b) == true, то обязательно должно быть b.equals(a) == true. Ошибочный код (нарушает симметричность)
class Person {
String name;
Person(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof String) { // ❌ Сравниваем с String (ошибка)
return this.name.equals(obj);
}
return false;
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person("Alice");
System.out.println(p.equals("Alice")); // true
System.out.println("Alice".equals(p)); // false ❌ (нарушена симметричность)
}
}
Правильный способ
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return name.equals(person.name);
}
Ставь 👍 и забирай 📚 Базу знаний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]
}
}
Ставь 👍 и забирай 📚 Базу знаний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.
Ставь 👍 и забирай 📚 Базу знаний@Component делает класс Spring-бином автоматически.
Spring сам создаст и зарегистрирует объект в контейнере.
import org.springframework.stereotype.Component;
@Component
public class Car {
public void drive() {
System.out.println("Машина едет...");
}
}
Как получить объект?
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Car car = context.getBean(Car.class);
car.drive();
}
}
🚩Что такое `@Bean`?
@Bean создаёт Bean вручную в @Configuration-классе.
Можно использовать, если нужно передать параметры или создать Bean из библиотеки.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public Car car() {
return new Car(); // Создаём объект вручную
}
}
Как получить Bean?
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Car car = context.getBean(Car.class);
Ставь 👍 и забирай 📚 Базу знаний
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
