Telegram Web Link
🖥 Как создать приложение с помощью фреймворка Spring Java.

Давайте взглянем на основы фреймворка Spring. Эта статья содержит в себе все основные этапы того, как вы можете создать приложение с использованием фреймворка Spring.

✔️ Читать дальше

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 5️⃣0️⃣ лучших Java-проектов c GitHub

В данной статье я представлю вашему внимаю 50 Java-проектов на GitHub, с которыми не помешает познакомиться любому Java-разработчику.

➡️ Смотреть

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Создание функционала регистрации пользователя с проверкой электронной почты с помощью Java и Spring Boot

Сегодня, в этой статье, вы узнаете, как создать полноценную систему регистрации с проверкой электронной почты, используя язык программирования Java, фреймворк Spring Boot и MySQL в качестве базы данных. Ссылка на полный код будет доступна в конце.

➡️ Читать дальше
🖥 Код из статьи

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Java сериализация в JSON и обратно c Jackson

Работа с JSON состоит из процессов:
- cериализации — когда мы конвертируем наши данные в JSON.

- десериализации — когда из JSON строки получаем POJO объект.

Для удобной, быстрой и комфортной работы существует множество библиотек, таких как Gson, Jackson и т.д. В данном уроке мы рассмотрим работу с Jackson.

Читать дальше
Зеркало

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Java как избавиться от дублирования кода. Разбираемся на примере.

Представьте, что мы разрабатываем функцию размещения заказа для разных пользователей:

- Обычный пользователь должен оплатить стоимость доставки, которая составляет 10% от стоимости товаров; скидка не предоставляется
- VIP-пользователь также должен оплатить стоимость доставки в размере 10%, но скидка будет предоставлена на 3-й товар и далее.
- Внутреннему пользователю не нужно оплачивать стоимость доставки; скидка не предоставляется.

➡️ Читать дальше

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Алгоритмы сжатия данных Java

Сжатие данных – очень распространенная тема. В интернете мы можем найти множество материалов о ней. Существуют разные тесты для всех видов алгоритмов сжатия. Тесты производительности для Java существуют, но, все они немного устарели, поскольку были написаны давным-давно.

Эффективность сжатия (как производительности, так и размера) зависит от фактических данных. Поэтому для меня имело смысл повторить тесты, чтобы определить, какой алгоритм (если таковой имеется) подойдёт больше всего. Также хотелось просто побольше узнать о сжатии данных в Java.

Читать дальше
Зеркало
Код из статьи

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Ключевое слово volatile в Java

Изменение переменной, сделанное в одном потоке, не сразу видно другому потоку. Исправить это можно с помощью volatile — ключевого слова, которое ставится перед переменной.

В отличие от слова synchronized, которое применимо для метода или для блока кода, слово volatile применимо только для переменной.

volatile — это более слабый вариант синхронизации, который иногда бывает достаточным.
Рассмотрим пример, показывающий, что изменение переменной в одном потоке действительно не сразу видно другому потоку (или даже никогда не видно).

volatile – этот модификатор вынуждает потоки отключить оптимизацию доступа и использовать единственный экземпляр переменной.

Если переменная примитивного типа – этого будет достаточно для обеспечения потокобезопасности. Если же переменная является ссылкой на объект – синхронизировано будет исключительно значение этой ссылки. Все же данные, содержащиеся в объекте, синхронизированы не будут!

Читать дальше
Зеркало
Код из статьи

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Ссылки на методы в Java

Лямбды в Java полезны во многих направлениях. Лямбда-выражения можно использовать для более простых задач, а лямбда-утверждения — для более сложных.

Лямбды могут вызывать другие методы для текущего объекта (this) и объектов, которые находятся в области видимости, таких как текущий элемент итерации и конечная локальная переменная за пределами лямбды. Лямбду всегда можно упростить, поместив код в другой метод.

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

@Test
public void filterStringsLambda()
{
var list = Lists.mutable.with(
"Atlanta",
"Atlantic City",
"Boston",
"Boca Raton");

var actual = list.stream()
.filter(string -> string.startsWith("At"))
.collect(Collectors.toList());

var expected = List.of("Atlanta", "Atlantic City");

Assertions.assertEquals(expected, actual);
}


Читать дальше

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Топ-10 Java-фреймворков и библиотек для Fullstack веб-разработчиков на Java

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

Помимо стандартных фреймворков, таких как Swing для настольных графических приложений, JavaFX, JSP, EJB и JSF, существует гораздо больше фреймворков и библиотек с открытым исходным кодом, доступных для Java-программистов.

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

Фреймворки, подобные Spring, которые дают столь необходимый импульс платформе Java, внедряют принцип зависимостей в ядро, что имеет решающее значение для построения слабосвязанной системы.

Аналогичным образом, Struts и Spring MVC значительно упростили веб-разработку. Java-программисты, как начинающие, так и опытные, должны знать об этих фреймворках, ведь они не только помогают им в их работе.
Благодаря ним люди получают новую работу, поскольку всё больше и больше компаний внедряют разработку на основе фреймворков.

Я видел так много резюме, которые не рассматриваются для собеседований, потому что в них нет упоминания о Spring, Struts или Maven. Хотя я не согласен с этой практикой, потому что, если вы хороши в программировании, ООП-дизайне и Java, вы можете быстро их освоить.

В этой статье я поделюсь 10 лучшими фреймворками для Java веб-разработчиков, которые включают в себя core Java framework, unit testing framework, Java web development framework и, конечно же, build framework.

Читать дальше
Зеркало

@javatg
🖥 50 вопросов для собеседования по микросервисам для Java-разработчиков 2023

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

Микросервис — это веб-сервис, отвечающий за один элемент логики в некой предметной области (очень похоже на класс).

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

В последние годы спрос на микросервисы сильно вырос, но как и у любой другой технологии, у неё есть свои плюсы и минусы.

Читать дальше
Зеркало

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Java-Studies

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

Полезный репозиторий с хорошими заметками и кодом. Схемы и детальное обьяснения всех основных концепций.

Дженерики, алгоритмы, Api, сокеты и многое другое.

🖥 Github

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Задача: найдите первый неповторяющийся символ в строке, выполнив только один обход

Для заданной строки найдите в ней первый неповторяющийся символ, выполнив только один ее обход.

Например,

Input:

string is ABCDBAGHC

Output:

первый неповторяющийся символ: D


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

Затем еще раз просмотреть строку, чтобы найти первый символ, имеющий значение 1. Временная сложность этого решения равна O(n), где n длина входной строки. Проблема с этим решением заключается в том, что строка проходится дважды, что нарушает ограничения программы.

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


import java.util.HashMap;
import java.util.Map;

// Pair class
class Pair<U, V>
{
public U first; // первое поле пары
public V second; // второе поле пары

// Создает новую пару с указанными значениями
private Pair(U first, V second)
{
this.first = first;
this.second = second;
}

// наш метод для создания неизменяемого экземпляра Typed Pair
public static <U, V> Pair <U, V> of(U a, V b)
{
// вызывам приватный конструктор
return new Pair<>(a, b);
}
}

class Main
{
// Функция для поиска первого неповторяющегося символа в
// строке, выполнив только один ее обход
public static int findNonRepeatingChar(String str)
{
// базовый вариант
if (str == null || str.length() == 0) {
return -1;
}

// map для хранения количества символов и индекса их
// последнее вхождение в строку
Map<Character, Pair<Integer, Integer>> map = new HashMap<>();

for (int i = 0; i < str.length(); i++)
{
map.putIfAbsent(str.charAt(i), Pair.of(0, 0));
map.get(str.charAt(i)).first++;
map.get(str.charAt(i)).second = i;
}

// сохраняет индекс первого неповторяющегося символа
int min_index = -1;

// пройти по map и найти символ со счетом 1 и
// минимальный индекс строки
for (var value: map.values())
{
int count = value.first;
int firstIndex = value.second;

if (count == 1 && (min_index == -1 || firstIndex < min_index)) {
min_index = firstIndex;
}
}

return min_index;
}

public static void main(String[] args)
{
String str = "ABCDBAGHC";

int index = findNonRepeatingChar(str);
if (index != -1)
{
System.out.println("The first non-repeating character in the string is "
+ str.charAt(index));
} else {
System.out.println("первый неповторяющийся символ:");
}
}
}

Вывод:
первый неповторяющийся символ: D


Временная сложность этого решения O(n) так как мы делаем один обход строки длины n и один обход map.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Spring Boot 101: Введение в создание веб-приложений

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

Читать
Зеркало

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Введение в Gradle - систему для автоматизации сборки приложений. Часть 1.

Gradle — система для автоматизации сборки приложений и сбора статистики об использовании программных библиотек, применяющая языки Groovy, Java, JavaScript, Kotlin и т. д., а также решения из фреймворков Apache Ant и Apache Maven.

плагины на JavaScript, C++, Swift, Scala. Система распространяется как программное обеспечение с открытым исходным кодом по лицензии Apache License 2.0.

Назначение Gradle
Ручная сборка приложения для запуска на устройстве требует много времени и ресурсов. Она затягивает процесс разработки и релиза.

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

Читать дальше
Github
Книга DevOps Tools for Java Developers

@javatg
🖥 13 фантастических плагинов для Android Studio

В этой статье я покажу вам лучшие плагины, которые я использовал, чтобы сделать приятный интерфейс, повысить свою производительность и, конечно же, сделать IDE Android Studio чертовски потрясающей.

📌 Статья

#android #androidstudio

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Решаем задачи с Codewars

Комбинации слов, образованные заменой данных цифр соответствующими алфавитами

Для заданного набора положительных чисел найти все возможные комбинации слов, образованные заменой цифр соответствующими символами английского алфавита, т. е. подмножество {1} можно заменить на A, {2} можно заменить на B, {1, 0} можно заменить на J, {2, 1} можно заменить на U, так далее.

Для каждого i-того элемент, есть две возможности – либо этот i тый элемент будет суммироваться со следующимс (i+1) элементом, если число, образованное ими меньше 26 (кол-во букв в английском алфавите) или iый элемент формирует новый символ сам по себе.

class Main
{
private static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

// Функция для поиска всех возможных комбинаций слов, образованных
путем замены заданных чисел на соответствующие символы английского алфавита
public static void recur(int[] digits, int i, String str)
{
if (i == digits.length)
{
System.out.println(str);
return;
}

int sum = 0;

// обрабатываем следующие две цифры (i и (i+1))
for (int j = i; j <= Integer.min(i + 1, digits.length - 1); j++)
{
sum = (sum * 10) + digits[j];

// если допустимый символ можно сформировать, взяв одну или обе цифры,
// добавляем его к выводу и повторяем для оставшихся цифр
if (sum > 0 && sum <= 26) {
recur(digits, j + 1, str + alphabet.charAt(sum - 1));
}
}
}

public static void findCombinations(int[] digits)
{
// базовый вариант
if (digits == null || digits.length == 0) {
return;
}

String str = "";
recur(digits, 0, str);
}

public static void main(String[] args)
{
int[] digits = { 1, 2, 2 };

findCombinations(digits);
}
}


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

// Класс для хранения узла бинарного дерева
class Node
{
String key;
Node left, right;

// Конструктор
Node(String key)
{
this.key = key;
left = right = null;
}
}

class Main
{
private static final String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

// Функция для печати всех листовых узлов бинарного дерева
public static void print(Node node)
{
if (node == null) {
return;
}

if (node.left == null && node.right == null) {
System.out.print(node.key + " ");
}
else {
print(node.right);
print(node.left);
}
}

// Функция для построения бинарного дерева, в котором каждый конечный узел содержит уникальная комбинация слов


public static void construct(Node root, int[] digits, int i)
{
// Базовый случай: пустое дерево
if (root == null || i == digits.length) {
return;
}

// проверяем, существует ли `digits[i+1]`
if (i + 1 < digits.length)

int sum = 10 * digits[i] + digits[i + 1];

// если обе цифры могут образовывать допустимый символ, создаем из него левого потомка
if (sum <= 26) {
root.left = new Node(root.key + alphabet.charAt(sum - 1));
}

// строим левое поддерево по оставшимся цифрам
construct(root.left, digits, i + 2);
}

// обрабатываем текущую цифру и создаем из нее нужного потомка
root.right = new Node(root.key + alphabet.charAt(digits[i] - 1));

// строим правое поддерево по оставшимся цифрам
construct(root.right, digits, i + 1);
}

public static void main(String[] args)
{
int[] digits = { 1, 2, 2, 1 };

Node root = new Node("");

construct(root, digits, 0);

print(root);
}
}


Вывод: ABBA ABU AVA LBA LU

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 5 Шаблонов проектирования на Java, которые решают основные проблемы!

В этом посте вы узнаете о 5 шаблонах проектирования, которые могут помочь вам в программировании на Java.

Читать
Зеркало

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Поднимаем стенд Spring микросервисов в Kubernetes

В статье будет описан процесс поднятия домашнего стенда для экспериментов c k8s, c базовым CI/CD для микросервисов Spring.

Код статьи c инструкцией установки доступен в репозиториях:

https://github.com/alexandr-leonov/eda-configuration
https://github.com/alexandr-leonov/eda-order-service

➡️ Читать

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Изучаем J-Юнит в Java: тестирование и возможные его аннотации

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

У Java него есть средства, которые значительно упрощают процесс работы с создаваемыми утилитами. Одна из них носит название JUnit. Ей будет уделено основное внимание в данной статье.

Читать

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Список полезных ресурсов для Java-разработчиков 2023.

В данной статье я хочу поделиться различными полезными библиотеками и инструментами для повышения производительности Java-приложений.

Для удобства восприятия информации, я разделил все инструменты на несколько категорий.

Читать
Зеркало

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/07/07 22:13:26
Back to Top
HTML Embed Code: