Библиотека джависта | 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
加入频道
ReadWriteLock – это интерфейс расширяющий базовый интерфейс Lock. Используется для улучшения производительности в многопоточном процессе и оперирует парой связанных блокировок (одна - для операций чтения, другая - для записи). Блокировка чтения может удерживаться одновременно несколькими читающими потоками, до тех пор пока не появится записывающий. Блокировка записи является эксклюзивной.

Существует реализующий интерфейс ReadWriteLock класс ReentrantReadWriteLock, который поддерживает до 65535 блокировок записи и до стольки же блокировок чтения.

ReadWriteLock rwLock = new ReentrantReadWriteLock();
Lock rLock = rwLock.readLock();
Lock wLock = rwLock.writeLock();

wLock.lock();
try {
// exclusive write
} finally {
wLock.unlock();
}

rLock.lock();
try {
// shared reading
} finally {
rLock.unlock();
}
OutOfMemoryError выбрасывается, когда виртуальная машина Java не может создать (разместить) объект из-за нехватки памяти, а сборщик мусора не может высвободить достаточное её количество.

Область памяти, занимаемая java процессом, состоит из нескольких частей. Тип OutOfMemoryError зависит от того, в какой из них не хватило места:

☕️ java.lang.OutOfMemoryError: Java heap space: Не хватает места в куче, а именно, в области памяти в которую помещаются объекты, создаваемые в приложении программно. Обычно проблема кроется в утечке памяти. Размер задается параметрами -Xms и -Xmx.
☕️ java.lang.OutOfMemoryError: PermGen space: (до версии Java 8) Данная ошибка возникает при нехватке места в Permanent области, размер которой задается параметрами -XX:PermSize и -XX:MaxPermSize.
☕️ java.lang.OutOfMemoryError: GC overhead limit exceeded: Данная ошибка может возникнуть как при переполнении первой, так и второй областей. Связана она с тем, что памяти осталось мало и сборщик мусора постоянно работает, пытаясь высвободить немного места. Данную ошибку можно отключить с помощью параметра -XX:-UseGCOverheadLimit.
☕️ java.lang.OutOfMemoryError: unable to create new native thread: Выбрасывается, когда нет возможности создавать новые потоки.
#вопросы_с_собеседований
Согласно Кнуту и Кормену существует две основных реализации хэш-таблицы: на основе открытой адресации и на основе метода цепочек. Как реализована HashMap? Почему, по вашему мнению, была выбрана именно эта реализация? В чем плюсы и минусы каждого подхода?
Привет, меня зовут Артём, я являюсь CEO IT-издания Библиотека программиста, и сейчас ищу редактора. Нам нужен грамотный специалист, не понаслышке знакомый с информационными технологиями.

Предстоит:
— писать, редактировать и оформлять новые публикации на сайте Библиотеки программиста (статьи и тесты-викторины)
— редактировать старые публикации по замечаниям читателей
— взаимодействовать с авторами, разработчиками и другими членами команды
— предлагать темы, формировать контент-план и ТЗ для публикаций
писать и редактировать тексты под рекламные кампании
— реагировать на комментарии читателей

Как мы вас себе представляем:
— владеете терминологией, принятой в сообществе IT-разработчиков
— умеете выполнять задания в сжатые сроки
— готовы постоянно поддерживать контакт, оперативно отвечать на возникающие вопросы
— знакомы с HTML, чтобы корректно править старые публикации
— любите объяснять сложные вещи понятным читателю языком, знакомы с инфостилем
— стремитесь увлечь читателя, но не в ущерб фактам
— готовы ежедневно выпускать не менее 1 материала (своего или авторского)

У нас уже есть:
— аудитория (в том числе 350 тыс. VK, свыше 150 тыс. Telegram)
— база публикаций, тестов, обсуждений
— редакционная политика (не придется писать с нуля)
— инструменты оформления и публикации материалов, в том числе планирования
— метрики анализа популярности материалов
— система push-уведомлений
— несколько регулярно пишущих авторов, контент-менеджеры, занимающиеся публикациями в соцсетях, рекламный отдел, команда разработчиков

Если вы подходите:
— зарплатная вилка от 50 до 70 тысяч рублей в месяц
— будем регулярно оплачивать труд 📅 дважды в месяц
— поможем освоиться в команде и работе с инструментами сайта

Чтобы откликнуться, вы можете прислать портфолио из релевантных публикации на ящик [email protected] или выполнить тестовое задание и прислать результат на тот же email.
HashMap реализован с использованием метода цепочек, т.е. каждой ячейке массива (корзине) соответствует свой связный список и при возникновении коллизии осуществляется добавление нового элемента в этот список.

Для метода цепочек коэффициент заполнения может быть больше 1 и с увеличением числа элементов производительность убывает линейно. Такие таблицы удобно использовать, если заранее неизвестно количество хранимых элементов, либо их может быть достаточно много, что приводит к большим значениям коэффициента заполнения.

Среди методов открытой реализации различают:

☕️ линейное пробирование;
☕️ квадратичное пробирование;
☕️ двойное хэширование.

Недостатки структур с методом открытой адресации:

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

Преимущества хэш-таблицы с открытой адресацией:

☕️ отсутствие затрат на создание и хранение объектов списка;
☕️ простота организации сериализации/десериализации объекта.
#вакансия #java #middle #удаленка

Требуется Backend java разработчик (не ниже middle) на постоянную работу.

Основная задача разработка бэкэнда приложений на java с нуля, доработка текущих проектов.

Работа удаленно, с возможными оплачиваемыми командировками в будущем.

На испытательный срок -2000 $
После испытательного - 2500 $
По итогам работы премии.

Требования:
* Хорошее знание Java EE или Spring
* Опыт разработки на Java/Kotlin
* Умение работать с SQL и не-SQL базами данных
* Знание C/C++
* Знание базового английского

Контакт для связи @viksantana
Пул строк – это набор строк, хранящийся в Heap.

☕️ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк;
☕️ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени;
☕️ Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё;
☕️ При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением;
☕️ Пул строк является примером паттерна «Приспособленец» (Flyweight).
Псс… Соскучились? 😝 Photo Lab объявляет о старте онлайн-хакатона PhotoHack Mobile с призовым фондом 500 000 рублей! 🔥


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

Где: онлайн
Когда: 12-13 сентября 2020 года
Кого мы ждём: мобильных разработчиков, специалистов по Machine Learning и Data Science, продакт-менеджеров, UI/UX-дизайнеров, авторов креативных идей, а также студентов технических специальностей.

P.S. в команде может быть не более пяти человек 😉

Подробная информация и регистрация на сайте: https://bit.ly/2QnPLpG
Торопитесь! Заявки принимаются до 11 сентября 2020
Погрузись в мир Java-разработки и напиши свою первую программу на одном из самых востребованных языков программирования за три дня. Занятия бесплатные, а опыт в написании кода не обязателен для участия — материал будет доступным для всех.

Регистрация займёт меньше минуты: 👉 https://clc.am/O1bwgg.

Java — отличный выбор даже для новичков в коде!

Имеет дружественный и понятный синтаксис.
Востребован на рынке труда.
Java-приложения работают на любом устройстве и в любой операционной системе.
Это один из самых высокооплачиваемых языков в разработке.

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

⭐️ Если попадёшь в тройку лучших участников — получишь сертификат на 30 000 рублей для обучения в Skillbox!
Хотя оба интерфейса и предназначены для обхода коллекций, между ними имеются существенные различия:

☕️ с помощью Enumeration нельзя добавлять/удалять элементы;
☕️ в Iterator исправлены имена методов для повышения читаемости кода (Enumeration.hasMoreElements() соответствует Iterator.hasNext(), Enumeration.nextElement() соответствует Iterator. next() и т.д);
☕️ Enumeration присутствуют в устаревших классах, таких как Vector/Stack, тогда как Iterator есть во всех современных классах-коллекциях.
#вопросы_с_собеседований
Оцените количество памяти на хранение одного примитива типа byte в LinkedList?
Каждый элемент LinkedList хранит ссылку на предыдущий элемент, следующий элемент и ссылку на данные.

 static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
//...
}

Для 32-битных систем каждая ссылка занимает 32 бита (4 байта). Сам объект (заголовок) вложенного класса Node занимает 8 байт. 4 + 4 + 4 + 8 = 20 байт, а т.к. размер каждого объекта в Java кратен 8, соответственно получаем 24 байта. Примитив типа byte занимает 1 байт памяти, но в JCF примитивы упаковываются: объект типа Byte занимает в памяти 16 байт (8 байт на заголовок объекта, 1 байт на поле типа byte и 7 байт для кратности 8). Также напомню, что значения от -128 до 127 кэшируются и для них новые объекты каждый раз не создаются. Таким образом, в x32 JVM 24 байта тратятся на хранение одного элемента в списке и 16 байт - на хранение упакованного объекта типа Byte. Итого 40 байт.

Для 64-битной JVM каждая ссылка занимает 64 бита (8 байт), размер заголовка каждого объекта составляет 16 байт (два машинных слова). Вычисления аналогичны: 8 + 8 + 8 + 16 = 40байт и 24 байта. Итого 64 байта.
Язык программирования Go уже давно применяют не только в Google, но и по всему миру: в IBM, Intel, Adobe, Wildberries, Avito. Уже после первого месяца изучения языка можно писать полноценные приложения и приносить пользу, получая за это высокую зарплату.

Но это не только превосходный язык для новичков в программировании. Многие компании переходят на Go и ищут специалистов со знанием двух языков программирования. Освоив Go как второй язык, вы обеспечите себе отличные перспективы карьерного роста.

Востребованная профессия с нуля, 5 проектов в портфолио и помощь с трудоустройством — всё это даёт курс «Go-разработчик» онлайн-университета Geekbrains. Подробности здесь 👉 https://proglib.io/w/9a63a9ba
Practical Android (2018)
Автор: Mark Wickham
Количество страниц: 253

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

Скачать книгу
Хочешь бесплатно начуиться программировать?

Прямо сейчас идет новый набор в Школу 21 от Сбербанка в Казани. Это твой шанс бесплатно получить востребованную профессию и найти команду мечты! Обучающимся из других городов предоставляется общежитие.

Получи junior или senior degree без учителей, лекций и оценок

«Школа 21» работает 24/7 — без графиков и расписания, ты сам определяешь, когда учиться. Поступление не зависит от предыдущих знаний, опыта работы, умения программировать и наличия диплома. Поступить в нее может каждый достигший 18-летнего возраста.

Как стать участником?
1. Зарегистрируйся на сайте Школы 21
2. Пройди две онлайн игры на память и логику
3. Собеседование — онлайн интервью
4. И «Бассейн» — четырехнедельный интенсив по программированию

Переходи по ссылке https://clck.ru/QYHRb и успей подать заявку на поступление до 1 сентября!
Количество мест на ""бассейне"" ограничено!
#вопросы_с_собеседований
Почему нельзя использовать byte в качестве ключа в HashMap?
Поправка: в вопросе имеется в виду byte[].

Хэш-код массива не зависит от хранимых в нем элементов, а присваивается при создании массива (метод вычисления хэш-кода массива не переопределен и вычисляется по стандартному Object.hashCode() на основании адреса массива). Так же у массивов не переопределен equals и выполняется сравнение указателей. Это приводит к тому, что обратиться к сохраненному с ключом-массивом элементу не получится при использовании другого массива такого же размера и с такими же элементами, доступ можно осуществить лишь в одном случае — при использовании той же самой ссылки на массив, что использовалась для сохранения элемента.