Media is too big
VIEW IN TELEGRAM
Телеграм бот-игра на JAVA в 100 строк
Пишем телеграм бота, реализующего простую игру в стиле "камень-ножницы-бумага" на чистой джава + библиотека telegram api. Для пущей сложности я делаю это без БД и при этом пытаюсь выдернуть информацию о том, в каком чате происходит дело (может пригодиться для хранения какой-либо статистики)
Код из видео
Использованная библиотека
источник
👉@BookJava
Пишем телеграм бота, реализующего простую игру в стиле "камень-ножницы-бумага" на чистой джава + библиотека telegram api. Для пущей сложности я делаю это без БД и при этом пытаюсь выдернуть информацию о том, в каком чате происходит дело (может пригодиться для хранения какой-либо статистики)
Код из видео
Использованная библиотека
источник
👉@BookJava
👍8
Media is too big
VIEW IN TELEGRAM
Как из Java приложения запустить другую программу?
Самый простой и базовый способ – с помощью метода
Рекомендуемый, и более управляемый способ – использование класса
В результате запуска команды создается объект класса
Команда запускается в отдельном подпроцессе операционной системы. Это значит, что лозунг «Write once, run anywhere» перестает здесь работать – ваша программа становится платформо-зависимой. Обращение к ОС, а тем более выделение нового процесса обычно занимает немало ресурсов компьютера. Запуск внешних программ не считается плохой практикой, но всё-таки при возможности стоит его избегать.
👉@BookJava
Самый простой и базовый способ – с помощью метода
Runtime.getRuntime().exec()
. В качестве параметра ему передается строка системной команды. Опциональные можно передать рабочую директорию, и переменные окружения в виде массива строк "имя=значение
". Если команде нужны аргументы, они передаются либо массивом, либо в той же строке команды через пробелы.Рекомендуемый, и более управляемый способ – использование класса
ProcessBuilder
. Он же применяется внутри метода exec
. Билдер дает, например, средства для использования в команде пайплайнов и редиректов ввода-вывода.В результате запуска команды создается объект класса
Process
. Его можно сконвертировать в более современный (Java 9+) и функциональный ProcessHandle
. Через эти объекты идет работа с вводом-выводом процесса, его характеристиками и статусом.Команда запускается в отдельном подпроцессе операционной системы. Это значит, что лозунг «Write once, run anywhere» перестает здесь работать – ваша программа становится платформо-зависимой. Обращение к ОС, а тем более выделение нового процесса обычно занимает немало ресурсов компьютера. Запуск внешних программ не считается плохой практикой, но всё-таки при возможности стоит его избегать.
👉@BookJava
👍6🔥2
Почему не рекомендуется использовать метод Thread.stop()?
При принудительной остановке (приостановке) потока,
👉@BookJava
При принудительной остановке (приостановке) потока,
stop()
прерывает поток в недетерменированном месте выполнения, в результате становится совершенно непонятно, что делать с принадлежащими ему ресурсами. Поток может открыть сетевое соединение - что в таком случае делать с данными, которые еще не вычитаны? Где гарантия, что после дальнейшего запуска потока (в случае приостановки) он сможет их дочитать? Если поток блокировал разделяемый ресурс, то как снять эту блокировку и не переведёт ли принудительное снятие к нарушению консистентности системы? То же самое можно расширить и на случай соединения с базой данных: если поток остановят посередине транзакции, то кто ее будет закрывать? Кто и как будет разблокировать ресурсы?👉@BookJava
👍4👎1
Media is too big
VIEW IN TELEGRAM
Рисуем звук. Почувствуй себя нейросетью. Java, Guice
Сегодня java, guice и другие - помогут нам записать звук в представление чуть более непонятное чем эквалайзер (по крайней мере для меня). Вы при желании можете записать что-то другое.
00:00 Demo
01:34 Under the hood
02:44 Quickstart Archetype
04:28 BytesFetcher interface
05:32 AudioBytesFetcher
15:00 ImageDrawService
27:44 Guice module
28:51 App
34:40 Start
35:36 Success
36:23 Result
GitHub
источник
👉@BookJava
Сегодня java, guice и другие - помогут нам записать звук в представление чуть более непонятное чем эквалайзер (по крайней мере для меня). Вы при желании можете записать что-то другое.
00:00 Demo
01:34 Under the hood
02:44 Quickstart Archetype
04:28 BytesFetcher interface
05:32 AudioBytesFetcher
15:00 ImageDrawService
27:44 Guice module
28:51 App
34:40 Start
35:36 Success
36:23 Result
GitHub
источник
👉@BookJava
👍3🔥1
Media is too big
VIEW IN TELEGRAM
Java. Многопоточность. Как устроить Deadlock
В данном видео рассказывается о том, что такое Deadlock, и как намеренно создать взаимную блокировку потоков на языке программирования Java.
Исходники GitHub
источник
👉@BookJava
В данном видео рассказывается о том, что такое Deadlock, и как намеренно создать взаимную блокировку потоков на языке программирования Java.
Исходники GitHub
источник
👉@BookJava
👍5
Что такое Optional?
Опциональное значение Optional — это контейнер для объекта, который может содержать или не содержать значение
👉@BookJava
Опциональное значение Optional — это контейнер для объекта, который может содержать или не содержать значение
null
. Такая обёртка является удобным средством предотвращения NullPointerException
, т.к. имеет некоторые функции высшего порядка, избавляющие от добавления повторяющихся if null/notNull
проверок:Optional<String> optional = Optional.of("hello");
optional.isPresent(); // true
optional.ifPresent(s -> System.out.println(s.length())); // 5
optional.get(); // "hello"
optional.orElse("ops..."); // "hello"
👉@BookJava
👍10
Kickstart Your Spring Boot Application Development
https://www.docker.com/blog/kickstart-your-spring-boot-application-development/
👉@BookJava
https://www.docker.com/blog/kickstart-your-spring-boot-application-development/
👉@BookJava
Docker
Kickstart Your Spring Boot Application Development | Docker
Learn from Docker experts to simplify and advance your app development and management with Docker. Stay up to date on Docker events and new version
Search Algorithms in Java
https://stackabuse.com/search-algorithms-in-java/#javacollectionsapi
👉@BookJava
https://stackabuse.com/search-algorithms-in-java/#javacollectionsapi
👉@BookJava
Stack Abuse
Search Algorithms in Java
Searching is one of the most common actions performed in regular business applications. This involves fetching some data stored in data structures like Arrays,...
👍2
Для чего используются ключевые слова volatile, synchronized, transient, native?
Ключевые слова
👉@BookJava
volatile
вынуждает потоки отключить оптимизацию доступа и использовать единственный экземпляр переменной. Если переменная примитивного типа – этого будет достаточно для обеспечения потокобезопасности. Если же переменная является ссылкой на объект – синхронизировано будет исключительно значение этой ссылки. Все данные, содержащиеся в объекте, синхронизированы не будут!synchronized
— это зарезервированное слово позволяет добиваться синхронизации в помеченных им методах или блоках кода.Ключевые слова
transient
и native
к многопоточности никакого отношения не имеют, первое используется для указания полей класса, которые не нужно сериализовать, а второе сигнализирует о том, что метод реализован в платформо-зависимом коде.👉@BookJava
👍1
Media is too big
VIEW IN TELEGRAM
Java. Шифруем данные для открытой передачи
Шифруем текст с использованием ключа данные для открытой передачи в GET для разных ситуаций. Не использовал secure библиотеки - по каким-то известным только мне тогдашнему причинам.
Если не охота заморачиватья с шифрованием - из комментария подписчика @Александр Плохой: Cipher.getInstance("AES").init(ENCRYPT_MODE, key);
(опять не прицепились маркеры - дублирую в описани)
00:00 Вступление и обоснования
02:00 Личный опыт
04:00 Spring
08:00 Библиотека символов
12:00 Encrypt
18:00 Decrypt
19:00 Test
23:00 Разбор на пальцах
Source: https://github.com/azim-ut/encrypt
источник
👉@BookJava
Шифруем текст с использованием ключа данные для открытой передачи в GET для разных ситуаций. Не использовал secure библиотеки - по каким-то известным только мне тогдашнему причинам.
Если не охота заморачиватья с шифрованием - из комментария подписчика @Александр Плохой: Cipher.getInstance("AES").init(ENCRYPT_MODE, key);
(опять не прицепились маркеры - дублирую в описани)
00:00 Вступление и обоснования
02:00 Личный опыт
04:00 Spring
08:00 Библиотека символов
12:00 Encrypt
18:00 Decrypt
19:00 Test
23:00 Разбор на пальцах
Source: https://github.com/azim-ut/encrypt
источник
👉@BookJava
👍2❤1
Полное руководство по switch в Java
Старый добрый switch был в Java с первого дня. Мы все используем его и привыкли к нему — особенно к его причудам (кого‑нибудь еще раздражает break?). Но начиная с Java 12, ситуация начала меняться: switch вместо оператора стал выражением:
https://habr.com/ru/post/724186/
👉@BookJava
Старый добрый switch был в Java с первого дня. Мы все используем его и привыкли к нему — особенно к его причудам (кого‑нибудь еще раздражает break?). Но начиная с Java 12, ситуация начала меняться: switch вместо оператора стал выражением:
boolean result = switch(ternaryBool) {
case TRUE -> true;
case FALSE -> false;
case FILE_NOT_FOUND -> throw new UncheckedIOException(
"This is ridiculous!",
new FileNotFoundException());
default -> throw new IllegalArgumentException("Seriously?!");
}
https://habr.com/ru/post/724186/
👉@BookJava
👍5
Media is too big
VIEW IN TELEGRAM
Использование баз данных с Java (JDBC, Spring, Hibernate, MySQL, Derby, MS Access)
https://github.com/tsnsoft?q=jdbc
https://github.com/tsnsoft?q=hibernate
https://github.com/tsnsoft?q=spring
источник
👉@BookJava
https://github.com/tsnsoft?q=jdbc
https://github.com/tsnsoft?q=hibernate
https://github.com/tsnsoft?q=spring
источник
👉@BookJava
👍4
Вышла Java 20
Вышла общедоступная версия Java 20. В этот релиз попало около 1500 закрытых задач и 7 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.
Ссылки на скачивание:
Oracle JDK
OpenJDK
👉@BookJava
Вышла общедоступная версия Java 20. В этот релиз попало около 1500 закрытых задач и 7 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.
Ссылки на скачивание:
Oracle JDK
OpenJDK
👉@BookJava
Oracle
Download the Latest Java LTS Free
Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.
👍3
Fastjson - это библиотека Java, которую можно использовать для преобразования Java-объектов в их JSON-представление. Она также может быть использована для преобразования строки JSON в эквивалентный объект Java. Fastjson может работать с произвольными Java-объектами, включая уже существующие объекты, исходный код которых у вас отсутствует.
https://github.com/alibaba/fastjson
👉@BookJava
https://github.com/alibaba/fastjson
👉@BookJava
👍9👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Java spring exception handling | обработка исключений за 5 минут
В этом видео речь пойдет об обработке исключений на уровне контроллера на языке Java. Покажу, какие инструменты есть у Spring.
00:23 - try catch, ResponseEntity
00:47 - наследование ResponseStatusException
01:10 - настройки отображения сообщения, названия ошибки и стек трейс в ответе
01:47 - бросаем ResponseStatusException
02:04 - аннотация @ ExceptionHandler
03:05 - аннотация @ RestControllerAdvice
03:40 - кастомный объект вместо ResponseEntity
04:02 - аннотация @ ResponseStatus
Код можно посмотреть тут: https://github.com/dispikerton/exceptionHandling
источник
👉@BookJava
В этом видео речь пойдет об обработке исключений на уровне контроллера на языке Java. Покажу, какие инструменты есть у Spring.
00:23 - try catch, ResponseEntity
00:47 - наследование ResponseStatusException
01:10 - настройки отображения сообщения, названия ошибки и стек трейс в ответе
01:47 - бросаем ResponseStatusException
02:04 - аннотация @ ExceptionHandler
03:05 - аннотация @ RestControllerAdvice
03:40 - кастомный объект вместо ResponseEntity
04:02 - аннотация @ ResponseStatus
Код можно посмотреть тут: https://github.com/dispikerton/exceptionHandling
источник
👉@BookJava
👍4🔥3
Что такое литералы?
Литералы — это явно заданные значения в коде программы — константы определенного типа, которые находятся в коде в момент запуска.
В этом классе “Hello world!” — литерал.
Переменная a - тоже литерал.
Литералы бывают разных типов, которые определяются их назначением и способом написания.
👉@BookJava
Литералы — это явно заданные значения в коде программы — константы определенного типа, которые находятся в коде в момент запуска.
class Test {
int a = 0b1101010110;
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
В этом классе “Hello world!” — литерал.
Переменная a - тоже литерал.
Литералы бывают разных типов, которые определяются их назначением и способом написания.
👉@BookJava
👍3🥴2👏1
Forwarded from Книги по Java | Books Java 📚
Java Challenges: 100+ Proven Tasks that Will Prepare You for Anything
Автор: Michael Inden (2021)
Автор Майкл Инден описывает альтернативные решения и анализирует возможные подводные камни и типичные ошибки при проектировании систем. Примеры рассматриваются с использованием JShell, JUnit 5 для модульного тестирования и проверки решений. Также, подробно описывается O-нотация для оценки производительности алгоритмов.
Скачать
👉 @java_360
Автор: Michael Inden (2021)
Автор Майкл Инден описывает альтернативные решения и анализирует возможные подводные камни и типичные ошибки при проектировании систем. Примеры рассматриваются с использованием JShell, JUnit 5 для модульного тестирования и проверки решений. Также, подробно описывается O-нотация для оценки производительности алгоритмов.
Скачать
👉 @java_360
👍4🔥2
Полезные и неизвестные библиотеки Java
https://piotrminkowski.com/2023/01/30/useful-unknown-java-libraries/
👉@BookJava
https://piotrminkowski.com/2023/01/30/useful-unknown-java-libraries/
👉@BookJava
👍4❤1