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

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

前往频道在 Telegram

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

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

📊 受众指标与增长动态

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

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

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

📝 描述与内容策略

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

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

11 451
订阅者
-324 小时
-177
+1530
帖子存档
🤔 Что такое ленивая загрузка? Ленивая загрузка (Lazy Loading) — это паттерн, при котором объект или данные загружаются только тогда, когда они реально понадобились, а не заранее. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем разница между 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); // Теперь это точно отдельный объект
Ставь 👍 и забирай 📚 Базу знаний

🤔 В чем разница между RequestMapping и PutMapping? - @RequestMapping(method = RequestMethod.PUT) — общий способ задания обработки PUT-запроса; - @PutMapping — специализированная аннотация, сокращающий способ записи для PUT-запросов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что знаешь про поверхностное копирование? Поверхностное копирование (Shallow Copy) – это процесс создания нового объекта, который содержит ссылки на те же вложенные объекты, что и оригинал. 🟠Как сделать поверхностное копирование в Java? Способ 1: Метод clone() (реализация Cloneable)
class Person implements Cloneable {
    String name;
    
    public Person(String name) {
        this.name = name;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone(); // Поверхностное копирование
    }
}

public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person original = new Person("Иван");
        Person copy = (Person) original.clone();

        System.out.println(copy.name); // Иван
    }
}
🟠Проблема с вложенными объектами (общие ссылки) Если объект содержит вложенные объекты, они не копируются, а передаются по ссылке.
class Address {
    String city;
    public Address(String city) { this.city = city; }
}

class User implements Cloneable {
    String name;
    Address address;

    public User(String name, Address address) {
        this.name = name;
        this.address = address;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone(); // Поверхностное копирование
    }
}

public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {
        Address address = new Address("Москва");
        User original = new User("Иван", address);
        User copy = (User) original.clone();

        copy.address.city = "Санкт-Петербург"; // Меняем адрес у копии

        System.out.println(original.address.city); // Санкт-Петербург (изменилось и у оригинала!)
    }
}
🟠Как сделать глубокую копию? (Deep Copy) Решение: Создать новый вложенный объект в clone()
@Override
protected Object clone() throws CloneNotSupportedException {
    User clonedUser = (User) super.clone();
    clonedUser.address = new Address(this.address.city); // Копируем вложенный объект
    return clonedUser;
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Оцени количество памяти на хранение одного примитива типа byte в LinkedList. В LinkedList<byte>: - каждый элемент обёрнут в Byte (объект), т.е. автобоксинг; - на один узел выделяется память под Byte, ссылки prev, next, и сам Node-объект. Суммарно: 40–56 байт в зависимости от JVM и архитектуры (64-бит без/с компрессией указателей). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое heap, stack? В контексте Java, Heap (куча) и Stack (стек) являются областями памяти, используемыми JVM для управления памятью, необходимой для выполнения программы. Каждая из этих областей имеет свои характеристики и используется для разных целей. 🚩Heap (Куча) Heap — это область памяти, выделенная для динамического распределения памяти объектов и массивов. Все объекты, созданные с использованием оператора new, размещаются в куче. 🟠Особенности Куча разделена на поколения: молодое поколение (Young Generation) и старое поколение (Old Generation). Молодое поколение включает в себя области Eden Space и Survivor Spaces (S0 и S1). Старое поколение хранит долгоживущие объекты. 🟠Управление памятью Куча управляется сборщиком мусора (Garbage Collector), который автоматически освобождает память, занятую объектами, которые больше не используются. 🟠Использование Куча используется для хранения объектов, массивов и классов, информация о которых сохраняется на протяжении всего времени их жизни.
public class Example {
    public static void main(String[] args) {
        Example obj = new Example(); // obj создается в куче
    }
}
🚩Stack (Стек) Стек — это область памяти, используемая для управления вызовами методов и хранения локальных переменных, параметров методов и информации о возвратах. 🟠Особенности Каждый поток имеет свой собственный стек. Стек хранит кадры (frames) для каждого вызова метода. Каждый кадр содержит локальные переменные метода и информацию о вызовах. 🟠Управление памятью Память в стеке автоматически управляется при вызове методов и выходе из них. Когда метод вызывается, создается новый кадр в стеке; когда метод завершает выполнение, его кадр удаляется из стека. 🟠Использование Стек используется для хранения примитивных типов данных и ссылок на объекты, которые находятся в куче. Локальные переменные методов и параметры методов хранятся в стеке.
public class Example {
    public static void main(String[] args) {
        int localVar = 10; // localVar хранится в стеке
        Example obj = new Example(); // Ссылка на obj хранится в стеке, а сам объект — в куче
        obj.method();
    }

    public void method() {
        int anotherVar = 20; // anotherVar хранится в стеке
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как найти ошибку в программе? - использовать логирование; - запускать в отладчике (debugger); - добавлять assert’ы; - анализировать стектрейс и исключения; - использовать тесты и изоляцию кода для проверки. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Является ли пустым пул строк при старте jar файла или там есть какие-то значения? Пул строк в Java не является пустым при старте JAR файла. Он изначально содержит несколько предопределенных строковых литералов, которые JVM использует для своей внутренней работы, а также строковые литералы, используемые в загруженных классах и стандартных библиотеках. 🚩Что изначально содержится 🟠Предопределенные строковые литералы JVM и стандартные библиотеки Java используют различные строковые литералы для своей работы. Эти строки добавляются в пул строк при запуске JVM. Примеры таких строк включают имена основных классов и пакетов (например, "java/lang/Object", "java/lang/String"). 🟠Строковые литералы, используемые в загруженных классах Когда классы загружаются JVM, все строковые литералы, используемые в этих классах, добавляются в пул строк. Это включает строки, используемые в JAR файле, а также строки из стандартных библиотек Java, которые загружаются при старте. 🚩Пример строк в пуле при старте Для демонстрации этого можно написать простой код, который проверяет, присутствуют ли определенные строки в пуле строк при старте программы.
public class StringPoolDemo {
    public static void main(String[] args) {
        // Проверка стандартных строк, которые могут быть в пуле строк
        String str1 = "java";
        String str2 = "lang";
        String str3 = "Object";

        // Вывод строк
        System.out.println("str1: " + str1);
        System.out.println("str2: " + str2);
        System.out.println("str3: " + str3);

        // Проверка строк в пуле строк
        System.out.println("Is 'java' in pool: " + (str1 == "java"));
        System.out.println("Is 'lang' in pool: " + (str2 == "lang"));
        System.out.println("Is 'Object' in pool: " + (str3 == "Object"));
    }
}
🚩Что происходит при старте JVM 🟠Инициализация JVM При запуске JVM загружаются системные классы, такие как java.lang.Object, java.lang.String, java.lang.System, и другие. Строковые литералы, используемые в этих классах, добавляются в пул строк. 🟠Загрузка пользовательских классов Когда JVM загружает пользовательские классы из JAR файла, все строковые литералы в этих классах также добавляются в пул строк. Ставь 👍 и забирай 📚 Базу знаний

Т-Банк ищет стажеров Хотите начать карьеру в бигтехе без опыта? В 2025 году это сделали больше тысячи студентов. Многие из ни
Т-Банк ищет стажеров Хотите начать карьеру в бигтехе без опыта? В 2025 году это сделали больше тысячи студентов. Многие из них остались в команде и сегодня работают над продуктами, которыми пользуются миллионы. Стажеры здесь не остаются один на один с трудностями. С первого дня рядом менторы и команда, которая помогает разобраться в новых задачах, поддерживает и делится опытом. Вас ждет оплачиваемая стажировка с официальным оформлением и гибким графиком, чтобы совмещать работу с учебой. Что ждет новых участников стажировки: — восемь направлений на выбор: разработка, аналитика, QA, SRE и другие; — погружение в бизнес-задачи с первого дня; — работа над продуктами, которыми пользуются миллионы; — возможность работать удаленно или в офисе; — комьюнити, где вы быстро почувствуете себя своим. Подайте заявку на оплачиваемую стажировку уже сейчас

FRONTENDFRONTENDFRONTENDFRONTENDFRONTENDFRONTENDFRONTEND Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Обеспечит ли Stream API RandomAcess? Нет, Stream API не поддерживает RandomAccess, потому что он работает с потоком данных, а не с индексированными структурами. 🚩Почему Stream API не поддерживает `RandomAccess`? 🟠Stream – это поток данных который не обязательно хранится в памяти в виде структуры, поддерживающей случайный доступ. 🟠Нет индексов в отличие от List, Stream не позволяет получить элемент по индексу (get(index) отсутствует). 🟠Обход последовательный элементы проходятся один за другим, что делает случайный доступ невозможным. ListRandomAccess)
List<Integer> list = new ArrayList<>(List.of(1, 2, 3, 4, 5));
System.out.println(list.get(2)); // Быстрое получение элемента по индексу
Stream (без RandomAccess)
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
stream.skip(2).findFirst().ifPresent(System.out::println); // Ищем 3-й элемент
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое кеширование? Кеширование — это временное хранение данных в более быстром доступе, чтобы: - Уменьшить нагрузку на систему или БД. - Повысить производительность. - Сократить задержки при повторном использовании одинаковых данных. Кеш может быть в памяти (например, Map, Redis), в браузере или на уровне CDN. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

🤔 Что в Java не является объектом? - Примитивные типы данных: int, long, float, boolean, char и др. - Они не наследуются от Object. - Не имеют методов и работают на уровне значений. Java позволяет оборачивать их в объекты через классы-обёртки (Integer, Boolean и др.). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

🤔 В Java аргументы передаются по ссылке или значению? Всегда по значению. Но если передаётся объект, копируется ссылка, а не сам объект. Поэтому: - Примитивы — копируются. - Объекты — копируется ссылка, изменения внутри метода видны снаружи, если они касаются полей. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как бороться в БД с SQL Injection? SQL Injection – это атака, при которой злоумышленник вставляет вредоносный SQL-код в запрос, чтобы получить несанкционированный доступ к данным. Допустим, у нас есть код
String query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";
Если злоумышленник введёт ' OR '1'='1 в поле пароля, запрос превратится в:
SELECT * FROM users WHERE username = 'admin' AND password = '' OR '1'='1'
🚩Способы защиты от SQL Injection 🟠Использование `PreparedStatement` (РЕКОМЕНДУЕТСЯ) Подготовленные запросы автоматически экранируют входные данные, предотвращая SQL-инъекции.
String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, username);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();
🟠Использование ORM (например, Hibernate) ORM-фреймворки (Hibernate, JPA) автоматически генерируют безопасные SQL-запросы.
TypedQuery<User> query = entityManager.createQuery(
    "SELECT u FROM User u WHERE u.username = :username AND u.password = :password", User.class);
query.setParameter("username", username);
query.setParameter("password", password);
User user = query.getSingleResult();
🟠Проверка и экранирование входных данных Если по какой-то причине PreparedStatement использовать нельзя, экранируйте опасные символы (', " и ;).
String safeInput = input.replace("'", "\\'");
🟠Минимизация прав в БД Создавайте отдельного пользователя БД с ограниченными правами: Запрет на DROP, DELETE, UPDATE без WHERE Только доступ к нужным таблицам
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'securepassword';
GRANT SELECT, INSERT, UPDATE ON mydb.users TO 'app_user'@'localhost';
🟠Использование Web Application Firewall (WAF) WAF анализирует HTTP-запросы и блокирует подозрительные SQL-запросы. Пример: ModSecurity – популярный WAF для защиты веб-приложений. Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Что такое heap, stack? В контексте Java, Heap (куча) и Stack (стек) являются областями памяти, используемыми JVM для управления памятью, необходимой для выполнения программы. Каждая из этих областей имеет свои характеристики и используется для разных целей. 🚩Heap (Куча) Heap — это область памяти, выделенная для динамического распределения памяти объектов и массивов. Все объекты, созданные с использованием оператора new, размещаются в куче. 🟠Особенности Куча разделена на поколения: молодое поколение (Young Generation) и старое поколение (Old Generation). Молодое поколение включает в себя области Eden Space и Survivor Spaces (S0 и S1). Старое поколение хранит долгоживущие объекты. 🟠Управление памятью Куча управляется сборщиком мусора (Garbage Collector), который автоматически освобождает память, занятую объектами, которые больше не используются. 🟠Использование Куча используется для хранения объектов, массивов и классов, информация о которых сохраняется на протяжении всего времени их жизни.
public class Example {
    public static void main(String[] args) {
        Example obj = new Example(); // obj создается в куче
    }
}
🚩Stack (Стек) Стек — это область памяти, используемая для управления вызовами методов и хранения локальных переменных, параметров методов и информации о возвратах. 🟠Особенности Каждый поток имеет свой собственный стек. Стек хранит кадры (frames) для каждого вызова метода. Каждый кадр содержит локальные переменные метода и информацию о вызовах. 🟠Управление памятью Память в стеке автоматически управляется при вызове методов и выходе из них. Когда метод вызывается, создается новый кадр в стеке; когда метод завершает выполнение, его кадр удаляется из стека. 🟠Использование Стек используется для хранения примитивных типов данных и ссылок на объекты, которые находятся в куче. Локальные переменные методов и параметры методов хранятся в стеке.
public class Example {
    public static void main(String[] args) {
        int localVar = 10; // localVar хранится в стеке
        Example obj = new Example(); // Ссылка на obj хранится в стеке, а сам объект — в куче
        obj.method();
    }

    public void method() {
        int anotherVar = 20; // anotherVar хранится в стеке
    }
}
Ставь 👍 и забирай 📚 Базу знаний