Java библиотека
31.6K subscribers
2.13K photos
63 videos
6 files
1.83K links
Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial
Download Telegram
Скилл, который нужен разработчикам и архитекторам в крупных компаниях

Сегодня немногие веб-разработчики обладают достаточным опытом для создания отказоустойчивых и масштабируемых архитектур. И именно такие специалисты являются самыми высокооплачиваемыми и востребованными в Google, VK, Yandex, Netflix и других корпорациях.

Изучите работу с высоконагруженными системами на курсе «Highload Architect» от OTUS.

Всего за 5 месяцев вы:

- научитесь использовать решения, которые выдерживают сотни тысяч (и даже миллионы) запросов в секунду;
- сможете правильно оптимизировать работоспособность серверов;
- актуализируйте и систематизируйте знания в сфере HighLoad.

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

Не упустите возможность получить вакантное место в крупном проекте, пройдите тестирование прямо сейчас и узнайте, готовы ли вы к обучению на курсе: https://otus.pw/7xtE/
ServletContext

ServletContext предоставляет сервлету доступ к контексту веб-приложения. Он содержит общую информацию о приложении и позволяет сервлетам взаимодействовать.
Доступ к ServletContext можно получить через метод getServletContext() класса ServletConfig.

Через ServletContext можно получить данные инициализационных параметров web.xml.
ServletContext позволяет сервлетам оставлять атрибуты, доступные всем сервлетам данного приложения.

Также с его помощью можно получить ресурсы приложения, например потоки ввода-вывода.
Что такое ООП?

Объектно-ориентированное программирование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

• объектно-ориентированное программирование использует в качестве основных логических конструктивных элементов объекты, а не алгоритмы;
• каждый объект является экземпляром определенного класса
• классы образуют иерархии.

Программа считается объектно-ориентированной, только если выполнены все три указанных требования. В частности, программирование, не использующее наследование, называется не объектно-ориентированным, а программированием с помощью абстрактных типов данных.

Согласно парадигме ООП программа состоит из объектов, обменивающихся сообщениями. Объекты могут обладать состоянием, единственный способ изменить состояние объекта - послать ему сообщение, в ответ на которое, объект может изменить собственное состояние.
🔥 Как работать с аспектами в Java и Spring?

Узнайте всего за пару часов на бесплатном открытом уроке от OTUS.

На эфире:

- Выясним, что такое аспекты.
- Разберемся, как работают аспекты в Spring.
- Узнаем, что нужно и что не нужно писать на аспектах.

📢📢 Занятие пройдёт 2 ноября в 20:00 мск и будет приурочено к старту курса «Разработчик на Spring Framework».

🎫 После урока вы сможете приобрести полный курс в рассрочку.

Это отличная возможность совершенно бесплатно протестировать формат обучения и задать преподавателю любые вопросы в режиме реального времени.

➡️ Регистрируйтесь на мероприятия прямо сейчас: https://otus.pw/heVh/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
LongAdder

LongAdder — это класс из пакета java.util.concurrent, оптимизированный для высокопроизводительного параллельного суммирования long значений.

LongAdder применяется в многопоточных приложениях, когда нужно эффективно подсчитать сумму или другое агрегатное значение из нескольких потоков.

Преимущества:
— Высокая скорость за счет разделения на сегменты и отсутствия блокировок.
— Минимизация конфликтов между потоками при обновлении.
— Лучше масштабируется на большом кол-ве ядер.
Бесплатный практический вебинар — Java: с чего начать карьеру в программировании?

Когда: 26 октября в 19:00 по мск.

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

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

🎁 Всем, кто зарегистрировался — Гайд «Как заговорить на сленге IT-специалистов», а каждому участнику — Карта компетенций Java-разработчика.

Погрузитесь в основы Java и задайте вопросы опытному разработчику!

Реклама. ООО "ХЕКСЛЕТ РУС". ИНН 7325174845. erid: LjN8KXBB3
Что представляет собой «обмен сообщениями»?

Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия. В ООП посылка сообщения (вызов метода) — это единственный путь передать управление объекту. Если объект должен «отвечать» на это сообщение, то у него должна иметься соответствующий данному сообщению метод. Так же объекты, используя свои методы, могут и сами посылать сообщения другим объектам. Обмен сообщениями реализуется с помощью динамических вызовов, что приводит к чрезвычайно позднему связыванию (extreme late binding).

Пусть требуется создать физическую модель, описывающую сталкивающиеся шары разных размеров. Традиционный подход к решению этой задачи примерно таков: определяется набор данных, описывающих каждый шар (например, его координаты, массу и ускорение); каждому шару присваивается уникальный идентификатор (например, организуется массив, значение индекса которого соответствует номеру шара), который позволит отличать каждый из шаров от всех других. Наконец, пишется подпрограмма с названием, скажем, bounce; эта процедура должна на основе номера шара и его начальных параметров соответствующим образом изменять данные, описывающие шар. В отличие от традиционного подхода объектно-ориентированная версия программы моделирует каждый из шаров посредством объекта. При этом объект, соответствующий конкретному шару, содержит не только его параметры, но и весь код, описывающий поведение шара при различных взаимодействиях. Так, каждый шар будет иметь собственный метод bounce(). Вместо того, чтобы вызывать подпрограмму bounce с аргументом, определяющим, скажем, шар №3, необходимо будет передать объекту «шар №3» сообщение, предписывающее ему выполнить столкновение.
😱 Вредные советы для Java разработчиков

Все мы пишем много кода и слышим много советов о том, как это делать лучше. Но как же это надоело, хочу дать вам советы, как сделать код, который сложно прочитать и, следовательно, сложно сопровождать.

В статье мы научимся:
✔️ как тратить своё время и время коллег впустую;
✔️ стать незаменимым, так как больше в вашем коде никто не разберется;
✔️заслужить всеобщую ненависть.

💡 Читайте вредные советы от Отус и не пытайтесь это повторить!

А если хотите прокачать свои навыки, приходите на наш авторский курс "Java Developer. Professional" и становитесь экспертом в своей области!

📌Курс рассчитан на программистов с опытом, и чтобы понять достаточно ли у вас навыков для обучения, пройдите небольшой тест из 20 вопросов: https://otus.pw/Dc5V/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Не happens-before единым: нестандартные семантики

Несмотря на то, что новые режимы упорядочивания доступов к памяти стали доступны еще с выходом JDK 9, немногие разработчики знакомы с ними. Хотя эти семантики все еще не имеют формального описания в модели памяти Java, они широко используются в популярных многопоточных библиотеках: JCTools, Disruptor, Agrona, Aeron и многих других. Поэтому для изучения исходного кода этих проектов нужно понимать существующие режимы упорядочивания.

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

В
докладе последовательно рассматриваются все доступные на данный момент режимы: plain, opaque, release-acquire, volatile. Для каждого показаны его высокоуровневые свойства и примеры использования.

Доклад будет интересен всем, кто интересуется многопоточным программированием, моделями памяти и популярными lock-free библиотеками.
У вас есть готовый ИТ-продукт? Сделайте пилот с ВТБ!

Акселератор ВТБ приглашает технологические стартапы и компании протестировать свои решения на бизнес-процессах и клиентах банка. А в случае успешного пилота – стать поставщиком услуги/лицензии/продукта.

Подайте заявку на сайте, пройдите экспертизу и сделайте быстрый пилот с Акселератором ВТБ.

Преимущества банка:
- коммерческие пилоты
- fast track по запуску пилотов
- экспертиза по развитию вашего продукта

Действуем вместе!
Интерфейс Iterable

Iterable используется для представления коллекций, которые можно итерировать или пройти в цикле.

Он определяет метод iterator(), который возвращает объект Iterator.
Этот Iterator позволяет поочередно получать элементы коллекций, также его можно использовать в цикле while или for-each для последовательного перебора всех элементов коллекции.

Это позволяет абстрагироваться от конкретного типа коллекции. Мы можем работать с Iterable и Iterator, не завися от того список это, множество или очередь. Такой подход упрощает использование разных коллекций.
Расскажите про основные понятия ООП: «класс», «объект», «интерфейс».

Класс
– это способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью (контракт).

С точки зрения программирования класс можно рассматривать как набор данных (полей, атрибутов, членов класса) и функций для работы с ними (методов).

С точки зрения структуры программы, класс является сложным типом данных.

Объект (экземпляр) – это отдельный представитель класса, имеющий конкретное состояние и поведение, полностью определяемое классом. Каждый объект имеет конкретные значения атрибутов и методы, работающие с этими значениями на основе правил, заданных в классе.

Интерфейс – это набор методов класса, доступных для использования. Интерфейсом класса будет являться набор всех его публичных методов в совокупности с набором публичных атрибутов. По сути, интерфейс специфицирует класс, чётко определяя все возможные действия над ним.
Метод PutAll()

Метод putAll() используется для копирования всех элементов одной хэш-таблицы или Map в другую. Он принимает в качестве аргумента другую Map или хэш-таблицу, и копирует все её пары ключ-значение в исходную коллекцию.
Метод putAll() не возвращает значения и не бросает исключений.

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

Также с помощью этого метода можно объединять данные из нескольких Map в одну целевую коллекцию.
Мы устраиваем Yandex Backend Tour по городам России!

Наши разработчики хотят познакомиться со специалистами из разных городов страны. Мы приедем в Москву, Нижний Новгород, Екатеринбург, Новосибирск и Санкт-Петербург. Ребята расскажут, почему они любят свои сервисы, какими технологиями пользуются и что предлагают кандидатам. На встречах будут сотрудники из 14 разных сервисов Яндекса. После мы вместе послушаем стендап Севы Ловкачева, устроим нетворкинг, отдохнём и поболтаем о жизни.

Кроме этого, мы устроим онлайн-трансляцию встречи из Москвы — вы сможете подключиться и пообщаться с нашими разработчиками из любого города России.

Вот расписание встреч:

🔸 13 ноября онлайн-трансляция

🔸 13 ноября офлайн-встреча в Москве

🔸 14 ноября офлайн-встреча в Нижнем Новгороде

🔸 15 ноября офлайн-встреча в Екатеринбурге

🔸 16 ноября офлайн-встреча в Новосибирске

🔸 17 ноября офлайн-встреча в Санкт-Петербурге

А с 20 по 26 ноября мы проведём Week Offer Backend: предложим всего за одну неделю получить офер в одну из 14 участвующих команд. Приглашаем кандидатов с опытом разработки от трёх лет на одном из этих языков программирования: С++, С#, Python, Java, Go и Scala. Принимаем заявки до 19 ноября.

Узнать подробности и зарегистрироваться можно здесь.

Реклама. ООО "Яндекс". erid: 2VtzqvmR6Kp
В чем заключаются преимущества и недостатки объектно-ориентированного подхода в программировании?

Преимущества:
• Объектная модель вполне естественна, поскольку в первую очередь ориентирована на человеческое восприятие мира, а не на компьютерную реализацию.
• Классы позволяют проводить конструирование из полезных компонентов, обладающих простыми инструментами, что позволяет абстрагироваться от деталей реализации.
• Данные и операции над ними образуют определенную сущность, и они не разносятся по всей программе, как нередко бывает в случае процедурного программирования, а описываются вместе. Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения.
• Инкапсуляция позволяет привнести свойство модульности, что облегчает распараллеливание выполнения задачи между несколькими исполнителями и обновление версий отдельных компонентов.
• Возможность создавать расширяемые системы.
• Использование полиморфизма оказывается полезным при:
○ Обработке разнородных структур данных. Программы могут работать, не различая вида объектов, что существенно упрощает код. Новые виды могут быть добавлены в любой момент.
○ Изменении поведения во время исполнения. На этапе исполнения один объект может быть заменен другим, что позволяет легко, без изменения кода, адаптировать алгоритм в зависимости от того, какой используется объект.
○ Реализации работы с наследниками. Алгоритмы можно обобщить настолько, что они уже смогут работать более чем с одним видом объектов.
○ Возможности описать независимые от приложения части предметной области в виде набора универсальных классов, или фреймворка, который в дальнейшем будет расширен за счет добавления частей, специфичных для конкретного приложения.
• Повторное использование кода:
○ Сокращается время на разработку, которое может быть отдано другим задачам.
○ Компоненты многоразового использования обычно содержат гораздо меньше ошибок, чем вновь разработанные, ведь они уже не раз подвергались проверке.
○ Когда некий компонент используется сразу несколькими клиентами, улучшения, вносимые в его код, одновременно оказывают положительное влияние и на множество работающих с ним программ.
○ Если программа опирается на стандартные компоненты, ее структура и пользовательский интерфейс становятся более унифицированными, что облегчает ее понимание и упрощает использование.

Недостатки:
• В сложных иерархиях классов поля и методы обычно наследуются с разных уровней. И не всегда легко определить, какие поля и методы фактически относятся к данному классу.
• Код для обработки сообщения иногда «размазан» по многим методам (иначе говоря, обработка сообщения требует не одного, а многих методов, которые могут быть описаны в разных классах).
• Документирование классов - задача более трудная, чем это было в случае процедур и модулей. Поскольку любой метод может быть переопределен, в документации должно говориться не только о том, что делает данный метод, но и о том, в каком контексте он вызывается.
• Неэффективность и неэкономное распределения памяти на этапе выполнения (по причине издержек на динамическое связывание и проверки типов на этапе выполнения).
• Излишняя универсальность. Часто содержится больше методов, чем это реально необходимо текущей программе. А поскольку лишние методы не могут быть удалены, они становятся мертвым грузом.
Java Guru - вопросы и задачи с собеседований. Канал с помощью которого ты точно получишь оффер!

👩‍💻 Android Developer - канал для андроид разработчиков! Статьи, вопросы и задачи с собеседований, лайфхаки.

👩‍💻 Kotlin Developer - самый топовый канал для котлин разработчика!

📕 Книги для Java программиста - канал с книгами по Java. Постоянно выходят новинки как на русском так и на английском языке!

📰 Java News - канал с последними новостями из мира Java!
Please open Telegram to view this post
VIEW IN TELEGRAM
👩‍💻 Планировщик задач в Spring или что умеет Spring Scheduler?

Часто бывает необходимо, чтобы приложение выполняло какие-то действия регулярно, в определённое время. Например каждое утро выгружать актуальные данные из стороннего сервиса, инвалидировать кэш в конце дня и т.п. Для этих целей в Spring существует встроенный планировщик задач, он же Scheduler. В этом видео автор расскажет о том, как работать с планировщиком задач в приложении на Spring Boot, как его настроить в своём проекте и какие возможности у него есть.
Please open Telegram to view this post
VIEW IN TELEGRAM
❗️Внимание! Важное сообщение❗️

👾 На связи YKul

Если ты:
👨🏻‍💻 Хочешь стать java-разработчиком и зарабатывать в сфере IT
🎓 Окончил курсы java-программиста, но пока не уверен в своих умениях
👨🏻‍💻 Хорошо знаком с теорией, но боишься практиковать

➡️ Мы приглашаем тебя стать профессионалом вместе с менторами YKul !

😎 Наставники YKul - это опытные разработчики с сотнями успешно реализованных проектов в резюме. Они проведут тебя в мир специалистов IT по кратчайшему пути и обучат важнейшим навыкам в комфортном для тебя режиме.

Мы предоставляем 7 дней бесплатного обучения всем новичкам.
Не теряй время, попробуй менторинг YKul !
🌐 Узнать подробнее
📲 @ykulmanager1

Реклама: ИП Кулагин Андрей Николаевич, ИНН: 740411652688
В чем разница между композицией и агрегацией?

Ассоциация
обозначает связь между объектами. Композиция и агрегация — частные случаи ассоциации «часть-целое».

Агрегация предполагает, что объекты связаны взаимоотношением «part-of» (часть). Композиция более строгий вариант агрегации. Дополнительно к требованию «part-of» накладывается условие, что экземпляр «части» может входить только в одно целое (или никуда не входить), в то время как в случае агрегации экземпляр «части» может входить в несколько целых.

Например, книга состоит из страниц, и мы не можем вырвать страницу из книги и вложить в другую книгу. Страницы четко привязаны к конкретной книге, поэтому это композиция. В тоже время мы можем взять и перенести книгу из одной библиотеки в другую - это уже агрегация.
27 и 28 ноября в Москве пройдёт юбилейный, 20-й, HighLoad++. Мы собрали самую масштабную конференцию за последние 15 лет!

3000 участников
150+ докладов
11 залов
5 мастер-классов
Конференция в конференции — GolangConf 2023
Премия HighLoad++ 2023

👉Подробнее: https://clck.ru/36ETv8

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

Вместе с нашими партнёрами из Яндекса мы собрали целый опенсорс-трек, а на конференции проведём опенсорс трибуну, где вы сможете узнать о решениях с открытым кодом, которые создаются прямо сейчас. Для golang-разработчиков собрали конференцию. И после трёхлетнего перерыва, при поддержке VK, проведём церемонию награждения лауреатов Премии HighLoad++. 

Реклама. ООО "КОНФЕРЕНЦИИ ОЛЕГА БУНИНА". ИНН 7733863233. erid: LjN8KRBvv