🔗 Здесь интересная информация с примерами кода.
Спикер: Семён Киреков.
⭐️ Прошел путь от 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
🧠 Сортировка слиянием

📖В данном примере мы создаем класс MergeSort с двумя методами: mergeSort для сортировки массива слиянием и merge для объединения отсортированных частей массива.
📺В методе main мы создаем исходный массив, вызываем mergeSort для его сортировки и выводим отсортированный массив на экран.

ℹ️Алгоритм сортировки слиянием имеет сложность O(n log n), где n - длина массива. В данном коде на Java реализован алгоритм сортировки слиянием, поэтому его временная сложность также остается O(n log n).

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
💪 Конференция Яндекса YaTalks 2023.

🧠 В 2023 году YaTalks пройдёт 5 и 6 декабря в Москве, Белграде и онлайн.

📖 Тема этого года — явления, которые меняют мир и двигают его вперёд.
Пригласили более сотни спикеров, которые будут читать доклады о разработке, управлении и карьере в IT.

⭐️5 декабря — день YaTalks 2023 с хардовыми техническими докладами.

🔹 Андрей Мелихов, ведущий разработчик из Yandex Cloud. Объяснит, с какими проблемами и вызовами пришлось столкнуться, когда выпускали DataLens в опенсорс.

🔹 Никита Илясов, СТО Яндекс Еды и Маркета Деливери. Расскажет, как объединяли Delivery Club и Яндекс Еду.

🔹 Алексей Гусаков, технический директор Яндекс Поиска. Покажет, как инженеры управляют временем — и делают наш мир быстрее.

⭐️6 декабря — день, когда спикеры YaTalks 2023 рассказывают про управление и обучение.

🔹 Галина Юзефович, литературный критик, преподаватель, онлайн-платформа «Страдариум». Расскажет, как новые технологии меняют литературу и какие книги почитать об этой трансформации.

🔹 Евгений Кот, VP of Engineering из Rarible. Объяснит, почему сеньору и менеджеру сложно выбрать вектор для развития и как надо строить карьеру.

💥 Всё это — бесплатно, так что переходите на сайт, изучайте программу и регистрируйтесь!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
👩‍💻 GPT-4

💡OpenAi провела мероприятие для разработчиков, на котором анонсировала улучшения в своих моделях. GPT-3.5 и GPT-4 прокачали, выпустили обновлённую версию GPT-4 Turbo, которому наконец рассказали, что произошло в мире и интернете в период с сентября 2021 до апреля 2023.

👍 GPT-4 Turbo быстрее предшественника, а также он способен анализировать больше информации за один запрос. Теперь он может обработать 128 000 токенов, что приблизительно эквивалентно более 300 страницам текста. Сами токены для API станут дешевле в 2-3 раза.

💻 Помимо этого, OpenAi анонсировала своеобразный конструктор чат-ботов на основе GPT-моделей. В скором можно будет гибко кастомизировать нейросеть под свои нужды, а также делиться созданными моделями с другими пользователями.
Обновления обещают раскатать для всех в течение нескольких недель.
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👋 Напишем многопоточное приложение, которое моделирует работу нескольких супермаркетов. Каждый супермаркет создает список случайных чеков (сумм продаж) и передает их в налоговую службу для подсчета общей выручки.

🧠 Будем использовать:

🎛Многопоточность - класс ExecutorService и методы awaitTermination() и shutdown() используются для управления потоками выполнения.

🗂Коллекции - список bills в классе Supermarket используется для хранения чеков (сумм продаж).

Код: GitLab 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Быстрая сортировка (QuickSort)

☝️Этот алгоритм использует стратегию "разделяй и властвуй".
Он выбирает опорный элемент, разбивает массив на две части - элементы, меньшие опорного и элементы, большие опорного. Затем он рекурсивно сортирует каждую из этих частей. В среднем случае сложность алгоритма O(n log n), но в худшем случае может достигать O(n^2).
✏️O(n log n)О(n логарифм n)” означает, что сложность алгоритма
составляет O(n log n), где "n" - размер входных данных.
Это означает, что время выполнения алгоритма будет увеличиваться пропорционально n и логарифму от n.

Код: QuickSort 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🧠 Insertion Sort

ℹ️ Сортировка вставками. Этот алгоритм проходит по массиву, вставляя каждый элемент на свое место в уже отсортированной части массива. Он имеет лучшую сложность, чем сортировки пузырьком и выбором - O(n^2) в худшем случае и O(n) в лучшем случае.


📖 Selection Sort

ℹ️ Сортировка выбором. Этот алгоритм проходит по массиву, находит минимальный элемент и меняет его местами с первым элементом. Затем он находит следующий минимальный элемент и меняет его местами со вторым элементом, и так далее. Сложность алгоритма также O(n^2), что делает его неэффективным для больших массивов.


☝️Выбор между сортировкой вставками, пузырьком и сортировкой выбором, зависит от конкретной ситуации. В целом, сортировка вставками обычно более эффективна на почти отсортированных данных, но сортировка выбором может быть более эффективна на больших массивах данных. Сортировка пузырьком обычно менее эффективна, чем обе эти сортировки.

⭐️Более эффективные алгоритмы сортировки, сортировка (QuickSort) и сортировка слиянием (MergeSort). В большинстве случаев, рекомендуется использовать эти алгоритмы вместо сортировки вставками, пузырьком или сортировки выбором.

💡Для выбора между этими алгоритмами, нужно оценить особенности конкретных данных и использовать более эффективные алгоритмы, такие как QuickSort или MergeSort, если это возможно.

Код: 👩‍💻
Insertion Sort
Selection Sort
Bubble Sort
MergeSort
QuickSort
Please open Telegram to view this post
VIEW IN TELEGRAM
Алгоритм RSA 😎

⭐️Основан на использовании двух больших простых чисел и математических операций с ними. Он используется для шифрования и подписи данных в криптографии.

📖 Алгоритм RSA работает следующим образом:

⭐️Генерация ключей: сначала выбираются два больших простых числа p и q. Затем вычисляется их произведение n = p * q, которое называется модулем. Также выбирается число e, которое является взаимно простым с числом (p-1)*(q-1). Эти числа (n, e) составляют открытый ключ. Затем вычисляется число d, которое является обратным к числу e по модулю (p-1)*(q-1). Число d является секретным ключом.

⭐️Шифрование: для шифрования сообщения m сначала оно преобразуется в число, меньшее n. Затем вычисляется зашифрованное сообщение c = m^e mod n.

⭐️Расшифрование: для расшифрования зашифрованного сообщения c сначала вычисляется исходное сообщение m = c^d mod n.

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

Код: Генерация ключей 👩‍💻
Код:
Шифрование и расшифровка 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2