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

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

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

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

Сообщество VK https://vk.com/javatutorial
Download Telegram
Чем полезны неизменяемые объекты?

Неизменяемость (immutability) помогает облегчить написание многопоточного кода. Неизменяемый объект может быть использован без какой-либо синхронизации. К сожалению, в Java нет аннотации @Immutable, которая делает объект неизменяемым, для этого разработчикам нужно самим создавать класс с необходимыми характеристиками. Для этого необходимо следовать некоторым общим принципам: инициализация всех полей только в конструкторе, отсутствие методов setX() вносящих изменения в поля класса, отсутствие утечек ссылки, организация отдельного хранилища копий изменяемых объектов и т.д.
👍311
🟢 Как работать с Kafka на SQL?

🔥 Знание Kafka и умение грамотно с ней работать значительно повышает востребованность и стоимость услуг IT-специалиста.

Начните или углубите изучение этого инструмента на бесплатном открытом уроке ksqlDB - анализируем потоки на SQL от OTUS.

💻 На занятии вы узнаете:

— что такое Kafka;
— что такое ksqlDB;
— как работать с Kafka в интерактивном режиме на SQL;
— как ksqlDB помогает интегрировать Kafka с внешними системами.

Преподаватель Вадим Заигрин – Team Lead команд инженеров данных на разных проектах, разработчик, Data Engineer и Data Scientist с опытом в IT более 35 лет.

✔️ Занятие пройдёт 27 сентября в 20:00 мск в рамках курса «Apache Kafka».

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

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

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
👩‍💻 Транзакции - Spring Framework в деталях

Транзакции являются важным инструментом для построения отказоустойчивых информационных систем, работающих в условиях постоянной высокой нагрузки и обеспечивающих одновременную работу десятков, сотен, а то и тысяч пользователей.
В
этом ролике автор постарался рассказать про проблемы, возникающие в многопользовательских информационных системах, про транзакции и требования ACID к транзакционным системам, уровни изолированности и распространение транзакций, а так же демонстрирует API для управления транзакциями, предоставляемые Spring Framework.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍174🔥21
Вышла Java 21

Вышла общедоступная версия Java 21. В этот релиз попало около 2500 закрытых задач и 15 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.

Java 21 является LTS-релизом, а значит у него будут выходить обновления как минимум 5 лет с момента выхода.

Читать статью
👍75🔥1410🎉21
Java библиотека pinned «Вышла Java 21 Вышла общедоступная версия Java 21. В этот релиз попало около 2500 закрытых задач и 15 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь. Java 21 является LTS-релизом, а значит у него будут выходить обновления как минимум…»
Что такое busy spin?

busy spin – это техника, которую программисты используют, чтобы заставить поток ожидать при определённом условии. В отличие от традиционных методов wait(), sleep() или yield(), которые подразумевают уступку процессорного времени, этот метод вместо уступки выполняет пустой цикл. Это необходимо, для того, чтобы сохранить кэш процессора, т.к. в многоядерных системах, существует вероятность, что приостановленный поток продолжит своё выполнение уже на другом ядре, а это повлечет за собой перестройку состояния процессорного кэша, которая является достаточно затратной процедурой.
👍39🔥6
🦾 Освойте востребованный фреймворк всего за 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)

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

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

➡️ Пройти тест

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

В этом примере мы объявляем строку str и устанавливаем ее значение на "abc123def456". Затем мы создаем переменную count, которая будет использоваться для подсчета количества цифр в строке.
👍20😁61
👉 Создайте свое первое приложение под Android

📅 21 сентября в 20:00 в рамках курса «Android Developer» от OTUS.
Напишите приложение «Погода» самостоятельно за 60 минут

На занятии:
- создадим приложение из одного экрана, которое будет показывать погоду на данный момент в заданном городе, используя MVVM, Retrofit, Kotlin Coroutines, Piasso;
- узнаем, что создавать приложения под Android – не сложно и не страшно;
- познакомимся с архитектурой MVVM, получением данных из сети и организацией асинхронной работы с помощью Kotlin Coroutines.

📌 Урок доступен для всех желающих познакомиться с Android-разработкой. Это живой эфир, на котором вы сможете задать преподавателю любые вопросы в режиме реального времени!

Не упустите возможность совершенно бесплатно создать первый кейс для своего портфолио!

👉
Регистрируйтесь прямо сейчас

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍6🔥211
Основы программирования на Java: Для школьников... и не только (2019) PDF

Курс «Основы компьютерных наук для средней школы» является базовым курсом по основам программирования. Данное издание рассчитано на учеников старших классов (9–11), не имеющих опыта в написании компьютерных программ или имеющих минимальный опыт. Такой подход позволяет использовать учебник и в рамках коллективных занятий (на уроках, факультативах или кружках), и при самостоятельном индивидуальном обучении.

Пособие содержит как общие теоретические положения подхода к написанию программ, так и описание практических приемов, а также разбор соответствующих излагаемому материалу примеров.
Книга написана на основании базовой части курса «Компьютерные науки», преподаваемого в 9–12 классах израильской школы. Авторы — ведущие преподаватели этого курса, с опытом работы более 25 лет.
👍12🔥3
Перечислите принципы, которым вы следуете в многопоточном программировании?

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

• Всегда давайте значимые имена своим потокам. Процесс отладки, нахождения ошибок или отслеживание исключения в многопоточном коде – довольно сложная задача. OrderProcessor, QuoteProcessor или TradeProcessor намного информативнее, чем Thread1, Thread2 и Thread3. Имя должно отражать задачу, выполняемую данным потоком.
• Избегайте блокировок или старайтесь уменьшить масштабы синхронизации. Блокировка затратна, а переключение контекста ещё более ресурсоёмко. Пытайтесь избегать синхронизации и блокировки насколько это возможно, и организуйте критическую секцию в минимально необходимом объёме. Поэтому синхронизированный блок всегда предпочительней синхронизированного метода, дополнительно наделяя возможностью абсолютного контроля над масштабом блокировки.
• Обрабатывайте прерывание потока с особой тщательностью. Нет ничего хуже оставшегося заблокированным ресурса или системы в неконстистентном, по причине неподтверждённой транзакции, состоянии.
• Помните об обработке исключений. Выброшенные InterruptedException должны быть адекватно обработаны, а не просто подавлены. Так же не стоит пренебрегать Thread.UncaughtExceptionHandler. При использовании пула потоков необходимо помнить, что он зачастую просто «проглатывает» исключения. Так, если вы отправили на выполнение Runnable нужно обязательно поместить код выполнения задачи внутрь блока try-catch. Если в очередь пула помещается Callable, необходимо удостоверится, что результат выполнения всегда изымается помощью блокирующего get(), чтобы в случае возникновения существовала возможнотсь заново выбросить произошедшее исключение.
• Между синхронизаторами и wait() и notify() следует выбирать синхронизаторы. Во-первых, синхронизаторы, типа CountDownLatch, Semaphore, CyclicBarrier или Exchanger упрощают написание кода. Очень сложно реализовывать комплексный управляющий поток, используя wait() и notify(). Во-вторых, эти классы написаны и поддерживаются настоящими мастерами своего дела и есть шанс, что в последующих версиях JDK они будут оптимизированы изнутри или заменены более производительной внешней реализацией.
• Почти всегда использование Concurrent сollection выгоднее использования Synchronized сollection, т.к. первые более современны (используют все доступные на момент их написания новшества языка) и масштабируемы, чем их синхронизированые аналоги.
👍273🔥3
👩‍💻 Разбор и вычисление арифметических выражений на Java

Разберёмся, как можно вычислять арифметические выражения. Предположим, на вход нам поступает строка текста, которая содержит корректное арифметическое выражение.

Это выражение состоит из пробелов, чисел, скобок и знаков, обозначающих основные математические действия (плюс, минус, умножить, разделить). Нам нужно разобрать это выражение на отдельные элементы, а затем вычислить результат с учётом приоритетов математических операций.

Обработку такого выражения можно разделить на три основных этапа:
1. Разбиение строки на отдельные части
2. Обработка этих частей с учётом математических операций
3. Само вычисление
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3
🔥Научитесь создавать надежные и читаемые программы с SOLID

🔊Встречаемся 25 сентября в 20:00 мск на бесплатном открытом уроке «Особенности обработки исключений с точки зрения SOLID принципов».

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

2. Стратегии обработки исключений:
— Принцип единственной ответственности (Single Responsibility Principle) и обработка исключений;
— Принцип открытости/закрытости (Open/Closed Principle) и обработка исключений;
— Принцип подстановки Барбары Лисков (Liskov Substitution Principle) и обработка исключений;
— Принцип разделения интерфейса (Interface Segregation Principle) и границы обработки исключений;
— Принцип инверсии зависимости (Dependency Inversion Principle) и управление исключениями.

💡Участники урока получат практические примеры и сценарии, чтобы разобраться в лучших практиках обработки исключений с учетом SOLID принципов. Мы также рассмотрим ситуацию, когда обработку исключений не следует производить, а вместо этого стоит использовать альтернативные стратегии, такие как возвращать специальные коды ошибок или использовать паттерн Either.

➡️ Пройдите вступительное тестирование, мы запишем вас на урок и напомним заранее

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2
JavaFX (В подлиннике) (2020) скан PDF

Описываются базовые возможности библиотеки JavaFX, позволяющей создавать приложения с графическим интерфейсом на языке Java. Рассматриваются способы обработки событий, управление свойствами окна, создание формы с помощью программы Scene Builder, а также все основные компоненты (кнопки, текстовые поля, списки, таблицы, меню и др.) и варианты их размещения внутри окна. Описаны трансформации и эффекты, графики и диаграммы, аудио и видео, стили JavaFX CSS. Книга ориентирована на тех, кто уже знаком с языком программирования Java и хотел бы научиться разрабатывать оконные приложения, насыщенные графикой, анимацией и интерактивными элементами. Большое количество практических примеров помогает начать разработку самостоятельно. Весь материал тщательно подобран, хорошо структурирован и компактно изложен, что позволяет использовать книгу как удобный справочник.
👍14😁10🔥6💯1
Пост для Java-разработчиков, которые ищут работу или собираются увольняться с текущего места.

👉 Подписывайтесь на наш канал — в нем каждый день выходят лучшие вакансии на рынке с нормальными зарплатными вилками и хорошими условиями.

Публикуем предложения для джунов, мидлов и сеньоров, на удаленке и в офисах — оффер мечты точно найдется 👨‍💻

🔸Подписаться🔸
👩‍💻 Java. Задача о рюкзаке. Динамическое программирование.

В этом видео разбирается классическая задача о рюкзаке и алгоритмы её решения. Особое внимание уделяется решению задачи с помощью динамического программирования.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
🟥 Мастхэв-мероприятие для Java-разработчиков

🔄 Бесплатный открытый урок «Транзакции в Kafka» от OTUS.

Что будет на занятии:

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

Преподаватель Сергей Петрелевич – Java-разработчик, в отрасли с 2003 года. Программировать начал со времен ZX-Spectrum. 8 лет в разработке банковских процессинговых систем пластиковых карт.

🌐 Занятие пройдёт 27 сентября в 20:00 мск в рамках курса «Java Developer. Professional».

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

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

➡️ Пройти тест

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Java. Эффективное программирование, 3-е издание (2019) PDF, DJVU

Язык программирования Java существенно изменился со времени предыдущего издания книги, опубликованного вскоре после выпуска Java б. Этот классический труд тщательно обновлен, чтобы читатели могли в полной мере воспользоваться возможностями последних версий языка и его библиотек функций. В современном Java поддерживается несколько парадигм программирования.
Как и в предыдущих изданиях, каждая глава книги состоит из ряда разделов, в каждом из которых описаны конкретные советы, приведены тонкости платформы Java и содержатся обновленные примеры кода. Для каждой темы приводятся всеобъемлющее описание и пояснения.
Третье издание охватывает особенности языка программирования и библиотек, появившихся в Java 7, 8 и 9, в том числе конструкции функционального программирования, добавленные к своим объектно-ориентированным корням. В книгу включены также многие новые советы и глава, посвященная лямбда-выражениям и потокам.
👍16🔥6
Какое из следующих утверждений о потоках неверно?

1. Если метод start() вызывается дважды для одного и того же объекта Thread, во время выполнения генерируется исключение.
2. Порядок, в котором запускались потоки, может не совпадать с порядком их фактического выполнения.
3. Если метод run() вызывается напрямую для объекта Thread, во время выполнения генерируется исключение.
4. Если метод sleep() вызывается для потока, во время выполнения синхронизированного кода, блокировка не снимается.

Правильный ответ: 3. Если метод run() вызывается напрямую для объекта Thread, во время выполнения исключение не генерируется. Однако, код, написанный в методе run() будет выполняться текущим, а не новым потоком. Таким образом, правильный способ запустить поток – это вызов метода start(), который приводит к выполнению метода run() новым потоком.

Вызов метода start() дважды для одного и того же объекта Thread приведёт к генерированию исключения IllegalThreadStateException во время выполнения, следовательно, утверждение 1 верно. Утверждение 2 верно, так как порядок, в котором выполняются потоки, определяется Планировщиком потоков, независимо от того, какой поток запущен первым. Утверждение 4 верно, так как поток не освободит блокировки, которые он держит, когда он переходит в состояние Ожидания.
👍19🔥42
Даны 3 потока Т1, Т2 и Т3? Как реализовать выполнение в последовательности Т1, Т2, Т3?

Такой последовательности выполнения можно достичь многими способами, например просто воспользоваться методом join(), чтобы запустить поток в момент, когда другой уже закончит своё выполнение. Для реализации заданной последовательности, нужно запустить последний поток первым, и затем вызывать метод join() в обратном порядке, то есть Т3 вызывает Т2.join, а Т2 вызывает Т1.join, таким образом Т1 закончит выполнение первым, а Т3 последним.
👍28🔥5