Java tests
2.38K subscribers
110 photos
11 links
Java задачи и тесты

По всем вопросам- @workakkk

@itchannels_telegram - 🔥лучшие ит-каналы

@pythonl - 🐍

@ai_machinelearning_big_data- ml

@ArtificialIntelligencedl - AI

@datascienceiot - ml 📚

@pythonlbooks-📚
Download Telegram
Что напечатает код?👆
Anonymous Quiz
8%
1000
7%
3000
39%
10000
24%
10000,0
23%
другой ответ
❤1
👍1
❓Что выведет код на изображении выше?
Anonymous Quiz
39%
Static Main
21%
Instance Static Main
4%
Instance Main
15%
Main
21%
Ошибка компиляции
🔥1
Каким будет вывод этого кода?
Anonymous Quiz
13%
1
60%
2
11%
3
6%
4
11%
Посмотреть ответ
⚡️ Java лайфхак: не убивай производительность боксингом

Многие даже не замечают, как теряют скорость из-за автoboxing в Stream API.

❌ Плохо (создаются объекты Integer):
Stream<Integer> boxed = Stream.of(1, 2, 3, 4, 5);
int sum = boxed.reduce(0, Integer::sum);

Каждое число → объект → лишняя память + нагрузка на GC

✅ Хорошо (работа с примитивами):
int sum = IntStream.of(1, 2, 3, 4, 5).sum();

Без лишних объектов. Быстрее. Чище.

Запомни:
- IntStream → для int
- LongStream → для long
- DoubleStream → для double

Если работаешь с числами — всегда используй primitive streams.

Это мелочь, которая на больших данных превращается в реальную экономию ресурсов.

Сохрани, чтобы не писать медленный код.
🔥8👍3❤1
⚡️ Перестаём писать методы с 7+ параметрами

Если сигнатура выглядит как:

createUser(firstName, lastName, email, phone, address, city, country)

Это уже сигнал, что модель данных развалилась.

Проблема не только в читаемости.
Такие методы сложнее поддерживать, расширять и тестировать. Любое изменение ломает сигнатуру и тянет за собой каскад правок.

Нормальный вариант - собрать связанные данные в объект:

UserInfo userInfo

Получаем:

- чище API
- проще добавлять поля
- меньше ошибок при передаче параметров
- код начинает отражать доменную модель, а не список строк

Это базовый приём, но именно на нём чаще всего экономят, а потом платят сложностью.
👍7❤3
⚙️ Динамическое изменение поведения объектов с помощью InvocationHandler и Proxy

В Java можно динамически изменять поведение объектов, используя InvocationHandler и Proxy.

🗣️ Это полезно для создания прокси-объектов, которые могут оборачивать существующие объекты и добавлять новые функции, такие как логирование, кеширование или контроль доступа.


• InvocationHandler позволяет перехватывать вызовы методов у прокси-объекта и добавлять дополнительное поведение, такое как логирование.

• Использование Proxy позволяет динамически создавать новый объект, который ведет себя как реальный объект, но с добавленным поведением.

• Этот подход позволяет добавлять новое поведение к существующим объектам без изменения их кода, что делает его мощным инструментом для реализации аспектно-ориентированного программирования (AOP).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
❓Какая строка на изображении выше успешно скомпилируется?
Anonymous Quiz
10%
// 1
11%
// 2
12%
// 3
12%
// 4
6%
// 5
9%
// 6
41%
Никакая
Сколько строк выведет этот код?
Anonymous Quiz
12%
0. Этот код не скомпилируется
3%
1
17%
2
59%
3
6%
4
4%
Узнать ответ
👍6🔥1
❓Что из вариантов лучше всего описывается определением: Операция, которая содержит серию задач, которые должны быть выполнены либо все, либо не выполнена ни одн

#spring
❓Что из вариантов лучше всего описывается определением: Операция, которая содержит серию задач, которые должны быть выполнены либо все, либо не выполнена ни одна.
Anonymous Quiz
5%
Query
84%
Transaction
8%
Prepared statement
3%
Callback
☕ Java-баг, который выглядит нормально, но ломает `HashMap`

Что выведет этот код?


Map<List<Integer>, String> map = new HashMap<>();

List<Integer> key = new ArrayList<>(List.of(1, 2));

map.put(key, "Ritesh");

key.add(3);

System.out.println(map.get(key));


Многие ожидают:


Ritesh


Но результат:

```text
null
```

Почему?

HashMap ищет ключ через:

```java
hashCode()
equals()
```

Когда мы сделали:

```java
map.put(key, "Ritesh");
```

ключ был:

```text
[1, 2]
```

У него был один
hashCode.

Но потом:

```java
key.add(3);
```

ключ стал:

```text
[1, 2, 3]
```

И его
hashCode изменился.

HashMap уже положил объект в bucket по старому hash, а при get() ищет по новому.

Схема:

```text
put()

[1,2]
hash = X
↓
bucket X


key.add(3)

[1,2,3]
hash = Y


get()

ищем bucket Y
→ запись не найдена
```

Главное правило:

❌ Не изменяйте объект после того, как использовали его как ключ в
HashMap.

Лучше использовать:

✅
String
✅
Integer
✅
record
✅ immutable-объекты

Например:

```java
Map<List<Integer>, String> map = new HashMap<>();

List<Integer> key = List.of(1, 2);

map.put(key, "value");
```

Самые опасные баги в Java - те, где объект всё ещё существует, ссылка всё та же, но структура данных уже не может его нормально найти.

#java #backend #programming
❤2
Каким будет результат выполнения кода?
Anonymous Quiz
15%
24
17%
25
66%
32
2%
33
❤5
😍4👍1