🧠 Задача на нахождение количество островов в заданной матрице. Где остров 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
🔗 Здесь интересная информация с примерами кода.
Спикер: Семён Киреков.
⭐️ Прошел путь от Junior Java Dev, до Team Lead за 2.5 года.
⭐️ Декан Java Faculty в MTS Teta.

Темы доклада:
📌 Что такое паттерн Value Object?
📌 Как внедрить Value Object в стеке Spring/Hibernate?
📌 Что о Value Object думают признанные эксперты в IT-индустрии?
📌 Когда применение Value Object может помешать дальнейшей разработке?

Код: GitHub 👩‍💻.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
👩‍💻 IntelliJ IDEA предлагает множество сокращений для ускорения написания кода.
Вот некоторые из них:

⭐️ Сокращения для создания кода:
- psvm - создает метод public static void main(String[] args)
- sout - создает выражение System.out.println()
- fori - создает цикл for с индексом
- ifn - создает условное выражение if (value == null)

⭐️ Сокращения для редактирования кода:
- Ctrl + Space - автодополнение кода
- Ctrl + Alt + L - форматирование кода
- Ctrl + Alt + O - оптимизация импортов
- Ctrl + D - дублирование строки или выделенного блока кода

⭐️ Сокращения для навигации по коду:
- Ctrl + B - переход к определению переменной или метода
- Ctrl + F12 - открытие списка методов и переменных класса
- Alt + Left/Right - переключение между открытыми файлами

⭐️ Сокращения для работы с Git:
- Ctrl + K - коммит изменений
- Ctrl + Shift + K - пуш изменений в удаленный репозиторий
- Ctrl + Shift + A - быстрый доступ к командам Git
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
👋 Алгоритм Рабина-Карпа.

📖 Он принимает две строки - текст и шаблон, и ищет все вхождения шаблона в текст. Если шаблон найден, он выводит позицию, с которой начинается каждое вхождение.

⚙️ Алгоритм Рабина-Карпа использует хеширование для быстрого сравнения подстроки с шаблоном. Он вычисляет хеш-значение для шаблона и первой подстроки текста, а затем сравнивает их. Если хеш-значения совпадают, он проверяет каждый символ шаблона и текста поочередно, чтобы убедиться, что они полностью совпадают.

⬇️ Если символы не совпадают, алгоритм переходит к следующей подстроке текста, вычисляет ее хеш-значение и сравнивает его с хеш-значением шаблона.
💡Это позволяет избежать полного сравнения каждой подстроки со всем шаблоном и значительно ускоряет процесс поиска.

🗂 Код также использует модульную арифметику для обработки хеш-значений и предотвращения переполнения.

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
😎 Программа-магазин Apple Store 🍏. У пользователя есть возможность заказать товары.

🗂 Правило Magic (Magic Number Rule) гласит, что числа не должны использоваться напрямую в коде, без объяснения их значения. Вместо этого следует использовать константы или переменные с понятными именами, чтобы код был более читаемым и поддерживаемым.

📲 Принцип DRY (Don't Repeat Yourself) означает, что в коде не должно быть повторений одинаковой или похожей логики. Вместо этого следует выносить повторяющийся код в отдельные функции, классы или модули, чтобы избежать дублирования и упростить поддержку и изменение кода.

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩1
🧠 В данном коде реализован алгоритм Форда-Беллмана для нахождения кратчайших путей из одной вершины до всех остальных взвешенного ориентированного графа.

⚙️ Алгоритм работает следующим образом:
Инициализируются расстояния до всех вершин как бесконечность, кроме начальной вершины, для которой расстояние равно 0.
Проход по всем ребрам графа numVertices - 1 раз, где numVertices - количество вершин в графе.
Для каждого ребра (u, v) проверяется, если расстояние от начальной вершины до u плюс вес ребра меньше текущего расстояния до v, то обновляется расстояние до v.
После выполнения алгоритма в массиве distances будут содержаться кратчайшие расстояния от начальной вершины до всех остальных.
☝️Алгоритм имеет алгоритмическую сложность O(V * E), где V - количество вершин, E - количество ребер в графе. В данном случае алгоритм работает с матрицей смежности, поэтому сложность будет O(V^3), так как для каждой вершины происходит проверка всех возможных рёбер.

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑‍💻 Напишем программу для тяжелых вычислительных процессов. Клиент-серверное приложение для вычисления чисел Фибоначчи.
Смысл в том, что необходимо будет передать данные на сервер который способен выполнить нашу задачу.
Используется блокирующий ввод/вывод (Blocking IO).

🌐 Server.java:

⭐️ Создает серверный сокет, который ожидает подключений клиентов в бесконечном цикле.

⭐️ Для каждого подключения:
Создает сокет для связи с клиентом.
Использует BufferedReader для чтения данных от клиента и PrintWriter для отправки данных клиенту.
Читает сообщения от клиента, преобразует их в целые числа, вычисляет N-е число Фибоначчи с помощью метода findNFibonacciLight, и отправляет результат клиенту.
Если клиент отправляет "end", завершает цикл.


🔎 Client.java:

⭐️ Создает сокет для подключения к серверу, который работает на localhost (127.0.0.1) и порту 13301.
⭐️Использует BufferedReader для чтения данных от сервера и PrintWriter для отправки данных серверу.
⭐️ Запрашивает у пользователя ввод числа или "end" для завершения.

⭐️ Отправляет введенное сообщение серверу.

⭐️ Если введено "end", завершает цикл.

⭐️ Выводит ответ сервера на экран.

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

Используется для создания коллекции, которая представляет собой очередь элементов. Он расширяет интерфейс Collection и определяет методы для работы с очередью, такие как добавление элемента в конец очереди, удаление элемента из начала очереди, проверка наличия элемента и т.д. Очередь может быть использована для решения различных задач, таких как обработка задач в порядке их поступления, управление потоками данных в многопоточных приложениях, реализация алгоритмов поиска в ширину и т.д.
💡Использование интерфейса Queue может быть полезным при работе с потоками данных, когда необходимо управлять порядком обработки элементов или обрабатывать элементы в порядке приоритета.

⬇️ Методы:

add(E element): добавляет элемент в конец очереди, если это возможно.

offer(E element): добавляет элемент в конец очереди, если это возможно. Возвращает true, если элемент был успешно добавлен, и false в противном случае.

remove(): удаляет и возвращает элемент из начала очереди. Если очередь пуста, выбрасывает исключение NoSuchElementException.

poll(): удаляет и возвращает элемент из начала очереди. Если очередь пуста, возвращает null.

element(): возвращает элемент из начала очереди без его удаления. Если очередь пуста, выбрасывает исключение NoSuchElementException.

peek(): возвращает элемент из начала очереди без его удаления. Если очередь пуста, возвращает null.



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

⬇️ Используем методы:

offer(E e) - Для добавления элементов (чисел, представляющих города) в очередь line.

poll() - Для извлечения и удаления элементов из начала очереди line во время вывода маршрута.

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👏1
👋 Сортировка подсчетом (Counting Sort).

↔️ Используется для сортировки целых чисел в заданном диапазоне. Он создает массив счетчиков для каждого элемента в диапазоне и затем проходит по входному массиву, увеличивая соответствующий счетчик. Затем он проходит по массиву счетчиков и формирует отсортированный массив. Сложность алгоритма O(n+k), где k - размер диапазона, что делает его очень быстрым 🐆 для больших массивов, но неэффективным для маленьких.

⚙️ Алгоритм сортировки подсчетом имеет временную сложность O(n + k), где n - длина массива, k - диапазон возможных значений в массиве. В данном коде, время выполнения алгоритма зависит от максимального значения в массиве, которое находится в переменной max. Таким образом, алгоритм имеет временную сложность O(n + max).

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🔃 Многопоточное программирование.

✏️Java-приложение которое создает несколько потоков выполнения и выполняет их с использованием пула потоков.

💡При запуске этого кода создаются четыре потока выполнения, каждый из которых выводит "Hello World!" с указанием своего имени, и затем выводится информация о том, сколько раз каждый поток выполнил задачу.

👨‍💻 Также выводится информация о том, сколько раз выполнение завершилось с наибольшим результатом.

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🧠 Алгоритм Флойда Уоршелла.

☝️ В данном коде реализован алгоритм Флойда-Уоршелла для нахождения кратчайших путей между всеми парами вершин взвешенного ориентированного графа.

⚙️ Алгоритм работает следующим образом:
1. Инициализируются расстояния между всеми парами вершин как веса ребер графа.
2. Проход по всем вершинам графа.
3. Для каждой пары вершин (i, j) проход по всем вершинам графа.
4. Если путь от вершины i до вершины j через вершину k короче текущего пути, то обновляется расстояние.
5. После выполнения алгоритма в матрице distances будут содержаться кратчайшие расстояния между всеми парами вершин.

🧑‍💻 Алгоритм имеет алгоритмическую сложность O(V^3), где V - количество вершин в графе.
В данном случае алгоритм работает с матрицей смежности, поэтому сложность будет O(V^3).

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👋 Пишем программу, которая генерирует QR код📝.

🔎 Программа запрашивает у пользователя ввод URL-адреса, на основе которого будет сгенерирован QR код.

📖 Затем код создает битовую матрицу, используя библиотеку ZXing, и заполняет её.

📝 Белый фон и чёрные пиксели конвертируются в изображение QR кода и сохраняются в файл "qrcode.png".

⚡️ В конце, код выводит сообщение о том, что QR код был успешно сгенерирован и сохранен в файл.

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Halloween😄

🪨 Игра "Виселица", где игрок должен угадать слово, вводя по одной букве.

У игрока есть ограниченное количество попыток, и каждая неправильная попытка добавляет часть "повешенного человечка" к выводу.
Игра продолжается, пока игрок не угадывает слово или не совершает слишком много ошибок .

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🧑‍💻 Алгоритм Форда-Фалкерсона для нахождения максимального потока в графе.

⭐️Здесь представлен пример графа, в котором веса ребер обозначают пропускную способность. Вы можете изменить граф, вызовы функции и другие параметры согласно вашим потребностям.

⚙️ Алгоритм работает в несколько итераций. На каждой итерации алгоритм производит поиск увеличивающего пути в остаточной сети, который может быть найден с помощью поиска в ширину (алгоритм BFS).
🔃 Затем алгоритм обновляет пропускные способности ребер по этому пути и наращивает максимальный поток. Процесс повторяется до тех пор, пока не будет найден увеличивающий путь (или не будет больше такого пути).

💡 Алгоритм Форда-Фалкерсона имеет временную сложность O(V E^2), где V - количество вершин в графе, а E - количество ребер.
В худшем случае, когда алгоритм выполняется полное количество итераций, временная сложность становится O(V^2 E), что может быть довольно затратно для больших графов.

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM