Size: a a a

Библиотека джависта

2021 May 12
Библиотека джависта
Имя - все шаблоны имеют уникальное имя, служащее для их идентификации;
Назначение данного шаблона;
Задача - задача, которую шаблон позволяет решить;
Способ решения - способ, предлагаемый в шаблоне для решения задачи в том контексте, где этот шаблон был найден;
Участники - сущности, принимающие участие в решении задачи;
Следствия - последствия от использования шаблона как результат действий, выполняемых в шаблоне;
Реализация - возможный вариант реализации шаблона.
источник
2021 May 13
Библиотека джависта
Как написать иммутабельный класс?

Immutable (неизменяемый) класс – это класс, состояние экземпляров которого невозможно изменить после создания.

С иммутабельным классом всегда легче работать. Его состояние не поменяется, значит обращаться к нему в многопоточной среде можно без дополнительной синхронизации. Функции, зависящие только от состояния экземпляра будут возвращать один и тот же результат от вызова к вызову – это облегчает например реализацию hashCode(). Также вместо нескольких одинаковых экземпляров можно использовать один закэшированный объект, экономя память (паттерн Приспособленец).

Шаги, которые необходимо предпринять, чтобы класс стал immutable:

1. Запретите расширение класса – либо объявите его final, либо закройте доступ наследникам ко всем способам мутации, перечисленным в следующих пунктах;
2. Сделайте все поля финальными;
3. Не выставляйте наружу методов-мутаторов, которые меняют состояние;
4. Не отдавайте наружу поля ссылочного изменяемого типа (объекты классов, массивы) – если объект под ссылкой не иммутабельный, должна возвращаться его глубокая копия (defensive copy);
5. Создавайте объект правильно (подробнее в следующем посте).

Если вам нужны преимущества иммутабельного объекта, но также нужно иногда изменять его, подойдет подход copy on write: каждый метод-мутатор должен мутировать и возвращать не сам объект, а только что созданную его копию. Оригинал всё так же остается неизменным.
источник
Библиотека джависта
В Java Mentor идет набор на уникальную программу подготовки Java-специалистов. Главная особенность программы - оплата обучения происходит только после вашего трудоустройства в IT ☕️⚡️

За 6-8 месяцев наставники подготовят вас на позицию Java-разработчика (один из самых востребованных и высокооплачиваемых языков программирования).
Менторы помогут освоить востребованные технологии, будут контролировать усвоение материала. Вы получите опыт в бизнес-проекте необходимый для трудоустройства, также наставники помогут составить резюме и подготовят вас к прохождению собеседований.

🙋‍♂️👉 Узнать подробнее: https://clck.ru/Ujetw

Трудоустройство в Москве со стартовой зарплатой от 120 000 рублей. Работодателя выбираете самостоятельно после успешных собеседований.  

Быстрый карьерный и финансовый рост за счет программы поддержки после трудоустройства рассчитанной на 2 года: вебинары, митапы, буткэмпы от экспертов IT-рынка и карьерных специалистов.
источник
Библиотека джависта
#вопросы_с_собеседований
Что вы знаете о Языке выражений JSP (JSP Expression Language – EL)?
источник
2021 May 14
Библиотека джависта
Оффер от Яндекса за 1 день!

15, 22 и 29 мая Яндекс проводит онлайн-мероприятие для найма мобильных разработчиков— One Day Offer
Если вы middle/senior-разработчик, пишущий на Objective-C/Swift/Java/Kotlin — приходите и получите оффер от Яндекса за одну субботу! Чтобы принять участие, нужно просто зарегистрироваться и решить две задачи онлайн
источник
Библиотека джависта
JSP Expression Language (EL) — скриптовый язык выражений, который позволяет получить доступ к Java компонентам (JavaBeans) из JSP. Начиная с JSP 2.0 используется внутри JSP тегов для отделения Java кода от JSP для обеспечения лёгкого доступа к Java компонентам, уменьшая при этом количество кода Java в JSP-страницах, или даже полностью исключая его.

Развитие EL происходило с целью сделать его более простым для дизайнеров, которые имеют минимальные познания в языке программирования Java. До появления языка выражений, JSP имел несколько специальных тегов таких как скриптлеты (англ.), выражения и т. п. которые позволяли записывать Java код непосредственно на странице. С использованием языка выражений веб-дизайнер должен знать только то, как организовать вызов соответствующих java-методов.

Язык выражений JSP 2.0 включает:
☕️ Создание и изменение переменных.
☕️ Управление потоком выполнения программы: ветвление, выполнение различных типов итераций и т.д.
☕️ Упрощенное обращение к встроенным JSP-объектам.
☕️ Возможность создавать собственные функции.

Язык выражений используется внутри конструкции ${ ... }. Подобная конструкция может размещаться либо отдельно, либо в правой части выражения установки атрибута тега.
источник
Библиотека джависта
Повысьте свою эффективность работы с данными. Начните осваивать продвинутые инструменты дата инженера 17 мая с демо-занятия «Тестирование Spark приложений». Занятие проведет Вадим Опольский, Scala Big Data разработчик в Luxoft. За 1,5 часа вы разберете проблемы в тестировании Spark приложений: стат. данные, частичную проверку и запуск/остановку тяжелых систем. Изучите библиотеки для решения и напишете тесты.
Демо-урок входит в программу онлайн-курса «Экосистема Hadoop, Spark, Hive» от OTUS. Для регистрации на урок пройдите вступительный тест https://otus.pw/jMBfO/
источник
Библиотека джависта
Как обойти коллекцию?

for/while.
Классический способ: целочисленная переменная-индекс, которая увеличивается от 0 до size(). Можно использовать для неполного обхода, с нестандартным шагом. Плата за это – возможность ошибиться в индексах и менее читабельный код.

Iterator. ООП-способ: методом iterator() получить объект-итератор, и вызывать у него next() пока hasNext() возвращает true. В реализации может быть дополнительная логика, такая как потокобезопасность. Такой  «объект-итерацию» коллекции можно передать в сторонний код, не отдавая саму коллекцию. Всё еще требует слишком много кода.

for Iterable. Синтаксический сахар для обхода итератором. Простейший синтаксис когда нужен просто обход. В отличие от явного использования итератора не дает возможности модифицировать элементы в процессе.

Стримы. Создать от коллекции стрим и работать с элементами в нём. Кроме простого forEach(), можно воспользоваться всей мощью Java Steam API – фильтровать, преобразовывать и агрегировать элементы. За это создаются лишние объекты, а синтаксис гораздо более развесистый.

Функции Java 8. С этой версии появились удобные средства для обхода не только строк. У коллекций и хэш-таблиц добавились методы forEach для обхода и replaceAll для модификации. Как со стримами, они дают функциональный стиль, но без избыточного создания стримов. Внутри используются простые итераторы и циклы for.
источник
2021 May 15
Библиотека джависта
GIT: The Ultimate Guide for Beginners (2020)
Автор: Jameson Garner
Количество страниц: 57

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

Скачать книгу
источник
Библиотека джависта
Онлайн-чемпионат Sovcombank Challenge 21-23 мая.

Конкурс для java-разработчиков и системных аналитиков, который запустили «Совкомбанк» и «Сколково», поможет решить реальные задачи и получить свежие решения и идеи.

▪️ 2 номинации
▪️ 3 призовых места
▪️ Общий призовой фонд 1 000 000 рублей
Победители, помимо денежных призов, могут получить от банка предложение о работе.

В течение двух дней разработчики и аналитики дистанционно пройдут отборочный и основной этапы конкурса:

Java-разработчики:
Решат задачи и вопросы, которые определят их уровень знаний в Java core, Collections, принципах объектно-ориентированного программирования, веб-сервисами, очередями, базами данных, в том числе из приложений (Hibernate, Spring data, JDBC, JPA). .
Создадут минимально жизнеспособный продукт — приложение, которое будет закрыто авторизацией, сможет принимать вызовы по REST API и взаимодействовать с тестовым окружением по различным протоколам.

Системные аналитики:
Определят общие навыки по специальности.
Решат задания, в которых смогут проявить свои навыки на всех стадиях работы с продуктом: от постановки требований от заказчика, до предоставлением готовой технической документации.

Как определяются победители?
24 мая платформа All Cups подведет итоги соревнования, которые объявят на конференции Startup Village 2021.

3 призовых места в 2 номинациях получат общий призовой фонд в размере 1 млн рублей, а лучшие участники —  рабочий оффер от «Совкомбанка».

Прием заявок до 21 мая. Регистрируйтесь на сайте: https://bit.ly/3w8oIlq
источник
Библиотека джависта
Где у Java приложения точка входа?

В обычном Java приложении всегда должен быть main class, содержащий метод main. С него начинается исполнение всей программы. Main class-ом может быть не только класс, но и интерфейс или enum. Для JavaFX приложения главный класс должен реализовывать javafx.application.Application.

main обязательно public static. Дополнительно, методу разрешено иметь модификатор strictfp. На аннотации и список исключений ограничений не накладывается.

В главном методе должен быть объявлен единственный аргумент – массив строк. Обе конструкции String[] и String... компилируются в один и тот же байт-код, так что приемлемы оба варианта. Название массива может быть любым, а значение будет содержать аргументы командной строки.

Когда приложение запускается как classpath, главный класс передается параметром командной строки. Если выполняется единственный исходник, он и описывает main class.

Для исполняемого jar-файла (java -jar MyJar.jar), его главный класс должен быть указан в манифесте. Внутри архива, в файл META-INF/MANIFEST.MF добавляется строчка вида Main-Class: ru.itsobes.MyClass. Иначе запуск завершается ошибкой «no main manifest attribute».

В случае, когда в указанном главном классе не оказывается метода, который бы удовлетворял всем критериям главного метода, программа падает с ошибкой «Main method not found».

В апплетах вместо main входной точкой служат методы init и start. Начиная с версии Java 9 технология апплетов объявлена устаревшей, а с 11 – совсем удалена. Не будем останавливаться на них подробнее.
источник
2021 May 16
Библиотека джависта
Есть опыт и знания в 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_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.
источник
2021 May 17
Библиотека джависта
Чем анонимный внутренний класс отличается от лямбды?

Лямбда-выражение имеет более легковесный синтаксис. Не нужно явно указывать тип функционального интерфейса, который лямбда реализует – он автоматически выведется из контекста. Лямбда-выражения добавлены в язык в первую очередь как синтаксический сахар.

С другой стороны, у класса есть поля. Экземпляр анонимного класса сохраняет свое состояние между вызовами, и меняет его при необходимости. Для лямбды доступен лишь захват и effectively final использование внешних переменных.

Лямбдой реализуется только функциональный интерфейс. Функциональный интерфейс – это тип с единственным абстрактным методом. Анонимным классом же можно расширить любой расширяемый класс или реализовать интерфейс с любым количеством абстрактных методов.

Анонимный класс создает новый скоуп, лямбда работает в текущем. Это значит, что объявление переменной с именем, которое уже используется снаружи, в лямбде вызовет ошибку компиляции «variable is already defined», в анонимном классе скроет (shadowing) внешнюю переменную.

С точки зрения реализации JVM, для лямбды не создается дополнительного .class файла, как это происходит для анонимного класса. Соответственно, не происходит и обычной загрузки и верификации класса. Вместо этого используется механизм invokedynamic и класс генерируется на лету с помощью LambdaMetafactory. Так что лямбда-выражения обычно работают быстрее. Внутренности реализации подробно разобраны например в этой статье.
источник
Библиотека джависта
Приходи развивать навыки 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 по московскому времени. Будет интересно!
источник
Библиотека джависта
Reactive Spring (2020)
Автор: Josh Long
Количество страниц: 486

Микросервисы и большие данные все чаще сталкивают нас с ограничениями традиционного ввода / вывода. Присоединяйтесь к Spring Developer'у Джошу Лонгу, чтобы познакомиться с реактивным программированием в экосистеме Spring, используя спецификацию реактивных потоков, Reactor, Spring Boot, Spring Cloud. В этой книге будут рассмотрены важные концепции реактивного программирования, включая проект Reactor и спецификацию реактивных потоков, доступ к данным, веб-программирование, RPC с такими протоколами, как RSocket, тестирование, интеграцию и композицию, и многое другое.

Скачать книгу
источник
2021 May 18
Библиотека джависта
Мы тут с ребятами думаем запустить курс в виде зум и/или оффлайн-встреч, часть курса запишем с топовыми психологами, поэтому если вам интересно, ответьте на 3 вопроса в нашей форме (оринтировочно это займет 2-3 минуты)
https://forms.gle/nBJxwf9pFbYw3mNm9

В форме нет обязательных вопросов.
источник
Библиотека джависта
ВТБ открывает набор 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
Почта mv@hrprime.ru
источник
Библиотека джависта
Как Spring Framework реализует паттерн Dependency Injection?

Инверсия контроля (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.
источник
Библиотека джависта
Что делает семафор?

Семафор – один из старейших примитивов синхронизации. Он был изобретен Дейкстрой в 1968 году. По большому счету это счетчик, который можно увеличивать и уменьшать из разных потоков. Уменьшение до 0 блокирует уменьшающий поток. Состояние, когда счетчик больше нуля называют сигнальное состояние, операцию его увеличения – release (освобождение) или signal, уменьшения – acquire (захват) или wait.

На практике можно представить, что release – выделение квоты доступа к критической секции программы. acquire – использование необходимого объема доступной квоты, или ожидание, если её не хватает. Подробнее с деталями работы семафора поможет ознакомиться перевод статьи с картинками на хабре.

В Java семафор реализован классом Semaphore. Состоит этот класс в основном из разных форм методов acquire (с таймаутом, с игнорированием InterruptedException, неблокирующий) и release. Методы могут принимать параметр permits – тот самый объем квот, которые необходимо освободить/захватить.

Несколько вспомогательных методов позволяют узнать больше о количестве и составе очереди потоков, которые ждут освобождения пермитов. А методы availablePermits и drainPermits позволяют узнать количество оставшихся пермитов, и захватить их все соответственно. В конструкторе конфигурируются изначальное количество пермитов, и свойство fair (аналогичное свойству ReentrantLock).
источник