Есть опыт и знания в IT, которыми Вы хотите поделиться ?
Станьте автором технических статей вместе с Proglib и получайте достойное вознаграждение!
Библиотека программиста приглашает к сотрудничеству внештатных авторов,
которые хотят поделиться знаниями, пропиарить свой авторский блог или просто заработать.
Мы предлагаем удаленную работу, гибкий график, возможность зарабатывать до 12к за статью и выплаты 2 раза в месяц.
Мы не ограничиваем в количестве статей.
Постоянным авторам предусмотрены премии за лояльность.
Интересующие направления для написания статей:
• Data Science, BigData и Machine Learning
• Блокчейн
• DevOps
• Информационная и Кибербезопасность
• Ruby on Rails
• C /C++/ C#
• Python
• Java
• Go разработка
• Разработка игр
• Android-разработка
• iOS-разработка
• Системная и бизнес аналитика
• Тестирование ПО
• Виртуальная реальность
• 1С
• Business Intelligence
• Интернет вещей
• Системы и сети
• IT Management
Оставьте заявку на https://proglib.io/w/186f13ee и мы свяжемся с вами!
Станьте автором технических статей вместе с Proglib и получайте достойное вознаграждение!
Библиотека программиста приглашает к сотрудничеству внештатных авторов,
которые хотят поделиться знаниями, пропиарить свой авторский блог или просто заработать.
Мы предлагаем удаленную работу, гибкий график, возможность зарабатывать до 12к за статью и выплаты 2 раза в месяц.
Мы не ограничиваем в количестве статей.
Постоянным авторам предусмотрены премии за лояльность.
Интересующие направления для написания статей:
• Data Science, BigData и Machine Learning
• Блокчейн
• DevOps
• Информационная и Кибербезопасность
• Ruby on Rails
• C /C++/ C#
• Python
• Java
• Go разработка
• Разработка игр
• Android-разработка
• iOS-разработка
• Системная и бизнес аналитика
• Тестирование ПО
• Виртуальная реальность
• 1С
• Business Intelligence
• Интернет вещей
• Системы и сети
• IT Management
Оставьте заявку на https://proglib.io/w/186f13ee и мы свяжемся с вами!
Продлеваем на неделю конкурс #proglib_contest на самый интересный контент в телеграм-каналах Библиотеки программиста.
Почему? Мы выделили большой призовой фонд и хотим разыграть его среди активных читателей. Но пока мало кто успел поучаствовать. Смекалистые подписчики уже поняли: шансы выиграть очень высоки. За лучший пост в любом из телеграм-каналов Библиотеки программиста автор поста получит 20 000 ₽.
Каналов 14 штук, названия говорят сами за себя: @progbook, @proglibrary, @pyproglib, @frontendproglib, @javaproglib, @dsproglib, @phpproglib, @cppproglib, @mobileproglib, @goproglib, @csharpproglib, @devopsslib, @testerlib, @hackproglib. Таким образом, призовой фонд составляет 280 000 ₽.
Очень простые условия:
1) Найдите интересную и актуальную статью, вышедшую в 2020-21 годах, и напишите к ней анонс объемом до 700 знаков. Для @progbook можно написать рецензию на книгу.
2) Пришлите текст анонса и название целевого канала нашему боту @proglib_contest_bot.
Выиграет тот, чей пост в канале наберёт больше лайков/охватов/кликов по ссылкам. Юридическая информация: https://proglib.io/best-post-contest.
Почему? Мы выделили большой призовой фонд и хотим разыграть его среди активных читателей. Но пока мало кто успел поучаствовать. Смекалистые подписчики уже поняли: шансы выиграть очень высоки. За лучший пост в любом из телеграм-каналов Библиотеки программиста автор поста получит 20 000 ₽.
Каналов 14 штук, названия говорят сами за себя: @progbook, @proglibrary, @pyproglib, @frontendproglib, @javaproglib, @dsproglib, @phpproglib, @cppproglib, @mobileproglib, @goproglib, @csharpproglib, @devopsslib, @testerlib, @hackproglib. Таким образом, призовой фонд составляет 280 000 ₽.
Очень простые условия:
1) Найдите интересную и актуальную статью, вышедшую в 2020-21 годах, и напишите к ней анонс объемом до 700 знаков. Для @progbook можно написать рецензию на книгу.
2) Пришлите текст анонса и название целевого канала нашему боту @proglib_contest_bot.
Выиграет тот, чей пост в канале наберёт больше лайков/охватов/кликов по ссылкам. Юридическая информация: https://proglib.io/best-post-contest.
Библиотека программиста
Правила проведения публичного конкурса
Материалы, которые научат и помогут программировать. Книги и лекции, видеоуроки и советы, тесты знаний и обсуждение горячих тем. Присоединяйтесь!
Чем анонимный внутренний класс отличается от лямбды?
Лямбда-выражение имеет более легковесный синтаксис. Не нужно явно указывать тип функционального интерфейса, который лямбда реализует – он автоматически выведется из контекста. Лямбда-выражения добавлены в язык в первую очередь как синтаксический сахар.
С другой стороны, у класса есть поля. Экземпляр анонимного класса сохраняет свое состояние между вызовами, и меняет его при необходимости. Для лямбды доступен лишь захват и effectively final использование внешних переменных.
Лямбдой реализуется только функциональный интерфейс. Функциональный интерфейс – это тип с единственным абстрактным методом. Анонимным классом же можно расширить любой расширяемый класс или реализовать интерфейс с любым количеством абстрактных методов.
Анонимный класс создает новый скоуп, лямбда работает в текущем. Это значит, что объявление переменной с именем, которое уже используется снаружи, в лямбде вызовет ошибку компиляции «variable is already defined», в анонимном классе скроет (shadowing) внешнюю переменную.
С точки зрения реализации JVM, для лямбды не создается дополнительного .class файла, как это происходит для анонимного класса. Соответственно, не происходит и обычной загрузки и верификации класса. Вместо этого используется механизм
Лямбда-выражение имеет более легковесный синтаксис. Не нужно явно указывать тип функционального интерфейса, который лямбда реализует – он автоматически выведется из контекста. Лямбда-выражения добавлены в язык в первую очередь как синтаксический сахар.
С другой стороны, у класса есть поля. Экземпляр анонимного класса сохраняет свое состояние между вызовами, и меняет его при необходимости. Для лямбды доступен лишь захват и effectively final использование внешних переменных.
Лямбдой реализуется только функциональный интерфейс. Функциональный интерфейс – это тип с единственным абстрактным методом. Анонимным классом же можно расширить любой расширяемый класс или реализовать интерфейс с любым количеством абстрактных методов.
Анонимный класс создает новый скоуп, лямбда работает в текущем. Это значит, что объявление переменной с именем, которое уже используется снаружи, в лямбде вызовет ошибку компиляции «variable is already defined», в анонимном классе скроет (shadowing) внешнюю переменную.
С точки зрения реализации JVM, для лямбды не создается дополнительного .class файла, как это происходит для анонимного класса. Соответственно, не происходит и обычной загрузки и верификации класса. Вместо этого используется механизм
invokedynamic
и класс генерируется на лету с помощью LambdaMetafactory
. Так что лямбда-выражения обычно работают быстрее. Внутренности реализации подробно разобраны например в этой статье.Stack Overflow
Difference between final and effectively final
I'm playing with lambdas in Java 8 and I came across warning local variables referenced from a lambda expression must be final or effectively final. I know that when I use variables inside anonymous
Приходи развивать навыки Java-разработки на бесплатном онлайн-интенсиве и создай корпоративный чат в команде с другими участниками!
Подробная программа: 👉 https://clc.am/wV-6mA
Мы подготовили для тебя мощную программу и много практики, где будут крутые задачи для разработчиков разных уровней 🔥
💡 Ты узнаешь о возможностях языка программирования Java и познакомишься с enterprise-разработкой;
📱 Изучишь стадии разработки веб-приложений, научишься писать микросервисы и разберёшься в работе протокола HTTP и стандарте REST.
☝️ Вместе с разработчиком с 17-летним опытом в Java, PHP и frontend Даниилом Пилипенко пройдёшь все стадии разработки веб-приложения на Java-фреймворке Spring Boot и создашь корпоративный онлайн-чат.
🎁 Всех участников ждут подарки! Все участники получат электронную книгу «Век живи — век учись» Кей Петерсон и Дэвида Колба, а те, кто сдаст домашнюю работу, получат сертификат на 15 000 рублей на любой курс Skillbox.
Регистрируйся по ссылке и участвуй в бесплатном интенсиве, который пройдёт 22 мая с 12:00 по 19:00 по московскому времени. Будет интересно!
Подробная программа: 👉 https://clc.am/wV-6mA
Мы подготовили для тебя мощную программу и много практики, где будут крутые задачи для разработчиков разных уровней 🔥
💡 Ты узнаешь о возможностях языка программирования Java и познакомишься с enterprise-разработкой;
📱 Изучишь стадии разработки веб-приложений, научишься писать микросервисы и разберёшься в работе протокола HTTP и стандарте REST.
☝️ Вместе с разработчиком с 17-летним опытом в Java, PHP и frontend Даниилом Пилипенко пройдёшь все стадии разработки веб-приложения на Java-фреймворке Spring Boot и создашь корпоративный онлайн-чат.
🎁 Всех участников ждут подарки! Все участники получат электронную книгу «Век живи — век учись» Кей Петерсон и Дэвида Колба, а те, кто сдаст домашнюю работу, получат сертификат на 15 000 рублей на любой курс Skillbox.
Регистрируйся по ссылке и участвуй в бесплатном интенсиве, который пройдёт 22 мая с 12:00 по 19:00 по московскому времени. Будет интересно!
Reactive Spring (2020)
Автор: Josh Long
Количество страниц: 486
Микросервисы и большие данные все чаще сталкивают нас с ограничениями традиционного ввода / вывода. Присоединяйтесь к Spring Developer'у Джошу Лонгу, чтобы познакомиться с реактивным программированием в экосистеме Spring, используя спецификацию реактивных потоков, Reactor, Spring Boot, Spring Cloud. В этой книге будут рассмотрены важные концепции реактивного программирования, включая проект Reactor и спецификацию реактивных потоков, доступ к данным, веб-программирование, RPC с такими протоколами, как RSocket, тестирование, интеграцию и композицию, и многое другое.
Скачать книгу
Автор: Josh Long
Количество страниц: 486
Микросервисы и большие данные все чаще сталкивают нас с ограничениями традиционного ввода / вывода. Присоединяйтесь к Spring Developer'у Джошу Лонгу, чтобы познакомиться с реактивным программированием в экосистеме Spring, используя спецификацию реактивных потоков, Reactor, Spring Boot, Spring Cloud. В этой книге будут рассмотрены важные концепции реактивного программирования, включая проект Reactor и спецификацию реактивных потоков, доступ к данным, веб-программирование, RPC с такими протоколами, как RSocket, тестирование, интеграцию и композицию, и многое другое.
Скачать книгу
Telegram
Книги для программистов (reserved)
Reactive Spring (2020)
Автор: Josh Long
Автор: Josh Long
Мы тут с ребятами думаем запустить курс в виде зум и/или оффлайн-встреч, часть курса запишем с топовыми психологами, поэтому если вам интересно, ответьте на 3 вопроса в нашей форме (оринтировочно это займет 2-3 минуты)
https://forms.gle/nBJxwf9pFbYw3mNm9
В форме нет обязательных вопросов.
https://forms.gle/nBJxwf9pFbYw3mNm9
В форме нет обязательных вопросов.
Google Docs
Коммуникации в IT
! Ответы на все вопросы необязательные !
Forwarded from Java jobs — вакансии для java-разработчиков
ВТБ открывает набор Java-разработчиков по новому направлению “Состоятельные клиенты”
Смотрят по всей России (удаленка), работа по московскому часовому поясу.
Необходимый уровень – middle/senior
Оформление во внутренний интегратор – Иннотех
Набор идет в несколько команд – Цифровые пути, Prime, Привилегии. По сути, настоящие Agile-команды, у которых нет цели, есть только путь :) Все задачи проходят процессы оценки, приоритезации и т.д.
Чем занимаются команды с точки зрения бизнеса?
Диджитализацией разработки клиентских путей. Всё, что связано с привлечением клиентов на пакет услуг привилегий - внешние преференции, priority pass, скидки на продукты от банка. Основная цель – сделать клиентский опыт максимально удобным.
Технический стек стандартный, но современный: Java8+, Docker, Openshift, Postgres, MongoDB, Clickhouse, Reddis, Kafka, RebbitMQ. Все технологии из списка подогнаны под современные стандарты.
+ ко всему описанному очень адекватные лиды, приятная в общении команда
Сейчас на проекте есть Product Owner, IT лидер, бизнес аналитик, 2 системных аналитика, 2 мобильных разработчика, 2 Frontend и 2 тестера. Работа по Scrum.
Откликайся, если интересует возможность быть у истоков нового проекта в масштабах России.
Контакты:
Телеграм @VadSaah
Почта [email protected]
Смотрят по всей России (удаленка), работа по московскому часовому поясу.
Необходимый уровень – middle/senior
Оформление во внутренний интегратор – Иннотех
Набор идет в несколько команд – Цифровые пути, Prime, Привилегии. По сути, настоящие Agile-команды, у которых нет цели, есть только путь :) Все задачи проходят процессы оценки, приоритезации и т.д.
Чем занимаются команды с точки зрения бизнеса?
Диджитализацией разработки клиентских путей. Всё, что связано с привлечением клиентов на пакет услуг привилегий - внешние преференции, priority pass, скидки на продукты от банка. Основная цель – сделать клиентский опыт максимально удобным.
Технический стек стандартный, но современный: Java8+, Docker, Openshift, Postgres, MongoDB, Clickhouse, Reddis, Kafka, RebbitMQ. Все технологии из списка подогнаны под современные стандарты.
+ ко всему описанному очень адекватные лиды, приятная в общении команда
Сейчас на проекте есть Product Owner, IT лидер, бизнес аналитик, 2 системных аналитика, 2 мобильных разработчика, 2 Frontend и 2 тестера. Работа по Scrum.
Откликайся, если интересует возможность быть у истоков нового проекта в масштабах России.
Контакты:
Телеграм @VadSaah
Почта [email protected]
Как Spring Framework реализует паттерн Dependency Injection?
Инверсия контроля (inversion of control, IoC) – принцип проектирования, по которому контроль над потоком управления передается фреймворку. Управляющий и прикладной код разделяются. При разработке модуля этот подход избавляет от необходимости знать о других модулях программы и деталях их взаимодействия. Такой код становится более переипользуемым и модульным, уменьшает связность.
Внедрение зависимостей (Dependency Injection, DI) – одна из реализаций IoC. При взаимодействии с другими модулями, программа оперирует высокоуровневыми абстракциями, тогда как конкретная её реализация поставляется фреймворком.
Стандартная реализация DI – фреймворк инстанциирует все сервисы, и складывает их в IoC-контейнер. При этом специальная сущность, Service Locator, занимается поиском соответствия реализаций абстракциям и их внедрением.
Spring – большой набор различных библиотек. DI реализуется одной из основных библиотек – Spring IoC.
Сущности бизнес-логики в Spring, как и в JavaEE называются beans. Бины объявляются различными способами, корни большинства из них лежат в понятии
Лучше разобраться в понятиях экосистемы Spring поможет известный доклад Евгения Борисова «Spring-потрошитель»:часть 1,часть 2.
Инверсия контроля (inversion of control, IoC) – принцип проектирования, по которому контроль над потоком управления передается фреймворку. Управляющий и прикладной код разделяются. При разработке модуля этот подход избавляет от необходимости знать о других модулях программы и деталях их взаимодействия. Такой код становится более переипользуемым и модульным, уменьшает связность.
Внедрение зависимостей (Dependency Injection, DI) – одна из реализаций IoC. При взаимодействии с другими модулями, программа оперирует высокоуровневыми абстракциями, тогда как конкретная её реализация поставляется фреймворком.
Стандартная реализация DI – фреймворк инстанциирует все сервисы, и складывает их в IoC-контейнер. При этом специальная сущность, Service Locator, занимается поиском соответствия реализаций абстракциям и их внедрением.
Spring – большой набор различных библиотек. DI реализуется одной из основных библиотек – Spring IoC.
Сущности бизнес-логики в Spring, как и в JavaEE называются beans. Бины объявляются различными способами, корни большинства из них лежат в понятии
Configuration
. В качестве контейнера бинов выступает ApplicationContext
. Чтобы передать инициализацию зависимости контексту, она помечается аннотацией @Autowired
.Лучше разобраться в понятиях экосистемы Spring поможет известный доклад Евгения Борисова «Spring-потрошитель»:часть 1,часть 2.
Wikipedia
Инверсия управления
Инверсия управления (англ. Inversion of Control, IoC) — общий принцип программирования, особенно важный в рамках объектно-ориентированной парадигмы, используемый для уменьшения зацепления (связанности) в компьютерных программах . Также архитектурное решение…
Что делает семафор?
Семафор – один из старейших примитивов синхронизации. Он был изобретен Дейкстрой в 1968 году. По большому счету это счетчик, который можно увеличивать и уменьшать из разных потоков. Уменьшение до 0 блокирует уменьшающий поток. Состояние, когда счетчик больше нуля называют сигнальное состояние, операцию его увеличения – release (освобождение) или signal, уменьшения – acquire (захват) или wait.
На практике можно представить, что release – выделение квоты доступа к критической секции программы. acquire – использование необходимого объема доступной квоты, или ожидание, если её не хватает. Подробнее с деталями работы семафора поможет ознакомиться перевод статьи с картинками на хабре.
В Java семафор реализован классом
Несколько вспомогательных методов позволяют узнать больше о количестве и составе очереди потоков, которые ждут освобождения пермитов. А методы
Семафор – один из старейших примитивов синхронизации. Он был изобретен Дейкстрой в 1968 году. По большому счету это счетчик, который можно увеличивать и уменьшать из разных потоков. Уменьшение до 0 блокирует уменьшающий поток. Состояние, когда счетчик больше нуля называют сигнальное состояние, операцию его увеличения – release (освобождение) или signal, уменьшения – acquire (захват) или wait.
На практике можно представить, что release – выделение квоты доступа к критической секции программы. acquire – использование необходимого объема доступной квоты, или ожидание, если её не хватает. Подробнее с деталями работы семафора поможет ознакомиться перевод статьи с картинками на хабре.
В Java семафор реализован классом
Semaphore
. Состоит этот класс в основном из разных форм методов acquire
(с таймаутом, с игнорированием InterruptedException
, неблокирующий) и release
. Методы могут принимать параметр permits
– тот самый объем квот, которые необходимо освободить/захватить.Несколько вспомогательных методов позволяют узнать больше о количестве и составе очереди потоков, которые ждут освобождения пермитов. А методы
availablePermits
и drainPermits
позволяют узнать количество оставшихся пермитов, и захватить их все соответственно. В конструкторе конфигурируются изначальное количество пермитов, и свойство fair
(аналогичное свойству ReentrantLock).Wikipedia
Семафор (программирование)
примитив синхронизации и контроля доступа к ресурсам со счётчиком в основе, при попытке уменьшения которого ниже нуля задачи блокируются
Может ли имя класса не совпадать с именем файла?
Компилятор требует, чтобы в .java файле был не больше чем один публичный класс верхнего уровня, и чтобы его название совпадало с названием файла. Все специальные символы также должны быть в имени файла.
Protected и private классов верхнего уровня не бывает в принципе, а вот на package-protected это ограничение не распространяется. Это значит, что класс без модификатора доступа может иметь любое имя. Также это значит, что рядом с основным публичным классом файла (или вместо него) можно объявить любое количество других классов без модификатора доступа, с произвольными именами. Они будут доступны внутри всего пакета.
Так что ответ – может.
Компилятор требует, чтобы в .java файле был не больше чем один публичный класс верхнего уровня, и чтобы его название совпадало с названием файла. Все специальные символы также должны быть в имени файла.
Protected и private классов верхнего уровня не бывает в принципе, а вот на package-protected это ограничение не распространяется. Это значит, что класс без модификатора доступа может иметь любое имя. Также это значит, что рядом с основным публичным классом файла (или вместо него) можно объявить любое количество других классов без модификатора доступа, с произвольными именами. Они будут доступны внутри всего пакета.
Так что ответ – может.
Уже завтра пройдёт традиционный онлайн-митап для Java-разработчиков от ЮMoney — тех самых ребят, которые 18 лет занимаются платёжными решениями.
На нём backend-разработчики ЮMoney и приглашённый эксперт из Центра финансовых технологий расскажут как:
— добавлять в чистовой код тестовое поведение и спать спокойно,
— обеспечить отказоустойчивость с помощью шардирования,
— не попасть в Jar Hell.
А после докладов вы сможете задать любой наболевший вопрос и обсудить со спикерами темы. Участие бесплатное. Регистрируйся и делитесь ссылкой с коллегами: https://wow.link/tAV
До встречи в эфире!
На нём backend-разработчики ЮMoney и приглашённый эксперт из Центра финансовых технологий расскажут как:
— добавлять в чистовой код тестовое поведение и спать спокойно,
— обеспечить отказоустойчивость с помощью шардирования,
— не попасть в Jar Hell.
А после докладов вы сможете задать любой наболевший вопрос и обсудить со спикерами темы. Участие бесплатное. Регистрируйся и делитесь ссылкой с коллегами: https://wow.link/tAV
До встречи в эфире!
#вопросы_с_собеседований
Что такое Java Server Pages (JSP)?
Что такое Java Server Pages (JSP)?
С нас крутые спикеры, полезные лекции и трудоустройство, с тебя – желание учиться и минимум год опыта коммерческой разработки на Java.
⠀
Как все проходит?
3 раза в неделю на протяжении двух месяцев тебя будут обучать Senior’ы и Teamlead’ы ведущих банков страны. Обучение можно совмещать с работой.
⠀
Чему будут учить?
На курсе будем изучать Core Java, промышленную разработку на Java, базы данных, Spring, Kafka, Kubernetes и Istio. Помимо этого еще будут практические занятия и домашние задания.
⠀
Что будет после учебы?
Трудоустройство в Цифровые привычки. Ты будешь работать над высоконагруженными,отказоустойчивыми проектами.
⠀
⠀
Как все проходит?
3 раза в неделю на протяжении двух месяцев тебя будут обучать Senior’ы и Teamlead’ы ведущих банков страны. Обучение можно совмещать с работой.
⠀
Чему будут учить?
На курсе будем изучать Core Java, промышленную разработку на Java, базы данных, Spring, Kafka, Kubernetes и Istio. Помимо этого еще будут практические занятия и домашние задания.
⠀
Что будет после учебы?
Трудоустройство в Цифровые привычки. Ты будешь работать над высоконагруженными,отказоустойчивыми проектами.
⠀
JSP (JavaServer Pages) — платформонезависимая переносимая и легко расширяемая технология разработки веб-приложений, позволяющая веб-разработчикам создавать содержимое, которое имеет как статические, так и динамические компоненты. Страница JSP содержит текст двух типов: статические исходные данные, которые могут быть оформлены в одном из текстовых форматов HTML, SVG, WML, или XML, и JSP-элементы, которые конструируют динамическое содержимое. Кроме этого могут использоваться библиотеки JSP-тегов, а также EL (Expression Language), для внедрения Java-кода в статичное содержимое JSP-страниц.
Код JSP-страницы транслируется в Java-код сервлета с помощью компилятора JSP-страниц Jasper, и затем компилируется в байт-код JVM.
JSP-страницы загружаются на сервере и управляются Java EE Web Application. Обычно такие страницы упакованы в файловые архивы .war и .ear.
Код JSP-страницы транслируется в Java-код сервлета с помощью компилятора JSP-страниц Jasper, и затем компилируется в байт-код JVM.
JSP-страницы загружаются на сервере и управляются Java EE Web Application. Обычно такие страницы упакованы в файловые архивы .war и .ear.
Как получить гарантированный дедлок?
Сначала поговорим о том, что это такое. Deadlock – это взаимная блокировка, ситуация, когда два или более потока «наступают друг-другу на хвост» – зависают в вечном ожидании ресурсов, захваченных друг другом.
Livelock – похожая проблема, с тем лишь отличием, что потоки не останавливаются, а вместо этого зацикливаются, выполняя одни и те же бесполезные действия, ходят по кругу.
Стандартный подход к обеспечению гарантии защиты от дедлока – установка строгого порядка взятия блокировок. Если для мониторов A и B соблюдается всеобщий порядок захвата AB (и соответственно отпускания BA), то ни с одним потоком не случится попасть на ожидание B, успешно при этом захватив A.
Из этого можно догадаться, простой способ гарантировать возможность дедлока – явно нарушить это условие.
Нарушение условия даст дедлок «скорее всего когда-нибудь». Чтобы получить его точно и с первого раза, нужно гарантировать, что оба потока окажутся на этапе между захватами одного и другого ресурса в одно время. Это можно сделать множеством способов, в примере ниже использован
Вопрос дедлоков – одна из краеугольных тем параллельных вычислений, уходящая далеко за рамки этого вопроса. Для дальнейшего изучения рекомендуются статьи на википедии про дедлоки, про задачу об обедающих философах как классическая иллюстрация проблемы, и глава 10.1 Java Concurrency in Practice.
Сначала поговорим о том, что это такое. Deadlock – это взаимная блокировка, ситуация, когда два или более потока «наступают друг-другу на хвост» – зависают в вечном ожидании ресурсов, захваченных друг другом.
Livelock – похожая проблема, с тем лишь отличием, что потоки не останавливаются, а вместо этого зацикливаются, выполняя одни и те же бесполезные действия, ходят по кругу.
Стандартный подход к обеспечению гарантии защиты от дедлока – установка строгого порядка взятия блокировок. Если для мониторов A и B соблюдается всеобщий порядок захвата AB (и соответственно отпускания BA), то ни с одним потоком не случится попасть на ожидание B, успешно при этом захватив A.
Из этого можно догадаться, простой способ гарантировать возможность дедлока – явно нарушить это условие.
Нарушение условия даст дедлок «скорее всего когда-нибудь». Чтобы получить его точно и с первого раза, нужно гарантировать, что оба потока окажутся на этапе между захватами одного и другого ресурса в одно время. Это можно сделать множеством способов, в примере ниже использован
CyclicBarrier
.Вопрос дедлоков – одна из краеугольных тем параллельных вычислений, уходящая далеко за рамки этого вопроса. Для дальнейшего изучения рекомендуются статьи на википедии про дедлоки, про задачу об обедающих философах как классическая иллюстрация проблемы, и глава 10.1 Java Concurrency in Practice.
Какая разница между @ElementCollection, @OneToMany и @ManyToMany?
Все эти аннотации – часть Java Persistence API. С их использованием мы регулярно сталкиваемся в реализациях JPA, таких как Hibernate.
Когда в базу данных сохраняется сущность, в которой есть поле-коллекция, это поле обязано быть помеченным одной из аннотаций.
@OneToMany и @ManyToMany хранят вложенные объекты как отдельные полноценные сущности – для них действуют всё те же требования, которые JPA выдвигает для всех
@ElementCollection создает коллекцию встраиваемых классов. Применять её можно только на коллекции, тип элементов которых помечен
На уровне хранения в реляционной базе, для
Но из Java кода коллекция будет выглядеть встроенной: её элементом не нужно иметь собственные id, ими нельзя манипулировать отдельно от основной сущности. Единственное, чем такая коллекция отличается от встроенного поля-примитива – её можно загружать лениво (включено по умолчанию).
#proglib_contest
Все эти аннотации – часть Java Persistence API. С их использованием мы регулярно сталкиваемся в реализациях JPA, таких как Hibernate.
Когда в базу данных сохраняется сущность, в которой есть поле-коллекция, это поле обязано быть помеченным одной из аннотаций.
@OneToMany и @ManyToMany хранят вложенные объекты как отдельные полноценные сущности – для них действуют всё те же требования, которые JPA выдвигает для всех
@Entity
классов. Каждая из аннотаций отвечает за свое отношение.@ElementCollection создает коллекцию встраиваемых классов. Применять её можно только на коллекции, тип элементов которых помечен
@Embeddable
, или входит в список стандартных встраиваемых классов (обертки примитивов, строки, даты, и т.д.).На уровне хранения в реляционной базе, для
@ElementCollection
будет также создана отдельная таблица. Технически она будет находиться в отношении one-to-many.Но из Java кода коллекция будет выглядеть встроенной: её элементом не нужно иметь собственные id, ими нельзя манипулировать отдельно от основной сущности. Единственное, чем такая коллекция отличается от встроенного поля-примитива – её можно загружать лениво (включено по умолчанию).
#proglib_contest
#proglib_contest
10 лучших книг по Java
В этой статье собраны некоторые из лучших когда-либо написанных книг по джава. Эти книги выдержали испытание временем и с годами становятся все более актуальными.
Туц: https://proglib.io/w/42296296
10 лучших книг по Java
В этой статье собраны некоторые из лучших когда-либо написанных книг по джава. Эти книги выдержали испытание временем и с годами становятся все более актуальными.
Туц: https://proglib.io/w/42296296
Teletype
10 лучших книг по Java
Некоторые из лучших книг для Java-программистов, начиная от ядра Java и заканчивая передовыми практиками, модульным тестированием...
#proglib_contest Обработка какого массива в Java выполняется быстрее?
Обработка какого массива в Java быстрее?
Anonymous Quiz
49%
Отсортированного
5%
Неотсортированного
46%
Неважно какого