Java developer pinned «👋Для Premium подписчиков доступна возможность проголосовать за канал. После определенного количества голосов, появляется возможность выкладывать Stories. 📈 Обновляйте Telegram и нажимайте по ссылке»
Java 21 и доверенные технологии🦾

🚍27 сентября в 18:00 по Москве.

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

Доклады в программе:
➡️Роман Карпов, «Кто разрабатывает российскую Java и почему она лучше Oracle и других JDK»
➡️Олег Чирухин, «Axiom JDK Pro и Libercat: безопасная миграция Java-стека и KPI по импортозамещению»
➡️Александр Дроздов, «Безопасная разработка: защищаем открытый код и получаем сертификацию ФСТЭК»
➡️Олег Чирухин, «Легковесные Java-контейнеры: ускоряем разработку на 25%»

После докладов пройдет сессия вопросов и ответов со спикерами митапа.  

Зарегистрироваться на митап.
Please open Telegram to view this post
VIEW IN TELEGRAM
👋

🔠🅰️🔠🅰️ 2️⃣1️⃣

Главные фичи новой версии:

📌 Виртуальные потоки

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

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

Более дальний аналог — корутины в Kotlin. Они имитируют виртуальные потоки на уровне библиотеки и несут большие накладные расходы. В java виртуальные потоки реализованы на уровне JVM, поэтому их производительность гораздо выше.

📌 Pattern matching.

📌 Sequenced collections.

📌 String templates — интерполяция строк, возможность писать.

String str = "Hello, ${name}!";

📌 Scoped Values — аналог ThreadLocal c ограниченной областью действия.

📌 Structured Concurrency — способ организации подзадач в многопоточной среде.

⭐️ Generational ZGC — в сборщик добавили поколения, как следует из названия. Молодые объекты будут собираться чаще, и сборщик будет работать эффективнее.

⭐️ Record Patterns — records можно использовать внутри case.

⭐️ Foreign Function & Memory API (Third Preview) — методы для работы с нативным кодом и управлению памятью за пределами JVM.
Это нужно для приложений, которые хотят сами управлять размещением объектов в памяти и не зависеть от сборщика мусора.

⭐️ Unnamed Patterns and Variables (Preview) — можно не указывать имя переменной, если оно не нужно. Вместо него ставить _

⭐️ Deprecate the Windows 32-bit x86 Port for Removal — перестать работать с Windows 32-bit x86, в будущем удалить.

⭐️ Prepare to Disallow the Dynamic Loading of Agents

Агент — компонент, который изменяет классы при загрузке или меняет уже загруженные классы в JVM. Используется для мониторинга, профайлинга и других служебных целей.

⭐️ Key Encapsulation Mechanism API — методы для защиты ключей симметричного шифрования.

⭐️ Unnamed Classes and Instance Main Methods (Preview).
Please open Telegram to view this post
VIEW IN TELEGRAM
🤧25 сентября в 17:00 (МСК) стартует Yandex Scale 2023.

Руководитель Yandex Cloud ☁️👤Алексей Башкеев и коммерческий директор
👤Александр Черников откроют конференцию и расскажут, как изменилась платформа и что ждёт облачные технологии в будущем.

🤩Онлайн-трансляция
Please open Telegram to view this post
VIEW IN TELEGRAM
👥Сегодня в 17:00 (МСК) стартует первый день и открытие Yandex Scale 2023.
💻Ссылка
Please open Telegram to view this post
VIEW IN TELEGRAM
☝️💡💻Алгоритм Дейкстры - это алгоритм нахождения кратчайшего пути от одной вершины графа до всех остальных вершин. Он работает на графах с неотрицательными весами ребер.

⚙️ Алгоритм Дейкстры работает следующим образом:

➡️Создается массив расстояний dist, в котором для каждой вершины хранится текущее кратчайшее расстояние от начальной вершины до этой вершины. Изначально все расстояния устанавливаются в бесконечность, кроме начальной вершины, для которой расстояние равно 0.

💬Создается множество visited для отслеживания уже посещенных вершин. Изначально все вершины помечаются как непосещенные.

🚪Начальная вершина добавляется в множество visited.

💬Пока множество visited не содержит все вершины графа:
Выбирается вершина u из множества visited с наименьшим значением dist[u].
Для каждой смежной с u вершины v, если dist[u] + weight(u, v) < dist[v], то обновляется значение dist[v] на dist[u] + weight(u, v).
Вершина v добавляется в множество visited.

⭐️По окончании алгоритма массив dist содержит кратчайшие расстояния от начальной вершины до всех остальных вершин графа.

Код Алгоритм Дейкстры 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Рекурсия — вызов внутри одной функции себя самой, чаще всего с другими параметрами.
В приведенном примере мы используем рекурсию для вычисления факториала числа.

⭐️Метод multiplyNumbers() вызывает сам себя с аргументом num - 1 до тех пор, пока num не станет меньше или равным 1. Затем метод возвращает результат умножения num на результат вызова multiplyNumbers() с аргументом num - 1. Когда num достигнет 1, метод multiplyNumbers() вернет 1, что остановит рекурсивные вызовы и вернет результат вычисления факториала.

Алгоритмическая сложность
вычисления факториала числа с использованием рекурсии составляет O(n), где n - число, для которого вычисляется факториал🫡.

Код вычисления факториала 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
☝️💡Рекурсия (Range minimum requests). Позволяет построить дерево отрезков и находить минимум на заданном отрезке, используя рекурсивный подход.

🙋Рекурсия позволяет эффективно решать задачи, связанные с обработкой структур данных, таких как деревья отрезков.

🤯Препроцессинг тратит времени O(n^2) и памяти O(n^2) из-за двумерного массива, в котором запоминает результат. Для массива длинной 1 млдр. алгоритм займёт 930 тыс. терабайт памяти, а квадратичное время предподсчёта - больше трёх лет. Это очень много.⛔️

Код Рекурсия (Range minimum requests) 👩‍💻

Пример ввода: Пример вывода:
5 3
1 3 2 4 5
1 3 1
2 4 2
3 5 2
Please open Telegram to view this post
VIEW IN TELEGRAM
👋 September 28 at 18:00.

Java 21 is coming with many new features, two of which will have a tremendous impact on the way you write Java code. This session covers these significant topics:

💪virtual threads and pattern matching that enables data-oriented programming for the Java platform. First, you'll learn how virtual threads fix several problems with the executor service pattern and propose an alternative programming model to asynchronous programming.

⬇️This model lowers the maintenance cost of your application code and also improves its observability.

😳Then, you'll see how data-oriented programming can improve the quality of your architecture. It is an alternative to object-oriented programming, a paradigm on which Java has been built from the beginning. It relies on three features: sealed classes, records, and pattern matching. Records and sealed classes are already final features, whereas pattern matching is still under work, with some elements already there and more to come.

👍Speaker: José Paumard.

Link to the broadcast.
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Бинарный поиск.📖

Дан массив длиной в n. В массиве числа расположены по возрастанию. Для заданного числа Х требуется найти номер ячейки с ним.

Алгосложность. Запускаем наш алгоритм на промежутке всего массива. На каждом шаге мы смотрим только на один серединный элемент, после чего уменьшаем размер промежутка в два раза.
👍Время работы O(log n),
а не O(n), что гораздо быстрее.⚡️
Код Бинарный поиск 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑‍💻 SQRT-декомпозиция (Square Root Decomposition) - это метод решения задач на диапазонах, который заключается в разбиении исходного массива на блоки фиксированного размера и предварительной обработке каждого блока. Это позволяет быстро отвечать на запросы, связанные с диапазонами.
Код SQRT-декомпозиция.👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🧠 Задача на нахождение количество островов в заданной матрице. Где остров 1, а вода 0.
Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
💡👩‍💻 Сортировка пузырьком (Bubble Sort). Это один из самых простых алгоритмов сортировки, который проходит по массиву несколько раз, сравнивая каждую пару элементов и меняя их местами, если они не отсортированы.

Сложность алгоритма O(n^2), что делает его неэффективным для больших массивов⛔️
Please open Telegram to view this post
VIEW IN TELEGRAM
👋
Как спроектировать класс, обладающий следующими свойствами:

➡️Имеет всего ОДИН объект на всю программу. Статичные поля и методы?

➡️Мы хотим всю мощь ООП.
Полиморфизм и всё то, для чего статичность членов класса не подойдёт.

☝️Такое часто нужно для представления какого-то ресурса, общего для всей программы (база данных, система оплаты), а также когда нужны глобальные объекты, (учёт глобальной квоты для каких-то действий).

💡ОТВЕТ: это можно сделать через шаблон проектирования Singleton (с анг. одиночка).

➡️Мы хотим сконструировать объект класса A, общий для всей программы.

➡️Скрываем все конструкторы нашего класса, чтобы программист не смог создать объект через new.

➡️Вместо конструктора даём программисту статичный метод для получения объекта, в нём контролируем чтобы объект был всегда один и тот же.

➡️Этот единственный объект храним в статичном поле нашего класса.
Please open Telegram to view this post
VIEW IN TELEGRAM
😃 Лайфхак от джавы: можно сделать Singleton через енам!

👍 Джава сама следит, что объектов у енама столько, сколько перечислено у него самого.

👍 Также автоматически получаем потокобезопасность (на случай многопоточного использования шаблона, это удобно).

👎 Меньше гибкости, так как енам делает нашу работу по реализации синглтона за нас.
Please open Telegram to view this post
VIEW IN TELEGRAM
🦾 Singleton

Программа, которая будет каждый свой шаг логгировать в консоль, но не через System.out.println, а через объект-логгер нашего собственного класса-синглтона.

⚙️ Функционал программы:
Программа начинает с приветствия, просит указать два числа: размер списка N и верхнюю границу значений элементов в списке M.
Затем она создаёт список ArrayList из N элементов и заполняет их случайными числами от 0 до M.
После этого программа запрашивает у пользователя ввести число f для фильтрации списка.
Далее программа вызывает метод List<Integer> filterOut(List<Integer> list) у объекта filter, передавая в качестве параметра созданный случайный список.
Этот метод возвращает список, в котором остаются только элементы, которые больше или равны f.
И, наконец, программа выводит итоговый список на экран и завершает свою работу.


🗂 Формат сообщения: [<дата и номер сообщения>] <текст сообщения>, где <номер сообщения> это порядковый номер выводимого логгером сообщения, а <текст сообщения> это значение параметра msg.

🙂 Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🌐 Клиент-серверное приложение

Создадим сервер, используя ServerSocket, который будет способен принимать входящие подключения. Для этого создадим отдельное приложение-клиент, с ещё одним методом main в другом классе, который будет выполняться параллельно во время работы сервера.

☝️Класс ServerSocket предоставляет инструменты для создания серверных приложений, которые могут принимать входящие сетевые соединения от клиентов.

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
💻 Интерфейс List

💡Использование интерфейса List позволяет работать с коллекциями, где порядок элементов имеет значение, например, со списками или массивами.

⚙️ Интерфейс List определяет методы для добавления, удаления, изменения и получения элементов по индексу, а также для поиска элементов по значению.
⬇️ Кроме того, интерфейс List предоставляет возможность использовать итераторы для перебора элементов коллекции в определенном порядке.

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

🧑‍💻 Давайте разработаем программу, которая позволит вам сохранить список задач. Мы можем использовать как массив, так и ArrayList для хранения этого списка. Массив имеет фиксированную длину, и после его создания вы не можете изменить его размер, тогда как ArrayList может динамически изменять свой размер во время выполнения программы, и вам не нужно заранее указывать его размер при создании.

Решение 🧠 GitLab 👩‍💻, описание в README.
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻1
💬 JPoint 2023 TechRadar: Spring

С каким проблемами мы сталкиваемся при переходе на Spring Boot 3?

Использует ли кто-то в 2023 году Spring без Spring Boot?

Вытеснят ли новомодные OpenAPI и GraphQL наши любимые JSON через HTTP?

🆕 Что новенькое в Spring и Spring Boot стоит посмотреть в 2023 году?
Please open Telegram to view this post
VIEW IN TELEGRAM