Библиотека джависта | 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
加入频道
This media is not supported in your browser
VIEW IN TELEGRAM
Продолжаем следить за конкурсами с денежными призами. «Цифровой прорыв» совместно с Mail.Ru Group запускают IT-чемпионат по ML, AI и Data Science. Есть три задачи:

- Модель прогноза средних цен и объемов потребления товаров (ФНС России и Росстат)
- ИИ для поиска самолетов на снимках местности при проведении поисково-спасательных операций (Росавиация)
- ИИ для распознавания категории предмета музейного фонда (Минкультуры России)

Как видите, задачи практичные и важные, на решение дается целый месяц — с 14 июля по 14 августа. В каждой из трех задач есть 25 призовых мест, за первое место дают 100 тыс. ₽. Регистрация и подробности здесь: https://proglib.io/w/24a90147
🛠 Почему Java используется для разработки мобильных приложений?

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

https://proglib.io/sh/y7Jmec9Gnj
Что делает volatile?

volatile – ключевое слово для работы с многопоточностью. Не то же самое, что volatile в C++, не обязано делать что-либо с кэшем процессора. Оказывает на поле объекта ровно два эффекта.

Во-первых, чтение/запись такого поля становятся атомарными. Это применение актуально только для long и double, и не на всех платформах. Для остальных типов полей это верно и так.

Второй и самый интересный эффект – пара событий запись-чтение для такого поля являются synchronization actions. Значит, между ними существует отношение happens-before. Это значит, что существует гарантия, что произошедшее в памяти до записи будет видно после чтения. То есть будут успешно прочитаны значения, записанные в другие переменные.

Для полного понимания темы рекомендуется к просмотру доклад Алексея Шипилёва и документация. Лучше всего эффект volatile иллюстрирует задача из этого доклада, которую часто и дают в качестве этого вопроса. Вопрос – что выведет данный код:
int a; int b;

// thread 1:
a = 1;
b = 2;

// thread 2:
System.out.print(b);
System.out.print(a);

Трюк в том, что помимо очевидных 21 (поток 2 отработал после 1), 00 (поток 2 отработал до 1, переменные еще не инициализированы) и 01 (поток 2 сработал между записями), может быть и неожиданные 20. Дело в том, что для операторов одного потока действует program order, он гарантирует хотя бы видимость правильной последовательности операций. Между потоками необходим «мост» из happens-before. Его даст применение модификатора volatile к переменной b, неожиданный результат 20 будет исключен.

Этот эффект используется для получения простой и дешевой адаптации программы к многопоточной среде без использования сложных и ошибкоопасных техник блокировок и синхронизаций.
Какими значениями инициализируются переменные по умолчанию?
• Числа инициализируются 0 или 0.0;
• char — \u0000;
• boolean — false;
• Объекты (в том числе String) — null.
⚖️ Что такое лицензирование ПО и как оно работает?

Рассказываем о классификации лицензий и даем практические советы по лицензированию программного обеспечения.

https://proglib.io/sh/6KQ4TnvaNb
JavaServer Pages Standard Tag Library, JSTL, Стандартная библиотека тегов JSP — расширение спецификации JSP (конечный результат JSR 52), добавляющее библиотеку JSP тегов для общих нужд, таких как разбор XML данных, условная обработка, создание циклов и поддержка интернационализации.

JSTL является альтернативой такому виду встроенной в JSP логики, как скриплеты (прямые вставки Java кода). Использование стандартизованного множества тегов предпочтительнее, поскольку получаемый код легче поддерживать и проще отделять бизнес-логику от логики отображения.
Что такое «fail-fast поведение»?

fail-fast поведение означает, что при возникновении ошибки или состояния, которое может привести к ошибке, система немедленно прекращает дальнейшую работу и уведомляет об этом. Использование fail-fast подхода позволяет избежать недетерминированного поведения программы в течение времени.

В Java Collections API некоторые итераторы ведут себя как fail-fast и выбрасывают ConcurrentModificationException, если после его создания была произведена модификация коллекции, т.е. добавлен или удален элемент напрямую из коллекции, а не используя методы итератора.

Реализация такого поведения осуществляется за счет подсчета количества модификаций коллекции (modification count):

• при изменении коллекции счетчик модификаций так же изменяется;
• при создании итератора ему передается текущее значение счетчика;
• при каждом обращении к итератору сохраненное значение счетчика сравнивается с текущим, и, если они не совпадают, возникает исключение.
Почитать Telegram по пути на работу или полистать избранные каналы в обеденный перерыв — привычка полезная. Она работает еще лучше, если периодически пополнять свой список чем-то новеньким.

Вот, например, ребята из Accenture Russia запустили свой канал для IT-сообщества. У них там и полезная информация на разные темы (работа с данными, облака, микросервисы, AI, DevOps, backend- и frontend-разработка, управление проектами и т.д.), и анонсы мероприятий, и розыгрыши призов в духе книжки на профтему, билета на классную конфу и не только.

Подписывайся, читай, выигрывай!
#вопросы_с_собеседований
Сколько элементов будет пропущено, если Iterator.next() будет вызван после 10-ти вызовов Iterator.hasNext()?
Ответ

Нисколько - hasNext() осуществляет только проверку наличия следующего элемента.
В следующий понедельник стартует Курс по многопоточному программированию на Java.

Уровень: middle/senior

Подойдёт тем, кто знает основы многопоточки и готов выйти на новый уровень.

Курс строится вокруг java.util.concurrent. Изучим всё, что там есть, как это применять на практике и сравним разные инструменты между собой. Затронем и смежные темы: мониторинг, флажки JVM, виртуальные потоки и реактивное программирование.

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

Через два месяца вы получите всю базу для работы на хайлоад проекте. Сможете уверенно решать задачи под разную нагрузку. Будете круто выглядеть на собеседованиях🔥

Старт: 12 июля
Длительность: 8 недель

Программа, отзывы - здесь.

Записывайся ➡️ https://fillthegaps.ru/mt2
#вакансия #remote #java #backend #работа #москва

Компания: Bright group (bright-group.ru)
Формат работы: удалёнка
Зарплатная вилка: от 200 до 300k net

Middle/Senior java backend-разработчик в компанию Bright Group в наш IT-продукт по управлению движением транспорта и планированию его расписания в режиме реального времени.

Наш стек: Java, Postgres, Hibernate, Spring Framework 5, Spring Boot 2
Инфраструктра: JIRA, Confluence, Gitlab/Jenkins, Docker, Kubernetes (Openshift)

✔️Требования:
Опыт работы на Java от 3 лет;
Отличное знание алгоритмов, структур данных, способность писать эффективный код;
Опыт работы с микросервисной архитектурой;
Уверенное понимание архитектуры сетевых приложений;
Опыт разработки приложений, основанных на принципах ООП и паттерне MVC;
Умение самостоятельно принимать архитектурные решения, искать нужную информацию;
Уверенное знание SQL;
Использовать актуальные подходы к разработке и современные технологии;
Решать задачи в команде с системным аналитиком, frontend-разработчиками и QA-инженерами.
Опыт разработки клиент-серверных приложений (REST, JSON);
Опыт работы с Git, знание git flow;
Умение работать в команде;
Высшее техническое образование.

📌Задачи:
Участвовать в процессе разработки функционала, начиная с проектирования и заканчивая поставкой и поддержкой;
Исследовать и улучшать производительность приложений;
Писать тесты, инспектировать код;
Выстраивать взаимодействие внутри команды и снаружи (с project-менеджерами, тестировщиками, frontend-разработчиками);
Оценивать работу людей в команде, давать обратную связь. Развивать людей в команде;
Вести пул технических задач;
Умение общаться и доносить свои мысли лаконично, объяснять свою позицию.

🔅 Что мы предлагаем:
- Удаленный формат работы;
- Гибкий график;
- Официальное оформление, белая ЗП;
- ДМС.

🤳Контакты:
[email protected]
@avokonlehc

Всем отличного дня!
#вопросы_с_собеседований
На каком объекте происходит синхронизация при вызове static synchronized метода?
У синхронизированного статического метода нет доступа к this, но есть доступ к объекту класса Class, он присутствует в единственном экземпляре и именно он выступает в качестве монитора для синхронизации статических методов. Таким образом, следующая конструкция:

public class SomeClass {

public static synchronized void someMethod() {
//code
}
}

эквивалентна такой:

public class SomeClass {

public static void someMethod(){
synchronized(SomeClass.class){
//code
}
}
}
Как поведёт себя уже инстанциированный итератор для collection, если вызвать collection.remove()?

При следующем вызове методов итератора будет выброшено ConcurrentModificationException.
#вопросы_с_собеседований
Расскажите о типах шаблонов проектирования.
✔️Основные (Fundamental) — основные строительные блоки других шаблонов. Большинство других шаблонов использует эти шаблоны в той или иной форме.
✔️Порождающие шаблоны (Creational) — шаблоны проектирования, которые абстрагируют процесс создания экземпляра. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять созданный объект, а шаблон, порождающий объекты, делегирует создание объектов другому объекту.
✔️Структурные шаблоны (Structural) определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу.
✔️Поведенческие шаблоны (Behavioral) определяют взаимодействие между объектами, увеличивая таким образом его гибкость.
В чем разница между классами java.util.Collection и java.util.Collections?

java.util.Collections - набор статических методов для работы с коллекциями.

java.util.Collection - один из основных интерфейсов Java Collections Framework.