Forwarded from Библиотека собеса по Java | вопросы с собеседований
Напишите метод для production-кода 👇
📦 Задание
Реализуйте метод для безопасного получения значения из вложенной Map с default-значением:
public class MapUtils {
public static <T> T getNestedValue(Map<String, Object> map,
String path,
T defaultValue) {
// Ваша реализация
}
}Требования
— Путь задается через точку: "user.address.city"
— Если любой уровень вложенности null или отсутствует → вернуть defaultValue
— Обработать пустой путь → вернуть defaultValue
— Обработать null в параметрах → вернуть defaultValue
Примеры использования
Map<String, Object> data = Map.of(
"user", Map.of(
"name", "John",
"age", 30,
"address", Map.of(
"city", "Moscow"
)
)
);
String city = getNestedValue(data, "user.address.city", "Unknown");
// → "Moscow"
Integer age = getNestedValue(data, "user.age", 0);
// → 30
String country = getNestedValue(data, "user.address.country", "Russia");
// → "Russia" (не найдено)
Ставьте → 🔥, если нравится формат. Если нет → 🤔
#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🤔5❤1👍1
☕ Java && Coffee
Делитесь фотографиями выходных. Я сегодня в горах ⛰️
Отправляйте фото в комментарии👇🏻
🐸 Библиотека джависта
#DevLife
Делитесь фотографиями выходных. Я сегодня в горах ⛰️
Отправляйте фото в комментарии👇🏻
#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3😍3
💻 ВАЖНО: макбук ещё не забрали!
Proglib.academy продолжает розыгрыш MacBook Pro 14» (M3 Pro, 36 Гб, 1 Тб SSD).
Что нужно для участия?
— Берёшь любой курс Академии до 15 ноября.
— Проходишь хотя бы 2 недели обучения (можно за два дня ).
— Пишешь куратору #розыгрыш. Всё — ты в игре!
Что за курсы?
▫️Алгоритмы и структуры данных — если хочешь готовиться к собесам в Яндекс, FAANG и не сидеть на джуне вечно.
▫️Архитектуры и шаблоны проектирования — учат думать как senior, а не просто писать код.
▫️ Python, математика для DS, основы IT и другие темы — можно стартовать с нуля или усилить то, что уже знаешь.
👉 Влетай, не думай!
Proglib.academy продолжает розыгрыш MacBook Pro 14» (M3 Pro, 36 Гб, 1 Тб SSD).
Что нужно для участия?
— Берёшь любой курс Академии до 15 ноября.
— Проходишь хотя бы 2 недели обучения (
— Пишешь куратору #розыгрыш. Всё — ты в игре!
Что за курсы?
▫️Алгоритмы и структуры данных — если хочешь готовиться к собесам в Яндекс, FAANG и не сидеть на джуне вечно.
▫️Архитектуры и шаблоны проектирования — учат думать как senior, а не просто писать код.
▫️ Python, математика для DS, основы IT и другие темы — можно стартовать с нуля или усилить то, что уже знаешь.
👉 Влетай, не думай!
Нужно выделить метод целиком? Или весь блок try-catch? Или параметры метода? Обычно хватаешься за мышку и начинаешь аккуратно тащить курсор, рискуя промазать. А потом выделяешь заново, потому что захватил лишнюю скобку. Но можно лучше.
🔹 Что делает
— Умно расширяет выделение от курсора по синтаксическим границам кода
— Понимает структуру Java: слово → выражение → statement → блок → метод → класс
— Работает в обратную сторону: сужает выделение обратно по тем же границам
— Учитывает контекст: для строк расширяет от слова до всей строки, для вызовов — от аргумента до всего вызова
🔹 Зачем это нужно
— Выделяете нужный фрагмент за 2-3 нажатия вместо возни с мышкой
— Безошибочно выделяете сложные конструкции: цепочки вызовов, лямбды, generic-типы
— Идеально для последующего Extract Method, Copy-Paste, или Delete
— Особенно мощно для вложенных структур: легко выделить внутренний if в try внутри цикла
— Ускоряет рефакторинг: выделил логичный кусок → Extract → готово
🔹 Как использовать
— Поставьте курсор внутри нужного фрагмента (на переменную, в середину выражения, в метод)
— Нажмите Ctrl+W (Windows/Linux) или ⌥+Up (macOS) — выделение расширится на уровень выше
— Нажимайте повторно, чтобы расширять дальше: переменная → выражение → строка → if-блок → метод → класс
— Для сужения обратно: Ctrl+Shift+W (Windows/Linux) или ⌥+Down (macOS)
#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁22👍4🔥4
💻 Хочешь MacBook Pro? Просто начни учиться!
Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!
Всё просто:
— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (можно за два дня);
— напиши куратору в чате курса хэштег #розыгрыш.
📚 Выбирай свой курс:
▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.
👉 Участвовать в розыгрыше
Да-да, вы не ослышались: Proglib.academy дарит макбук за учёбу!
Всё просто:
— купи любой курс Академии до 15 ноября;
— пройди 2 недели обучения (можно за два дня);
— напиши куратору в чате курса хэштег #розыгрыш.
📚 Выбирай свой курс:
▫️ «Математика для DS» — для тех, кто хочет уверенно работать с данными;
▫️ «Основы Python» — чтобы начать писать код с нуля;
▫️ «Алгоритмы и структуры данных» — для будущих инженеров;
▫️ «AI-агенты» или «Машинное обучение» — для тех, кто хочет прокачаться в ИИ.
👉 Участвовать в розыгрыше
❤1👾1
JEP 431 добавил в Java то, чего не хватало с самого начала, а именно единый интерфейс для упорядоченных коллекций. Разберем, что изменилось под капотом.
🔹 Проблема, которую игнорировали
До Java 21 List и Deque имеют порядок обхода, но их общий суперинтерфейс Collection - нет. Set не гарантирует порядок, но LinkedHashSet и SortedSet — гарантируют. Единого API для "дай первый/последний элемент" или "обход в обратном порядке" не существовало.
Результат? Костыли:
// До Java 21
list.get(0) // List
deque.getFirst() // Deque
sortedSet.first() // SortedSet
linkedHashSet.iterator().next() // LinkedHashSet
🔹 Три новых интерфейса
JEP 431 внедрил в иерархию коллекций три интерфейса:
interface SequencedCollection<E> extends Collection<E> {
SequencedCollection<E> reversed();
void addFirst(E);
void addLast(E);
E getFirst();
E getLast();
E removeFirst();
E removeLast();
}
interface SequencedSet<E> extends SequencedCollection<E>, Set<E> {
SequencedSet<E> reversed();
}
interface SequencedMap<K,V> extends Map<K,V> {
SequencedMap<K,V> reversed();
Map.Entry<K,V> firstEntry();
Map.Entry<K,V> lastEntry();
Map.Entry<K,V> pollFirstEntry();
Map.Entry<K,V> pollLastEntry();
// ... и другие методы
}
Все методы (кроме reversed()) - это default методы, промоутнутые из Deque. Это обеспечило обратную совместимость.
▪️ Важнейший нюанс: reversed() возвращает view, а не копию.
Изменения в оригинале видны в reversed view. Под капотом это lightweight wrapper, который инвертирует индексы при обращении.
🔹 Интеграция в иерархию
Collection<E>
└─ SequencedCollection<E>
├─ List<E>
├─ Deque<E>
└─ Set<E>
└─ SequencedSet<E>
└─ SortedSet<E>
└─ NavigableSet<E>
Map<K,V>
└─ SequencedMap<K,V>
└─ SortedMap<K,V>
└─ NavigableMap<K,V>
🔹 SortedSet и SortedMap
SortedSet и SortedMap теперь имплементируют sequenced интерфейсы, но есть нюанс: методы addFirst()/addLast()/putFirst()/putLast() существуют лишь для того, чтобы бросить UnsupportedOperationException.
Liskov Substitution Principle: "Am I a joke to you?"
Но справедливости ради — Java Collections делает так уже давно:
— map.keySet().add() → UnsupportedOperationException
— Arrays.asList().add() → UnsupportedOperationException
— Collections.unmodifiableList().set() → UnsupportedOperationException
Это называется optional operations — когда методы есть, но работать не обязаны. Документация прямо говорит:
Many methods will throw UnsupportedOperationException if the operation cannot be performed.
Альтернативы были хуже: либо создавать зоопарк из ReadOnlySequencedSet, MutableSequencedSet, PartiallyMutableSequencedSet, либо оставить SortedSet за бортом единообразного API.
#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥4❤2
Forwarded from Библиотека задач по Java | тесты, код, задания
Что будет результатом кода?
Anonymous Quiz
6%
true, true, true, true
67%
true, false, true, false
9%
true, true, true, false
10%
false, false, false, false
8%
Посмотреть ответ
👍4🔥3❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁11👍5🔥1🎉1
🛒 Black Friday от Proglib.academy!
Только до 30 ноября — скидка 40% на ВСЕ курсы.
Пора добавить в корзину не носки, а новые скиллы: Python, математика для Data Science, AI, алгоритмы и структуры данных, ML.
🎓 Выбирай курс, который реально двинет тебя в карьере, и учись со скидкой.
👉 Учиться со скидкой
Только до 30 ноября — скидка 40% на ВСЕ курсы.
Пора добавить в корзину не носки, а новые скиллы: Python, математика для Data Science, AI, алгоритмы и структуры данных, ML.
🎓 Выбирай курс, который реально двинет тебя в карьере, и учись со скидкой.
👉 Учиться со скидкой