Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on null in /var/www/tgoop/function.php on line 65
1943 - Telegram Web
Telegram Web
🤔 Когда стоит изменять значение поля serialVersionUID?

- Когда структура класса меняется так, что объекты, сериализованные старой версией, несовместимы с новой;
- Например, удаление, переименование или изменение типа полей.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
🤔 Что нужно, чтобы написанная на Java программа, заработала?

Чтобы написанная на Java программа заработала, необходимо выполнить несколько шагов, начиная с написания кода и заканчивая его запуском.

🚩Шаги

1⃣Написание кода
Напишите Java-код в текстовом редакторе или интегрированной среде разработки (IDE), такой как IntelliJ IDEA, Eclipse или NetBeans.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}


2⃣Установка Java Development Kit (JDK)
Убедитесь, что на вашем компьютере установлен JDK (Java Development Kit). JDK включает в себя компилятор (javac) и виртуальную машину Java (JVM). Скачайте и установите последнюю версию JDK с сайта Oracle или OpenJDK.

3⃣Компиляция кода
Компилируйте Java-код в байт-код, который будет выполняться на JVM. Для этого используйте команду javac. После компиляции появится файл HelloWorld.class, содержащий байт-код.
javac HelloWorld.java


4⃣Запуск программы
Запустите скомпилированный байт-код с помощью виртуальной машины Java (JVM), используя команду java.
java HelloWorld


Вывод должен быть:
Hello, World!


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7💊3
🤔 В чём идея java.util.concurrent?

Этот пакет содержит:
- Потокобезопасные коллекции (ConcurrentHashMap, CopyOnWriteArrayList);
- Синхронизацию (Lock, Semaphore, CountDownLatch);
- Инструменты для распараллеливания и отложенного выполнения (ExecutorService, Future, Callable).
Цель — дать высокоуровневые средства для безопасной работы с многопоточностью.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🤔 В чем разница JPQL и HQL?

JPQL (Java Persistence Query Language) и HQL (Hibernate Query Language) – это языки запросов, похожие на SQL, но работающие с объектами, а не с таблицами БД.
Главное отличие: JPQL – стандарт JPA, а HQL – специфичен для Hibernate.

🚩JPQL (Java Persistence Query Language)

Стандартный язык JPA, работает со всеми JPA-совместимыми провайдерами (Hibernate, EclipseLink, OpenJPA).
Опирается на JPA Entity-классы, а не на реальные таблицы в БД.
TypedQuery<User> query = entityManager.createQuery(
"SELECT u FROM User u WHERE u.age > :age", User.class);
query.setParameter("age", 18);
List<User> users = query.getResultList();


🚩HQL (Hibernate Query Language)

Язык запросов специфичный для Hibernate.
Работает аналогично JPQL, но поддерживает дополнительные возможности, например, вызов методов и фильтрацию по подзапросам.
Query query = session.createQuery(
"FROM User u WHERE LENGTH(u.name) > 5"); // Использование функции LENGTH()
List<User> users = query.list();


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
🤔 Что содержит задача, которая пришла от аналитиков?

Обычно такая задача включает в себя описание бизнес-требования, цели, шаги сценария, ограничения и пожелания к интерфейсу или логике. Также может содержать критерии приёмки, диаграммы, примеры пользовательских историй и связи с другими задачами или модулями.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔12👍3🔥1💊1
🤔 К какой категории сущности относится Primary Key?

Primary Key (первичный ключ) в базах данных относится к категории ограничений (constraints). Это специальное ограничение, которое накладывается на столбец или группу столбцов таблицы, чтобы однозначно идентифицировать каждую строку (запись) в таблице.

🚩Основные свойства Primary Key

🟠Уникальность
Значение первичного ключа должно быть уникальным для каждой строки. Это исключает дублирование записей.
🟠Не может быть NULL
Столбец (или столбцы), определённый как Primary Key, не допускает значения NULL, так как NULL не может однозначно идентифицировать строку.
🟠Только один Primary Key на таблицу
Таблица может иметь только один первичный ключ, но он может состоять из одного столбца (простой ключ) или нескольких (составной ключ).

🚩Зачем нужен Primary Key?

Для однозначной идентификации записей в таблице.
Для создания связей между таблицами в реляционных базах данных (внешние ключи ссылаются на первичный ключ другой таблицы).
Для ускорения поиска и манипуляций с данными за счёт создания индекса на столбец первичного ключа.

🚩Пример использования Primary Key

Простой первичный ключ
CREATE TABLE Users (
user_id INT PRIMARY KEY,
username VARCHAR(50),
email VARCHAR(100)
);


Составной первичный ключ
CREATE TABLE Orders (
order_id INT,
product_id INT,
PRIMARY KEY (order_id, product_id)
);


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
🤔 Что такое атомарность и консистентность?

- Атомарность — операция либо выполняется целиком, либо не выполняется вовсе. Это неделимая единица работы.
- Консистентность — после выполнения операции, данные остаются в допустимом, согласованном состоянии.
Пример: перевод денег между счетами — списание и зачисление должны произойти вместе (атомарность), и общий баланс не должен нарушиться (консистентность).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5💊1
🤔 Как на Java писать веб-приложение?

Веб-приложение на Java – это серверное приложение, которое обрабатывает HTTP-запросы и отправляет ответы клиенту.

🚩Написание веб-приложения на Spring Boot

Установка зависимостей (Maven)
Создайте pom.xml и добавьте
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.2</version> <!-- Используйте актуальную версию -->
</dependency>
</dependencies>


Создание основного класса (точка входа)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyWebApp {
public static void main(String[] args) {
SpringApplication.run(MyWebApp.class, args);
}
}


Создание контроллера (обработка HTTP-запросов)**
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class MyController {

@GetMapping("/hello")
public String sayHello() {
return "Привет, это веб-приложение на Java!";
}
}


Теперь при открытии http://localhost:8080/api/hello сервер вернёт:
Привет, это веб-приложение на Java!


🚩Разработка фронтенда (HTML + Thymeleaf)

Если приложение рендерит страницы на сервере, используйте Thymeleaf.
Добавьте зависимость в pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>


Создайте HTML-шаблон (src/main/resources/templates/index.html)
<!DOCTYPE html>
<html>
<head>
<title>Главная страница</title>
</head>
<body>
<h1>Привет, <span th:text="${name}"></span>!</h1>
</body>
</html>


Создайте контроллер для отображения страницы
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class WebController {
@GetMapping("/")
public String home(Model model) {
model.addAttribute("name", "Гость");
return "index"; // Возвращает "index.html"
}
}


🚩Работа с базой данных (Spring Data JPA + PostgreSQL)

Добавьте зависимости в pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>


Настройте application.properties (подключение к БД)
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
spring.datasource.username=postgres
spring.datasource.password=secret
spring.jpa.hibernate.ddl-auto=update


Создайте сущность (таблицу в БД)
import jakarta.persistence.*;

@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;

// Геттеры и сеттеры
}


Создайте Repository для работы с БД
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}


Контроллер для работы с БД
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
private final UserRepository userRepository;

public UserController(UserRepository userRepository) {
this.userRepository = userRepository;
}

@GetMapping
public List<User> getUsers() {
return userRepository.findAll();
}

@PostMapping
public User addUser(@RequestBody User user) {
return userRepository.save(user);
}
}


Запустите приложение:
mvn spring-boot:run


Проверьте API через браузер или Postman
http://localhost:8080/users


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
🤔 Что такое «локальный класс», каковы его особенности?

Локальный класс — это класс, определённый внутри метода или блока кода. Его особенности:
- Видим и доступен только внутри области, где объявлен.
- Может обращаться к финальным или эффективно финальным переменным метода.
- Часто используется для вспомогательной логики, ограниченной контекстом метода.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3
🤔 Является ли пустым пул строк при старте 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 файла, все строковые литералы в этих классах также добавляются в пул строк.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔1
🤔 Гарантирует ли HashMap указанную сложность выборки элемента?

Только при равномерном распределении хешей — да, O(1).
Если ключи имеют коллизии, и корзины переполнены — время может увеличиться до O(log n) (в случае использования TreeNodes) или O(n) (в старых версиях).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🤔 Где в обработке исключений может применяться конструкция с finally?

Конструкция finally в Java используется для гарантированного выполнения кода, независимо от того, произошло исключение или нет. Обычно применяется для освобождения ресурсов, таких как закрытие файлов, соединений с базой данных или потоков.

🚩Основная структура

try {
// Код, который может выбросить исключение
} catch (Exception e) {
// Обработка исключения
} finally {
// Этот блок выполнится всегда
}


Пример
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream("file.txt");
System.out.println(fileInputStream.read());
} catch (IOException e) {
System.out.println("Ошибка: " + e.getMessage());
} finally {
if (fileInputStream != null) {
fileInputStream.close(); // Всегда закрываем файл
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🤔 Чем отличаются TCP и UDP?

TCP — это протокол с установлением соединения, обеспечивающий надежную доставку данных. UDP — это протокол без соединения, работающий быстрее, но без гарантий доставки или порядка следования пакетов.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1
🤔 Чем stub отличается от mock?

В тестировании разница между Stub и Mock заключается в их предназначении и способе использования.

🚩Stub (Заглушка)

Stub – это простейший объект-заглушка, который возвращает заранее заданные данные. Он не проверяет, какие методы были вызваны, а просто отвечает на запросы.
class UserRepositoryStub implements UserRepository {
@Override
public User findById(Long id) {
return new User(id, "Иван"); // Просто возвращает статичные данные
}
}


🚩Mock (Макет)

Mock – это объект, который имитирует поведение реального объекта и позволяет проверять вызовы методов (сколько раз был вызван, с какими аргументами и т. д.).
UserRepository userRepository = mock(UserRepository.class);
when(userRepository.findById(1L)).thenReturn(new User(1L, "Иван"));

User user = userRepository.findById(1L);

verify(userRepository, times(1)).findById(1L); // Проверяем, что метод был вызван 1 раз


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
🤔 Что известно о полном синтаксисе SELECT в реляционной БД?

Полный синтаксис SELECT включает:
SELECT [DISTINCT] поля FROM таблицы [JOIN] [WHERE условия] [GROUP BY] [HAVING] [ORDER BY] [LIMIT/OFFSET].
Это мощный оператор, который позволяет извлекать, фильтровать, сортировать и агрегировать данные.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥4
🤔 После какого момента GC понимает, что нужно собирать мусор?

Garbage Collector (GC) в Java начинает сборку мусора, когда объекты в памяти больше не используются и не имеют активных ссылок.

🟠Основное правило: объект считается мусором, если нет на него ссылок
GC понимает, что объект можно удалить, если на него больше не ссылается ни одна переменная или он стал недостижимым.
class Demo {
int value;
}

public class Main {
public static void main(String[] args) {
Demo obj = new Demo(); // Создан объект в памяти (Heap)
obj = null; // Теперь на него нет ссылки → GC его удалит
}
}


🚩Когда GC запускается?

🟠Недостаток памяти (Low Memory)
Если в куче (Heap) осталось мало свободной памяти, JVM может запустить GC.

🟠Алгоритмы JVM (GC работает автоматически)
GC в Java автоматический, и его запуск зависит от алгоритма сборщика мусора. Некоторые из них:
Serial GC (для маленьких программ)
Parallel GC (по умолчанию в Java 8)
G1 GC (по умолчанию в Java 11+)
ZGC, Shenandoah GC (для высоконагруженных систем)

🚩Способы обнаружения "мусора"

🟠Счётчик ссылок (Reference Counting)
Устарело, потому что не умеет работать с циклическими ссылками.
🟠Алгоритм "Reachability" (Достижимость)
Основной метод, который использует GC в Java.
🟠Алгоритм достижимости (Reachability Analysis)
GC начинает с корневых объектов (GC Roots) и проверяет, какие объекты достижимы.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
🤔 Что нам даёт Dependency Injection?

- Ослабляет связанность кода (low coupling);
- Повышает тестируемость кода (легко внедрять моки);
- Упрощает сопровождение и масштабирование приложений.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍1
🤔 Расскажи про Hash Code & Equals Contract

Когда вы переопределяете методы 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 всегда falsex.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);
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2
🤔 Какие протоколы передачи данных есть?

Среди основных протоколов: TCP, UDP, FTP, HTTP, HTTPS, SMTP, POP3, IMAP, SSH и другие.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥2🤔1
🤔 Что такое шардирование?

Шардирование – это метод горизонтального разделения базы данных на несколько частей (шардов) для повышения производительности и масштабируемости.

🚩Популярные стратегии шардирования

🟠По диапазону (Range-Based Sharding)
Данные делятся по диапазону значений (например, ID 1–1000, 1001–2000).

🟠По хешу (Hash-Based Sharding)
Данные распределяются с помощью хеш-функции.
int shardNumber = userId % numberOfShards;


🟠Географическое (Geo-Based Sharding)
Данные разделяются по географическому признаку (например, Европа, Азия, США). Минимальная задержка (пользователь получает данные ближе к себе)
Некоторые регионы могут перегружаться.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
2025/10/25 17:30:48
Back to Top
HTML Embed Code: