Библиотека джависта | 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
加入频道
#вопросы_с_собеседований
Как перебрать все пары «ключ-значение» в Map?
GeekBrains проводит набор на курсы руководителей команды разработки

Программа обучения онлайн-университета GeekBrains рассчитана на middle- и senior-разработчиков. В течение 6 месяцев слушатели освоят технологии автоматизации разработки, а также методы управления командами, проектами и высоконагруженными системами. Курс разбит на четверти, каждая из которых посвящена одной из ключевых для будущего руководителя компетенций. Практикующие тимлиды с опытом в крупных проектах будут проводить занятия в формате видеолекций с выполнением заданий и разбором персональных кейсов.

Получить дополнительную информацию и записаться можно на сайте: https://proglib.io/w/59ac8a79
Использовать метод entrySet(), который возвращает множество Set<Map.Entry<K, V> пар «ключ-значение».
#вопросы_с_собеседований
Какие существуют способы перебирать элементы списка?
☕️ Цикл for
for (int i = 0; i < list.size(); i++) {
//list.get(i);
}
☕️
Цикл с итератором
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
//iterator .next();
}
☕️ Цикл while
int i = 0;
while (i < list.size()) {
//list.get(i);
i++;
}
☕️ «for-each»
for (String element : list) {
//element;
}
Forwarded from Kaspersky
Друзья, нас почти 3 500!
Мы рады, что с нами именно вы — те, кто первыми хотят быть в курсе свежих новостей и событий из мира IT!

Мы решили разыграть наш фирменный мерч ЗА ПОДПИСКУ💥
Правила просты:
- подпишитесь на канал;
- нажмите на кнопку «Участвовать!» под этим постом.

Полные правила тут.

Итоги подведем 13 октября — победители будут выбраны ботом случайным образом.
Удачи!
Класс java.io.RandomAccessFile обеспечивает чтение и запись данных в произвольном месте файла. Он не является частью иерархии InputStream или OutputStream. Это полностью отдельный класс, имеющий свои собственные (в большинстве своем native) методы. Объяснением этого может быть то, что RandomAccessFile имеет во многом отличающееся поведение по сравнению с остальными классами ввода/вывода так как позволяет, в пределах файла, перемещаться вперед и назад.

RandomAccessFile имеет такие специфические методы, как:

☕️ getFilePointer() для определения текущего местоположения в файле;
☕️ seek() для перемещения на новую позицию в файле;
☕️ length() для выяснения размера файла;
☕️ setLength() для установки размера файла;
☕️ skipBytes() для того, чтобы попытаться пропустить определённое число байт;
☕️ getChannel() для работы с уникальным файловым каналом, ассоциированным с заданным файлом;
☕️ методы для выполнения обычного и форматированного вывода из файла (read(), readInt(), readLine(), readUTF() и т.п.);
☕️ методы для обычной или форматированной записи в файл с прямым доступом (write(), writeBoolean(), writeByte() и т.п.).

Так же следует отметить, что конструкторы RandomAccessFile требуют второй аргумент, указывающий необходимый режим доступа к файлу - только чтение ("r"), чтение и запись ("rw") или иную их разновидность.
#вопросы_с_собеседований
Почему в некоторых интерфейсах вообще не определяют методов?
Это так называемые маркерные интерфейсы. Они просто указывают что класс относится к определенному типу. Примером может послужить интерфейс Clonable, который указывает на то, что класс поддерживает механизм клонирования.
☕️ Как в Java создавать собственные установочные пакеты JDK

Демонстрируем одну из новых возможностей Java 14 – создание нативных установочных версий JDK.

https://proglib.io/sh/v5MIDuL9Wh
Прояви себя в цифре! Участвуй в региональных Онлайн-Хакатонах Цифрового Прорыва!

Тебя ждет насыщенная серия конкурсов с актуальным кейсами от бизнеса и государства, а призовой фонд каждого хакатона до 3 млн. руб.!

Выбирай удобные даты, понравившийся кейс, собирай команду и покажи, на что ты способен:

16.10 - 18.10 - Центральный Хаб: https://leadersofdigital.ru/event/63007

24.10 - 26.10 - Северо-Кавказский Хаб: https://leadersofdigital.ru/event/63006

31.10 - 02.11 - Уральский Хаб: https://leadersofdigital.ru/event/63009

14.11 - 16.11 - Северо-Западный Хаб: https://leadersofdigital.ru/event/63011

Стань частью цифрового будущего России!
Практический онлайн-курс «Enterprise-технологии в Java-разработке» — это курс, где ты научишься создавать корпоративные приложения и встраивать их в инфраструктуру бизнеса.

За шесть месяцев обучения ты сможешь сделаешь шаг от junior-разработчика к middle+ и в разы повысить свое конкурентное преимущество на рынке труда.

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

Тебя ждут 22 тематических модуля и 170+ онлайн уроков, которые будут вести эксперты из SimbioWay и Сбербанка.

Результатом твоего обучения станет создание эмулятора работы инфраструктуры Netflix. Ты продумаешь архитектуру и разработаешь аналог популярного стримингового сервиса.


Переходи по ссылке https://clc.am/X_5-Tg записывайся на курс, пока действует скидка!
Распространённые способы решения race condition:

☕️ Использование локальной копии — копирование разделяемой переменной в локальную переменную потока. Этот способ работает только тогда, когда переменная одна и копирование производится атомарно (за одну машинную команду), использование volatile.
☕️ Синхронизация - операции над разделяемым ресурсом происходят в синхронизированном блоке (при использовании ключевого слова synchronized).
☕️ Комбинирование методов - вышеперечисленные способы можно комбинировать, копируя «опасные» переменные в синхронизированном блоке. С одной стороны, это снимает ограничение на атомарность, с другой — позволяет избавиться от слишком больших синхронизированных блоков.

Очевидных способов выявления и исправления состояний гонки не существует. Лучший способ избавиться от гонок — правильное проектирование многозадачной системы.
#вопросы_с_собеседований
В equals() требуется проверять, что аргумент equals(Object that) такого же типа, что и сам объект. В чем разница между this.getClass() == that.getClass() и that instanceof MyClass?
Оператор instanceof сравнивает объект и указанный тип. Его можно использовать для проверки является ли данный объект экземпляром некоторого класса, либо экземпляром его дочернего класса, либо экземпляром класса, который реализует указанный интерфейс.

this.getClass() == that.getClass() проверяет два класса на идентичность, поэтому для корректной реализации контракта метода equals() необходимо использовать точное сравнение с помощью метода getClass().
🤔 Ищешь первую работу или стажировку? В этом тебе поможет бот Энди! У него всегда есть инфа об адекватных вакансиях и стажировках, где тебя не будут эксплуатировать за печеньки.

Сейчас Энди проводит онлайн-ярмарку вакансий trANDY career 2.0, которая будет длиться до 18 октября! Эта неделя посвящена IT-индустрии и соответствующим вакансиям 🔥

Тебя ждут встречи с представителями IT-отделов крупных компаний, новые конкурсы, топовые IT-вакансии и многое другое. Так что следи за новостями чтобы не пропустить анонсы и мероприятия! 🤩

И да, все вакансии уже есть в чат-боте! Переходи по ссылке, заходи в диалог с сообществом, жми на кнопку Участвовать в trANDY career и выбирай, куда отправить свое резюме (можно сразу на все!) 😉
👉🏻 https://vk.com/andy_for_you
Через вызов метода finalize() (который наследуется от Java.lang.Object) JVM реализуется функциональность, аналогичная функциональности деструкторов в С++, используемых для очистки памяти перед возвращением управления операционной системе. Данный метод вызывается при уничтожении объекта сборщиком мусора (garbage collector) и, переопределяя finalize(), можно запрограммировать действия, необходимые для корректного удаления экземпляра класса - например, закрытие сетевых соединений, соединений с базой данных, снятие блокировок на файлы и т.д.

После выполнения этого метода объект должен быть повторно собран сборщиком мусора (и это считается серьезной проблемой метода finalize() т.к. он мешает сборщику мусора освобождать память). Вызов этого метода не гарантируется, т.к. приложение может быть завершено до того, как будет запущена сборка мусора.

Объект не обязательно будет доступен для сборки сразу же - метод finalize() может сохранить куда-нибудь ссылку на объект. Подобная ситуация называется «возрождением» объекта и считается антипаттерном. Главная проблема такого трюка - в том, что «возродить» объект можно только один раз.