Java | Вопросы собесов
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+icUwivvbGOkwNWRi Задачи t.me/+8eqUTboisnkyZjQy Вакансии t.me/+4pspF5nDjgM4MjQy
Mostrar más📈 Análisis del canal de Telegram Java | Вопросы собесов
El canal Java | Вопросы собесов (@easy_java_ru) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 11 449 suscriptores, ocupando la posición 10 899 en la categoría Tecnologías y Aplicaciones y el puesto 57 490 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 11 449 suscriptores.
Según los últimos datos del 05 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de 20, y en las últimas 24 horas de 6, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 7.92%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 7.61% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 907 visualizaciones. En el primer día suele acumular 871 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 0.
- Intereses temáticos: El contenido se centra en temas clave como ставь, void, string, строка, static.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Cайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Тесты t.me/+icUwivvbGOkwNWRi
Задачи t.me/+8eqUTboisnkyZjQy
Вакансии t.me/+4pspF5nDjgM4MjQy”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 07 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
COMMIT – это команда в SQL, которая фиксирует (сохраняет) изменения, сделанные внутри транзакции. После выполнения COMMIT изменения становятся постоянными и их уже нельзя отменить.
Простой пример использования COMMIT
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- Сохраняем изменения
Что будет, если НЕ выполнить COMMIT?
BEGIN TRANSACTION;
UPDATE users SET age = 30 WHERE id = 1;
COMMIT vs ROLLBACK
BEGIN TRANSACTION;
UPDATE orders SET status = 'CANCELLED' WHERE id = 10;
ROLLBACK; -- ОТМЕНЯЕМ изменения, данные не меняются
Ставь 👍 и забирай 📚 Базу знанийThread.stop(), но он был устаревшим и удалённым из-за того, что мог оставить программу в неконсистентном состоянии.
Thread thread = new Thread(() -> {
while (true) {
System.out.println("Работаю...");
}
});
thread.start();
thread.stop(); // ОПАСНО! Может привести к некорректному завершению работы.
🚩Флаг завершения работы (рекомендуемый способ)
Самый безопасный способ – это использование флага (volatile boolean).
class MyTask implements Runnable {
private volatile boolean running = true;
public void run() {
while (running) {
System.out.println("Работаю...");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // Важно восстанавливать флаг прерывания
}
}
System.out.println("Поток остановлен.");
}
public void stop() {
running = false;
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
MyTask task = new MyTask();
Thread thread = new Thread(task);
thread.start();
Thread.sleep(2000);
task.stop(); // Корректно останавливаем поток
}
}
🚩Прерывание потока (`interrupt()`)
Этот способ удобен для потоков, которые ждут (sleep(), wait(), join()), потому что прерывание выбрасывает InterruptedException.
class MyTask implements Runnable {
public void run() {
try {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("Работаю...");
Thread.sleep(500);
}
} catch (InterruptedException e) {
System.out.println("Поток прерван.");
}
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(new MyTask());
thread.start();
Thread.sleep(2000);
thread.interrupt(); // Прерывание потока
}
}
Ставь 👍 и забирай 📚 Базу знанийDATETIME и TIMESTAMP используются для хранения даты и времени, но у них есть несколько ключевых отличий.
🚩Когда использовать `DATETIME` и `TIMESTAMP`?
Используйте DATETIME, если:
Нужно хранить фиксированное значение даты и времени, не зависящее от часового пояса.
Работаете с датами за пределами 1970-2038 гг.
Требуется удобочитаемый формат (без конверсий).
Используйте TIMESTAMP, если:
Нужно учитывать часовой пояс (например, хранить время в UTC, а при запросе автоматически конвертировать в локальное).
Важно автоматическое обновление при изменении строки (ON UPDATE CURRENT_TIMESTAMP).
Нужно экономить память (занимает в 2 раза меньше места, чем DATETIME).
🚩Примеры
DATETIME (Фиксированная дата и время)
CREATE TABLE events (
id INT PRIMARY KEY,
event_time DATETIME NOT NULL
);
INSERT INTO events VALUES (1, '2025-02-17 12:30:00');
TIMESTAMP (Автообновление + Часовые пояса)
CREATE TABLE logs (
id INT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
Если изменим time_zone, TIMESTAMP отобразится в новом часовом поясе.
SET time_zone = 'Europe/Moscow';
SELECT created_at FROM logs;
Ставь 👍 и забирай 📚 Базу знанийsetPriority(), который принимает значение от 1 до 10:
Thread.MIN_PRIORITY (1) – минимальный приоритет
Thread.NORM_PRIORITY (5) – стандартный приоритет (по умолчанию)
Thread.MAX_PRIORITY (10) – максимальный приоритет
class MyThread extends Thread {
public MyThread(String name, int priority) {
super(name);
setPriority(priority);
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(getName() + " выполняется с приоритетом " + getPriority());
}
}
}
public class Main {
public static void main(String[] args) {
MyThread low = new MyThread("Low Priority", Thread.MIN_PRIORITY);
MyThread high = new MyThread("High Priority", Thread.MAX_PRIORITY);
low.start();
high.start();
}
}
🟠Почему `setPriority()` не даёт 100% контроль?
Приоритет – это всего лишь рекомендация для ОС.
Распределение процессорного времени зависит от планировщика ОС.
В Windows, Linux, macOS приоритеты работают по-разному, и Java не контролирует их на низком уровне.
🟠Как действительно заставить поток выполниться первым?
Реальные способы управления порядком выполнения:
а) Использование join()
Позволяет дождаться выполнения одного потока перед запуском другого.
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread high = new MyThread("High Priority", Thread.MAX_PRIORITY);
Thread low = new MyThread("Low Priority", Thread.MIN_PRIORITY);
high.start();
high.join(); // Ждём, пока high завершится
low.start(); // Теперь запускается low
}
}
б) Использование Executors.newSingleThreadExecutor()
Позволяет гарантированно выполнять потоки по очереди.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> System.out.println("Задача 1"));
executor.submit(() -> System.out.println("Задача 2"));
executor.shutdown();
}
}
Ставь 👍 и забирай 📚 Базу знаний@PostConstruct, интерфейс InitializingBean или атрибут init-method в XML-конфигурации), он вызывает его после того, как все свойства бина были установлены.
🟠Готовность к использованию
После вызова метода инициализации бин полностью инициализирован и готов к использованию в приложении.
🟠Вызов метода уничтожения
Когда контекст приложения закрывается, и бины должны быть уничтожены, он вызывает метод уничтожения для бинов, которые определяют его (через аннотацию @PreDestroy, интерфейс DisposableBean или атрибут destroy-method в XML-конфигурации).
Ставь 👍 и забирай 📚 Базу знанийsynchronized
Может использоваться для блокировки целого метода или определённого блока кода, обеспечивая монопольный доступ к этому участку кода для одного потока одновременно.
🟠Явные блокировки с использованием классов из пакета java.util.concurrent.locks
Предоставляют более гибкие возможности для управления блокировками, включая попытку захвата блокировки без ожидания, захват прерываемых блокировок и блокировки с возможностью повторного входа.
🟠Волатильные переменные (volatile)
Обеспечивают видимость изменений переменных между разными потоками, но не контролируют последовательность доступа к переменной.
Ставь 👍 и забирай 📚 Базу знанийGET /users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer token123
Content-Type: application/json
В WebSocket/gRPC запрос выглядел бы так
{ "userId": 123 }
🚩REST-запросы неэффективны для чатов и real-time
Проблема: REST использует "запрос-ответ", но **не поддерживает real-time.
Что происходит в REST?
1. Клиент делает HTTP-запрос к серверу.
2. Сервер обрабатывает и отправляет ответ.
3. Если клиенту нужно новое сообщение, он снова делает запрос (Polling) или использует Long Polling.
🚩Проблемы с кэшированием
Проблема: Не все REST-запросы можно кэшировать.
Кэшируются только GET-запросы (если сервер поддерживает ETag и Cache-Control).
POST, PUT, DELETE – не кэшируются, потому что меняют данные.
🚩REST API неэффективен для сложных запросов
Проблема: REST требует много отдельных запросов, если нужно загрузить связанные данные.
Пример проблемы REST:
Получить пользователя: /users/123
Получить заказы этого пользователя: /users/123/orders
Получить детали заказов: /orders/456/details
Ставь 👍 и забирай 📚 Базу знаний
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
