Java | Вопросы собесов
11.4K subscribers
33 photos
2 videos
1.13K links
Download Telegram
🤔 Какие методы самые важные и используются чаще всего?

В Java есть ключевые методы, которые активно применяются в программировании. Их можно разделить на общие методы Object, методы строк, коллекций и потоков.

🟠Важные методы `Object` (базовые для всех классов)
Каждый класс в Java наследует Object, поэтому эти методы важны для любой программы.
class Person {
String 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);
}

@Override
public int hashCode() {
return name.hashCode();
}
}


🟠Важные методы `String` (работа со строками)
Строки в Java неизменяемы, поэтому методы создают новые объекты.
String text = "  Hello, Java!  ";
System.out.println(text.trim().toUpperCase()); // "HELLO, JAVA!"


Важные методы List, Set, Map (коллекции)
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
System.out.println(names.get(0)); // Alice

Set<String> uniqueNames = new HashSet<>();
uniqueNames.add("Alice");
uniqueNames.add("Alice");
System.out.println(uniqueNames.size()); // 1 (дубликат не добавился)


🚩Методы `Map` (HashMap, TreeMap)

Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 25);
ages.put("Bob", 30);
System.out.println(ages.get("Alice")); // 25


Stream API позволяет работать с данными декларативно.
List<String> names = List.of("Alice", "Bob", "Charlie");

names.stream()
.filter(name -> name.startsWith("A"))
.map(String::toUpperCase)
.forEach(System.out::println);


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

Load factor (коэффициент загрузки) в HashMap определяет, когда нужно расширять таблицу.
Он показывает, при каком проценте заполнения текущей емкости хеш-таблицы происходит ре-хеширование.
По умолчанию load factor = 0.75, что означает:
- Когда заполнено 75% ячеек, создаётся новый, в 2 раза больший массив, и все элементы пересчитываются.
Это баланс между:
- скоростью доступа;
- потреблением памяти.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥5
🤔 В чем разница между request mapping и put mapping?

Главное отличие:
@RequestMapping – универсальная аннотация, поддерживающая все HTTP-методы (GET, POST, PUT, DELETE и т. д.).
@PutMapping – специализированная аннотация для PUT-запросов.

🚩`@RequestMapping` – универсальная аннотация

Можно использовать для любого HTTP-метода (GET, POST, PUT, DELETE). Необходимо явно указывать method = RequestMethod.PUT, если нужен PUT.
@RestController
@RequestMapping("/users")
public class UserController {

@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public String updateUser(@PathVariable Long id, @RequestBody String userData) {
return "Пользователь с ID " + id + " обновлён!";
}
}


🚩`@PutMapping` – упрощённый способ для `PUT`-запросов

Это специализированная аннотация, эквивалентная @RequestMapping(method = RequestMethod.PUT).
@RestController
@RequestMapping("/users")
public class UserController {

@PutMapping("/{id}")
public String updateUser(@PathVariable Long id, @RequestBody String userData) {
return "Пользователь с ID " + id + " обновлён!";
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11💊2
🤔 Может ли возникнуть ситуация, когда два потока портят друг друга?

Да, это называется гонка данных (race condition):
- два потока одновременно обращаются к общему ресурсу;
- меняют состояние друг друга, не зная об этом;
- результат — непредсказуемое поведение или порча данных.


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

Поверхностное копирование (Shallow Copy) – это процесс создания нового объекта, который содержит ссылки на те же вложенные объекты, что и оригинал.

🟠Как сделать поверхностное копирование в Java?
Способ 1: Метод clone() (реализация Cloneable)
class Person implements Cloneable {
String name;

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

@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone(); // Поверхностное копирование
}
}

public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
Person original = new Person("Иван");
Person copy = (Person) original.clone();

System.out.println(copy.name); // Иван
}
}


🟠Проблема с вложенными объектами (общие ссылки)
Если объект содержит вложенные объекты, они не копируются, а передаются по ссылке.
class Address {
String city;
public Address(String city) { this.city = city; }
}

class User implements Cloneable {
String name;
Address address;

public User(String name, Address address) {
this.name = name;
this.address = address;
}

@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone(); // Поверхностное копирование
}
}

public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
Address address = new Address("Москва");
User original = new User("Иван", address);
User copy = (User) original.clone();

copy.address.city = "Санкт-Петербург"; // Меняем адрес у копии

System.out.println(original.address.city); // Санкт-Петербург (изменилось и у оригинала!)
}
}


🟠Как сделать глубокую копию? (Deep Copy)
Решение: Создать новый вложенный объект в clone()
@Override
protected Object clone() throws CloneNotSupportedException {
User clonedUser = (User) super.clone();
clonedUser.address = new Address(this.address.city); // Копируем вложенный объект
return clonedUser;
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Forwarded from easyoffer
Офигеть, вот это поддержка! 🔥

Скажу честно: когда я планировал запуск краудфандинговой кампании, в голове были разные варианты развития событий. Думал — ну, наверное, получится собрать 300 тысяч. В самом идеальном сценарии — может быть, миллион.

Но больше всего я боялся, что запущу кампанию, и не получится собрать даже 300 т. Это был бы провал. Так много усилий, времени и денег вложено в проект… и если бы всё закончилось ничем — это бы сильно демотивировало.

Но, ребята, мы превысили изначальную цель в 10 раз —
3 031 040 рублей! 🤯

Вся эта кампания — это одна большая проверка бизнес-модели на прочность. И я супер рад, что запустил всё публично. Люди видят, что EasyOffer реально нужен. Теперь нет сомнений — проект актуален, он будет прибыльным и будет развиваться.

Мне приходит огромное количество сообщений в личку: кто-то когда-то давно пользовался сайтом, он помог с трудоустройством, и сейчас они уже не ищут работу — но всё равно поддержали.
Это прям очень круто и трогательно.

Никак не могу отделаться от мысли, что easyoffer — это ведь мой первый сайт. Учебный, пет-проект, просто для портфолио. И вот что из него вышло. Просто офигеть.

Я не зря ушёл с работы, чтобы заниматься только им.
Я поверил в этот проект — и сейчас вижу, что вы тоже в него верите. Для меня это очень многое значит.

Огромное спасибо за вашу поддержку! ❤️
🤔 В чём заключается идея foreign key?

Foreign key (внешний ключ) — это ограничение, которое:
- создаёт связь между двумя таблицами;
- указывает, что значение в одной таблице (дочерней) ссылается на primary key в другой (родительской);
- обеспечивает целостность данных: нельзя вставить несуществующую ссылку, или удалить запись, на которую есть ссылка (если нет ON DELETE CASCADE).


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

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

🚩Зачем она нужна

🟠Предотвращение гонки данных (race conditions)
Гонка данных возникает, когда два или более потоков одновременно пытаются изменить общие данные, и результат выполнения зависит от того, в каком порядке потоки выполняют операции. Синхронизация помогает управлять доступом к данным таким образом, чтобы обеспечить их целостность.

🟠Обеспечение видимости изменений
В многопоточной среде изменения, сделанные одним потоком в общем ресурсе, могут не быть сразу видны другим потокам из-за кэширования данных в процессорах или оптимизаций компилятора. Синхронизация гарантирует, что изменения, сделанные одним потоком, будут корректно видны другим потокам.

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

🚩Как она реализуется

🟠Ключевое слово synchronized
Может использоваться для блокировки целого метода или определённого блока кода, обеспечивая монопольный доступ к этому участку кода для одного потока одновременно.

🟠Явные блокировки с использованием классов из пакета java.util.concurrent.locks
Предоставляют более гибкие возможности для управления блокировками, включая попытку захвата блокировки без ожидания, захват прерываемых блокировок и блокировки с возможностью повторного входа.

🟠Волатильные переменные (volatile)
Обеспечивают видимость изменений переменных между разными потоками, но не контролируют последовательность доступа к переменной.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Forwarded from easyoffer
Осталось 3 дня!

Финальный отсчёт пошёл — осталось всего 3 дня до окончания краудфандинга easyoffer 2.0

Сейчас можно получить максимум пользы за минимальные деньги. После окончания кампании цены вырастут и вознаграждения станут недоступны.

👉 Поддержи easyoffer 2.0 и получи:

🚀 PRO подписка к easyoffer 2.0 на 1 год по цене месячной подписки. Активировать подписку можно в любой момент, например, когда начнешь искать работу. Приглашение на закрытое бета-тестирование

Поддержи проект сейчас, чтобы не забыть!

📌 Если не получается оплатить через карту РФ — напишите мне @kivaiko, и мы найдём удобный способ
🤔 В чём заключается и как используется клонирование объектов, массивов и двумерных массивов?

- Клонирование объектов:
- Нужно реализовать интерфейс Cloneable.
- Переопределить метод clone.
- Позволяет создать копию объекта.
- Клонирование массивов:
- Одномерные — копируются методом clone() или Arrays.copyOf.
- Двумерные — clone() создаёт поверхностную копию, нужно вручную копировать вложенные массивы для глубокого клонирования.
Используется, когда нужно сохранить исходные данные и работать с копией.


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

Ограничения (constraints) – это правила, которые ограничивают возможные значения данных или ограничивают поведение системы.

🟠Ограничения в базах данных (SQL Constraints)
В SQL ограничения гарантируют корректность данных в таблицах.
CREATE TABLE Users (
id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
age INT CHECK (age > 0),
country VARCHAR(50) DEFAULT 'Unknown'
);


🟠Ограничения в Java Generics (`<T extends ...>`)
Ограничения в Generics позволяют задавать допустимые типы.
class Box<T> {
T value;
public Box(T value) { this.value = value; }
}
Box<String> strBox = new Box<>("Hello");
Box<Integer> intBox = new Box<>(10);

class NumberBox<T extends Number> { // Ограничение: T должно быть числом
T value;
public NumberBox(T value) { this.value = value; }

public double square() {
return value.doubleValue() * value.doubleValue();
}
}


🟠Ограничения в потоках (synchronized, volatile, join)
В многопоточности ограничения помогают избежать гонок потоков.
class Counter {
private int count = 0;

public synchronized void increment() { // Только один поток может изменять count одновременно
count++;
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8💊2
Forwarded from easyoffer
Завтра последний день!

Краудфандинг заканчивается уже завтра, и второй попытки не будет.

👉 Поддержи easyoffer 2.0 и получи:

🚀 PRO подписка к easyoffer 2.0 на 1 год по цене месячной подписки. Активировать подписку можно в любой момент, например, когда начнешь искать работу. Приглашение на закрытое бета-тестирование

📌 Если не получается оплатить через карту РФ — напишите мне @kivaiko, и мы найдём удобный способ
🤔 Для чего нужны классы Future и CompletableFuture?

- Future — позволяет выполнить задачу в другом потоке и получить результат позже.
- Ограничен: нельзя ставить колбэки, не может быть "цепочек".
- CompletableFuture — расширение Future с возможностью ставить колбэки, комбинировать задачи и обрабатывать исключения.
- Поддерживает асинхронное программирование в стиле функциональных цепочек.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥10
Forwarded from easyoffer
🚨 Последний шанс!

Сегодня — последний день краудфандинга.
Через несколько часов всё закроется, и больше невозможно будет поучаствовать.

Если ты хотел, но откладывал — СЕЙЧАС самое время. Займёт 2 минуты, но изменит твой подход к собеседованиям надолго.

Поддержи easyoffer 2.0 и получи:

🚀 PRO подписка к easyoffer 2.0 на 1 год по цене месячной подписки. Активировать подписку можно в любой момент, например, когда начнешь искать работу. Приглашение на закрытое бета-тестирование

PRO подписка к easyoffer 2.0:

Доступ к списку вопросов, которые задаются на собеседованиях + вероятность встречи этих вопросов + их фильтрация по грейдам, типам интервью, компаниям

Доступ к лучшим ответам на вопросы

Список самых частых задач, которые задаются на собеседовании + их фильтрация по грейдам и компаниям

Доступ к лучшим ответам на задачи

Список тестовых заданий компаний + лучшее решение

Доступ к тренажеру "Проработка вопросов", который позволит очень быстро подготовиться к самым частым вопросам

Доступ к тренажеру "Реальное собеседование", который позволит тренироваться проходить собеседование в конкретную компанию

До конца кампании — остались часы.
Поддержать: https://planeta.ru/campaigns/easyoffer

📌 Если не получается оплатить через карту РФ — напишите мне @kivaiko, и мы найдём удобный способ
💊2👍1
🤔 Что такое as-if-serial semantics?

As-If-Serial Semantics – это принцип оптимизации компилятором, при котором код может перестраиваться, но результат его выполнения остаётся таким же, как если бы инструкции выполнялись строго по порядку.

Обычный код
int a = 10;
int b = 20;
int c = a + b;
System.out.println(c);


Что может сделать компилятор?
int c = 30;
System.out.println(c);


🚩Что можно менять? (Безопасные оптимизации)

Менять порядок инструкций, если это не влияет на результат.
Удалять лишние переменные и вычисления.
Заменять выражения константами (10 + 20 → 30).
int x = 5;
int y = 10;
x = x + 1; // x = 6
System.out.println(y);


Компилятор может поменять местами y и x
int y = 10;
int x = 6;
System.out.println(y);


🚩Что нельзя менять? (Гарантированный порядок исполнения)

int x = 10;
int y = x + 5;
x = 20;
System.out.println(y);


Если поменять порядок
x = 20;
int y = x + 5; // Неверно! y теперь 25, а должно быть 15


🚩Как `As-If-Serial` влияет на многопоточность?

В многопоточной среде компилятор может менять порядок команд внутри одного потока, но он не знает о другом потоке!
Опасный пример без volatile
boolean ready = false;
int data = 0;

void writer() {
data = 42;
ready = true;
}

void reader() {
if (ready) {
System.out.println(data); // Может напечатать 0 из-за перестановки!
}
}


Решение – volatile для ready
volatile boolean ready = false;


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Forwarded from easyoffer
Такого больше не будет!

Всего пара часов и больше не будет возможности получить:

🚀 PRO подписку к easyoffer 2.0 на 1 год по цене месячной подписки. Активировать подписку можно в любой момент, например, когда начнешь искать работу. Приглашение на закрытое бета-тестирование

👉 Поддержать: https://planeta.ru/campaigns/easyoffer
💊3👍1
🤔 Расскажи про HashMap

HashMap в Java — это структура данных, использующая хэш-таблицу для хранения пар "ключ-значение". Она позволяет быстро извлекать, добавлять и удалять элементы, используя хэш функцию для определения индекса в массиве бакетов, где хранятся значения

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Forwarded from easyoffer
Финальный отсчёт:
3 часа до конца краудфандинга easyoffer 2.0!


Это не просто скидка. Это шанс поддержать проект, который поможет и вам и тысячам айтишников готовиться к собеседованиям быстрее, эффективнее и увереннее.

За последние недели:
💥 Нас поддержали уже больше 1450 человек;
🔥 Вместе собрали больше 4,5 млн. рублей на запуск проекта;

Но сейчас важнее другое.

Через 3 часа всё закончится.
– Больше не будет подписки за 3 200 руб. на целый год!
– Не будет шанса первыми воспользоваться EasyOffer 2.0 на бета-тестировании

Если вы:

+ Планируете менять работу в этом или следующем году;
+ Хотите иметь под рукой 40,000+ вопросов собеседований с разборами, видео-ответами и тренажёрами;
+ Хотите зафиксировать лучшую цену на целый год… (потом будет в 12 раз дороже)

👉 Тогда просто переходите и поддержите нас сейчас:
https://planeta.ru/campaigns/easyoffer

📢 Три часа — и всё.
Не откладывайте на потом.

Спасибо всем, кто уже с нами! 💙
👍1💊1
Forwarded from easyoffer
🚨 60 минут до финала

Через час мы закроем краудфандинг easyoffer 2.0
Это последний шанс вписаться в самые выгодные условия.

👉 https://planeta.ru/campaigns/easyoffer
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Идущий к IT
Я смотрю на эту цифру и до сих пор не верю.

Когда я запускал этот проект, мне реально было страшно. Страшно, что ничего не получится. Что я и мой проект никому не нужен. Страшно, что все увидят, как я публично обосрался.

Я ставил планку в 300т рублей. В самом позитивном сценарии 1млн. Но про 5 миллионов… даже мысли не было. Уже в первые часы стало понятно, что кампания идет не по плану. Сайт краудфандинга не выдержал нашей нагрузки и лег 😁

Особенно в последние три дня — просто какой-то разрыв! Я ощущал, как будто ловлю попутный ветер. В последний час не хватало 50к до 5 млн, и я уже думал сам их докинуть, чтобы красиво закрыть 😁

Но финальная сумма это не так важно. Самое главное это как мы её собрали. Это не инвестиции, не чьи-то деньги под условия и контроль, не кредит. Это вы поверили и поддержали меня напрямую. Вы дали мне возможность оставить за собой полный контроль над easyoffer.

Я чувствую огромную ответственность и нервничаю из-за высоких ожиданий. А вдруг что-то пойдёт не так? А вдруг на релизе кому-то что-то не понравится? Именно поэтому я рад, что могу честно выйти на новый этап и без давления от левых инвесторов.

В такие моменты вспоминаю, с чего всё начиналось. Как 2 года назад я писал свои первые посты на 500 человек о том, как учу программирование. Как записывал первое видео на YouTube про поиск работы. Как пилил первую версию easyoffer, вообще без понимания, что из этого выйдет.

И сейчас я думаю — может, эта история вдохновит кого-то из вас. Может, кто-то запустит свой айтишный проект, найдёт поддержку и соберёт бабки на развитие. Было бы круто

Спасибо за невероятную и колосальную поддержку ❤️
О такой аудитории как вы я не мог мечтать
🔥5💊2