Библиотека джависта | Java, Spring, Maven, Hibernate
24.8K subscribers
1.87K photos
38 videos
42 files
2.66K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
#вопросы_с_собеседований
LinkedHashMap - что в нем от LinkedList, а что от HashMap?

Реализация LinkedHashMap отличается от HashMap поддержкой двухсвязанного списка, определяющего порядок итерации по элементам структуры данных. По умолчанию элементы списка упорядочены согласно их порядку добавления в LinkedHashMap (insertion-order). Однако порядок итерации можно изменить, установив параметр конструктора accessOrder в значение true. В этом случае доступ осуществляется по порядку последнего обращения к элементу (access-order). Это означает, что при вызове методов get() или put() элемент, к которому обращаемся, перемещается в конец списка.

При добавлении элемента, который уже присутствует в LinkedHashMap (т.е. с одинаковым ключом), порядок итерации по элементам не изменяется.
#вопросы_с_собеседований
Как устроен HashMap?

HashMap состоит из «корзин» (bucket). С технической точки зрения «корзины» — это элементы массива, которые хранят ссылки на списки элементов. При добавлении новой пары «ключ-значение», вычисляет хэш-код ключа, на основании которого вычисляется номер корзины (номер ячейки массива), в которую попадет новый элемент. Если корзина пустая, то в нее сохраняется ссылка на вновь добавляемый элемент, если же там уже есть элемент, то происходит последовательный переход по ссылкам между элементами в цепочке, в поисках последнего элемента, от которого и ставится ссылка на вновь добавленный элемент. Если в списке был найден элемент с таким же ключом, то он заменяется.
👨🏻‍🎓📅 Работа на лето: куда устроиться студенту. Стажировки и не только

Лето – пора не только отдохнуть, но и немного подзаработать. Рассказываем о самых интересных вариантах для студентов.

https://proglib.io/sh/tUySmaKHWz
Пройди тест на знание алгоритмов и структур данных

Давай проверим, насколько хорошо ты разбираешься в алгоритмах, и не пора ли подтянуть знания. Всего 10 несложных вопросов 😉

https://proglib.io/w/788fb64b
Зачем разработчику знать алгоритмы и структуры данных?

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

https://proglib.io/sh/OviLp0g4qz
⁉️👀 Делаете первые шаги в программировании? Собираетесь стать успешным разработчиком?
Тогда не пропустите бесплатный вебинар от Proglib Academy!

🚀 "Основы алгоритмов для разработчиков" 15 июня в 19:00

На вебинаре вы узнаете:
Что такое алгоритмы, их свойства и различия;
Почему алгоритмы важны для любого разработчика;
Как сравнивают алгоритмы;
Как легко решать алгоритмы.

А также рассмотрите задачи с линейными алгоритмами, а мы покажем примеры решения.

Спикер: Мария Горденко, инженер-программист, старший преподаватель ФКН НИУ ВШЭ, НИТУ МИСИС, аспирант департамента анализа данных и искусственного интеллекта ФКН НИУ ВШЭ.

👉 Записаться на вебинар: https://proglib.io/w/e6e548bb
#вопросы_с_собеседований
Какое начальное количество корзин в HashMap?

В конструкторе по умолчанию - 16, используя конструкторы с параметрами можно задавать произвольное начальное количество корзин.
#вопросы_с_собеседований
Возможна ли ситуация, когда HashMap выродится в список даже с ключами имеющими разные hashCode()?

Это возможно в случае, если метод, определяющий номер корзины будет возвращать одинаковые значения.
В этом выпуске #JEPCafe José Paumard, которого мы что-то давно не видели, рассказывает про:
- что такое preview features (как их использовать)
- что такое Virtual Threads (для чего они нужны)
- многое другое про многопоточность
🌳 Деревья и графы: что это такое и почему их обязательно нужно знать каждому программисту

В этой части материала мы рассмотрим деревья и графы, а также теорию, которая стоит за ними. Выполним реализацию на языке Python и покажем, как можно использовать эти понятия на примере челленджей Leetcode.

https://proglib.io/sh/g5JNoak9mY
🔥 Как Java-разработчику решить задачу на собеседовании в FinTech компанию?

Разберем 21 июня на Live coding сессии, где в прямом эфире решим задачу, которую дают в международных FinTech компаниях.

В прямом эфире Роман Оборин, Senior Java Developer в BNP Paribas и преподаватель курса Middle Java Dev, проведет Live coding сессию по написанию объектно-ориентированного кода на Java, покрытого разными типами тестов: Unit, Integration, Stress.

На Live сoding ты сможешь понаблюдать, как пишет код Senior-разработчик, прокомментировать процесс и решить реальную задачу, которую дают на собеседованиях. Ну и конечно, прокачаешь свои hard skills:

— Структурируешь знания по принципам SOLID
— Прокачаешь знания по разным видам тестирования, в том числе многопоточных программ
— Подготовишься к техническому интервью с этапом Live coding

🚀 Стартуем 21 июня в 19:00 по мск

Регистрируйся бесплатно: https://cutt.ly/eJ8Sdvb
#вопросы_с_собеседований
Какова роль equals() и hashCode() в HashMap?

hashCode позволяет определить корзину для поиска элемента, а equals используется для сравнения ключей элементов в списке корзины и искомого ключа.
#вопросы_с_собеседований
Какое худшее время работы метода get(key) для ключа, который есть в HashMap?

O(N). Худший случай - это поиск ключа в HashMap, вырожденного в список по причине совпадения ключей по hashCode() и для выяснения хранится ли элемент с определённым ключом может потребоваться перебор всего списка.
#вопросы_с_собеседований
Сколько переходов происходит в момент вызова HashMap.get(key) по ключу, который есть в таблице?

• ключ равен null: 1 - выполняется единственный метод getForNullKey().
• любой ключ отличный от null: 4 - вычисление хэш-кода ключа; определение номера корзины; поиск значения; возврат значения.
📐 10 алгоритмов для работы с графами, которые должен знать каждый кодер

Знакомимся с десятью маст-хэв для каждого кодера алгоритмами, которые будут полезными для работы с графами (исходный код прилагается).

https://proglib.io/sh/LpZb98VWRM
Конференция JPoint 2022 на день вернется в офлайн 24 июня.

Для всех, кто соскучился по живому общению с единомышленниками, команда JPoint сделала отдельный офлайн-день.

В теплом ламповом офлайне вас ждут:
Доклады о фреймворках, тестировании на Java, архитектуре, многопоточности и не только.
Дискуссии с участием спикеров после каждого доклада (вживую, а не в Zoom!).
Круглые столы о JVM, Data Engineering в Java и собеседованиях разработчиков.
Партнерские стенды с мини-докладами и возможностью получить мерч.
Живое общение с единомышленниками.

📍Санкт-Петербург, Park Inn by Radisson Pulkovskaya, 24 июня

Вместе с билетом на офлайн-день вы получите доступ к записям более чем 30 докладов и других активностей с онлайн-части конференции. 

Подробности, полную программу и билеты вы можете найти по ссылке.

Если покупаете билет за свой счет (а не за счет компании), то воспользуйтесь промокодом для получения скидки: javaproglib2022JRGpc
#вопросы_с_собеседований
Что такое busy spin?

busy spin – это техника, которую программисты используют, чтобы заставить поток ожидать при определённом условии. В отличие от традиционных методов wait(), sleep() или yield(), которые подразумевают уступку процессорного времени, этот метод вместо уступки выполняет пустой цикл. Это необходимо для того, чтобы сохранить кэш процессора, т.к. в многоядерных системах существует вероятность, что приостановленный поток продолжит своё выполнение уже на другом ядре, а это повлечет за собой перестройку состояния процессорного кэша, которая является достаточно затратной процедурой.
#вопросы_с_собеседований
Что такое «денормализация»? Для чего она применяется?

Денормализация базы данных
— это процесс осознанного приведения базы данных к виду, в котором она не будет соответствовать правилам нормализации. Обычно это необходимо для повышения производительности и скорости извлечения данных за счет увеличения избыточности данных.
#вопросы_с_собеседований
Как и когда происходит увеличение количества корзин в HashMap?

Помимо capacity у HashMap есть еще поле loadFactor, на основании которого, вычисляется предельное количество занятых корзин capacity * loadFactor. По умолчанию loadFactor = 0.75. По достижению предельного значения, число корзин увеличивается в 2 раза и для всех хранимых элементов вычисляется новое «местоположение» с учетом нового числа корзин.
#вопросы_с_собеседований
Объясните смысл параметров в конструкторе HashMap(int initialCapacity, float loadFactor).

initialCapacity - исходный размер HashMap, количество корзин в хэш-таблице в момент её создания.
loadFactor - коэффициент заполнения HashMap, при превышении которого происходит увеличение количества корзин и автоматическое перехэширование. Равен отношению числа уже хранимых элементов в таблице к её размеру.
#вопросы_с_собеседований
Сколько элементов будет пропущено, если Iterator.next() будет вызван после 10-ти вызовов Iterator.hasNext()?

Нисколько - hasNext() осуществляет только проверку наличия следующего элемента.