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

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

Обратная связь: @proglibrary_feedback_bot

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

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
Хочешь принять участие в новом крутом образовательном проекте? Тогда у нас для тебя отличные новости!
Мы открываем вакансию «Спикер (преподаватель) образовательного IT-курса по Java»!

Кого мы ищем? Java-разработчиков с опытом публичных выступлений.

Обязанности:
– Запись видеокурсов по подготовленным нашими авторам материалам
– Проверка домашних заданий студентов

Требования. Нам важно, чтобы спикер обладал грамотной речью и хорошей дикцией, имел навыки программирования на Java не ниже уровня Middle.
Условия работы. Мы рассчитываем на долгосрочное сотрудничество. Загрузка от 5 часов в неделю, оплата — от 2000 рублей за час съемки. Работа в нашей студии в Москве.

В отклике на вакансию укажите образование, опыт выступлений и разработки.
Контакты для связи:
Telegram: @vlad_proglib
Напоминаем, что у нас есть чат, привязанный к каналу, где можно обсудить вопросы с канала и предложить свои: https://yangx.top/javaproglibchat
#вопросы_с_собеседований
В каком случае может быть потерян элемент в HashMap?
Допустим, в качестве ключа используется не примитив, а объект с несколькими полями. После добавления элемента в HashMap у объекта, который выступает в качестве ключа, изменяют одно поле, которое участвует в вычислении хэш-кода. В результате при попытке найти данный элемент по исходному ключу, будет происходить обращение к правильной корзине, а вот equals уже не найдет указанный ключ в списке элементов. Тем не менее, даже если equals реализован таким образом, что изменение данного поля объекта не влияет на результат, то после увеличения размера корзин и пересчета хэш-кодов элементов, указанный элемент, с измененным значением поля, с большой долей вероятности попадет в совершенно другую корзину и тогда уже потеряется совсем.
TreeSet обеспечивает упорядоченное хранение элементов в виде красно-черного дерева. Сложность выполнения основных операций не хуже O(log(N)) (Логарифмическое время).

HashSet использует для хранения элементов такой же подход, что и HashMap, за тем отличием, что в HashSet в качестве ключа и значения выступает сам элемент, кроме того HashSet не поддерживает упорядоченное хранение элементов и обеспечивает временную сложность выполнения операций аналогично HashMap.
С нас полезные лекции и трудоустройство, с тебя – минимум год опыта коммерческой разработки на Java.

Как все проходит?
3 раза в неделю на протяжении двух месяцев тебя будут обучать Senior’ы и Teamlead’ы ведущих банков страны. Обучение можно совмещать с работой.

Чему будут учить?
На курсе будем изучать Core Java, промышленную разработку на Java, базы данных, Spring, Kafka, Kubernetes и Istio. Помимо этого еще будут практические занятия и домашние задания.

Что будет после учебы?
Трудоустройство в Цифровые привычки. Ты будешь работать над высоконагруженными,отказоустойчивыми проектами.

Подать заявку на курс: https://cutt.ly/TQpPTYA
#вопросы_с_собеседований
Для чего в стримах предназначены методы flatMap(), flatMapToInt(), flatMapToDouble(), flatMapToLong()?
#вакансия #Java #Luxoft
Вакансия: Senior Java Developer
Формат работы:
remote Russia
З/п: 230 000 – 300 000 руб.

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

Обязанности:
• разработка новой функциональности
• развитие существующей функциональности
• код ревью
• анализ и улучшение производительности системы
• взаимодействие с командой

Требования:
• Git, Java, Spring (Framework, Boot, Security), SQL, JDBC, Hibernate, Apache Kafka, Swagger/OpenAPI
• Будет плюсом опыт с MyBatis, Groovy, Gradle, Spock, Spring Integration, oAuth2, Docker
• Еще большим плюсом будут навыки лидерства команды девелоперов

Условия:
• Официальное трудоустройство
• Расширенный социальный пакет
• Профессиональное обучение
• Корпоративные скидки
• Гибкий график работы
• Возможность удаленной работы
• Участие в конференциях, митапах и подкастах
• Корпоративные мероприятия

Подробности и контакты:
в телеграме @elenabalyuk и на сайте
Библиотека джависта | Java, Spring, Maven, Hibernate pinned «​#вакансия #Java #Luxoft Вакансия: Senior Java Developer Формат работы: remote Russia З/п: 230 000 – 300 000 руб. Работа в международной IT-компании Luxoft в проекте по разработке модуля процессинга лояльности и бэкэнд части портала для крупного банка.…»
Метод flatMap() похож на map, но может создавать из одного элемента несколько. Таким образом, каждый объект будет преобразован в ноль, один или несколько других объектов, поддерживаемых потоком. Наиболее очевидный способ применения этой операции — преобразование элементов контейнера при помощи функций, которые возвращают контейнеры.
flatMapToInt(), flatMapToDouble(), flatMapToLong() - это аналоги flatMap(), возвращающие соответствующий числовой стрим.
#вопросы_с_собеседований
Как работают методы wait() и notify()/notifyAll()?
Эти методы определены у класса Object и предназначены для взаимодействия потоков между собой при межпоточной синхронизации.

☕️ wait(): освобождает монитор и переводит вызывающий поток в состояние ожидания до тех пор, пока другой поток не вызовет метод notify()/notifyAll();
☕️ notify(): продолжает работу потока, у которого ранее был вызван метод wait();
☕️ notifyAll(): возобновляет работу всех потоков, у которых ранее был вызван метод wait().

Когда вызван метод wait(), поток освобождает блокировку на объекте и переходит из состояния Работающий (Running) в состояние Ожидания (Waiting). Метод notify() подаёт сигнал одному из потоков, ожидающих на объекте, чтобы перейти в состояние Работоспособный (Runnable). При этом невозможно определить, какой из ожидающих потоков должен стать работоспособным. Метод notifyAll() заставляет все ожидающие потоки для объекта вернуться в состояние Работоспособный (Runnable). Если ни один поток не находится в ожидании на методе wait(), то при вызове notify() или notifyAll() ничего не происходит.

Поток может вызвать методы wait() или notify() для определённого объекта, только если он в данный момент имеет блокировку на этот объект. wait(), notify() и notifyAll() должны вызываться только из синхронизированного кода.
#вопросы_с_собеседований
Почему методы wait() и notify() вызываются только в синхронизированном блоке?
Монитор надо захватывать в явном виде (через synchronized-блок), потому что методы wait() и notify() не синхронизированы.
#вопросы_с_собеседований
В чем заключаются различия между CyclicBarrier и CountDownLatch?
CountDownLatch (замок с обратным отсчетом) предоставляет возможность любому количеству потоков в блоке кода ожидать до тех пор, пока не завершится определенное количество операций, выполняющихся в других потоках, перед тем как они будут «отпущены», чтобы продолжить свою деятельность. В конструктор CountDownLatch(int count) обязательно передается количество операций, которое должно быть выполнено, чтобы замок «отпустил» заблокированные потоки.

Примером CountDownLatch из жизни может служить сбор экскурсионной группы: пока не наберется определенное количество человек, экскурсия не начнется.

CyclicBarrier реализует шаблон синхронизации «Барьер». Циклический барьер является точкой синхронизации, в которой указанное количество параллельных потоков встречается и блокируется. Как только все потоки прибыли, выполняется опционное действие (или не выполняется, если барьер был инициализирован без него), и, после того, как оно выполнено, барьер ломается и ожидающие потоки «освобождаются». В конструкторы барьера CyclicBarrier(int parties) и CyclicBarrier(int parties, Runnable barrierAction) обязательно передается количество сторон, которые должны «встретиться», и, опционально, действие, которое должно произойти, когда стороны встретились, но перед тем когда они будут «отпущены».

CyclicBarrier является альтернативой метода join(), который «собирает» потоки только после того, как они выполнились.

CyclicBarrier похож на CountDownLatch, но главное различие между ними в том, что использовать «замок» можно лишь единожды - после того, как его счётчик достигнет нуля, а «барьер» можно использовать неоднократно, даже после того, как он «сломается».
☕️ Сначала попробуй: обзор условно-бесплатных курсов по Java

Образовательные онлайн-платформы предлагают множество коммерческих курсов по Java. Если вы не хотите покупать кота в мешке, стоит бесплатно их протестировать. Рассказываем, как это можно сделать.

https://proglib.io/sh/kYLEsA3nie
Хочешь освоить востребованную профессию Java-разработчика и работать в топовых IT-компаниях Москвы? Расходы во время обучение берет на себя Java Mentor, а оплата только после твоего трудоустройства программистом ☕️⚡️

🙋‍♂️👉 Подать заявку: https://clck.ru/WZ3KV

• Ты освоишь востребованные технологии, а опытные наставники будут контролировать усвоение материала.
• Ты получишь опыт в бизнес-проекте необходимый для трудоустройства.
• A HR-специалисты помогут составить резюме и подготовят тебя к прохождению трудных собеседований.
• Поддержка от мощного сообщество единомышленников.

Каждый выпускник получает от трех предложений о работе. Поэтому работодателя выберешь самостоятельно после успешных собеседований.
#вопросы_с_собеседований
Чем отличаются два интерфейса Runnable и Callable?