Java | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Ko'proq ko'rsatish📈 Telegram kanali Java | Вопросы собесов analitikasi
Java | Вопросы собесов (@easy_java_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 11 400 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 10 551-o'rinni va Rossiya mintaqasida 56 128-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 11 400 obunachiga ega bo‘ldi.
26 Avgust, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -1 ga, so‘nggi 24 soatda esa 0 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 9.29% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 5.90% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 059 marta ko‘riladi; birinchi sutkada odatda 673 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 3 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
Контакт для рекламы: @easyoffer_adv”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 27 Avgust, 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.
equals() и hashCode(), важно соблюдать контракт, иначе объект может вести себя некорректно в коллекциях (HashMap, HashSet и др.).
🚩Контракт `equals()`
Метод equals() определяет, когда два объекта равны.
Рефлексивность – x.equals(x) всегда true.
Симметричность – x.equals(y) == y.equals(x).
Транзитивность – если x.equals(y) и y.equals(z), то x.equals(z).
Согласованность – многократные вызовы x.equals(y) дают один и тот же результат.
Сравнение с null всегда false – x.equals(null) == false.
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true; // Проверка на одинаковые ссылки
if (obj == null || getClass() != obj.getClass()) return false; // Проверка типа
Person person = (Person) obj;
return age == person.age && name.equals(person.name); // Сравнение полей
}
}
🚩Контракт `hashCode()`
Метод hashCode() возвращает числовой хеш-код объекта. Он должен соответствовать equals()!
Если x.equals(y) == true, то x.hashCode() == y.hashCode().
Если x.hashCode() != y.hashCode(), то x.equals(y) == false (но обратное не всегда верно).
Хеш-код должен оставаться неизменным, если объект не изменяется.
@Override
public int hashCode() {
return Objects.hash(name, age);
}
🚩Почему контракт `equals()` и `hashCode()` важен?
В коллекциях, таких как HashSet, HashMap, HashTable, объекты хранятся по хеш-коду.
Что будет, если equals() переопределён, но hashCode() – нет?
Set<Person> people = new HashSet<>();
people.add(new Person("Иван", 25));
people.add(new Person("Иван", 25)); // Ожидаем, что не добавится
System.out.println(people.size()); // ❌ Будет 2, а не 1, если `hashCode()` отсутствует!
Правильный вариант (equals() + hashCode())
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
Ставь 👍 и забирай 📚 Базу знанийint занимает 4 байта (32 бита) и имеет диапазон:
-2^{31} \text{ до } 2^{31} - 1
🚩Точный диапазон `int`
🟠Минимальное значение
Integer.MIN_VALUE = -2,147,483,648
🟠Максимальное значение
Integer.MAX_VALUE = 2,147,483,647
public class Main {
public static void main(String[] args) {
System.out.println("Минимальный int: " + Integer.MIN_VALUE);
System.out.println("Максимальный int: " + Integer.MAX_VALUE);
}
}
Вывод:
Минимальный int: -2147483648 Максимальный int: 2147483647🚩Почему именно такой диапазон? 4 байта (32 бита) означают, что у нас 2³² возможных значений. Поскольку
int знаковый (поддерживает отрицательные и положительные числа), половина значений отводится подотрицательные числа.
Один бит используется для знака (0 – положительное число, 1 – отрицательное).
\text{Диапазон} = - (2^{31}) \text{ до } (2^{31} - 1)
🚩Что будет, если выйти за пределы `int`?
Если сложить два максимальных значения int, произойдёт переполнение (overflow)
int a = Integer.MAX_VALUE;
int b = 1;
int c = a + b;
System.out.println(c); // Выведет -2147483648 (переполнение!)
🟠Как работать с числами больше `int`?
Использовать `long` (8 байт, диапазон от -2^63 до 2^63 - 1):
long bigNumber = 2_147_483_648L; // Обязательно добавлять "L" в конце
Использовать BigInteger (неограниченный размер):
BigInteger bigNum = new BigInteger("999999999999999999999999");
Ставь 👍 и забирай 📚 Базу знаний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;
Ставь 👍 и забирай 📚 Базу знанийclass Car {
private Engine engine;
public Car() {
this.engine = new Engine(); // Прямое создание зависимости ❌
}
}
С IoC (зависимость передаётся извне)
class Car {
private final Engine engine;
public Car(Engine engine) { // Зависимость передаётся через конструктор
this.engine = engine;
}
}
🟠Как реализуется IoC?
IoC достигается через паттерны проектирования, такие как:
Dependency Injection (DI) – передача зависимостей извне (через конструктор, поле или метод).
Factory Method – создание объектов через фабрики.
Event-driven подход – реакция на события вместо явного вызова методов.
🟠IoC в Spring
Spring реализует IoC через контейнер IoC, который управляет созданием объектов (бинов) и их зависимостями.
@Component
class Engine {}
@Component
class Car {
private final Engine engine;
@Autowired
public Car(Engine engine) { // Spring автоматически передаст нужный объект
this.engine = engine;
}
}
Ставь 👍 и забирай 📚 Базу знанийequals(), он должен быть транзитивным
class Person {
String name;
Person(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return name.equals(person.name);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person("Иван");
Person p2 = new Person("Иван");
Person p3 = new Person("Иван");
System.out.println(p1.equals(p2)); // true
System.out.println(p2.equals(p3)); // true
System.out.println(p1.equals(p3)); // true (транзитивность)
}
}
🚩Транзитивность в сравнении (`compareTo` из `Comparable`)
Метод compareTo() должен соблюдать транзитивность:
class Student implements Comparable<Student> {
int age;
Student(int age) {
this.age = age;
}
@Override
public int compareTo(Student other) {
return Integer.compare(this.age, other.age);
}
}
public class Main {
public static void main(String[] args) {
Student s1 = new Student(25);
Student s2 = new Student(20);
Student s3 = new Student(15);
System.out.println(s1.compareTo(s2)); // > 0 (s1 > s2)
System.out.println(s2.compareTo(s3)); // > 0 (s2 > s3)
System.out.println(s1.compareTo(s3)); // > 0 (s1 > s3) (транзитивность)
}
}
🚩Транзитивность в наследовании (`extends` / `implements`)
В Java классы могут наследоваться транзитивно
class Animal {}
class Mammal extends Animal {}
class Dog extends Mammal {}
Ставь 👍 и забирай 📚 Базу знаний