Библиотека задач по Java | тесты, код, задания
5.57K subscribers
786 photos
9 videos
357 links
Задачи и тесты по Java для тренировки и обучения.

По рекламе: @tproger_sales_bot

Учиться у нас: clc.to/KV5NkA

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
😭 Как не потратить недельный лимит AI-кодинга за три дня?

Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.

🔘 Поговорим о том:

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

✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после.

⬇️ 17 сентября, 19:00 МСК
⬇️ 1,5 часа · бесплатно
⬇️ Арсений Харланов и Олег Лайок

💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре.

🔗 Зарегистрироваться на вебинар⁠
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека программиста
👀 Как вы смотрите видео?

Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране?

Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить.

🕰️ Опрос займёт около 3 минут.

В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео.

🔗 Поделиться опытом

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
❓ Изменится ли исходный список после очистки subList?

OpenJDK 21. Что выведет код? Нужные импорты подключены.

var values = new ArrayList<>(List.of(1, 2, 3, 4));
var middle = values.subList(1, 3);

middle.clear();

System.out.println(values);


👾 — [1, 2, 3, 4]
👍 — [2, 3]
🥰 — [1, 4]
⚡️ — ConcurrentModificationException

Ответ: 🥰 — [1, 4].

subList возвращает представление части списка, связанное с исходным списком. Индекс 1 включён, индекс 3 не включён: middle содержит 2 и 3. Вызов clear удаляет эти элементы из исходного ArrayList.

Правило в документации Java

🐸 Библиотека задач по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰6👾4👍2
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция!

До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один.

Например, можно совместить:

💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью.

💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.


Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽ 🔥

Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога.

Акция действует до 31 октября включительно ⏳

⏬ Собрать свой учебный билд
Please open Telegram to view this post
VIEW IN TELEGRAM
❓ Что останется в StringBuilder после переназначения параметра?

OpenJDK 21. Что выведет код? Нужные импорты подключены.

class Demo {
static void change(StringBuilder text) {
text.append("B");
text = new StringBuilder("C");
text.append("D");
}

public static void main(String[] args) {
var text = new StringBuilder("A");
change(text);
System.out.println(text);
}
}


👾 — AB
👍 — CD
🥰 — ABCD
⚡️ — Ошибка компиляции

Ответ: 👾 — AB.

Java передаёт значение ссылки. Сначала параметр text и переменная вызывающего кода указывают на один StringBuilder, поэтому append("B") виден снаружи. Затем параметр получает ссылку на другой объект. Это не переназначает переменную в main.

Правило в документации Java

🐸 Библиотека задач по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👾9👍8
❓ Какое исключение сохранится, если ошиблись и try, и close?

OpenJDK 21. Что выведет код? Нужные импорты подключены.

class Demo {
static class Resource implements AutoCloseable {
public void close() {
throw new IllegalStateException("close");
}
}

public static void main(String[] args) {
try (var resource = new Resource()) {
throw new IllegalArgumentException("body");
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println(
e.getSuppressed()[0].getMessage()
);
}
}
}


👾 — close, затем body
👍 — Только close
🥰 — Ошибка компиляции
⚡️ — body, затем close

Ответ: ⚡️ — body, затем close.

В try-with-resources исключение из тела остаётся основным. Ошибка при закрытии ресурса добавляется к нему как подавленная и доступна через getSuppressed(). Поэтому e содержит ошибку с сообщением body, а первый подавленный элемент — ошибку close.

Правило в документации Java

🐸 Библиотека задач по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡4🔥1
❓ Можно ли повторно использовать Stream после count?

OpenJDK 21. Что выведет код? Нужные импорты подключены.

var stream = Stream.of("A", "B");

System.out.println(stream.count());
stream.forEach(System.out::println);


👾 — 2, затем A и B
👍 — 2, затем IllegalStateException
🥰 — Только 2, без исключения
⚡️ — Ошибка компиляции

Ответ: 👍 — 2, затем IllegalStateException.

count — терминальная операция: поток уже использован. В OpenJDK 21 повторная терминальная операция на этом Stream.of вызывает IllegalStateException. Чтобы снова обработать те же данные, нужно создать новый поток из источника.

Правило в документации Java

🐸 Библиотека задач по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👾1
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше.

В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок.

Например, можно совместить два направления по работе с ИИ:

💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью.

💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.


📍 Разница в цене — почти 50 тысяч рублей. Можно освоить больше, не выходя за рамки запланированного бюджета.

А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога.

Акция действует до 31 октября включительно ⏳

⏮️ Пора прокачать свой стек
Please open Telegram to view this post
VIEW IN TELEGRAM
❓ Почему тернарное выражение с Integer может выбросить исключение?

OpenJDK 21. Что выведет код? Нужные импорты подключены.

Integer value = null;
boolean useValue = true;

Integer result = useValue ? value : 0;
System.out.println(result);


👾 — null
👍 — 0
🥰 — NullPointerException
⚡️ — Ошибка компиляции

Ответ: 🥰 — NullPointerException.

Ветви Integer и int образуют числовое условное выражение типа int. При выборе value требуется распаковать Integer в int. Но value равен null, поэтому возникает NullPointerException. Тип переменной result не отменяет эту распаковку.

Правило в документации Java

🐸 Библиотека задач по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰6👍1
❓ Почему HashSet и TreeSet по-разному считают BigDecimal?

OpenJDK 21. Что выведет код? Нужные импорты подключены.

var a = new BigDecimal("1.0");
var b = new BigDecimal("1.00");

var hash = new HashSet<BigDecimal>();
hash.add(a);
hash.add(b);

var tree = new TreeSet<BigDecimal>();
tree.add(a);
tree.add(b);

System.out.println(hash.size() + " " + tree.size());


👾 — 2 1
👍 — 1 1
🥰 — 2 2
⚡️ — 1 2

Ответ: 👾 — 2 1.

HashSet опирается на equals и hashCode. Для BigDecimal equals учитывает и числовое значение, и scale: у 1.0 и 1.00 он различается. TreeSet без собственного компаратора использует compareTo, которое считает эти значения равными. Поэтому размеры — 2 и 1.

Правило в документации Java

🐸 Библиотека задач по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👾4👍1
Приглашаем на Java Jam — бесплатный митап ЮMoney для бэкенд-разработчиков 🔥

✅ 29 октября, четверг, 19:00 МСК — приходите на митап в Санкт-Петербурге или смотрите трансляцию. 

Спикеры из ЮMoney и Сбера выступят с докладами:

🟣 Один апгрейд — больше сотни сервисов: как мы обновляем Java-стек в компании
Обсудим, как обновить Gradle, Spring Boot и Java в 120+ компонентах, не останавливая разработку. Расскажем, как выстраивали процессы на протяжении этого времени: от порядка действий и массовых патчей до взаимодействия с командами и решения трудностей, с которыми столкнулись во время последнего обновления.

🟣 Как я автоматизировал свой проект — и всё сломал
Разберём, как выстроить автоматизацию в проекте с помощью ИИ и какие шишки можно набить на пути. Поговорим, как работает длинный контекст в моделях и как организовать работу с учётом этих особенностей.

🟣 Откатить нельзя оставить: мониторинг выкладки релиза на основе Sentry
Ошибки случаются. Узнаем, какие из них появляются или возникают чаще после последнего релиза — и достаточно ли этого, чтобы принять решение об откате.

Зарегистрируйтесь, чтобы принять участие. Все подробности — на сайте митапа Java Jam👈
Please open Telegram to view this post
VIEW IN TELEGRAM
❓ Сколько элементов создаст Arrays.asList из массива чисел?

Java 21. Что выведет код?

import java.util.Arrays;

class Demo {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};

var list = Arrays.asList(numbers);

System.out.println(list.size());
}
}


👾 — 3
👍 — 1
🥰 — 0
⚡️ — Ошибка компиляции

Ответ: 👍 — 1.

Метод получает один объект — массив int[]. Его элементы не превращаются автоматически в отдельные объекты Integer. Поэтому список содержит один массив. Для Integer[] результат был бы другим: список содержал бы три числа.

Документация: Arrays.asList

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1🔥1👾1
❓ Что удалит remove: индекс или число?

Java 21. Что выведет код?

import java.util.ArrayList;
import java.util.List;

class Demo {
public static void main(String[] args) {
var values = new ArrayList<>(
List.of(1, 2, 1)
);

values.remove(1);
values.remove(Integer.valueOf(1));

System.out.println(values);
}
}


👾 — [2]
👍 — [1, 2]
🥰 — [1]
⚡️ — []

Ответ: 🥰 — [1].

Вызов remove(1) выбирает перегрузку с индексом и удаляет второй элемент — число 2. Остаётся [1, 1]. Вызов с Integer удаляет первое совпавшее значение 1, поэтому в списке остаётся одна единица.

Документация: перегрузки ArrayList.remove

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰11❤1⚡1
❓ Вызовется ли запасная функция у непустого Optional?

Java 21. Что выведет код?

import java.util.Optional;

class Demo {
static String fallback() {
System.out.println("fallback");
return "B";
}

public static void main(String[] args) {
var value = Optional.of("A");

System.out.println(
value.orElse(fallback())
);
System.out.println(
value.orElseGet(Demo::fallback)
);
}
}


👾 — A, затем A
👍 — fallback, затем B, затем A
🥰 — fallback, A, fallback, A
⚡️ — fallback, затем A, затем A

Ответ: ⚡️ — fallback, затем A, затем A.

Аргумент для orElse вычисляется до вызова метода. Поэтому fallback() выполняется, хотя запасное значение не понадобится. В orElseGet передаётся функция: она вызывается только для пустого Optional. Здесь второй вызов сразу возвращает A.

Документация: orElse и orElseGet

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡6
❓ Изменится ли неизменяемый список вслед за исходным?

Java 21. Что выведет код?

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Demo {
public static void main(String[] args) {
var source = new ArrayList<>(List.of(1));

var view = Collections.unmodifiableList(source);
var copy = List.copyOf(source);

source.add(2);

System.out.println(view);
System.out.println(copy);
}
}


👾 — [1, 2], затем [1]
👍 — [1], затем [1]
🥰 — [1, 2], затем [1, 2]
⚡️ — Исключение на source.add(2)

Ответ: 👾 — [1, 2], затем [1].

unmodifiableList запрещает менять список через представление, но продолжает показывать содержимое исходного списка. List.copyOf создаёт неизменяемый список, который не отражает последующие изменения исходного. Поэтому двойка появляется только в view.

Документация: unmodifiableList • Документация: List.copyOf

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👾5❤2
❓ Равны ли два массива с одинаковыми вложенными массивами?

Java 21. Что выведет код?

import java.util.Arrays;

class Demo {
public static void main(String[] args) {
int[][] first = {{1, 2}};
int[][] second = {{1, 2}};

System.out.println(
Arrays.equals(first, second)
);
System.out.println(
Arrays.deepEquals(first, second)
);
}
}


👾 — true, затем true
👍 — false, затем true
🥰 — false, затем false
⚡️ — true, затем false

Ответ: 👍 — false, затем true.

Обычный Arrays.equals сравнивает элементы внешних массивов. Эти элементы — разные объекты int[], которые не переопределяют equals для сравнения содержимого. deepEquals спускается во вложенные массивы и сравнивает числа.

Документация: Arrays.equals и Arrays.deepEquals

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9👾1
❓ Какова длина строки с одним эмодзи?

Java 21. В строке один эмодзи 😀. Что выведет код?

class Demo {
public static void main(String[] args) {
String text = "\uD83D\uDE00";

System.out.println(
text.length() + " " +
text.codePointCount(0, text.length())
);
}
}


👾 — 1 1
👍 — 2 2
🥰 — 2 1
⚡️ — 4 1

Ответ: 🥰 — 2 1.

Метод length() считает кодовые единицы UTF-16. Для этого эмодзи нужны две такие единицы — суррогатная пара. Метод codePointCount считает кодовые точки, поэтому возвращает 1. У составных эмодзи кодовых точек может быть несколько.

Документация: длина строки и кодовые точки

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰2