Библиотека джависта | 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
加入频道
Взаимная блокировка (deadlock) - явление, при котором все потоки находятся в режиме ожидания. Происходит, когда достигаются состояния:

1. взаимного исключения: по крайней мере один ресурс занят в режиме неделимости и, следовательно, только один поток может использовать ресурс в любой данный момент времени.
2. удержания и ожидания: поток удерживает как минимум один ресурс и запрашивает дополнительные ресурсов, которые удерживаются другими потоками.
3. отсутствия предочистки: операционная система не переназначивает ресурсы: если они уже заняты, они должны отдаваться удерживающим потокам сразу же.
4. цикличного ожидания: поток ждёт освобождения ресурса, другим потоком, который в свою очередь ждёт освобождения ресурса заблокированного первым потоком.

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

Метод Thread.holdsLock(lock) возвращает true, когда текущий поток удерживает монитор у определённого объекта.
#вопросы_с_собеседований
Для чего используются ключевые слова volatile, synchronized, transient, native?
volatile - этот модификатор вынуждает потоки отключить оптимизацию доступа и использовать единственный экземпляр переменной. Если переменная примитивного типа – этого будет достаточно для обеспечения потокобезопасности. Если же переменная является ссылкой на объект – синхронизировано будет исключительно значение этой ссылки. Все же данные, содержащиеся в объекте, синхронизированы не будут!

synchronized - это зарезервированное слово позволяет добиваться синхронизации в помеченных им методах или блоках кода.

Ключевые слова transient и native к многопоточности никакого отношения не имеют, первое используется для указания полей класса, которые не нужно сериализовать, а второе - сигнализирует о том, что метод реализован в платформо-зависимом коде.
#вопросы_с_собеседований
В чём заключаются различия между java.util.concurrent.Atomic.compareAndSwap() и java.util.concurrent.Atomic.weakCompareAndSwap().
weakCompareAndSwap() не создает memory barrier и не дает гарантии happens-before;
weakCompareAndSwap() сильно зависит от кэша/CPU, и может возвращать false без видимых причин;
weakCompareAndSwap(), более легкая, но поддерживаемая далеко не всеми архитектурами и не всегда эффективная операция.
Потоки-демоны работают в фоновом режиме вместе с программой, но не являются неотъемлемой частью программы. Если какой-либо процесс может выполняться на фоне работы основных потоков выполнения и его деятельность заключается в обслуживании основных потоков приложения, то такой процесс может быть запущен как поток-демон с помощью метода setDaemon(boolean value), вызванного у потока до его запуска. Метод boolean isDaemon() позволяет определить, является ли указанный поток демоном или нет. Базовое свойство потоков-демонов заключается в возможности основного потока приложения завершить выполнение потока-демона (в отличие от обычных потоков) с окончанием кода метода main(), не обращая внимания на то, что поток-демон еще работает.
👎 6 признаков того, что вы плохой программист

В большинстве случаев мы знаем, что нам следует делать, но не делаем. Мы думаем, что сделаем это позже, но «позже» никогда не наступает. Это первый шаг к тому, чтобы стать плохим программистом.

https://proglib.io/sh/3QAMoJsY6h
☕️ Основы Java за 30 минут: самоучитель для начинающих

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

https://proglib.io/sh/69n5jeLJ8A
Java All-in-One For Dummies (2020)
Автор: Doug Lowe
Количество страниц: 960

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

Скачать книгу
В чём различия между volatile и Atomic переменными?

volatile принуждает использовать единственный экземпляр переменной, но не гарантирует атомарность. Например, операция count++ не станет атомарной просто потому, что count объявлена volatile. C другой стороны class AtomicInteger предоставляет атомарный метод для выполнения таких комплексных операций атомарно, например getAndIncrement() – атомарная замена оператора инкремента, его можно использовать, чтобы атомарно увеличить текущее значение на один. Похожим образом сконструированы атомарные версии и для других типов данных.
Начинай с PMI.
Программа развития в IT в международной компании!

За полтора года на программе IT Inkompass ты изучишь ключевые кейсы в анализе данных бизнес-процессов и настройке дашбордов . Под руководством ментора ты будешь заниматься сбором и обработкой данных, разработкой функций и упаковкой их в микросервисы. Успей подать заявку – https://vk.cc/c5O1Jy

Что мы предлагаем?
· заработная плата — 80 000 рублей, ДМС и компенсация питания;
· длительность программы развития – 18 месяцев;
· оформление в штат компании сразу на старте программы;
· возможность работать как в классном современном офисе, так и удаленно.

Спеши подать заявку: https://vk.cc/c5O1Jy
Что произойдет в результате компиляции кода?
Рассказываем, как пройти один курс и зарабатывать под 100 000 ₽!

Сейчас в мире много возможностей и интересных, высокооплачиваемых профессий, в некоторых даже новички удаленно зарабатывают от 95 000₽, а после двух лет работы — до 340 000 ₽.
Одна из таких профессий — Java-разработчик!

Стать таким специалистом можно, например, в Skypro. Там после обучения выдают диплом государственного образца и помогают с трудоустройством: подбирают вакансии, натаскивают на собеседования с HR, подсказывают с резюме. Бонусом каждый выпускник забирает с собой портфолио с двумя готовыми проектами.
Вы сможете создавать собственные финансовые приложения, социальные сети и сайты.
Переходи по ссылке с уникальным предложением в честь старта потока и освой востребованную профессию с дополнительной скидкой 10% по промокоду «УЧИСЬ» - https://go.skyeng.ru/javaproglib_skypro
#вопросы_с_собеседований
Чем отличается работа метода wait() с параметром и без параметра?
wait() без параметров освобождает монитор и переводит вызывающий поток в состояние ожидания до тех пор, пока другой поток не вызовет метод notify()/ notifyAll(),
с параметрами заставит поток ожидать заданное количество времени или вызова notify()/ notifyAll().