Java | Вопросы собесов – Telegram
Java | Вопросы собесов
11.4K subscribers
33 photos
2 videos
1.13K links
Download Telegram
🤔 Что такое Spring контекст?

Это IoC-контейнер, который управляет жизненным циклом bean'ов и их зависимостями. Он создаёт объекты, связывает их, конфигурирует и управляет ими.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥31
🤔 Как ты можешь описать абстракцию?

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

🚩Абстракция

В Java абстракция достигается через:
Абстрактные классы
Интерфейсы

🟠Абстрактные классы
Абстрактный класс — это класс, который не может быть создан напрямую, но может содержать:
Абстрактные методы (без реализации, только сигнатуры);
Обычные методы (с реализацией).
Используется, если вы хотите описать общее поведение для группы классов, но часть поведения оставить на усмотрение конкретных подклассов.
abstract class Animal {
// Абстрактный метод — реализуется в подклассах
abstract void makeSound();

// Обычный метод
void eat() {
System.out.println("This animal eats food.");
}
}

class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Woof!");
}
}

class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Meow!");
}
}

public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.makeSound(); // Woof!
dog.eat(); // This animal eats food.

Animal cat = new Cat();
cat.makeSound(); // Meow!
}
}


🟠Интерфейсы
Интерфейс — это чистый контракт, который определяет набор методов, которые класс должен реализовать.
В отличие от абстрактного класса:
Интерфейс не может содержать полей (кроме static final).
Класс может реализовать несколько интерфейсов (множественное наследование).
interface Vehicle {
void start(); // метод без реализации
void stop();
}

class Car implements Vehicle {
@Override
public void start() {
System.out.println("Car is starting.");
}

@Override
public void stop() {
System.out.println("Car is stopping.");
}
}

class Bike implements Vehicle {
@Override
public void start() {
System.out.println("Bike is starting.");
}

@Override
public void stop() {
System.out.println("Bike is stopping.");
}
}

public class Main {
public static void main(String[] args) {
Vehicle car = new Car();
car.start(); // Car is starting.
car.stop(); // Car is stopping.

Vehicle bike = new Bike();
bike.start(); // Bike is starting.
bike.stop(); // Bike is stopping.
}
}


🚩Почему важна абстракция?

🟠Скрытие сложностей
Программистам не нужно знать все детали реализации объекта. Они работают только с его интерфейсом.
🟠Упрощение понимания
Код становится понятным и модульным, так как мы сосредоточиваемся на важной логике.
🟠Повторное использование
Абстракция позволяет использовать один и тот же код для разных объектов.
🟠Гибкость и поддержка
Если нужно изменить реализацию, это не затронет остальную часть программы (если она работает через абстрактный контракт).

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

Это ORM-фреймворк для работы с базами данных. Он позволяет сопоставлять объекты Java с таблицами базы данных, упрощая операции CRUD без необходимости написания SQL-кода вручную.

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

Модель памяти Java (Java Memory Model, JMM) определяет, как взаимодействуют потоки через память и как изменения, сделанные одним потоком, становятся видимыми для других потоков. Модель памяти Java является фундаментальной частью многопоточной среды в Java, обеспечивающей корректность и предсказуемость поведения многопоточных программ.

🚩Основные аспекты

🟠Взаимодействие потоков и памяти:

JMM определяет, как потоки взаимодействуют с переменными (данными), хранящимися в общей памяти. Каждая переменная в Java хранится в основной памяти (main memory), и потоки могут иметь локальные копии этих переменных в своих рабочих кешах.

🟠Чтение и запись переменных
Когда поток читает переменную, он может читать ее из своей локальной копии или из основной памяти. Когда поток записывает переменную, он может записывать ее в свою локальную копию или непосредственно в основную память.

🚩Гарантии JMM

🟠Последовательная согласованность (Sequential Consistency)
Последовательная согласованность гарантирует, что действия всех потоков будут выполняться в том порядке, в котором они были написаны в коде, если нет явных указаний на обратное.

🟠Видимость (Visibility)
Видимость означает, что изменения, сделанные одним потоком, становятся видимыми для других потоков. В JMM видимость изменений обеспечивается с помощью синхронизации.

🟠Произвольный порядок выполнения (Out-of-Order Execution)
JMM допускает оптимизации, такие как переупорядочивание инструкций, чтобы улучшить производительность, но гарантирует, что видимость и порядок выполнения будут сохраняться, как описано в спецификации.

public class VisibilityExample {
private static boolean flag = false;
private static int counter = 0;

public static void main(String[] args) throws InterruptedException {
Thread writer = new Thread(() -> {
counter = 42;
flag = true;
});

Thread reader = new Thread(() -> {
while (!flag) {
// Ждем пока флаг не станет true
}
System.out.println("Counter: " + counter);
});

writer.start();
reader.start();

writer.join();
reader.join();
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
🤔 В чём разница между JDK и JRE?

- JDK (Java Development Kit): включает инструменты для разработки Java-приложений (компилятор javac, отладчики).
- JRE (Java Runtime Environment): включает только среду выполнения для запуска Java-программ (JVM и стандартные библиотеки).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥1
🤔 Используешь в работе Lambda-выражения?

Да, лямбда-выражения являются важной частью современной разработки на Java, и я активно их использую в своей работе. Лямбда-выражения помогают писать более лаконичный и выразительный код, особенно при работе с коллекциями и потоками данных. Вот несколько распространенных случаев использования лямбда-выражений в Java:

🟠Итерация по коллекциям
Использование лямбда-выражений с методом forEach позволяет компактно и удобно итерировать по элементам коллекций.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));


🟠Фильтрация и преобразование коллекций
С использованием Stream API и лямбда-выражений можно легко фильтровать, сортировать и преобразовывать коллекции.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("A"))
.collect(Collectors.toList());

filteredNames.forEach(System.out::println); // Вывод: Alice


🟠Сортировка коллекций
Лямбда-выражения упрощают сортировку коллекций с использованием метода sort.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.sort((name1, name2) -> name1.compareTo(name2));
names.forEach(System.out::println);


🟠Использование функциональных интерфейсов
Лямбда-выражения широко используются с функциональными интерфейсами, такими как Predicate, Function, Consumer и Supplier.
// Predicate
Predicate<String> startsWithA = s -> s.startsWith("A");
boolean result = startsWithA.test("Alice"); // true

// Function
Function<String, Integer> lengthFunction = s -> s.length();
int length = lengthFunction.apply("Hello"); // 5

// Consumer
Consumer<String> printConsumer = s -> System.out.println(s);
printConsumer.accept("Hello, World!"); // Вывод: Hello, World!

// Supplier
Supplier<String> stringSupplier = () -> "Hello, Supplier!";
String suppliedString = stringSupplier.get();
System.out.println(suppliedString); // Вывод: Hello, Supplier!


🟠Параллельные вычисления
Лямбда-выражения с использованием параллельных потоков позволяют легко выполнять параллельные вычисления.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.parallelStream()
.mapToInt(Integer::intValue)
.sum();

System.out.println("Sum: " + sum); // Вывод: Sum: 15


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

Предположим, у нас есть список сотрудников, и мы хотим отфильтровать и отсортировать их по имени.
import java.util.*;
import java.util.stream.Collectors;

class Employee {
private String name;
private int age;

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

public String getName() {
return name;
}

public int getAge() {
return age;
}

@Override
public String toString() {
return "Employee{name='" + name + "', age=" + age + '}';
}
}

public class LambdaExample {
public static void main(String[] args) {
List<Employee> employees = Arrays.asList(
new Employee("Alice", 30),
new Employee("Bob", 25),
new Employee("Charlie", 35),
new Employee("David", 28)
);

// Фильтрация и сортировка сотрудников по имени
List<Employee> filteredAndSorted = employees.stream()
.filter(e -> e.getAge() > 27)
.sorted(Comparator.comparing(Employee::getName))
.collect(Collectors.toList());

filteredAndSorted.forEach(System.out::println);
}
}


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

- map: преобразует элементы одного потока данных в другой, сохраняя структуру (например, возвращая поток потоков).
- flatMap: преобразует элементы и объединяет результаты в один поток, устраняя вложенность.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍7
🤔 Докажи CAP теорему

CAP-теорема (Consistency, Availability, Partition Tolerance) утверждает, что в распределенной системе невозможно одновременно обеспечить три свойства:

🟠Consistency (Согласованность)
все узлы видят одни и те же данные в один момент времени.
🟠Availability (Доступность)
каждый запрос получает ответ, даже если некоторые узлы вышли из строя.
🟠Partition Tolerance (Устойчивость к разделению сети)
система продолжает работать, даже если сеть разделилась на изолированные части.

🚩Доказательство

Рассмотрим сценарий с распределенной системой, состоящей из двух узлов (A и B), которые могут обмениваться данными.

🟠Предположим, что произошел сетевой раздел (Partition Tolerance, P)
узлы A и B больше не могут обмениваться данными.
Теперь у нас есть выбор
🟠Обеспечить согласованность (C)
это значит, что данные на A и B должны оставаться идентичными. Однако, так как они не могут обмениваться данными, запросы к B не могут быть обработаны до восстановления связи (нарушается доступность).
🟠Обеспечить доступность (A)
это значит, что оба узла должны продолжать отвечать на запросы. Однако, так как они не могут синхронизироваться, данные на A и B могут отличаться (нарушается согласованность). Так как разделение сети (P) может произойти в реальных условиях, система вынуждена выбирать между C и A. Таким образом, невозможно одновременно обеспечить все три свойства (C, A, P).

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

Это принцип ООП, который скрывает реализацию объекта и предоставляет доступ только к необходимой информации через методы. Она обеспечивает контроль доступа к данным и защиту от некорректного использования.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19👀3🤔1
🤔 Что такое Java Server Pages JSP?

Java Server Pages (JSP) — это технология для создания динамических веб-страниц с использованием Java. JSP позволяет смешивать HTML с Java-кодом для генерации динамического контента на сервере.

🚩Плюсы:

Интеграция с Java:
Вставка Java-кода в HTML-страницы.

Теги JSP:
Скриплеты: <% ... %>
Выражения: <%= ... %>
Директивы: <%@ ... %>
Декларации: <%! ... %>

JavaBeans:
Поддержка использования JavaBeans для разделения логики и представления.

Пользовательские теги:
Расширение функциональности через собственные теги.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Когда говорят, что Java слишком простой язык, на сцену выходит канал Java Learning

Здесь легко научиться:

▪️ Разрабатывать высоконагруженные серверные приложения
▪️ Управлять сложными базами данных
▪️ Организовывать эффективную многопоточную обработку данных
▪️ Проходить технические собеседования в ведущие IT-компании

Самый необычный канал про Java, подписывайся@Java_per_month
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤔 Почему HttpServlet класс объявлен как абстрактный?

Класс HttpServlet объявлен абстрактным, потому что он предоставляет базовый функционал для обработки HTTP-запросов, но сам по себе не предназначен для непосредственного использования. Разработчики должны переопределять его методы, такие как doGet или doPost, чтобы реализовать специфичное поведение для своего приложения.


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

HQL (Hibernate Query Language) – это язык запросов, используемый в Hibernate (фреймворке для работы с базами данных в Java), который похож на SQL, но оперирует не таблицами и столбцами, а объектами и их свойствами.

🚩Зачем нужен HQL?

Когда мы работаем с базами данных в Hibernate, мы используем объектно-реляционное отображение (ORM), где каждая таблица представляется как класс, а строки – как объекты. Однако иногда нам нужно делать запросы к базе данных, например:
Получить список объектов, соответствующих определённому критерию
Отфильтровать, отсортировать или объединить данные
Выполнить массовое обновление или удаление

Можно, конечно, использовать чистый SQL, но тогда мы потеряем преимущества ORM, такие как переносимость кода между разными базами данных. HQL решает эту проблему, позволяя писать запросы в объектных терминах, а Hibernate сам преобразует их в правильный SQL для конкретной базы данных.

🚩Как выглядит HQL?

HQL очень похож на SQL, но вместо таблиц и столбцов мы используем имена классов и их полей.

🟠Пример 1: Получение списка объектов
Допустим, у нас есть класс User, связанный с таблицей users:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;
private int age;

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


Теперь напишем HQL-запрос, чтобы получить всех пользователей старше 18 ле
String hql = "FROM User WHERE age > 18";
List<User> users = session.createQuery(hql, User.class).getResultList();


Выборка только имен пользователей
String hql = "SELECT u.name FROM User u";
List<String> names = session.createQuery(hql, String.class).getResultList();


Запрос с параметрами (предотвращает SQL-инъекции)
String hql = "FROM User WHERE name = :name";
Query<User> query = session.createQuery(hql, User.class);
query.setParameter("name", "Иван");
List<User> users = query.getResultList();


🚩Плюсы

Независимость от СУБД
HQL автоматически адаптируется под MySQL, PostgreSQL, Oracle и другие базы.
Оперирование объектами
вместо таблиц и столбцов мы работаем с сущностями (классами Java).
Безопасность
использование параметров (setParameter()) предотвращает SQL-инъекции.
Гибкость
поддержка JOIN, GROUP BY, ORDER BY и других SQL-конструкций.

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

1. doGet(HttpServletRequest req, HttpServletResponse resp): для обработки GET-запросов.
2. doPost(HttpServletRequest req, HttpServletResponse resp): для обработки POST-запросов.
3. doPut(HttpServletRequest req, HttpServletResponse resp): для обработки PUT-запросов.
4. doDelete(HttpServletRequest req, HttpServletResponse resp): для обработки DELETE-запросов.
5. service(HttpServletRequest req, HttpServletResponse resp): для определения типа HTTP-запроса и вызова соответствующего метода.
6. init() и destroy(): для настройки сервлета и освобождения ресурсов.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2
🤔 После какого момента 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
👍14
Swipe right or swipe left

Что делать, если твои мэтчи в жизни не такие точные, как твой код?

Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.

📌 Мы возьмем реальные данные со speed dating.

📌 Обучим модель, которая скажет: match или swipe left.

📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).

💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.

👉 Записаться
🤔 Какой метод HTTP не является неизменяемым?

Методы HTTP, такие как POST, PUT, и DELETE, не являются неизменяемыми, поскольку они изменяют состояние сервера, добавляя, обновляя или удаляя данные. В отличие от них, методы GET и HEAD считаются неизменяемыми, так как они только запрашивают данные, не влияя на сервер.


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

Симметричность – это свойство, при котором если A связано с B, то B связано с A.

🚩В математике

В логике и алгебре отношение \( R \) называется симметричным, если:
a R b \Rightarrow b R a
Но, например, отношение "a > b" не симметрично, потому что если a > b, то b > a – это неверно.

🚩В программировании (Java)

В Java симметричность важна при переопределении метода equals().
Если a.equals(b) == true, то обязательно должно быть b.equals(a) == true. Ошибочный код (нарушает симметричность)
class Person {
String name;

Person(String name) {
this.name = name;
}

@Override
public boolean equals(Object obj) {
if (obj instanceof String) { // Сравниваем с String (ошибка)
return this.name.equals(obj);
}
return false;
}
}

public class Main {
public static void main(String[] args) {
Person p = new Person("Alice");

System.out.println(p.equals("Alice")); // true
System.out.println("Alice".equals(p)); // false (нарушена симметричность)
}
}


Правильный способ
@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);
}


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

1. GET: отправка данных в строке запроса (URL).
2. POST: отправка данных в теле запроса.
3. PUT: для обновления данных на сервере.
4. DELETE: для удаления данных.
5. PATCH: для частичного обновления.
6. HEAD: отправка заголовков без тела.
7. OPTIONS: получение информации о доступных методах.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥1
🤔 Чем отличаются 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


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍162🔥1
🤔 В чем разница между методами GET и POST?

1. GET:
- Данные передаются в строке URL.
- Ограничение на длину данных (зависит от браузера/сервера).
- Менее безопасен, так как параметры видны в URL.
2. POST:
- Данные передаются в теле запроса.
- Подходит для отправки больших объемов данных.
- Более безопасен, так как данные не отображаются в URL.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🤔3🔥1