📕Открытый урок по 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-разработчик"
На открытом уроке 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
Как гарантировать возможность обращения
Если вы не слишком хорошо разбираетесь в написании многопоточного кода, этот вопрос будет для вас по-настоящему каверзным. Он может оказаться непростым даже для опытного программиста, не имевшего дела с взаимными блокировками и состояниями гонки.
Весь трюк тут в упорядочении: предотвратить взаимную блокировку можно благодаря освобождению ресурсов в порядке, обратном порядку их получения.
👉@BookJava
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
В этом видео речь пойдет об обработке исключений на уровне контроллера на языке 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 вы станете заметным кандидатом для работодателей!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
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
#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 многопоточность реализована через класс
🔵 1. Создание и запуск потока
- Поток может быть создан двумя способами:
- Наследование от класса Thread:
- Реализация интерфейса
🔵 2. Основные методы класса
-
-
-
-
-
🔵 3. Синхронизация
- Чтобы избежать проблем с конкурентным доступом к данным, используется синхронизация:
Это гарантирует, что только один поток может выполнить код внутри синхронизированного блока.
🔵 4. Пул потоков
- Для управления большим количеством потоков используется пул потоков, который управляется через
🔵 5. Состояния потока
Потоки могут находиться в разных состояниях:
- NEW: Поток создан, но не запущен.
- RUNNABLE: Поток готов к выполнению.
- WAITING: Поток ожидает другого потока.
- TIMED_WAITING: Поток ожидает в течение определенного времени.
- TERMINATED: Поток завершен.
🔵 6. Проблемы многопоточности
- Состояние гонки (Race condition) — ситуация, когда несколько потоков одновременно пытаются изменить данные, что может привести к некорректным результатам.
- Блокировки — проблемы с мертвыми блокировками (deadlocks), когда потоки навсегда блокируются, ожидая друг друга.
🔵 7. Современные подходы и классы
-
-
🔵 8. Параллельное выполнение коллекций
- Коллекции в Java также могут работать с потоками через
Многопоточность — мощный инструмент для улучшения производительности приложений, но требует внимательности при реализации, чтобы избежать ошибок, таких как мертвые блокировки или некорректный доступ к данным.
👉@BookJava
В Java многопоточность реализована через класс
Thread
и интерфейс Runnable
. Вот основные моменты, которые могут быть полезны при работе с многопоточностью:- Поток может быть создан двумя способами:
- Наследование от класса 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();
Thread
-
start()
— запуск потока.-
sleep(long millis)
— приостановка потока на определенное время.-
join()
— ожидание завершения потока.-
interrupt()
— прерывание потока.-
isAlive()
— проверка, работает ли поток.- Чтобы избежать проблем с конкурентным доступом к данным, используется синхронизация:
synchronized (this) {
// Критическая секция
}
Это гарантирует, что только один поток может выполнить код внутри синхронизированного блока.
- Для управления большим количеством потоков используется пул потоков, который управляется через
ExecutorService
. Пример:
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> {
// Задача для потока
});
executor.shutdown();
Потоки могут находиться в разных состояниях:
- NEW: Поток создан, но не запущен.
- RUNNABLE: Поток готов к выполнению.
- WAITING: Поток ожидает другого потока.
- TIMED_WAITING: Поток ожидает в течение определенного времени.
- TERMINATED: Поток завершен.
- Состояние гонки (Race condition) — ситуация, когда несколько потоков одновременно пытаются изменить данные, что может привести к некорректным результатам.
- Блокировки — проблемы с мертвыми блокировками (deadlocks), когда потоки навсегда блокируются, ожидая друг друга.
-
ForkJoinPool
— используется для параллельного выполнения задач с разделением на подзадачи.-
CountDownLatch
, CyclicBarrier
, Semaphore
— различные утилиты для синхронизации между потоками.- Коллекции в 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
🗓 На открытом вебинаре 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
Совет 💡
Установка
👉@BookJava
Установка
@Column в updateable=false
приводит к тому, что реализация JPA будет игнорировать этот столбец при выполнении оператора обновления. При этом не будет выброшено исключение. Это никак не влияет на базу данных. Вы по-прежнему можете обновлять столбец вне Hibernate.👉@BookJava
👍5🎉1🥴1
В чем разница между классами StringBuffer и StringBuilder в языке Java?
В языке Java классы
🟢 1. StringBuffer:
- Потокобезопасность: Все методы синхронизированы, что делает этот класс безопасным для использования в многопоточных приложениях.
- Производительность: Из-за синхронизации работает медленнее в однопоточных сценариях, поскольку приходится выполнять дополнительные проверки на блокировку.
- Использование: Подходит, если требуется работа с изменяемыми строками в многопоточном окружении.
🟢 2. StringBuilder:
- Потокобезопасность: Методы не синхронизированы, поэтому
- Производительность: Быстрее, чем
- Использование: Подходит для сценариев с однопоточной обработкой строк.
🟢 3. Общие черты:
- Оба класса используют внутренний изменяемый буфер для хранения данных, что позволяет эффективно добавлять, изменять или удалять содержимое строки.
- Методы, такие как
🟢 4. Рекомендации по выбору:
- Используйте
- Используйте
🟢 Пример кода:
Выбор между
👉@BookJava
В языке 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
На открытом уроке 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
Про новые возможности сопоставления с образцом (Pattern Matching) в Java 21.
https://nipafx.dev/java-21-pattern-matching/
👉@BookJava
👍2