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

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

前往频道在 Telegram

📈 Telegram 频道 Java | Вопросы собесов 的分析概览

频道 Java | Вопросы собесов (@easy_java_ru) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 11 450 名订阅者,在 技术与应用 类别中位列第 10 899,并在 俄罗斯 地区排名第 57 490

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 11 450 名订阅者。

根据 05 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 20,过去 24 小时变化为 6,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 7.92%。内容发布后 24 小时内通常能获得 7.61% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 907 次浏览,首日通常累积 871 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 0
  • 主题关注点: 内容集中在 ставь, void, string, строка, static 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+icUwivvbGOkwNWRi Задачи t.me/+8eqUTboisnkyZjQy Вакансии t.me/+4pspF5nDjgM4MjQy

凭借高频更新(最新数据采集于 06 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

11 450
订阅者
+624 小时
-117
+2030
帖子存档
🤔 Как одной строчкой скопировать элементы любой collection в массив? С помощью toArray() — создаётся массив нужного типа с элементами коллекции. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чём различие между LeftJoin , RightJoin и InnerJoin? LEFT JOIN, RIGHT JOIN и INNER JOIN являются операциями соединения таблиц, каждая из которых используется для объединения строк из двух или более таблиц на основе связанных столбцов между ними. Различие между этими типами соединений заключается в том, какие строки выбираются для включения в результаты запроса. 🚩INNER JOIN Возвращает только те строки, которые имеют соответствующие значения в обеих таблицах. Если совпадение не найдено, строки не включаются в результаты. Это наиболее часто используемый тип соединения, так как он обеспечивает строгое соответствие между таблицами. 🚩LEFT JOIN (или LEFT OUTER JOIN) Возвращает все строки из левой таблицы (ТаблицаA), а также соответствующие строки из правой таблицы (ТаблицаB). Если совпадение в правой таблице не найдено, результат будет содержать NULL на месте столбцов правой таблицы. 🚩RIGHT JOIN (или RIGHT OUTER JOIN) Работает аналогично LEFT JOIN, но возвращает все строки из правой таблицы (ТаблицаB), а также соответствующие строки из левой таблицы (ТаблицаA). Если совпадение в левой таблице не найдено, результат будет содержать NULL на месте столбцов левой таблицы. INNER JOIN используется для получения строк с совпадениями в обеих таблицах. LEFT JOIN возвращает все строки из левой таблицы и соответствующие строки из правой таблицы; если соответствий нет, вместо столбцов правой таблицы будут NULL. RIGHT JOIN возвращает все строки из правой таблицы и соответствующие строки из левой таблицы; если соответствий нет, вместо столбцов левой таблицы будут NULL. Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Что знаешь об интерфейсе FileFilter? FileFilter — это интерфейс в пакете java.io, используемый для фильтрации файлов в каталогах. Он применяется в методе listFiles(FileFilter filter) класса File и позволяет выбрать только те файлы, которые соответствуют заданным критериям. 🚩Как работает `FileFilter`? Этот интерфейс содержит всего один метод:
boolean accept(File pathname);
🚩Пример использования `FileFilter` Допустим, мы хотим отфильтровать все файлы .txt в заданной папке:
import java.io.File;
import java.io.FileFilter;

public class TxtFileFilterExample {
    public static void main(String[] args) {
        File directory = new File("C:/example"); // Укажите свою папку

        // Используем FileFilter для выбора файлов с расширением .txt
        FileFilter txtFilter = new FileFilter() {
            @Override
            public boolean accept(File file) {
                return file.isFile() && file.getName().endsWith(".txt");
            }
        };

        // Получаем список файлов, соответствующих фильтру
        File[] txtFiles = directory.listFiles(txtFilter);

        // Выводим найденные файлы
        if (txtFiles != null) {
            for (File file : txtFiles) {
                System.out.println("Файл: " + file.getName());
            }
        }
    }
}
Выходные данные (если в папке C:/example есть файлы .txt)
Файл: notes.txt
Файл: tasks.txt
🚩Lambda-версия (Java 8+) Вместо анонимного класса можно использовать лямбда-выражение:
FileFilter txtFilter = file -> file.isFile() && file.getName().endsWith(".txt");
🚩Разница между `FileFilter` и `FilenameFilter` FileFilter принимает объект File, позволяя фильтровать как файлы, так и каталоги. FilenameFilter принимает только имя файла (без пути).
import java.io.File;
import java.io.FilenameFilter;

public class TxtFilenameFilterExample {
    public static void main(String[] args) {
        File directory = new File("C:/example");

        // Фильтр для файлов .txt
        FilenameFilter txtFilter = (dir, name) -> name.endsWith(".txt");

        String[] txtFiles = directory.list(txtFilter);
        if (txtFiles != null) {
            for (String file : txtFiles) {
                System.out.println("Файл: " + file);
            }
        }
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Шаблон Builder — что такое и для каких задач? Builder позволяет пошагово создавать сложные объекты с множеством параметров, делает код читаемым и облегчает работу с immutable объектами Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Repost from easyoffer
База 1000+ реальных собеседований теперь встроена в easyoffer Смотрите, как другие кандидаты отвечают на вопросы, решают зада
База 1000+ реальных собеседований теперь встроена в easyoffer Смотрите, как другие кандидаты отвечают на вопросы, решают задачи и проходят этапы на реальных собеседованиях от топовых компаний. Подготовьтесь к своему собеседованию с двойной уверенностью. Напоминаем, что сегодня последний день Чёрной Пятницы 👉 Забрать PRO со скидкой 70%: https://easyoffer.ru/

🤔 Расскажи про процесс от пуша кода до продакшена Когда разработчик пушит код, он проходит несколько этапов перед развертыванием в продакшене. Этот процесс автоматизируется с помощью CI/CD (Continuous Integration / Continuous Deployment). 🚩Этапы CI/CD 🟠Разработчик пушит код в Git-репозиторий - Код отправляется в GitHub, GitLab, Bitbucket или другой репозиторий. - Открывается Pull Request (PR) для ревью.
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
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что известно про первую и вторую нормальные формы? - 1NF (Первая нормальная форма): - Все значения — атомарны. - Нет повторяющихся групп и вложенных таблиц. - 2NF (Вторая нормальная форма): - Данные соответствуют 1NF. - Все неключевые атрибуты зависят от всего первичного ключа, а не от его части. Это уменьшает избыточность и устраняет частичную Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Чем отличаются методы Thread.sleep() и Thread.yield()? Методы Thread.sleep() и Thread.yield() в Java используются для управления потоком, но работают по-разному. 🚩Thread.sleep() Метод Thread.sleep(milliseconds) приостанавливает выполнение текущего потока на указанное время. 🚩Как это работает? Поток уходит в состояние "ожидания" (TIMED_WAITING). Операционная система не даёт ему процессорное время в течение заданного времени. После завершения паузы поток снова становится готовым к выполнению (RUNNABLE).
public class SleepExample {
    public static void main(String[] args) {
        System.out.println("Начало работы...");
        try {
            Thread.sleep(2000); // Пауза на 2 секунды
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Прошло 2 секунды");
    }
}
Результат
Начало работы...
(пауза 2 секунды)
Прошло 2 секунды
🚩Thread.yield() Метод Thread.yield() даёт возможность другим потокам выполнить работу. 🚩Как это работает? Текущий поток передаёт управление планировщику (scheduler). Если есть другие потоки с таким же или более высоким приоритетом, они получат процессорное время. Если таких потоков нет, то текущий поток продолжит выполняться.
public class YieldExample {
    public static void main(String[] args) {
        Runnable task = () -> {
            for (int i = 1; i <= 5; i++) {
                System.out.println(Thread.currentThread().getName() + " - " + i);
                Thread.yield(); // Позволяет другим потокам выполняться
            }
        };

        Thread t1 = new Thread(task, "Поток-1");
        Thread t2 = new Thread(task, "Поток-2");

        t1.start();
        t2.start();
    }
}
Результат (примерный, зависит от планировщика ОС)
Поток-1 - 1
Поток-2 - 1
Поток-1 - 2
Поток-2 - 2
...
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как обойтись без synchronized в многопоточке на Singleton’е? С помощью enum, static-инициализации или volatile с double-check (DCL) — всё это потоко-безопасные подходы без явного synchronized. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Repost from easyoffer
Черная пятница на easyoffer Скидка 70% на PRO до 29 ноября. 👉 https://easyoffer.ru/
Черная пятница на easyoffer Скидка 70% на PRO до 29 ноября. 👉 https://easyoffer.ru/

🤔 В чем разница Spring Boot и Spring? Spring и Spring Boot являются частью экосистемы, которая предоставляет широкий спектр инструментов для разработки современных Java-приложений. Несмотря на тесную связь, между ними есть ключевые отличия. 🚩Spring Framework Это мощный и широко используемый фреймворк для разработки приложений на Java. Он предоставляет обширный набор функциональностей, включая инверсию управления (IoC) и внедрение зависимостей (DI), абстракции для работы с транзакциями, обработку исключений, поддержку аспектно-ориентированного программирования (AOP) и многое другое. Он предназначен для упрощения Java EE разработки, обеспечивая легкость создания масштабируемых и легко поддерживаемых приложений. 🚩Spring Boot С другой стороны, представляет собой расширение Spring Framework, предназначенное для упрощения процесса конфигурации и развертывания Spring-приложений. Он автоматизирует многие процессы, предоставляя "готовые к использованию" настройки для быстрого старта проектов и избавления от необходимости вручную определять стандартную конфигурацию. 🚩Различия 🟠Цель Spring Framework предоставляет основу для создания приложений на Java, в то время как Spring Boot предлагает конвенции и автоматическую конфигурацию для быстрого старта и развертывания приложений. 🟠Конфигурация В Spring для настройки приложения часто требуется детальная конфигурация, включая XML-файлы или аннотации. Spring Boot стремится уменьшить эту сложность, автоматически конфигурируя компоненты на основе добавленных в проект зависимостей. 🟠Встроенный сервер Spring Boot по умолчанию включает в себя встроенный сервер приложений, что упрощает развертывание и тестирование веб-приложений. Ставь 👍 и забирай 📚 Базу знаний

Скидка 20% на аренду серверов с GPU NVIDIA! Современные ИИ-модели, графические рендеры и вычисления в науке требуют мощных GP
Скидка 20% на аренду серверов с GPU NVIDIA! Современные ИИ-модели, графические рендеры и вычисления в науке требуют мощных GPU-решений. Мы предлагаем аренду облачных серверов с видеокартами NVIDIA Tesla и RTX. Вы можете выбрать готовую конфигурацию или собрать собственный сервер под нейросети, глубокое обучение, рендеринг или виртуальные рабочие места (VDI). Серверы размещаются в ЦОД уровня TIER III, обеспечивают SLA 99.982% и работают в режиме 24/7. Доступные модели GPU: - NVIDIA Tesla H200, B100, B200, A100, V100, P200, P300 - NVIDIA RTX 4090, 5090, A6000 Ada GPU-серверы Cloud4Y подходят для задач deep learning, big data-аналитики, 3D-рендеринга и проектирования. Они позволяют ускорить обучение моделей до 8 раз по сравнению с CPU-инфраструктурой и гарантируют стабильную работу даже при максимальной нагрузке. Попробовать #реклама 16+ cloud4y.ru О рекламодателе

🤔 Известно ли что-то рассказать про планировщика потоков? В JVM используется предварительно вытесняющий планировщик (preemptive): - ОС решает, когда приостановить/возобновить поток. - JVM не гарантирует порядок выполнения. - Потоки могут быть приоритетными, но это рекомендация, не жёсткое правило. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое as-if-serial semantics? As-If-Serial Semantics – это принцип оптимизации компилятором, при котором код может перестраиваться, но результат его выполнения остаётся таким же, как если бы инструкции выполнялись строго по порядку. Обычный код
int a = 10;
int b = 20;
int c = a + b; 
System.out.println(c);
Что может сделать компилятор?
int c = 30;
System.out.println(c);
🚩Что можно менять? (Безопасные оптимизации) Менять порядок инструкций, если это не влияет на результат. Удалять лишние переменные и вычисления. Заменять выражения константами (10 + 20 → 30).
int x = 5;
int y = 10;
x = x + 1; // x = 6
System.out.println(y);
Компилятор может поменять местами y и x
int y = 10;
int x = 6;
System.out.println(y);
🚩Что нельзя менять? (Гарантированный порядок исполнения)
int x = 10;
int y = x + 5;
x = 20;
System.out.println(y);
Если поменять порядок
x = 20;
int y = x + 5; // ❌ Неверно! y теперь 25, а должно быть 15
🚩Как `As-If-Serial` влияет на многопоточность? В многопоточной среде компилятор может менять порядок команд внутри одного потока, но он не знает о другом потоке! Опасный пример без volatile
boolean ready = false;
int data = 0;

void writer() {
    data = 42;
    ready = true;
}

void reader() {
    if (ready) {
        System.out.println(data); // Может напечатать 0 из-за перестановки!
    }
}
Решение – volatile для ready
volatile boolean ready = false;
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое as-if-serial semantics? As-if-serial semantics — это гарантия компилятора, что независимо от оптимизаций результат выполнения программы будет таким же, как если бы все инструкции выполнялись последовательно в порядке написания кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Слышал ли что то про метод intern? Метод intern() в классе String используется для оптимизации памяти. Он добавляет строку в String Pool и возвращает её ссылку, если строка уже там есть. 🚩Как работает `intern()`? Без intern() – строки создаются в Heap (куче)
String s1 = new String("Hello"); // В куче (Heap)
String s2 = new String("Hello");

System.out.println(s1 == s2); // false (разные объекты)
С intern() – строки хранятся в String Pool
String s1 = new String("Hello").intern();
String s2 = new String("Hello").intern();

System.out.println(s1 == s2); // true (одна строка в String Pool)
🚩Что такое `String Pool`? Это специальная область памяти, где хранятся уникальные строковые литералы. Все строковые литералы ("Hello") по умолчанию хранятся в String Pool.
String s1 = "Hello"; // В String Pool
String s2 = "Hello"; // Ссылается на тот же объект

System.out.println(s1 == s2); // true
🚩Когда использовать `intern()`? Когда у вас много одинаковых строк в памяти (например, имена, идентификаторы). Для экономии памяти, если строки часто дублируются. В парсинге JSON, XML – одни и те же строки могут повторяться тысячи раз.
List<String> names = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
    names.add(("User" + (i % 100)).intern()); // Используем String Pool
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое «интеграционное тестирование»? Это тип тестирования, при котором проверяются взаимодействия между модулями, сервисами или системами. Тестируются не отдельные функции, а их совместная работа, например, интеграция базы данных и API. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие методы располагаются в интерфейсе? В интерфейсе могут располагаться различные типы методов, начиная с Java 8, когда в язык были добавлены новые возможности, такие как default методы и static методы. До Java 8 интерфейсы могли содержать только абстрактные методы. Ниже представлены типы методов, которые могут быть объявлены в интерфейсе: 🟠Абстрактные методы Это методы без тела, предназначенные для переопределения в классах, которые реализуют интерфейс. Абстрактные методы представляют собой контракт, который должен быть выполнен классом-реализатором. Все методы в интерфейсе неявно являются public abstract, даже если явно не указаны эти модификаторы.
void myMethod();
🟠Default методы (начиная с Java 8) Позволяют определять реализацию метода непосредственно в интерфейсе. Классы, реализующие интерфейс, могут переопределять эти методы, но это не обязательно. Default методы были введены для обеспечения обратной совместимости, позволяя добавлять новые методы в интерфейсы без нарушения существующих реализаций.
default void defaultMethod() {
    // Реализация
}
🟠Static методы (начиная с Java 8) Позволяют определять методы с реализацией, которые могут быть вызваны без создания экземпляра класса, реализующего интерфейс. Эти методы нельзя переопределить в реализующем интерфейс классе.
static void staticMethod() {
    // Реализация
}
🟠Private методы (начиная с Java 9) Позволяют определять вспомогательные методы, которые предназначены для использования в default или static методах внутри того же интерфейса. Эти методы не могут быть вызваны извне интерфейса или реализующих его классов.
private void privateMethod() {
    // Реализация
}
Пример
public interface MyInterface {
    // Абстрактный метод
    void abstractMethod();
    
    // Default метод
    default void defaultMethod() {
        System.out.println("Default implementation");
    }
    
    // Static метод
    static void staticMethod() {
        System.out.println("Static implementation");
    }
    
    // Private метод (используется внутри интерфейса)
    private void privateMethod() {
        System.out.println("Private helper method");
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как получать значения из HashMap? Через метод get(key): - Вычисляется хеш ключа. - Ищется соответствующий бакет. - Происходит сравнение ключей через equals(). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний