Библиотека джависта | 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
加入频道
👽 Синдром самозванца: 5 способов преодоления чувства «незаслуженного успеха»

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

https://proglib.io/sh/xs50XmbiUE
#вопросы_с_собеседований
Перечислите принципы, которым вы следуете в многопоточном программировании?

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

☕️ Всегда давайте значимые имена своим потокам. Процесс отладки, нахождения ошибок или отслеживание исключения в многопоточном коде – довольно сложная задача. OrderProcessor, QuoteProcessor или TradeProcessor намного информативнее, чем Thread1, Thread2 и Thread3. Имя должно отражать задачу, выполняемую данным потоком.
☕️ Избегайте блокировок или старайтесь уменьшить масштабы синхронизации. Блокировка затратна, а переключение контекста ещё более ресурсоёмко. Пытайтесь избегать синхронизации и блокировки насколько это возможно, и организуйте критическую секцию в минимально необходимом объёме. Поэтому синхронизированный блок всегда предпочительней синхронизированного метода, дополнительно наделяя возможностью абсолютного контроля над масштабом блокировки.
☕️ Обрабатывайте прерывание потока с особой тщательностью. Нет ничего хуже оставшегося заблокированным ресурса или системы в неконстистентном, по причине неподтверждённой транзакции, состоянии.
☕️ Помните об обработке исключений. Выброшенные InterruptedException должны быть адекватно обработаны, а не просто подавлены. Так же не стоит пренебрегать Thread.UncaughtExceptionHandler. При использовании пула потоков необходимо помнить, что он зачастую просто «проглатывает» исключения. Так, если вы отправили на выполнение Runnable нужно обязательно поместить код выполнения задачи внутрь блока try-catch. Если в очередь пула помещается Callable, необходимо удостоверится, что результат выполнения всегда изымается с помощью блокирующего get(), чтобы в случае возникновения существовала возможность заново выбросить произошедшее исключение.
☕️ Почти всегда использование Concurrent сollection выгоднее использования Synchronized сollection, т.к. первые более современны (используют все доступные на момент их написания новшества языка) и масштабируемы, чем их синхронизированные аналоги.
#вопросы_с_собеседований
В WeakHashMap используются WeakReferences. А почему бы не создать PhantomHashMap на PhantomReferences?

PhantomReference при вызове метода get() возвращает всегда null, поэтому тяжело представить назначение такой структуры данных.
#вопросы_с_собеседований
Как из одного сервлета вызвать другой сервлет?

Для вызова сервлета из того же приложения необходимо использовать механизм внутренней коммуникации сервлетов (inter-servlet communication mechanisms) через вызовы методов RequestDispatcher:

☕️ forward() - передаёт выполнение запроса в другой сервлет;
☕️ include() - предоставляет возможность включить результат работы другого сервлета в возвращаемый ответ.

Если необходимо вызывать сервлет принадлежащий другому приложению, то использовать RequestDispatcher уже не получится, т.к. он определен только для текущего приложения. Для подобных целей необходимо использовать метод ServletResponse - sendRedirect() которому предоставляется полный URL другого сервлета. Для передачи данных между сервлетами можно использовать cookies.
Всё, что вы хотели узнать о релокации, и не побоялись спросить😎

Можно ли получить работу за рубежом без знания английского или со слабым уровнем?
Какой стек востребован за рубежом?
Какие перспективы трудоустройства у джунов?
В каких странах легче всего получить ВНЖ?
Как жить с рублями за границей?

Собрали топчик вопросов о релокации айтишников и жизни за границей. Совместно с каналом RelocationDEV узнали лайфхаки от тех, кто уже переехал, дополнили информацией от экспертов и написали целую статью.

Гоу читать!🚀
#вопросы_с_собеседований
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 - вычисление хэш-кода ключа; определение номера корзины; поиск значения; возврат значения.