Telegram Web Link
🖥 Консольное приложение с обработкой событий на Java

Автономные (консольные) приложения Java и аплеты могут создавать окна на базе класса Frame. Если эти окна используются для интерактивного взаимодействия с пользователем, вы должны организовать в соответствующих классах обработку событий, переопределив методы handleEvent, mouseDown, mouseMove и аналогичные.

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

В остальном события обрабатываются таким же образом, что и в аплетах.

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Design patterns implemented in Java

Самый популярный Java-репозиторий на GitHub – коллекция паттернов проектирования всех видов и мастей.

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

Каждый паттерн в репозитории, будь он моно или нет, содержит подробное описание и примеры реализации на Java.

↪️ Github

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Одинарные и двойные кавычки

Что ты ожидаешь в результате выполнения кода с картинки?

Казалось бы, строка должна возвращать «HaHa», но на самом деле это будет «Ha169».

Двойные кавычки обрабатывают символы как строки, но одинарные кавычки ведут себя иначе. Они преобразуют символьные операнды ('H' и 'a') в целые значения посредством расширения примитивных типов — получается 169.

@javatg
java8-tutorial

Подробный гайд по Java 8, шаг за шагом описывающий все возможности и особенности Java. Короткие примеры грамотно иллюстрируют основные концепции: минимум текста, максимум наглядности. Данный репозиторий может быть как справочником, так и учебником.

https://github.com/winterbe/java8-tutorial

@javatg
🖥 Основные аннотации для работы со Spring.

☕️ @Controller — для классов-контроллеров в проекте Spring MVC.
☕️ @RequestMapping — для настройки сопоставления URI в методах-обработчиках контроллера. Это очень важная аннотация.
☕️ @ResponseBody — для отправки Object в качестве ответа, обычно для отправки данных XML или JSON в качестве ответа.
☕️ @PathVariable — для отображения динамических значений из URI в аргументы метода обработчика.
☕️ @Autowired — для автоматического связывания зависимостей в бинах Spring.
☕️ @Qualifier — с аннотацией @Autowired, чтобы избежать путаницы при наличии нескольких экземпляров типа bean-компонента.
☕️ @Service — для классов сервисного слоя.
☕️ @Scope — для настройки области действия Spring bean.
☕️ @Configuration, @ComponentScan и @Bean — для конфигураций на основе Java.
Аннотации AspectJ для настройки аспектов и советов, @Aspect, @Before, @After, @Around, @Pointcut и т. д.

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Sidekick

Sidekick — это отладчик активных приложений, который позволяет устранять баги в ваших приложениях, пока они продолжают работать.

🔩 Github
➡️ Docs

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
​​​XPrivacyLua – менеджер по конфиденциальности приложений для Android

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

#Java #Privacy #Android #Useful

@github_code
🖥 Как программист настроил автоматическое развертывание бекенда с базой данных

Сегодня решил рассказать о своем опыте, как при помощи docker-compose и bash скрипта настроил развертывание бекенд приложения с базой данных.

Какая была идея? Хотелось при помощи одной команды в терминале разворачивать Java приложение с базой данных так, чтобы можно было передать все необходимые переменные в момент запуска и нигде не хранить их.
Так, чтобы можно было развернуть новую версию приложения даже с телефона, просто заранее заготовив необходимую команду.

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

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Такое не интересует

#ithumor

@javatg
🖥 @github_code - лучшие проекты с Github теперь доступны в одном канале.

Проекты , которые рреально помогут в разработке и помогут прокачать навыки программирования.

Смотреть
Please open Telegram to view this post
VIEW IN TELEGRAM
🔩 AST explorer — удобный инструмент для генерации абстрактного синтаксического дерева кода

Стоит также отметить, что проводник предоставляет множество синтаксических анализаторов кода: начиная от esformatter и esprima для JavaScript, заканчивая java-parser для, собственно, Java.

➡️ Сайт проекта
🖥 Github

#web #java

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Полезные библиотеки Java

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

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

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

#java

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

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

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

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

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

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

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 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
🖥 Microhttp

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

🔩 Github

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

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

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

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

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Класс 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
🖥 Love, Spring and HTTP Bugs

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

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

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

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Если у класса 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
2024/10/03 23:20:29
Back to Top
HTML Embed Code: