Telegram Web Link
🖥 Полезные библиотеки Java

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

Переведите текст в азбуку Морзе или расшифруйте азбуку Морзе, переведя их в текст!

🖥 GitHub/Инструкция

#java

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥31
Conventional Commits — простое соглашение о том, как нужно писать коммиты в своих проектах

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

По словам авторов проекта, Conventional Commits больше всего вдохновлялся Angular Commit Guidelines

Стоимость: #бесплатно

@javatg
👍122🔥2
🖥 ТОП-10 IDE для Java-разработки

Как выбрать лучшую IDE для разработки на Java
IDE — программа, состоящая из набора инструментов разработчика, упрощающих процесс написания приложений, со встроенным в нее пакетом полезных функций: от подсветки синтаксиса до навигатора по коду. За счет расширенной функциональности она здорово экономит время и повышает производительность труда, и современному программисту без нее просто никак. Однако, на сегодняшний день, в многообразии подобных программ можно запутаться и выбор лучшей IDE для разработки на Java может стать довольно сложной задачей, особенно если вы начинающий джавист. Поэтому «Библиотека программиста» решила помочь вам с этим делом и выделила из общего количества IDE наиболее приемлемые и проверенные варианты.

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥21
🖥 Java 17: что нового по сравнению с Java 11

Версия Java 17 была выпущена не так уж давно. Отличие этого релиза в том, что это — новая TLS-версия (Long Term Support, с долговременной поддержкой) после Java 11.

В этой статье рассмотрим новые практические функции, которые были введены между 11-ой и 17-ой версиями.

➡️ Switch-выражения.
➡️ Текстовые блоки.
➡️ Сопоставление с образцом (Pattern Matching) для instanceof.
➡️ Полезные NullPointerException.
➡️ Записи (Records).
➡️ Запечатанные (sealed) классы.
➡️ Сопоставление с образцом для switch.

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥32
🖥 Microhttp

Быстрый, масштабируемый, автономный, однопоточный веб-сервер на Java

🔩 Github

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1
🖥 Внешнее конфигурирование базы данных Spring Boot с помощью AWS Secrets Manager

Один из наиболее распространенных способов настраивать конфигурацию базы данных Spring Boot — через свойства приложения. Для некоторых смена пароля к базе данных может быть редкостью, но лучше периодически его менять.

Традиционно изменение паролей к базам данных означает перезапуск сервиса после внесения изменений в свойства приложения (это также можно сделать с помощью переменных среды). Чем чаще это делается, тем выше вероятность сбоев в обслуживании пользователей.

К счастью, благодаря интеграции с AWS Secrets Manager нет необходимости перезапускать сервис каждый раз, когда пароль к базе данных меняется. Secrets Manager даже предоставляет возможность автоматически менять пароль через определенный период.

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92🔥1
🖥 Класс Scanner

Объект класса java.util.Scanner упрощает разбор строки из потока ввода. При вводе могут использоваться данные из консоли, файла, строки или любого другого источника, реализующего интерфейсы Readable или ReadableByteChannel.

Хотя Scanner и не является потоком, у него тоже обязательно вызывать метод close(), который закроет используемый основной источник.

Пример 1. Использование класса Scanner

public class ScannerExample {
private static String fileName = "scan.txt";

public static void scanFile() {
try (FileReader fileReader = new FileReader(fileName);
Scanner scanner = new Scanner(fileReader)) {
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
System.out.println(scanner.nextInt() + " :int");
} else if (scanner.hasNextDouble()) {
System.out.println(scanner.nextDouble() + " :double");
} else if (scanner.hasNextBoolean()) {
System.out.println(scanner.nextBoolean() + " :boolean");
} else {
System.out.println(scanner.next() + " :String");
}
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}

public static void makeFile() {
try (FileWriter fileWriter = new FileWriter(fileName)) {
fileWriter.write("2 Java 1,5 true 1.6 ");
} catch (IOException e) {
System.out.println(e.getMessage());
}
}

public static void main(String[] args) {
ScannerExample.makeFile();
ScannerExample.scanFile();
}
}


Пример 2. Использование класса Scanner для работы со строкой

public class ScannerDelimiterExample {
public static void main(String[] args) {
double sum = 0.0, number;
Scanner scanner = new Scanner("1,3;2,0; 8,5; 4,8; 9,0; 1; 10; abc");
scanner.useDelimiter(";\\s*");
while (scanner.hasNext()) {
if (scanner.hasNextDouble()) {
number = scanner.nextDouble();
System.out.println("Число:" + number);
sum += number;
} else {
System.out.println("Строка: " + scanner.next());
}
}
System.out.println("Сумма чисел = " + sum);
}
}

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132🔥1
🖥 Love, Spring and HTTP Bugs

Мы решили написать небольшую статью, которая будет интересна неравнодушным к Java. Хотим поделиться на первый взгляд простыми особенностями поведения библиотек Spring Security, Spring Web, которые могут сбить с толку разработчиков, которые никогда не сталкивались с такими ситуациями.

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

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2🥰1
🖥 Если у класса Point{int x, y;} реализовать метод equals(Object that) {(return this.x == that.x && this.y == that.y)}, но сделать хэш код в виде int hashCode() {return x;}, то будут ли корректно такие точки помещаться и извлекаться из HashSet?

Ответ

HashSet использует HashMap для хранения элементов. При добавлении элемента в HashMap вычисляется хэш код, по которому определяется позиция в массиве, куда будет вставлен новый элемент. У всех экземпляров класса Point хэш код будет одинаковым для всех объектов с одинаковым x, что приведёт к вырождению хэш таблицы в список.

При возникновении коллизии в HashMap осуществляется проверка на наличие элемента в списке: e.hash == hash && ((k = e.key) == key || key.equals(k)). Если элемент найден, то его значение перезаписывается. В нашем случае для разных объектов метод equals() будет возвращать false. Соответственно новый элемент будет успешно добавлен в HashSet. Извлечение элемента также будет осуществляться успешно. Но производительность такого кода будет невысокой и преимущества хэш таблиц использоваться не будут.

➡️ HashSet в Java

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍121🔥1
📓"Классические задачи Computer Science на языке Java"

Столкнулись с «неразрешимой» проблемой при разработке программного обеспечения? Скорее всего, кто-то уже справился с этой задачей, и вы можете не ломать голову. Дэвид Копец собрал наиболее полезные готовые решения, принципы и алгоритмы. «Классические задачи Computer Science на языке Java» — это мастер-класс по программированию, содержащий 55 практических примеров, затрагивающих самые актуальные темы: базовые алгоритмы, ограничения, искусственный интеллект и многое другое.

➡️ Книга

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍151👎1🔥1🤔1
🧵 Введение в многопоточность в Java. Часть 1. Преимущества и недостатки многопоточности

Независимо от того, какой язык вы используете для написания своих программ, по умолчанию все они являются последовательными. То есть все инструкции, которые мы пишем, последовательно выполняются операционной системой. Следующая строка кода не может начать свое выполнение до завершения текущей и ждет, пока текущая строка не завершит свое выполнение. Если в программе есть вызов API к удаленному серверу, то программа блокируется до тех пор, пока не получит ответ к запросу. Если выполнение вызова занимает несколько минут, то нам придётся также ждать ответа программы. Программа в таком случае просто блокируется и не будет отвечать на дальнейшие команды.

Давайте рассмотрим другие распространенные сценарии. Например, вы используете какую-то социальную сеть, где скачиваете видео или изображения и одновременно общаетесь там со своими друзьями. Вы выполняете две разные задачи одновременно, и ваша программа не блокируется, пока она не завершит одну из своих задач. Как? Здесь в игру вступает многопоточность.

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81🔥1
📌 Шпаргалка по синтаксису Java

#java #cheatsheet

@javatg
👍266🔥4👎1🥰1
🖥 The Algorithms - Java

#algorithms #java

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

🔩 Github

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍97🔥2
🖥 Spring Boot Admin

Пользовательский интерфейс администратора для администрирования приложений spring boot

🖥 Github
➡️ Быстрый старт

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥31
🖥 LSPosed Framework

Xposed — это фреймворк для модулей, которые могут изменить поведение системы и приложений, не затрагивая никаких APK. Это полезно, потому что это означает, что модули могут работать для разных версий и даже ПЗУ без каких-либо изменений (при условии, что исходный код не был слишком сильно изменен).

🖥 Github

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥1
🖥 Как валидировать данные формы в Spring Web MVC Framework?

Spring поддерживает проверки на основе аннотаций JSR-303, а также предоставляет интерфейс валидатора, который мы можем реализовать для создания нашего собственного настраиваемого валидатора. Для использования проверки на основе JSR-303 нам необходимо аннотировать переменные компонента с необходимыми проверками.

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

#вопросы_с_собеседований

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥2
🖥 Как войти в backend-разработку на Java

Если вы подумываете начать карьеру программиста с Java-разработки в сфере бэкенда, то в этой статье вы найдёте чек-лист знаний, которые точно пригодятся на старте.

Вместе с Семёном Кирековым, Java Team Lead в MTS Big Data и Java-деканом курса «Java-разработчик» в МТС.Тета, собрали набор базовых навыков и инструментов, необходимых для того, чтобы ориентироваться в профессии backend-разработчика на Java.

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥1
🖥 Caffeine

Высокопроизводительная библиотека кэширования для Java. Caffeine обеспечивает кеширование в памяти с использованием API, наподобие Google Guava.

🖥 Github
📃 Документация

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥31🤯1
🖥 Каким будет результат выполнения данного кода?

public static void main(String[] args) {

List<String> stringList = new ArrayList<>();
stringList.add("one");
stringList.add("one and a half");
stringList.add("two");
stringList.add("two and a half");
stringList.add("three and a half");

System.out.println("Before " + stringList);
Iterator<String> stringIterator = stringList.iterator();
while (stringIterator.hasNext()) {
String next = stringIterator.next();
if (next.equals("two and a half")) {
stringList.add("three");
}
}

System.out.println("After " + stringList);
}


Ответ

Before [one, one and a half, two, two and a half, three and a half]
Exception in thread "main" java.util.ConcurrentModificationException


При попытке добавить элемент в список возникнет исключение связанное с попыткой изменить список , по которому итерируемся, так как итератор для ArrayList изначально это fail-fast итератор. В таком случае необходимо использовать fail-safe итераторы, они работают с клоном коллекции которую потребовалось изменить. В данном случае можно использовать CopyOnWriteArrayList.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥4👎21
2025/07/08 16:12:32
Back to Top
HTML Embed Code: