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

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

الذهاب إلى القناة على Telegram

📈 نظرة تحليلية على قناة تيليجرام Java | Вопросы собесов

تُعد قناة Java | Вопросы собесов (@easy_java_ru) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 11 385 مشتركاً، محتلاً المرتبة 10 557 في فئة التكنولوجيات والتطبيقات والمرتبة 56 197 في منطقة روسيا.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 11 385 مشتركاً.

بحسب آخر البيانات بتاريخ 31 أغسطس, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -12، وفي آخر 24 ساعة بمقدار -1، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 8.72‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 5.78‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 993 مشاهدة. وخلال اليوم الأول يجمع عادةً 658 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 3.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل ставь, void, string, строка, static.

📝 الوصف وسياسة المحتوى

يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 01 سبتمبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

11 385
المشتركون
-124 ساعات
-77 أيام
-1230 أيام
أرشيف المشاركات
🤔 Что такое временная сложность? Временная сложность — это оценка времени выполнения алгоритма в зависимости от размера входных данных. Измеряется через нотацию O(...) и помогает сравнивать эффективность алгоритмов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое Appender в log4j? Это компонент, который отвечает за отправку логов в различные места назначения, такие как файлы, консоль, базы данных, сетевые сокеты или даже удаленные серверы. Каждый Appender реализует конкретный способ обработки и хранения логов. 🚩Зачем нужен Appender? Appender позволяет гибко управлять тем, куда и как сохраняются логи. В зависимости от требований приложения, вы можете: Писать логи в файл. Выводить их в консоль. Отправлять их в удалённые хранилища или базы данных. 🚩Основные виды Appender в Log4j 🟠ConsoleAppender Логи выводятся в консоль. Полезно для разработки и отладки.
     <Appender type="Console" name="ConsoleAppender">
         <Target>System.out</Target>
     </Appender>
     
🟠FileAppender Логи записываются в файл. Используется для длительного хранения логов.
     <Appender type="File" name="FileAppender">
         <FileName>logs/app.log</FileName>
         <Append>true</Append>
     </Appender>
     
🟠RollingFileAppender Расширение FileAppender с возможностью ротации логов (ограничение размера файла, создание новых файлов при переполнении).
     <Appender type="RollingFile" name="RollingFileAppender">
         <FileName>logs/app.log</FileName>
         <FilePattern>logs/app-%d{yyyy-MM-dd}.log</FilePattern>
         <Policies>
             <SizeBasedTriggeringPolicy size="10MB"/>
         </Policies>
     </Appender>
     
🟠DailyRollingFileAppender Логи записываются в файл, который ротационно создаётся каждый день.
     <Appender type="DailyRollingFile" name="DailyRollingAppender">
         <FileName>logs/app.log</FileName>
         <DatePattern>.yyyy-MM-dd</DatePattern>
     </Appender>
     
🟠SocketAppender Отправляет логи через сеть (TCP или UDP). Используется для централизованного логирования. 🟠JDBCAppender Записывает логи в базу данных.
     <Appender type="JDBC" name="JDBCAppender">
         <ConnectionSource>
             <DriverManagerConnectionSource>
                 <DriverClass>org.h2.Driver</DriverClass>
                 <Url>jdbc:h2:mem:logdb</Url>
                 <User>sa</User>
             </DriverManagerConnectionSource>
         </ConnectionSource>
         <TableName>log_table</TableName>
     </Appender>
     
🚩Конфигурация Appender в log4j2 Вот пример конфигурации с использованием нескольких Appender XML-конфигурация
<Configuration>
    <Appenders>
        <Console name="ConsoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n"/>
        </Console>
        <File name="FileAppender" fileName="logs/app.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level: %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="ConsoleAppender"/>
            <AppenderRef ref="FileAppender"/>
        </Root>
    </Loggers>
</Configuration>
Java-конфигурация
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Main {
    private static final Logger logger = LogManager.getLogger(Main.class);

    public static void main(String[] args) {
        logger.info("This is an info log");
        logger.error("This is an error log");
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Базовые реализации List? Основные реализации интерфейса List: - ArrayList — динамический массив. - LinkedList — двусвязный список. - Vector — потокобезопасная версия ArrayList (устаревшая). - Stack — расширяет Vector, LIFO-структура. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем смысл ограничений? Ограничения (constraints) – это правила, которые ограничивают возможные значения данных или ограничивают поведение системы. 🟠Ограничения в базах данных (SQL Constraints) В SQL ограничения гарантируют корректность данных в таблицах.
CREATE TABLE Users (
    id INT PRIMARY KEY,
    email VARCHAR(255) UNIQUE NOT NULL,
    age INT CHECK (age > 0),
    country VARCHAR(50) DEFAULT 'Unknown'
);
🟠Ограничения в Java Generics (`<T extends ...>`) Ограничения в Generics позволяют задавать допустимые типы.
class Box<T> {
    T value;
    public Box(T value) { this.value = value; }
}
Box<String> strBox = new Box<>("Hello");
Box<Integer> intBox = new Box<>(10);
class NumberBox<T extends Number> { // Ограничение: T должно быть числом
    T value;
    public NumberBox(T value) { this.value = value; }

    public double square() {
        return value.doubleValue() * value.doubleValue();
    }
}
🟠Ограничения в потоках (synchronized, volatile, join) В многопоточности ограничения помогают избежать гонок потоков.
class Counter {
    private int count = 0;

    public synchronized void increment() { // Только один поток может изменять count одновременно
        count++;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие различные методы управления сессией в сервлетах есть? 1. Cookies: Хранение идентификатора сессии в браузере. 2. URL Rewriting: Добавление идентификатора сессии в параметры URL. 3. Hidden Form Fields: Передача идентификатора сессии через скрытые поля формы. 4. HTTP Session: Использование объекта HttpSession для хранения данных сессии на сервере. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Докажи CAP теорему CAP-теорема (Consistency, Availability, Partition Tolerance) утверждает, что в распределенной системе невозможно одновременно обеспечить три свойства: 🟠Consistency (Согласованность) все узлы видят одни и те же данные в один момент времени. 🟠Availability (Доступность) каждый запрос получает ответ, даже если некоторые узлы вышли из строя. 🟠Partition Tolerance (Устойчивость к разделению сети) система продолжает работать, даже если сеть разделилась на изолированные части. 🚩Доказательство Рассмотрим сценарий с распределенной системой, состоящей из двух узлов (A и B), которые могут обмениваться данными. 🟠Предположим, что произошел сетевой раздел (Partition Tolerance, P) узлы A и B больше не могут обмениваться данными. Теперь у нас есть выбор 🟠Обеспечить согласованность (C) это значит, что данные на A и B должны оставаться идентичными. Однако, так как они не могут обмениваться данными, запросы к B не могут быть обработаны до восстановления связи (нарушается доступность). 🟠Обеспечить доступность (A) это значит, что оба узла должны продолжать отвечать на запросы. Однако, так как они не могут синхронизироваться, данные на A и B могут отличаться (нарушается согласованность). Так как разделение сети (P) может произойти в реальных условиях, система вынуждена выбирать между C и A. Таким образом, невозможно одновременно обеспечить все три свойства (C, A, P). Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие есть виды стейтментов в JDBC? В JDBC используются: - Statement — для простых SQL-запросов без параметров. - PreparedStatement — для запросов с параметрами, безопасен от SQL-инъекций и переиспользуем. - CallableStatement — для вызова хранимых процедур из базы данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем разница между Spring аннотациями Component, Repository и Service? Все три аннотации используются в Spring для создания бинов, но у каждой есть своё предназначение. 🚩`@Component` – базовая аннотация для бина @Component помечает класс как Spring-бин (компонент). Является универсальной аннотацией. Можно применять к любым классам, которые должны управляться Spring-контейнером.
@Component
public class MyComponent {
    public void doWork() {
        System.out.println("Работа компонента");
    }
}
🚩`@Service` – для бизнес-логики @Service – это специализированный @Component, используемый для сервисных классов (логика приложения). Упрощает понимание кода (показывает, что этот класс содержит бизнес-логику).
@Service
public class UserService {
    public String getUser() {
        return "Пользователь Иван";
    }
}
🚩`@Repository` – для работы с базой данных @Repository – это специализированный @Component для слоя доступа к данным (DAO, Repository). Автоматически перехватывает SQL-исключения (PersistenceExceptionTranslationPostProcessor) и преобразует их в DataAccessException.
@Repository
public class UserRepository {
    public String findUserById(int id) {
        return "Пользователь с ID " + id;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как долго в String хранятся строки? Строки — неизменяемые (immutable) и живут в памяти столько, сколько на них существуют ссылки. Если строка находится в String Pool'е, она хранится до завершения работы JVM, если не используется механизм очистки пула (в зависимости от версии Java и GC). Обычные строки (например, созданные через new) живут как обычные объекты — пока есть ссылки, потом собираются сборщиком мусора. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Каким образом можно заставить поток выполнится приоритет и есть ли такая возможность в Java? В Java у каждого потока есть приоритет, но он не гарантирует порядок выполнения. 🟠Использование `setPriority(int priority)` Java позволяет задавать приоритет потока с помощью метода 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();
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое FutureTask? FutureTask — это класс, представляющий асинхронную задачу, которая может быть запущена в другом потоке. Позволяет получить результат выполнения в будущем через методы get() и проверять состояние выполнения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Расскажи про процесс от пуша кода до продакшена Когда разработчик пушит код, он проходит несколько этапов перед развертыванием в продакшене. Этот процесс автоматизируется с помощью 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
Ставь 👍 и забирай 📚 Базу знаний

Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как
Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

🤔 Какие есть методы чтения XML, опиши сильные и слабые стороны каждого метода? - DOM (Document Object Model): загружает весь XML в память в виде дерева. Плюсы: лёгкий доступ к любому узлу; Минусы: высокая потребляемая память при больших файлах. - SAX (Simple API for XML): событийный парсер, обрабатывает XML последовательно. Плюсы: низкое потребление памяти; Минусы: нет прямого доступа к элементам, труднее работать. - StAX (Streaming API for XML): потоковый парсер с возможностью контролировать чтение. Плюсы: баланс между SAX и DOM, лучше управляем поток; Минусы: сложнее логика обработки. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое функциональный интерфейс? Функциональный интерфейс —это интерфейс, который содержит только один абстрактный метод. Это позволяет использовать лямбда-выражения для создания его анонимных реализаций, делая код более лаконичным и читаемым. Функциональные интерфейсы являются основой для лямбда-выражений и методов ссылок, начиная с версии 8. Примером этого может служить интерфейс 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 Ставь 👍 и забирай 📚 Базу знаний

Современная магистратура от Центрального университета Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практ
Современная магистратура от Центрального университета Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой? Поступай в магистратуру Центрального университета! - 4 офлайн программы по востребованным направлениям ИТ - Онлайн-программа по машинному обучению - 300 мест с грантами до 1,2 млн руб. - Вечерние занятия и учеба по выходным — удобно совмещать с работой - Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса - Возможность стажировок и трудоустройства в ведущих компаниях - Государственный диплом за 2 года Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас! Подать заявку #реклама 16+ apply.centraluniversity.ru О рекламодателе

🤔 Ключи в Map могут повторяться? Нет, ключи в Map не могут повторяться. Если вставить новую пару с уже существующим ключом — старое значение будет перезаписано. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что означает симметричность? Симметричность – это свойство, при котором если A связано с B, то B связано с A. 🚩В математике В логике и алгебре отношение \( R \) называется симметричным, если: a R b \Rightarrow b R a Но, например, отношение "a > b" не симметрично, потому что если a > b, то b > a – это неверно. 🚩В программировании (Java) В Java симметричность важна при переопределении метода 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);
}
Ставь 👍 и забирай 📚 Базу знаний

Методичка: как сделать онлайн-встречи эффективнее Надоело ждать коллег, которые постоянно забывают о встречах, а отсутствие п
Методичка: как сделать онлайн-встречи эффективнее Надоело ждать коллег, которые постоянно забывают о встречах, а отсутствие повестки и потерянные договоренности мешают нормально работать? Команда МТС Линк собрала на 37 страницах полезные материалы, чек-листы и кейсы, которые помогают компаниям проводить эффективные совещания в онлайне с помощью сервиса Встречи. Из методички узнаете: - Как создать постоянную ссылку и подключаться на встречи в 2 клика, - Как делать заметки и работать с файлами, не переживая за качество связи и безопасность данных. - Как облегчает жизнь ИИ, который расшифровывает созвоны в текст и автоматически отправляет расшифровку на почту. Еще в методичке описаны 7 способов оценки текущей эффективности ваших онлайн-встреч. Получить гайд можно бесплатно на сайте. Скачать #реклама 16+ mts-link.ru О рекламодателе

🤔 В чем идея Stream API? Stream API — это инструмент для обработки коллекций и массивов с использованием функционального подхода. Он позволяет фильтровать, преобразовывать и агрегировать данные, используя методы, такие как map, filter, reduce. Stream API поддерживает ленивую обработку данных, что улучшает производительность, особенно с большими объёмами данных. Это упрощает написание кода и делает его более выразительным. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний