Java Guru 🤓
13.3K subscribers
923 photos
15 videos
779 links
Канал с вопросами и задачами с собеседований!

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

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

Мы на бирже: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Что делает данный конфигурационный класс?
👍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🔥4
Как лучше защититься от SQL инъекции?
👍4🔥3
Тренировки Яндекса по алгоритмам: от решения задач к карьере в IT

Вас ждет 4 недели практики, чтобы систематизировать знания и научиться решать задачи, которые встречаются на собеседованиях и в реальной работе.

Программа включает восемь ключевых тем: множества, словари, динамическое программирование и не только. Лекции и разборы будет вести Михаил Густокашин — директор Центра студенческих олимпиад ВШЭ и тренер чемпионов мира по программированию.

Топ-300 участников смогут пропустить контест при отборе на стажировку в Яндекс по направлениям бэкенд, фронтенд, мобилка и пройти пробное техническое собеседование. А еще лидеры рейтинга смогут получить персональные карьерные консультации.

Подать заявку можно до 29 сентября.
👍53🔥2
Ревью. В чём проблема этого фрагмента кода?
👍5🔥32
Ревью. В чём проблема этого фрагмента кода?
Anonymous Quiz
62%
Конкатенация в sql-запросе
12%
Отсутствие аннотации @Autowired
11%
execute() вместо save()
6%
к private jdbcTemplate нет доступа
👍82🔥2
Что будет результатом кода?
👍4🔥31
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2
Что будет результатом кода?
👍5🔥4
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Что происходит внутри HashMap.put()?

Мы уже рассматривали хэш-таблицы в целом, теперь рассмотрим в деталях, как новые ключ и значение складываются в HashMap.

1. Вычисляется хэш ключа. Если ключ null, хэш считается равным 0. Чтобы достичь лучшего распределения, результат вызова hashCode() «перемешивается»: его старшие биты XOR-ятся на младшие.

2. Значения внутри хэш-таблицы хранятся в специальных структурах данных – нодах, в массиве. Из хэша высчитывается номер бакета – индекс для значения в этом массиве. Полученный хэш обрезается по текущей длине массива. Длина – всегда степень двойки, так что для скорости используется битовая операция &.

3. В бакете ищется нода. В ячейке массива лежит не просто одна нода, а связка всех нод, которые туда попали. Исполнение проходит по этой связке (цепочке или дереву), и ищет ноду с таким же ключом. Ключ сравнивается с имеющимися сначала на ==, затем на equals.

4. Если нода найдена – её значение просто заменяется новым. Работа метода на этом завершается.

5. Если ноды с таким же ключом в бакете пока нет – добавляемая пара ключ-значение запаковывается в новый объект типа Node, и прикрепляется к структуре существующих нод бакета. Ноды составляют структуру за счет того, что в ноде хранится ссылка на следующий элемент (для дерева – следующие элементы). Кроме самой пары и ссылок, чтобы потом не считать заново, записывается и хэш ключа.
6. В случае, когда структурой была цепочка а не дерево, и длина цепочки превысила 7 элементов – происходит процедура treeification – превращение списка в самобалансирующееся дерево. В случае коллизии это ускоряет доступ к элементам на чтение с O(n) до O(log(n)). У comparable-ключей для балансировки используется их естественный порядок. Другие ключи балансируются по порядку имен их классов и значениям identityHashCode-ов. Для маленьких хэш-таблиц (< 64 бакетов) «одеревенение» заменяется увеличением (см. п.8).

7. Если новая нода попала в пустую ячейку, заняла новый бакет – увеличивается счетчик структурных модификаций. Изменение этого счетчика сообщит всем итераторам контейнера, что при следующем обращении они должны выбросить ConcurrentModificationException.

8. Когда количество занятых бакетов массива превысило пороговое (capacity * load factor), внутренний массив увеличивается вдвое, а для всего содержимого выполняется рехэш – все имеющиеся ноды перераспределяются по бакетам по тем же правилам, но уже с учетом нового размера.
👍9🔥82
Двухфакторная аутентификация (2FA) — стандарт безопасности, без которого нельзя представить современные приложения.

Как реализовать её на практике с помощью Spring Security? Какие есть подходы и сценарии использования? Это то, что нужно знать каждому начинающему backend-разработчику на Java.

На открытом уроке курса «Разработчик на Spring Framework» вы увидите, как работает 2FA в Spring Boot, и разберёте реальные примеры внедрения. Это не просто теория, а практические шаги, которые помогут вам прокачать скиллы и почувствовать уверенность в разработке безопасных сервисов.

Вебинар, который пройдёт 18 сентября в 20:00 МСК. Все участники получат скидку на обучение на курсе «Разработчик на Spring Framework». Регистрация открыта: https://vk.cc/cPl1EW

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
2👍2🔥2
Что будет результатом кода?
👍3🔥2
Что будет результатом кода?
Anonymous Quiz
3%
10
5%
20
5%
30
5%
null
82%
Ошибка компиляции
👍12🔥4🤔2
👩‍💻 Открытый урок «Система сбора информации о деятельности эмитентов облигаций».

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

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

✔️ Рассмотрим реальное приложение для сбора данных об эмитентах облигаций, а не просто демонстрационный пример.
✔️ Разберемся в архитектуре Java-приложений для финансовых данных.
✔️ Узнаем, как интегрировать данные о рынке в эффективные приложения.

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

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

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

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1