Java библиотека
31.6K subscribers
2.32K photos
77 videos
8 files
2.05K links
Книги, статьи, мемы и многое другое для Java программиста!

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

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

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

Сообщество VK https://vk.com/javatutorial
Download Telegram
🦾 Освойте востребованный фреймворк всего за 5 месяцев и создавайте приложения на Java

🔥🔝 Знание Spring Framework – один из самых востребованных скиллов для разработчика, многие крупные проекты ищут именно таких специалистов на самые желанные офферы.

5️⃣ Вместе с OTUS вы можете освоить Spring всего за 5 месяцев в рамках курса «Разработчик на Spring Framework»!

Что даст вам этот курс:
- Умение эффективно работать в проектах, где есть Spring
✔️ Знание современных возможностей Spring
✔️ Понимание, как создавать Web-приложения на микросервисной архитектуре и решать высокоуровневые задачи по разработке
✔️ Умение быстро проходить путь от идеи до production-grade
✔️ Владение фреймворками Spring и технологиями вспомогательных проектов (Spring MVC, Spring Security, Spring Boot, Spring Reactive Stack, Spring 5)

🎫 Курс доступен для приобретения в рассрочку!

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

➡️ ПРОЙТИ ТЕСТ: https://otus.pw/gCi3/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3😁1🎅1
Типы шаблонов проектирования.

Основные (Fundamental) - основные строительные блоки других шаблонов. Большинство других шаблонов использует эти шаблоны в той или иной форме.
Порождающие шаблоны (Creational) — шаблоны проектирования, которые абстрагируют процесс создание экземпляра. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять созданный объект, а шаблон, порождающий объекты, делегирует создание объектов другому объекту.
Структурные шаблоны (Structural) определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу.
Поведенческие шаблоны (Behavioral) определяют взаимодействие между объектами, увеличивая таким образом его гибкость.
👍19🔥32
Класс ReentrantReadWriteLock

Класс ReentrantReadWriteLock используется для организации разделяемого доступа к ресурсам с разделением на чтение и запись.

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

Проще говоря, множество потоков могут одновременно заходить в метод read, но в write может находиться только один поток в данный момент времени.
Это позволяет эффективно организовать доступ на чтение и запись.
👍19🔥31
🔥 Хардовый тест для разработчиков 🔥

📕 Ответьте на 9 вопросов за 20 мин и проверьте, насколько вы готовы к обучению на курсе - «Архитектура и шаблоны проектирования»

💻 Научитесь применять шаблоны проектирования в разработках! Благодаря этому навыку вы сможете писать чистый код, экономить время на разработке и быстро «пересаживаться» на любой язык программирования.

🏵 Ждем всех, кто хочет вырасти до Middle+ разработчика или архитектора ПО!

👉 ПРОЙТИ ТЕСТ https://otus.pw/g6lO/

💣
Пройдете тест, получите демо-ролик о занятиях на курсе и Welcome-скидку.

Также вам откроется доступ к открытым урокам курса.

Реклама. Информация о рекламодателе на сайте www.otus.ru
👍9🔥2
👩‍💻 Вчера SAP за 10 млн $, сегодня Java-микросервисы за 10 млн ₽

Вынесли сервис ежедневного расчета цен для 20 тысяч магазинов из SAP. Получилось:
— в 4 раза быстрее;
— в 70 раз дешевле;
— на порядки отказоустойчивее;
— бонусом прозрачное масштабирование и балансировка нагрузки.

Алексей покажет, как они спроектировали «на лету» и реализовали сложный business critical сервис с высокими требованиями и огромным объемом данных, какие сложности возникают, когда данных очень много, а времени на работу с ними мало. Спикер расскажет, какие проблемы параллельной обработки они накопали с командой и как их решали. Он также поделится техниками, значительно ускоряющими процесс проектирования.

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

Доклад будет интересен CTO, техлидам, senior-разработчикам и архитекторам.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥62
В OTUS продолжается набор в группу курса "Kotlin Backend Developer Professional".

🔥Старт 25.10.2023 г.

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

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

За время обучения преподаватели на вебинарах в качестве примера разработают проект маркетплейса от идеи и постановки задачи до конечного решения.

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

🔥ПРОЙТИ ТЕСТ и получить бонус https://otus.pw/2NC6/

При поступлении в группу возможны разные способы оплаты и рассрочка платежа

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KLT8h
👍61🔥1
Оptimistic locking

optimistic locking — это стратегия контроля параллельного доступа к ресурсам или данным, которая позволяет не блокировать ресурсы в течение длительного времени. Она основывается на предположении, что конфликты при доступе к данным встречаются редко, и поэтому вместо того чтобы заблокировать ресурс целиком на протяжении операции, она позволяет нескольким потокам или процессам работать с данными параллельно.

Если возникает конфликт, то один из потоков получит уведомление об этом и может принять меры для разрешения конфликта.
👍20🔥1
Что такое Dependency Injection?

Dependency Injection (внедрение зависимости) - это набор паттернов и принципов разработки програмного обеспечения, которые позволяют писать слабосвязный код. В полном соответствии с принципом единой обязанности объект отдаёт заботу о построении требуемых ему зависимостей внешнему, специально предназначенному для этого общему механизму.
🔥22👍82🎉1
👩‍💻 Cloud Native JVM. Cloud Runtime

Что делают JVM Runtime? Почему у Java-приложений есть warmup и что делают в Java-мире, чтобы от него избавиться? Почему Java-приложения имеют outliers?

Микросервисы или распределенные приложения выполняются множеством JVM на множестве нод. Могут ли JVM помогать друг другу? Что получится, если Runtime вынести в облако в виде JVM Cloud Runtime Service?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍121🔥1
Скилл, который нужен разработчикам и архитекторам в крупных компаниях

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

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

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

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

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

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

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

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

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

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

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

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

Согласно парадигме ООП программа состоит из объектов, обменивающихся сообщениями. Объекты могут обладать состоянием, единственный способ изменить состояние объекта - послать ему сообщение, в ответ на которое, объект может изменить собственное состояние.
👍25🔥84
🔥 Как работать с аспектами в 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
👍7🔥21🎅1
LongAdder

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Это позволяет абстрагироваться от конкретного типа коллекции. Мы можем работать с Iterable и Iterator, не завися от того список это, множество или очередь. Такой подход упрощает использование разных коллекций.
👍25🔥43