ar
Feedback

لا تقع ضحية للمخادعين! تيليمتريو يكتشف ويُميّز هذه القنوات 👉 إذا كنت تريد رؤية العلامة، اشترك

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

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

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

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads

إظهار المزيد

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

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

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

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

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

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

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

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

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

11 296
المشتركون
-224 ساعات
-257 أيام
-3630 أيام
أرشيف المشاركات
🤔 Какие виды тестов знаешь? В программировании существует множество видов тестирования, которые можно разделить на категории по уровню тестирования, методам выполнения и целям. Вот основные виды: 🚩По уровню тестирования 🟠Модульное тестирование (Unit Testing) Тестирование отдельных методов или классов. Цель: Проверить работу минимальных компонентов программы. Инструменты: JUnit, TestNG.
  @Test
  public void testAddition() {
      assertEquals(5, Calculator.add(2, 3));
  }
  
🟠Интеграционное тестирование (Integration Testing) Тестирование взаимодействия между модулями. Цель: Убедиться, что модули правильно работают вместе. Пример: Проверка взаимодействия сервиса и базы данных. Инструменты: Spring Test, Apache Camel Test. 🟠Системное тестирование (System Testing) Проверка всей системы как единого целого. Цель: Убедиться, что все компоненты работают вместе и система соответствует требованиям. 🟠Приемочное тестирование (Acceptance Testing) Проводится с участием клиента или конечных пользователей. Цель: Убедиться, что система удовлетворяет бизнес-требованиям. 🚩По методам выполнения 🟠Ручное тестирование (Manual Testing) Тесты выполняются вручную. Цель: Найти ошибки, которые может не уловить автоматизация. Пример: Тестировщик вручную проверяет пользовательский интерфейс. 🟠Автоматизированное тестирование (Automated Testing) Тесты выполняются автоматически с использованием скриптов и инструментов. Цель: Снизить время и затраты на повторяющиеся тесты. Инструменты: Selenium, JUnit, Appium. 🚩По целям тестирования 🟠Функциональное тестирование Проверяет, что функции системы работают как ожидалось. Цель: Убедиться в соответствии требованиям. Инструменты: Selenium, Postman. 🟠Нефункциональное тестирование Тестирование производительности (Performance Testing): Проверяет скорость, отклик и стабильность. Инструменты: JMeter, Gatling. Тестирование безопасности (Security Testing): Проверяет защиту системы. Инструменты: OWASP ZAP, Burp Suite. Тестирование удобства использования (Usability Testing): Проверяет интерфейс на удобство для пользователя. 🚩По типам тестирования 🟠Smoke Testing Быстрая проверка работоспособности ключевых функций. Цель: Убедиться, что основные функции работают, прежде чем углубляться в тесты. 🟠Регрессионное тестирование Проверяет, что новые изменения не сломали старую функциональность. Цель: Убедиться, что баги, исправленные ранее, не повторились. 🟠Тестирование черного ящика (Black Box Testing) Проверяет систему без знаний о внутреннем устройстве. Цель: Оценить функциональность с точки зрения пользователя. 🟠Тестирование белого ящика (White Box Testing) Проверяет систему с учетом внутренней структуры кода. Цель: Оценить корректность логики программы. 🚩Специальные виды тестирования 🟠A/B тестирование Проверяет, какая версия системы лучше (например, два варианта интерфейса). Цель: Повысить пользовательский опыт. 🟠Тестирование нагрузки (Load Testing) Проверяет, как система работает под большой нагрузкой. Инструменты: Apache JMeter. 🟠Тестирование на отказоустойчивость (Stress Testing) Проверяет, как система работает в условиях сверхвысокой нагрузки. Ставь 👍 и забирай 📚 Базу знаний

🤔 Докажи CAP теорему? В распределённой системе нельзя одновременно достичь: - Consistency (согласованность), - Availability (доступность), - Partition Tolerance (устойчивость к сетевым разделениям). Можно выбрать только 2 из 3 — это доказано в теореме Эрика Брюера. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чём заключается разница между методами start() и run()? 🚩`start()` – создаёт новый поток Метод start() создаёт новый поток и вызывает run() внутри него.
class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Работает поток: " + Thread.currentThread().getName());
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start(); // Запускаем новый поток

        System.out.println("Работает поток: " + Thread.currentThread().getName());
    }
}
Вывод (разные потоки работают параллельно)
Работает поток: main
Работает поток: Thread-0
🚩`run()` – выполняется в ТЕКУЩЕМ потоке (без создания нового) Если вызвать run() напрямую, код просто выполнится как обычный метод, а не в новом потоке.
public class Main {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.run(); // ❌ Ошибка! Работает в главном потоке

        System.out.println("Работает поток: " + Thread.currentThread().getName());
    }
}
Вывод (run() работает в главном потоке, а не в новом)
Работает поток: main
Работает поток: main
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что лежит в основе каждого исключения? Все исключения происходят от базового класса Throwable. Существует два основных подвида: Exception и Error. Первые представляют ошибки, которые можно обработать в коде (например, проблемы с вводом-выводом), вторые связаны с критическими сбоями виртуальной машины. Исключения делятся также на проверяемые (которые обязательно нужно либо обработать, либо явно объявить) и непроверяемые (возникающие в процессе выполнения и не требующие обязательной обработки). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие Fetching Types знаешь в Hibernate и чем они отличаются? В Hibernate существует два типа загрузки (Fetching Types) данных: Lazy (ленивая загрузка) Eager (жадная загрузка) Эти типы определяют, как Hibernate загружает связанные сущности при выполнении запроса. 🚩Lazy Fetching (ленивая загрузка) Данные загружаются только при первом обращении к ним. Экономит память и ресурсы, так как ненужные данные не загружаются сразу. Используется по умолчанию в @OneToMany, @ManyToMany.
@Entity
class User {
    @Id @GeneratedValue
    private Long id;
    
    private String name;

    @OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
    private List<Order> orders;  // Загрузятся ТОЛЬКО при первом вызове getOrders()
}
User user = session.get(User.class, 1L);  // Загружается только User
List<Order> orders = user.getOrders();   // Запрос в БД выполняется ТОЛЬКО здесь
🚩Eager Fetching (жадная загрузка) Hibernate загружает все связанные данные сразу, даже если они не нужны. Увеличивает время выполнения запроса, так как делает JOIN или несколько отдельных запросов. Используется по умолчанию в @ManyToOne, @OneToOne.
@Entity
class User {
    @Id @GeneratedValue
    private Long id;
    
    private String name;

    @OneToMany(mappedBy = "user", fetch = FetchType.EAGER)
    private List<Order> orders;  // Загружается сразу при получении User
}
User user = session.get(User.class, 1L);  // Загружается User + сразу все его Orders
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как организовать поиск по ArrayList? Поиск может быть двух типов: - линейный — с помощью contains, indexOf, когда список не отсортирован (сложность O(n)). - бинарный — с помощью Collections.binarySearch, если список отсортирован (сложность O(log n)), но в этом случае предварительно надо отсортировать коллекцию. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Используешь в работе Lambda-выражения? Да, лямбда-выражения являются важной частью современной разработки на Java, и я активно их использую в своей работе. Лямбда-выражения помогают писать более лаконичный и выразительный код, особенно при работе с коллекциями и потоками данных. Вот несколько распространенных случаев использования лямбда-выражений в Java: 🟠Итерация по коллекциям Использование лямбда-выражений с методом forEach позволяет компактно и удобно итерировать по элементам коллекций.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));
🟠Фильтрация и преобразование коллекций С использованием Stream API и лямбда-выражений можно легко фильтровать, сортировать и преобразовывать коллекции.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream()
    .filter(name -> name.startsWith("A"))
    .collect(Collectors.toList());

filteredNames.forEach(System.out::println); // Вывод: Alice
🟠Сортировка коллекций Лямбда-выражения упрощают сортировку коллекций с использованием метода sort.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.sort((name1, name2) -> name1.compareTo(name2));
names.forEach(System.out::println);
🟠Использование функциональных интерфейсов Лямбда-выражения широко используются с функциональными интерфейсами, такими как Predicate, Function, Consumer и Supplier.
// Predicate
Predicate<String> startsWithA = s -> s.startsWith("A");
boolean result = startsWithA.test("Alice"); // true

// Function
Function<String, Integer> lengthFunction = s -> s.length();
int length = lengthFunction.apply("Hello"); // 5

// Consumer
Consumer<String> printConsumer = s -> System.out.println(s);
printConsumer.accept("Hello, World!"); // Вывод: Hello, World!

// Supplier
Supplier<String> stringSupplier = () -> "Hello, Supplier!";
String suppliedString = stringSupplier.get();
System.out.println(suppliedString); // Вывод: Hello, Supplier!
🟠Параллельные вычисления Лямбда-выражения с использованием параллельных потоков позволяют легко выполнять параллельные вычисления.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.parallelStream()
    .mapToInt(Integer::intValue)
    .sum();

System.out.println("Sum: " + sum); // Вывод: Sum: 15
🚩Пример использования в реальном проекте Предположим, у нас есть список сотрудников, и мы хотим отфильтровать и отсортировать их по имени.
import java.util.*;
import java.util.stream.Collectors;

class Employee {
    private String name;
    private int age;

    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Employee{name='" + name + "', age=" + age + '}';
    }
}

public class LambdaExample {
    public static void main(String[] args) {
        List<Employee> employees = Arrays.asList(
            new Employee("Alice", 30),
            new Employee("Bob", 25),
            new Employee("Charlie", 35),
            new Employee("David", 28)
        );

        // Фильтрация и сортировка сотрудников по имени
        List<Employee> filteredAndSorted = employees.stream()
            .filter(e -> e.getAge() > 27)
            .sorted(Comparator.comparing(Employee::getName))
            .collect(Collectors.toList());

        filteredAndSorted.forEach(System.out::println);
    }
}
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Какие способы синхронизации в Java есть? Синхронизация реализуется через synchronized, Lock, ReentrantLock, volatile, Atomic-классы, а также через высокоуровневые конструкции, такие как CountDownLatch, Semaphore, ExecutorService. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какая коллекция реализует дисциплину обслуживания FIFO? FIFO (First-In, First-Out) – это принцип обработки данных: "первым вошёл – первым вышел". 🟠Коллекции, реализующие FIFO Пример работы FIFO с Queue
import java.util.*;

public class FifoExample {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>(); // Можно заменить на ArrayDeque

        queue.add("Первый");
        queue.add("Второй");
        queue.add("Третий");

        System.out.println(queue.poll()); // Первый
        System.out.println(queue.poll()); // Второй
        System.out.println(queue.poll()); // Третий
    }
}
🟠Разница `poll()`, `remove()` и `peek()`
Queue<Integer> queue = new LinkedList<>();
queue.add(10);
System.out.println(queue.peek());  // 10 (но не удаляет)
System.out.println(queue.poll());  // 10 (удаляет)
System.out.println(queue.poll());  // null (очередь пуста)
Ставь 👍 и забирай 📚 Базу знаний

Вебинар TIKITRIK по оценке эффективности ИТ-активов Бесплатный вебинар 11 сентября в 11:00 (мск). Приглашаем вас на вебинар,
Вебинар TIKITRIK по оценке эффективности ИТ-активов Бесплатный вебинар 11 сентября в 11:00 (мск). Приглашаем вас на вебинар, где мы расскажем об оценке экономической эффективности от внедрения ITAM и вместе посчитаем, сколько вы можете сэкономить уже в первый год. Для ИТ - руководителей и ИТ - специалистов. В программе вебинара обсудим технологии в действии и в деньгах, а также продемонстируем наше решение T I K I T R I K Asset Management в режиме реального времени. Зарегистрироваться #реклама 16+ tikitrik.com О рекламодателе

🤔 Какое худшее время работы метода add() для LinkedList? - В конец — O(1), если не пересоздаётся коллекция; - В середину/начало — O(n), из-за поиска позиции. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем разница между new string и string? В Java строки (String) являются неизменяемыми (immutable) объектами и обрабатываются особым образом, особенно при их создании. 🚩`"Hello"` — строка из пула строк Когда вы пишете:
String str1 = "Hello";
🚩`new String("Hello")` — создание нового объекта Когда вы создаёте строку так:
String str2 = new String("Hello");
🚩Разница в сравнении строк
public class StringTest {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "Hello";
        String str3 = new String("Hello");

        System.out.println(str1 == str2); // true (ссылаются на один объект в пуле)
        System.out.println(str1 == str3); // false (разные объекты в памяти)
        System.out.println(str1.equals(str3)); // true (содержимое одинаковое)
    }
}
🚩Когда использовать `new String()`? В 99% случаев new String() не нужен. Его создание расходует память и снижает производительность. Но он может быть полезен, если вы намеренно хотите создать новый объект, например, для защиты от изменения ссылок:
String safeCopy = new String(originalString); // Теперь это точно отдельный объект
Ставь 👍 и забирай 📚 Базу знаний

Онлайн-магистратура с IT специальностями от Яндекса Совместно с ИТМО, МИФИ, МФТИ. Онлайн-магистратура с актуальными программами и гибким графиком обучения. Получите высокооплачиваемую IT профессию, официальный диплом и практические знания. Господдержка оплаты. Совмещение с работой! Подать заявку #реклама 16+ practicum.yandex.ru О рекламодателе

🤔 Чем объект отличается от примитива? - Примитив — это базовый тип (int, boolean и т.д.), он не имеет методов, занимает меньше памяти, работает быстрее. - Объект — экземпляр класса, содержит поля и методы, может быть null, требует больше ресурсов. В Java есть обёртки для примитивов (Integer, Boolean) — это объекты. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Гайд для HRD и HRBP по проведению эффективных вебинаров Как HRD и HRBP ускорить адаптацию и обучение новых сотрудников с помо
Гайд для HRD и HRBP по проведению эффективных вебинаров Как HRD и HRBP ускорить адаптацию и обучение новых сотрудников с помощью вебинаров? Гайд от МТС Линк по подготовке и проведению эффективных вебинаров. ✅ В гайде: - Как лучше использовать вебинары для онбординга и обучения новых сотрудников; - Как упростить рекрутинг и снизить нагрузку на HR-команду; - Как ускорить адаптацию новичков и сократить отток на испытательном сроке; - Как сэкономить время на организации вебинара и пригласить всех участников в 2 клика. Бонус внутри: 5 прикладных советов по контролю внимания участников во время вебинара ✨ Скачайте гайд бесплатно по ссылке Скачать #реклама 16+ mts-link.ru О рекламодателе

🤔 Можно ли одновременно использовать в сервлете PrintWriter и ServletOutputStream? Нет, одновременно использовать PrintWriter и ServletOutputStream в одном сервлете нельзя. Это связано с тем, что эти два класса работают с разными типами данных и открывают ответный поток в разных режимах — PrintWriter для символьных данных, а ServletOutputStream для байтовых данных. 🚩Почему нельзя использовать одновременно: Типы потоков: 🟠`PrintWriter`: Предназначен для записи текстовых данных (символов и строк). 🟠`ServletOutputStream`: Предназначен для записи бинарных данных (байтов и массивов байтов). Конфликт потоков: Открытие одного потока блокирует возможность открытия другого. Попытка использования обоих потоков в одном запросе приведет к исключению IllegalStateException.
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import javax.servlet.ServletOutputStream;

public class MixedContentServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter writer = response.getWriter();
        ServletOutputStream outputStream = response.getOutputStream(); // Это вызовет IllegalStateException

        writer.println("Hello, World!"); // Пытаемся записать текст
        byte[] imageData = ...; // Получаем бинарные данные
        outputStream.write(imageData); // Пытаемся записать бинарные данные
    }
}
Если требуется отправить как текстовые, так и бинарные данные, это нужно делать последовательно, разделяя логику на отдельные запросы или сервлеты. Отправка текстовых данных:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

public class TextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html><body><h1>Hello, World!</h1></body></html>");
    }
}
Отправка бинарных данных:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream;

public class BinaryServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/pdf");
        ServletOutputStream out = response.getOutputStream();
        byte[] pdfData = ...; // Получаем PDF данные
        out.write(pdfData);
    }
}
Ставь 👍 и забирай 📚 Базу знаний

Новые диваны по цене 1 чашки кофе в день?! ⚡Вы не поверите, но реально возможно платить за диван цену 1 чашки кофе за рабочий
Новые диваны по цене 1 чашки кофе в день?! ⚡Вы не поверите, но реально возможно платить за диван цену 1 чашки кофе за рабочий день! 💰Такие низкие цены возможны только в Много Мебели. Как нам удаётся держать выгодные цены для вас: 1. Диваны напрямую с завода без дополнительных наценок; 2. Возможность рассрочки без переплат; 3. Промокод MMSALE для скидки до -3000 рублей! Давайте подсчитаем: средняя стоимость стаканчика кофе составляет 200 рублей, а рабочих дней в месяце 22. Выходит около 4 400 рублей в месяц за кофе. Приобретая диван по цене за 25 000 рублей в рассрочку, вы будете платить в месяц примерно 4 167 рублей То есть, новый диван обойдётся вам даже дешевле 1 чашки кофе в рабочий день! Выгодные покупки только в Много Мебели!✅ Посмотреть каталог #реклама mnogomebeli.com О рекламодателе

🤔 StringBuilder и StringBuffer, в чём различия? StringBuilder быстрее, но не потокобезопасен, тогда как StringBuffer потокобезопасен за счёт синхронизации, но работает медленнее. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем разница между 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;
    }
}
Ставь 👍 и забирай 📚 Базу знаний