en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe

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

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

Open in Telegram

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

Show more

📈 Analytical overview of Telegram channel Java | Вопросы собесов

Channel Java | Вопросы собесов (@easy_java_ru) in the Russian language segment is an active participant. Currently, the community unites 11 306 subscribers, ranking 10 943 in the Technologies & Applications category and 56 546 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 11 306 subscribers.

According to the latest data from 30 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -36 over the last 30 days and by -2 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 10.39%. Within the first 24 hours after publication, content typically collects 5.99% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 1 175 views. Within the first day, a publication typically gains 677 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 6.
  • Thematic interests: Content is focused on key topics such as ставь, void, string, строка, static.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
“Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads”

Thanks to the high frequency of updates (latest data received on 31 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

11 306
Subscribers
-224 hours
-257 days
-3630 days
Posts Archive
🤔 Чем отличается обычный объект от Bean? В Spring термин Bean (бин) означает объект, управляемый Spring-контейнером. 🟠Обычный объект (Java POJO) Создаётся вручную, Spring о нём ничего не знает
class Car {
    void drive() {
        System.out.println("Машина едет...");
    }
}

public class Main {
    public static void main(String[] args) {
        Car car = new Car(); // Создаём объект вручную
        car.drive();
    }
}
🟠Spring Bean (управляемый объект) Spring создаёт и управляет бином через аннотации.
import org.springframework.stereotype.Component;

@Component  // Сообщает Spring, что этот класс - Bean
class Car {
    void drive() {
        System.out.println("Spring-машина едет...");
    }
}
Теперь объект создаётся Spring-контейнером
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); // Получаем Bean из Spring-контейнера
        car.drive();
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие есть уровни изоляции транзакций? 1. Read Uncommitted: транзакция может видеть данные, которые ещё не зафиксированы. 2. Read Committed: транзакция видит только зафиксированные изменения. 3. Repeatable Read: данные, прочитанные транзакцией, остаются неизменными до её завершения. 4. Serializable: самая высокая изоляция, предотвращающая любые конфликты чтения и записи. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Каким образом можно получить синхронизированные объекты стандартных коллекций? В Java стандартные коллекции из java.util (например, ArrayList, HashMap, HashSet) не потокобезопасны. Чтобы использовать их в многопоточной среде, можно применять синхронизированные обёртки** и **коллекции из java.util.concurrent. 🚩Синхронизация с `Collections.synchronizedXXX()` Java предоставляет методы для создания потокобезопасных обёрток над обычными коллекциями:
import java.util.*;

public class SynchronizedCollectionsExample {
    public static void main(String[] args) {
        List<Integer> syncList = Collections.synchronizedList(new ArrayList<>());
        Map<String, String> syncMap = Collections.synchronizedMap(new HashMap<>());
        Set<Integer> syncSet = Collections.synchronizedSet(new HashSet<>());

        syncList.add(1);
        syncMap.put("key", "value");
        syncSet.add(10);
    }
}
🚩Важный момент: Итерация через `synchronized` коллекции Даже если коллекция синхронизирована, её итерация не потокобезопасна.
for (Integer num : syncList) { // Возможен ConcurrentModificationException!
    System.out.println(num);
}
Чтобы избежать ошибок, итерацию нужно делать внутри synchronized блока
synchronized (syncList) {
    for (Integer num : syncList) {
        System.out.println(num);
    }
}
🚩Коллекции из `java.util.concurrent` (рекомендуемый вариант) Вместо Collections.synchronizedXXX() лучше использовать современные конкурентные коллекции из java.util.concurrent. Они спроектированы для многопоточности и работают быстрее.
import java.util.concurrent.*;

public class ConcurrentMapExample {
    public static void main(String[] args) {
        ConcurrentMap<String, Integer> concurrentMap = new ConcurrentHashMap<>();
        concurrentMap.put("one", 1);
        concurrentMap.put("two", 2);

        System.out.println(concurrentMap.get("one")); // 1
    }
}
Пример CopyOnWriteArrayList (потокобезопасный список, работающий через копии)
import java.util.concurrent.CopyOnWriteArrayList;

public class CopyOnWriteExample {
    public static void main(String[] args) {
        CopyOnWriteArrayList<Integer> list = new CopyOnWriteArrayList<>();
        list.add(1);
        list.add(2);

        for (Integer num : list) { // Без ConcurrentModificationException!
            System.out.println(num);
        }
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Почему объекты попадают в String Pool? Потому что строки в Java неизменяемы, и для оптимизации памяти JVM использует пул строк, где одинаковые строковые литералы ссылаются на один и тот же объект. Это экономит ресурсы и ускоряет сравнение строк. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Чем отличаются Web server и Application server? 🟠Web Server (веб-сервер) обрабатывает HTTP-запросы и отдает статический контент (HTML, CSS, JS, изображения). 🟠Application Server (сервер приложений) запускает бизнес-логику приложения, выполняет обработку данных и работает с базой данных. 🚩Web Server (веб-сервер) Принимает HTTP-запросы от браузера. Отдает статические файлы (HTML, CSS, JS, картинки). Может перенаправлять запросы к Application Server. Apache HTTP Server Nginx Microsoft IIS Допустим, пользователь открывает сайт example.com/index.html: Браузер отправляет HTTP-запрос:
GET /index.html HTTP/1.1
Host: example.com
Веб-сервер (например, Nginx) получает запрос и отправляет браузеру файл index.html. Web Server НЕ обрабатывает логику приложения, он просто отправляет файлы клиенту. 🚩Application Server (сервер приложений) Обрабатывает динамические запросы (например, авторизацию, платежи, работу с БД). Выполняет Java-код (Servlet, EJB, Spring, Hibernate). Может генерировать HTML-страницы на сервере (JSP, Thymeleaf). Управляет транзакциями и соединениями с базой данных. Tomcat (самый популярный в мире Java-сервер) WildFly (JBoss) GlassFish WebLogic, WebSphere Допустим, пользователь заходит на example.com/login: Браузер отправляет HTTP-запрос:
   POST /login HTTP/1.1
   Host: example.com
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое BeanDefinition и зачем он нужен? BeanDefinition — это внутреннее описание бина в Spring. Оно содержит: - имя класса, - scope (singleton, prototype), - зависимости (autowiring), - параметры конструктора, - init и destroy методы. Это объект, который Spring использует в момент создания бина. Он управляется внутри ApplicationContext и позволяет Spring динамически настраивать, создавать и управлять жизненным циклом бинов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

CRM, которая помогает управлять отделом продаж Что делает Битрикс24 CRM: – ставит задачи менеджерам автоматически – интегриру
CRM, которая помогает управлять отделом продаж Что делает Битрикс24 CRM: – ставит задачи менеджерам автоматически – интегрируется с 1С и онлайн-кассами – показывает, где теряются деньги – возвращает клиентов и ищет повторные продажи – помогает руководителю контролировать процессы. Битрикс24 CRM работает на результат. Регистрируйтесь бесплатно Зарегистрироваться #реклама 16+ bitrix24.ru О рекламодателе

🤔 Что такое xml? XML (Extensible Markup Language) — это расширяемый язык разметки, который используется для хранения и передачи данных в формате, удобном для чтения как человеком, так и машиной. 🚩Зачем нужен XML? XML используется для структурированного хранения информации. Он позволяет определять собственные теги и организовывать данные в удобном формате. Основные применения: Обмен данными между системами (например, между сервером и клиентом). Конфигурационные файлы (например, web.xml в Java). Хранение данных (например, в файлах настроек, документах). Веб-сервисы (SOAP использует XML для передачи сообщений). 🚩Как устроен XML? XML-документ состоит из элементов (тегов), которые образуют древовидную структуру. Пример простого XML:
<?xml version="1.0" encoding="UTF-8"?>
<person>
    <name>Иван</name>
    <age>30</age>
    <city>Москва</city>
</person>
🚩Как XML используется в Java? В Java XML часто используется для работы с конфигурациями и веб-сервисами. Популярные библиотеки для работы с XML: DOM (Document Object Model) — загружает весь XML-файл в память, создавая дерево элементов. SAX (Simple API for XML) — обрабатывает XML последовательно, без загрузки в память. JAXB (Java Architecture for XML Binding) — позволяет преобразовывать Java-объекты в XML и обратно.
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
import java.io.StringWriter;

@XmlRootElement
class Person {
    private String name;
    private int age;

    public Person() {} // Пустой конструктор нужен для JAXB

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

    @XmlElement
    public String getName() { return name; }

    @XmlElement
    public int getAge() { return age; }
}

public class Main {
    public static void main(String[] args) throws JAXBException {
        Person person = new Person("Иван", 30);
        JAXBContext context = JAXBContext.newInstance(Person.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        StringWriter writer = new StringWriter();
        marshaller.marshal(person, writer);

        System.out.println(writer.toString());
    }
}
Вывод
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
    <name>Иван</name>
    <age>30</age>
</person>
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как называются состояния в Hibernate? Hibernate Entity может находиться в следующих состояниях: 1. Transient — объект создан, но не привязан к сессии. 2. Persistent — объект находится в сессии и отслеживается Hibernate. 3. Detached — объект был отсоединён от сессии (например, после session.close()). 4. Removed — объект помечен как удалённый, будет удалён при flush. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие типы данных есть в контексте JVM? В контексте JVM (Java Virtual Machine) типы данных делятся на два основных класса: примитивные типы данных и ссылочные типы данных. 🚩Примитивные типы данных Примитивные типы данных представляют собой базовые типы, которые не являются объектами и хранят непосредственно значения. Они делятся на числовые типы, логический тип и символьный тип. 🟠Числовые типы Целочисленные типы byte: 8-битный знаковый целочисленный тип данных (диапазон от -128 до 127). short: 16-битный знаковый целочисленный тип данных (диапазон от -32,768 до 32,767). int: 32-битный знаковый целочисленный тип данных (диапазон от -2^31 до 2^31-1). long: 64-битный знаковый целочисленный тип данных (диапазон от -2^63 до 2^63-1). Типы с плавающей точкой float: 32-битный IEEE 754 тип данных с плавающей точкой одинарной точности. double: 64-битный IEEE 754 тип данных с плавающей точкой двойной точности. 🟠Логический тип boolean: Представляет логическое значение (true или false). 🟠Символьный тип char: 16-битный тип данных, представляющий символ Unicode (диапазон от '\u0000' до '\uffff'). 🚩Ссылочные типы данных Ссылочные типы данных представляют собой объекты и массивы. Они хранят ссылку на область памяти, где хранятся данные объекта или массива. 🟠Классы (Classes) Любой объектный тип данных является экземпляром класса. Классы могут быть как стандартными (например, String, Integer), так и пользовательскими. 🟠Интерфейсы (Interfaces) Интерфейсы определяют набор методов, которые должны быть реализованы классами, которые их реализуют. 🟠Массивы (Arrays) Массивы могут быть одномерными или многомерными и могут хранить как примитивные, так и ссылочные типы данных. 🚩Пример примитивных и ссылочных типов данных
public class DataTypesExample {
    public static void main(String[] args) {
        // Примитивные типы данных
        byte aByte = 10;
        short aShort = 100;
        int anInt = 1000;
        long aLong = 10000L;
        float aFloat = 10.5f;
        double aDouble = 10.55;
        boolean aBoolean = true;
        char aChar = 'A';

        // Ссылочные типы данных
        String aString = "Hello, World!";
        Integer anInteger = 1000;
        int[] anArray = {1, 2, 3, 4, 5};

        // Вывод примитивных типов данных
        System.out.println("byte: " + aByte);
        System.out.println("short: " + aShort);
        System.out.println("int: " + anInt);
        System.out.println("long: " + aLong);
        System.out.println("float: " + aFloat);
        System.out.println("double: " + aDouble);
        System.out.println("boolean: " + aBoolean);
        System.out.println("char: " + aChar);

        // Вывод ссылочных типов данных
        System.out.println("String: " + aString);
        System.out.println("Integer: " + anInteger);
        System.out.println("Array: " + java.util.Arrays.toString(anArray));
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🔍Тестовое собеседование с Java-разработчиком из Мегафон уже завтра Уже сегодня в 19:00 по мск приходи онлайн на открытое соб
🔍Тестовое собеседование с Java-разработчиком из Мегафон уже завтра Уже сегодня в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика. Как это будет: 📂 Мария Пивоварова, старший разработчик в Мегафон, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Мария будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Марии Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot Реклама. О рекламодателе.

🤔 Что известно про оператор EXISTS? EXISTS — это булевый оператор, возвращающий TRUE, если вложенный подзапрос возвращает хотя бы одну строку. Применяется: - Для проверки наличия связанных записей. - Для оптимизации: в отличие от IN, EXISTS часто лучше работает с большими наборами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Есть ли возможность создать два Singleton'а в Spring'е В Spring действительно можно создать два синглтона, но тут важно понимать, что Spring использует паттерн Singleton на уровне контейнера, а не на уровне JVM. Давайте разберёмся, как это возможно. 🟠Определение Singleton в Spring В Spring синглтон означает, что в рамках одного контекста (ApplicationContext) создаётся один экземпляр бина.
@Component
public class MySingletonBean {
    public MySingletonBean() {
        System.out.println("Создан экземпляр MySingletonBean");
    }
}
🟠Два Singleton'а в Spring? Как это возможно? Есть несколько способов создать два синглтона. Создание двух контекстов (ApplicationContext) Spring гарантирует синглтонность только в одном контексте. Если создать два контекста, можно получить два независимых синглтона.
AnnotationConfigApplicationContext context1 = new AnnotationConfigApplicationContext(AppConfig.class);
AnnotationConfigApplicationContext context2 = new AnnotationConfigApplicationContext(AppConfig.class);

MySingletonBean bean1 = context1.getBean(MySingletonBean.class);
MySingletonBean bean2 = context2.getBean(MySingletonBean.class);

System.out.println(bean1 == bean2); // false! Два разных объекта
Определение двух бинов одного типа Можно создать два разных бина, просто давая им разные имена в конфигурации.
@Configuration
public class AppConfig {

    @Bean
    public MySingletonBean firstSingleton() {
        return new MySingletonBean();
    }

    @Bean
    public MySingletonBean secondSingleton() {
        return new MySingletonBean();
    }
}
Теперь оба метода создадут разные объекты.
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

MySingletonBean bean1 = context.getBean("firstSingleton", MySingletonBean.class);
MySingletonBean bean2 = context.getBean("secondSingleton", MySingletonBean.class);

System.out.println(bean1 == bean2); // false
Изменение области (scope) бина Если изменить область (@Scope), можно получить два экземпляра в одном контексте, но тогда это уже не будет синглтон.
@Component
@Scope("prototype")
public class MyBean {
    public MyBean() {
        System.out.println("Создан новый экземпляр MyBean");
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Где можно применить многоформенность полиморфизма? Многоформенность (иначе — полиморфизм) применяется, когда один интерфейс используется для разных типов объектов. Применяется: - В наследовании, где один базовый тип описывает поведение, а конкретные подклассы реализуют его по-разному. - В шаблонных решениях — например, логика обработки сущностей разного типа через один API. - В работе с интерфейсами и абстракциями, где можно подменять реализацию без изменения логики. - В паттернах проектирования, например, Strategy, Factory, State — активно используют полиморфизм. - В коллекциях и списках объектов, где можно обрабатывать разные подтипы через один общий родительский интерфейс Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Чем отличаются методы 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
...
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое аннотация @Transactional? Это аннотация, которая оборачивает метод в транзакцию. Все операции БД внутри метода: - будут зафиксированы (commit), если не возникло исключений; - будут откатаны (rollback), если возникло исключение. Поддерживает nested, readOnly, isolation, propagation. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Слышал ли что то про метод 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
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как устроена операция get в LinkedList? Метод get(index) в LinkedList: - начинает обход с головы или с хвоста (в зависимости от индекса), - проходит по указателям (prev/next) пока не дойдёт до нужного элемента. Это линейный процесс, в худшем случае требует пройти половину списка — O(n/2). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как бороться в БД с 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 для защиты веб-приложений. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие существуют способы контроля за значениями десериализованного объекта? - Реализация метода readObject() с валидацией данных; - Реализация метода validateObject() в интерфейсе ObjectInputValidation; - Проверка полей сразу после десериализации; - Использование serialVersionUID для контроля совместимости классов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний