Библиотека Java разработчика
10.8K subscribers
1.14K photos
564 videos
58 files
1.44K links
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate.


По всем вопросам @evgenycarter

РКН clck.ru/3KoGeP
Download Telegram
📕Открытый урок по Scala для Java, C#, Kotlin и Android программистов, аналитиков данных и специалистов по обработке больших данных

На открытом уроке 4 декабря в 20:00 мск мы изучим, функциональные стримы в Scala на примере fs2.

📗На уроке:
- Рассмотрим, что такое стримы и их разновидности;
- Изучим конструкторы и комбинаторы fs2;
- Проанализируем примеры использования стримов для обработки данных без загрузки в память.

📘В результате:
- Поймете, что такое стримы и как они отличаются от коллекций;
- Как использовать конструкторы и комбинаторы fs2 для обработки данных;
- Получите примеры применения стримов в реальных задачах, что позволит оптимизировать обработку данных.

Спикер Валентин Шилин — senior программист/аналитик данных Deutsche Telekom IT GmbH, 15+ лет программирования на С++, С#, JavaScript, Python, Scala, Java и эксперт в обработке больших данных с помощью Scala/Spark и Hadoop Cloudera.

👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cFAjec

📙 Все участники открытого урока получат скидку на курс "Scala-разработчик"

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Как гарантировать возможность обращения N нитей к N ресурсам без взаимной блокировки?

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

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

👉@BookJava
👍4👎2
This media is not supported in your browser
VIEW IN TELEGRAM
Java spring exception handling | обработка исключений за 5 минут

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

00:23 - try catch, ResponseEntity
00:47 - наследование ResponseStatusException
01:10 - настройки отображения сообщения, названия ошибки и стек трейс в ответе
01:47 - бросаем ResponseStatusException
02:04 - аннотация @ ExceptionHandler
03:05 - аннотация @ RestControllerAdvice
03:40 - кастомный объект вместо ResponseEntity
04:02 - аннотация @ ResponseStatus

Код можно посмотреть тут: https://github.com/dispikerton/exceptionHandling

источник

👉@BookJava
👍4
⚡️ Только что закончили ВУЗ?
Начните карьеру Java-разработчика с прочной базой!

Java — один из ключевых языков программирования, который используют в банковском деле, корпоративных приложениях и IT-гигантах. Курс поможет вам освоить современные инструменты, такие как Spring, Docker, Hibernate и PostgreSQL.

Обучение на примерах реальных задач, опытные наставники и живая практика с кодом. С дипломом от OTUS вы станете заметным кандидатом для работодателей!

💪 Готовы сделать первый шаг в IT?

👉 Присоединяйтесь к курсу «Java-разработчик» и получите скидку на обучение: https://vk.cc/cFD8XY

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Уроки Java для начинающих

#1 — Установка JDK и IDE
#2 — Переменные. Примитивные типы данных
#3 — Строки (String). Ссылочные типы данных
#4 — Условные конструкции (if-else, switch-case)
#5 — Цикл for
#6— Циклы While и Do While
#7 — Консольный ввод данных
#8 — Массивы
#9 — Многомерные массивы
#10 — Классы и объекты

источник

👉@BookJava
👍3
Многопоточность в Java

В Java многопоточность реализована через класс Thread и интерфейс Runnable. Вот основные моменты, которые могут быть полезны при работе с многопоточностью:

🔵1. Создание и запуск потока
- Поток может быть создан двумя способами:
- Наследование от класса Thread:

class MyThread extends Thread {
public void run() {
// Код, выполняемый в потоке
}
}
MyThread t = new MyThread();
t.start();

- Реализация интерфейса Runnable:

class MyRunnable implements Runnable {
public void run() {
// Код, выполняемый в потоке
}
}
Thread t = new Thread(new MyRunnable());
t.start();


🔵2. Основные методы класса Thread
- start() — запуск потока.
- sleep(long millis) — приостановка потока на определенное время.
- join() — ожидание завершения потока.
- interrupt() — прерывание потока.
- isAlive() — проверка, работает ли поток.

🔵3. Синхронизация
- Чтобы избежать проблем с конкурентным доступом к данным, используется синхронизация:

synchronized (this) {
// Критическая секция
}

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

🔵4. Пул потоков
- Для управления большим количеством потоков используется пул потоков, который управляется через ExecutorService. Пример:

ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> {
// Задача для потока
});
executor.shutdown();


🔵5. Состояния потока
Потоки могут находиться в разных состояниях:
- NEW: Поток создан, но не запущен.
- RUNNABLE: Поток готов к выполнению.
- WAITING: Поток ожидает другого потока.
- TIMED_WAITING: Поток ожидает в течение определенного времени.
- TERMINATED: Поток завершен.

🔵6. Проблемы многопоточности
- Состояние гонки (Race condition) — ситуация, когда несколько потоков одновременно пытаются изменить данные, что может привести к некорректным результатам.
- Блокировки — проблемы с мертвыми блокировками (deadlocks), когда потоки навсегда блокируются, ожидая друг друга.

🔵7. Современные подходы и классы
- ForkJoinPool — используется для параллельного выполнения задач с разделением на подзадачи.
- CountDownLatch, CyclicBarrier, Semaphore — различные утилиты для синхронизации между потоками.

🔵8. Параллельное выполнение коллекций
- Коллекции в Java также могут работать с потоками через parallelStream():

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.parallelStream().forEach(System.out::println);


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

👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9👏1
⁉️ Устали гадать, что творится внутри вашего Java-приложения? Хотите мониторить всё в реальном времени?

🗓 На открытом вебинаре 10 декабря в 20:00 мск мы расскажем, как внедрить Observability в Java-приложения, отслеживать состояние системы и решать проблемы до их появления!

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

Спикер Сергей Петрелевич — опытный разработчик на Java и Kotlin.

🔗 Регистрируйтесь на вебинар: https://vk.cc/cFHd67

Успейте получить скидку на участие в курсе «Java Developer. Professional».

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

Установка @Column в updateable=false приводит к тому, что реализация JPA будет игнорировать этот столбец при выполнении оператора обновления. При этом не будет выброшено исключение. Это никак не влияет на базу данных. Вы по-прежнему можете обновлять столбец вне Hibernate.

👉@BookJava
👍5🎉1🥴1
В чем разница между классами StringBuffer и StringBuilder в языке Java?

В языке Java классы StringBuffer и StringBuilder предназначены для работы с изменяемыми строками, но их основное различие заключается в потокобезопасности:

🟢 1. StringBuffer:
- Потокобезопасность: Все методы синхронизированы, что делает этот класс безопасным для использования в многопоточных приложениях.
- Производительность: Из-за синхронизации работает медленнее в однопоточных сценариях, поскольку приходится выполнять дополнительные проверки на блокировку.
- Использование: Подходит, если требуется работа с изменяемыми строками в многопоточном окружении.

🟢 2. StringBuilder:
- Потокобезопасность: Методы не синхронизированы, поэтому StringBuilder не является потокобезопасным.
- Производительность: Быстрее, чем StringBuffer, при работе в однопоточном приложении, поскольку отсутствуют накладные расходы на синхронизацию.
- Использование: Подходит для сценариев с однопоточной обработкой строк.

🟢 3. Общие черты:
- Оба класса используют внутренний изменяемый буфер для хранения данных, что позволяет эффективно добавлять, изменять или удалять содержимое строки.
- Методы, такие как append(), insert(), delete(), reverse() и replace(), одинаково реализованы в обоих классах.

🟢 4. Рекомендации по выбору:
- Используйте StringBuffer, если требуется работа с несколькими потоками и безопасность важнее производительности.
- Используйте StringBuilder, если работаете с однопоточным кодом, чтобы обеспечить максимальную производительность.

🟢 Пример кода:

// StringBuffer (потокобезопасный)
StringBuffer buffer = new StringBuffer("Hello");
buffer.append(" World");
System.out.println(buffer);

// StringBuilder (быстрее в однопоточных сценариях)
StringBuilder builder = new StringBuilder("Hello");
builder.append(" World");
System.out.println(builder);


Выбор между StringBuffer и StringBuilder зависит от контекста использования — многопоточная или однопоточная среда.

👉@BookJava
🔥7👍2
📕Открытый урок по Scala для Java, C#, Kotlin и Android программистов, аналитиков данных и специалистов по обработке больших данных

На открытом уроке 16 декабря в 20:00 мск мы изучим, эффекты в Scala.

📗На уроке:
- узнаем, что такое эффекты и какие они бывают;
- познакомимся с понятием функционального эффекта;
- разберемся, какие задачи они могут решать.

📘В результате:
Реализуем свой функциональный эффект, применив полученные навыки.

Спикер Алексей Воронец — руководитель разработки департамента проектных решений и поисковых систем в компании Naumen, 14+ лет разработки на Scala, Java, JavaScript и PHP.

👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cFQzkO

📙 Все участники открытого урока получат скидку на курс "Scala-разработчик"

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Media is too big
VIEW IN TELEGRAM
Самоучитель по Pattern Matching в Java 21

Про новые возможности сопоставления с образцом (Pattern Matching) в Java 21.

https://nipafx.dev/java-21-pattern-matching/

👉@BookJava
👍2