uz
Feedback

Firibgarlarga uchmang! Telemetrio bunday kanallarni topadi va belgilaydi 👉 Belgini ko‘rmoqchi bo‘lsangiz, obuna bo‘ling

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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish

📈 Telegram kanali Java | Вопросы собесов analitikasi

Java | Вопросы собесов (@easy_java_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 11 306 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 10 943-o'rinni va Rossiya mintaqasida 56 546-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 11 306 obunachiga ega bo‘ldi.

30 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -36 ga, so‘nggi 24 soatda esa -2 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 10.39% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 5.99% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 1 175 marta ko‘riladi; birinchi sutkada odatda 677 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 6 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent ставь, void, string, строка, static kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads”

Yuqori yangilanish chastotasi (oxirgi ma’lumot 31 Oktabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

11 306
Obunachilar
-224 soatlar
-257 kun
-3630 kun
Postlar arxiv
🤔 Чем отличается обычный объект от 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 для контроля совместимости классов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний