Java Guru 🤓
13.2K subscribers
890 photos
17 videos
759 links
Канал с вопросами и задачами с собеседований!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrSQZ

Мы на бирже: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Как отсортировать Set/Map?

Для Map можно привести ключи/значения к виду Collection, переложить в новый List и отсортировать с помощью Collections.sort. То же делается с Set. Этот метод конечно же неэффективный, так как потребует полного копирования содержимого.

Эффективный способ – хранить данные уже отсортированными. Для таких реализаций созданы интерфейсы-наследники SortedSet и SortedMap.

Реализации SortedSet дают линейный порядок множества. Элементы упорядочены по возрастанию. Порядок либо натуральный (элементы реализуют интерфейс Comparable), либо его определяет переданный в конструктор Comparator.
Этот интерфейс добавляет методы получения подмножества от указанного элемента (tailSet), до элемента (headSet), и между двумя (subSet). Подмножество включает нижнюю границу, не включает верхнюю.

SortedSet расширяется интерфейсом NavigableSet для итерации по порядку, получения ближайшего снизу (floor), сверху (ceiling), большего (higher) и меньшего (lower) заданному элемента.

Все те же правила применяются к элементам SortedMap/NavigableMap относительно их ключей.

Основными реализациями являются TreeSet и TreeMap. Внутри это самобалансирующиеся красно-чёрные деревья. Их структура и способ балансировки – вопрос достойный отдельного поста. Другая любопытная реализация из java.util.concurrent – ConcurrentSkipListMap.


Java Guru🤓 #java
🔥9👍61
В чём основная проблема в следующем коде?
👍4🔥2
В чём основная проблема в следующем коде?
Anonymous Quiz
10%
15%
B User отсутствует дефолтный конструктор
33%
Отсутствие cascade = CascadeType.ALL в аннотации @ManyToOne
👍61🔥1
Какими коллекциями пользоваться в многопоточной среде?

Первый вариант – превратить в синхронизированную обычную коллекцию, вызвав соответствующий ее типу метод Collections.synchronized*(). Самый общий и самый примитивный способ, создает обертку с синхронизацией всех операций с помощью synchronized.

Если работа с коллекцией состоит в основном из чтения, лучшая в плане производительности альтернатива – CopyOnWriteArrayList, и содержащий его в реализации CopyOnWriteArraySet. Потокобезопасность достигается копированием внутреннего массива при любой модификации, оригинальный массив остается immutable. Program order достигается модификатором volatile на внутреннем массиве.

Третий вариант – использование Concurrent-коллекций:
🔘 Неблокирующие хэш-таблицы ConcurrentSkipListMap, ConcurrentHashMap и ConcurrentSkipListSet (хэш-таблица в основе реализации)
🔘 Неблокирующие очереди ConcurrentLinkedQueue и ConcurrentLinkedDeque
🔘 Большой набор различных блокирующих очередей

Java Guru🤓 #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥83👍2
Какова временная сложность добавления элемента в TreeMap?
Anonymous Quiz
12%
O(1)
63%
O(log n)
9%
O(n)
14%
O(n log n)
2%
O(n2)
👍7🔥3😁1
Что будет результатом кода?
🔥3👍2
🔥7👍6🤔6
Что будет результатом кода?
👍3🔥2
Что будет результатом кода?
Anonymous Quiz
31%
Ошибка компиляции
9%
null
1%
0
58%
5
1%
10
👍5🔥2
👩‍💻 Открытый урок «Создание потоковых приложений с использованием Kafka Streams».

На вебинаре разберем как с помощью Kafka Streams создавать потоковые приложения, что важно для работы с большими данными и потоками в реальном времени.

🗓 10 сентября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional».

🎯 О чём поговорим:

✔️ Обсудим, что такое потоковые приложения и как их можно интегрировать с Kafka.
✔️ Изучим работу с библиотекой Kafka Streams и освоим основы DSL.
✔️ Разберемся в работе с состоянием потоков и его применении на практике.

👥 Кому будет интересно:
Этот вебинар будет полезен Java-разработчикам и архитекторам, которые хотят внедрять потоковые вычисления и анализ в свои приложения. Вы получите все необходимые знания, чтобы начать использовать Kafka Streams для создания высокоэффективных потоковых решений.

🎁 Дарим промокод, который дает скидку на обучение - JAVA_09

🔗 Ссылка на регистрацию: https://vk.cc/cPbBBM

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🔥2
Что делает данный конфигурационный класс?
👍4🔥3
Как создать HashMap сразу с элементами?

Проблема с созданием Map в том, что в отличие от других коллекций инициализация должна принять параметрами набор пар неопределенного размера. Поэтому varargs здесь не подходит.

Самый примитивный, многословный, но простой способ – добавить элементы сразу после создания. Для мапы-поля класса это можно сделать в конструкторе или блоке инициализации.

Map<String, String> map = new HashMap<>();
{
map.put("one", "first");
map.put("two", "second");
}

Идиома double brace initialization. Компактная запись, которая расшифровывается компилятором как создание анонимного класса-наследника от HashMap, с добавлением элементов в блоке статической инициализации. Создание нового класса приводит к дополнительным накладным расходам, так делать не рекомендуется.

new HashMap<String, String>() {{
put("one", "first");
put("two", "second");
}};

Для специальных случаев, пустой и одноэлементной неизменяемых мап, в классе Collections есть соответствующие фабричные методы emptyMap() и singletonMap(key, value).

Удобно создавать HashMap из стрима. Коллектор Collectors.toMap(keyMapper, valueMapper) с помощью мапперов превратит объекты потока в ключи и значения.

В Java 9 наконец появились фабричные метод Map.of(), перегруженный для разного количества пар параметров, и Map.ofEntries() с varargs-аргументом.

До Java 9 подобное было реализовано во многих популярных библиотеках, например ImmutableMap.of в Guava и MapUtils.putAll() в Apache Commons.


Java Guru🤓 #java
👍5🔥41
Как лучше защититься от SQL инъекции?
👍4🔥3
Ревью. В чём проблема этого фрагмента кода?
👍5🔥32
Ревью. В чём проблема этого фрагмента кода?
Anonymous Quiz
62%
Конкатенация в sql-запросе
12%
Отсутствие аннотации @Autowired
11%
execute() вместо save()
6%
к private jdbcTemplate нет доступа
👍82🔥2
Что будет результатом кода?
👍4🔥31