Где и как вы можете использовать приватный конструктор?
Приватный (помеченный ключевым словом
👉@BookJava
Приватный (помеченный ключевым словом
private, скрытый) конструктор может использоваться публичным статическим методом генерации объектов данного класса. Также доступ к нему разрешён вложенным классам и может использоваться для их нужд.👉@BookJava
👍6
  Не верьте ChatGPT и используйте KotUniL
В последние недели медиа и социальные сети захлеснул поток сообщений о диалогах с ChatGPT. Только на Хабре поиск по этому термину показывает сегодня полтора десятка статей.
Попробовал пообщаться с ChatGPT и я. Результат общения вынесен в заголовок.
Хотите узнать, почему ChatGPT верить нельзя и почему лучше использовать KotUniL - читайте дальше.
А если вы решили читать дальше, не воспринимайте заголовок буквально. Это все-таки ирония. К сожалению, я не предупредил об этом читателей в первом варианте этой статьи и получил в результате массу минусов.
Итак, как было дело.
Сначала я пообщался с ChatGPT (далее для простоты я буду иногда обозначать его ИИ) на английском, а потом на русском.
https://habr.com/ru/post/707548/
👉@BookJava
В последние недели медиа и социальные сети захлеснул поток сообщений о диалогах с ChatGPT. Только на Хабре поиск по этому термину показывает сегодня полтора десятка статей.
Попробовал пообщаться с ChatGPT и я. Результат общения вынесен в заголовок.
Хотите узнать, почему ChatGPT верить нельзя и почему лучше использовать KotUniL - читайте дальше.
А если вы решили читать дальше, не воспринимайте заголовок буквально. Это все-таки ирония. К сожалению, я не предупредил об этом читателей в первом варианте этой статьи и получил в результате массу минусов.
Итак, как было дело.
Сначала я пообщался с ChatGPT (далее для простоты я буду иногда обозначать его ИИ) на английском, а потом на русском.
https://habr.com/ru/post/707548/
👉@BookJava
👍6
  Какими свойствами обладает порождаемое equals() отношение эквивалентности?
Рефлексивность: для любой ссылки на значение
Симметричность: для любых ссылок на значения
Транзитивность: для любых ссылок на значения
Непротиворечивость: для любых ссылок на значения
Для любой ненулевой ссылки на значение
👉@BookJava
Рефлексивность: для любой ссылки на значение
x, x.equals(x) вернет true;Симметричность: для любых ссылок на значения
x и y, x.equals(y) должно вернуть true, тогда и только тогда, когда y.equals(x) возвращает true.Транзитивность: для любых ссылок на значения
x, y и z, если x.equals(y) и y.equals(z) возвращают true, тогда и x.equals(z) вернёт true;Непротиворечивость: для любых ссылок на значения
х и у, если несколько раз вызвать х.equals(y), постоянно будет возвращаться значение true либо постоянно будет возвращаться значение false при условии, что никакая информация, используемая при сравнении объектов, не поменялась.Для любой ненулевой ссылки на значение
х выражение х.equals(null) должно возвращать false.👉@BookJava
👍6
  Как написать на Java функцию, подобную sizeof в C
https://levelup.gitconnected.com/how-to-write-a-c-like-sizeof-function-in-java-9352e646d112
👉@BookJava
https://levelup.gitconnected.com/how-to-write-a-c-like-sizeof-function-in-java-9352e646d112
👉@BookJava
👍3👎2
  15 Tips to Become a Java Expert!
https://dev.to/weder96/15-tips-to-become-a-java-expert-1acj
👉@BookJava
https://dev.to/weder96/15-tips-to-become-a-java-expert-1acj
👉@BookJava
👍4
  Можно ли хранить null в стандартных коллекциях?
Все интерфейсы Collections Framework позволяют своим реализациям самостоятельно решать, поддерживать ли null-значения. Если реализация не может принять
Большинство списков (
Unmodifiable Maps не допускают null-ов совсем. Обычные изменяемые мапы обычно не испытывают трудности со значениями null. А вот с ключами дело обстоит интереснее.
Иногда этот вопрос дается как задача с подвохом про
Для значений Set-ов действуют те же правила, что для ключей лежащих в основе их Map-ов.
👉@BookJava
Все интерфейсы Collections Framework позволяют своим реализациям самостоятельно решать, поддерживать ли null-значения. Если реализация не может принять
 null, она выбрасывает NullPointerException или ClassCastException.Большинство списков (
LinkedList, ArrayList) принимают null без проблем. Большинство очередей (Queue и Deque) не хранят null – возвращая из читающего метода null они сообщают пользователю о пустоте коллекции.Unmodifiable Maps не допускают null-ов совсем. Обычные изменяемые мапы обычно не испытывают трудности со значениями null. А вот с ключами дело обстоит интереснее.
HashMap не может посчитать hash-сумму от null. Но вместо этого для таких ключей просто используется бакет номер 0.Иногда этот вопрос дается как задача с подвохом про
TreeMap. Nullability её ключей зависит от готовности к этому компаратора. Натуральный порядок (который работает для Comparable ключей) не поддерживает null. Раньше в реализации был баг, который позволял положить значение по ключу null в корень дерева без выброса исключения.Для значений Set-ов действуют те же правила, что для ключей лежащих в основе их Map-ов.
👉@BookJava
👍4
  Один день из жизни JVM-инженера
Можно разрабатывать на Java, а можно разрабатывать Java. Есть люди, чей код исполняет виртуальная машина — а есть люди, чей код и есть виртуальная машина.
Вроде бы те и другие существуют в одной Java-экосистеме, но задачи совершенно разные.
https://habr.com/ru/company/jugru/blog/719614/
👉@BookJava
Можно разрабатывать на Java, а можно разрабатывать Java. Есть люди, чей код исполняет виртуальная машина — а есть люди, чей код и есть виртуальная машина.
Вроде бы те и другие существуют в одной Java-экосистеме, но задачи совершенно разные.
https://habr.com/ru/company/jugru/blog/719614/
👉@BookJava
👍8🔥3
  Media is too big
    VIEW IN TELEGRAM
  Собеседование Java Spring - Разбор вопросов с собеседований на Java Developer
Собрали самые интересные вопросы с собеседований на Java-разработчика. В видео две части. В первой рассказываем про Java: Коллекции, Hash Code & Equals Contract, Functional interfaces, Stream API, Garbage collector, устройство памяти, heap, concurrency.
Во второй — про Spring: Spring Beans, Spring Data Repository, Аннотации, Programmatic TM, Spring MVC
источник
👉@BookJava
Собрали самые интересные вопросы с собеседований на Java-разработчика. В видео две части. В первой рассказываем про Java: Коллекции, Hash Code & Equals Contract, Functional interfaces, Stream API, Garbage collector, устройство памяти, heap, concurrency.
Во второй — про Spring: Spring Beans, Spring Data Repository, Аннотации, Programmatic TM, Spring MVC
источник
👉@BookJava
👍13
  Содержит множество проектов на Java, которые могут быть полезны при изучении языка
https://github.com/topics/java
👉@BookJava
  
  https://github.com/topics/java
👉@BookJava
GitHub
  
  
  GitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.
👍7
  Media is too big
    VIEW IN TELEGRAM
  Java. Распараллеливаем вычисления на пуле потоков
Разбираемся, как можно по простому ускорить вычисления с помощью параллельного выполнения на пуле потоков.
Исходный код
источник
👉@BookJava
Разбираемся, как можно по простому ускорить вычисления с помощью параллельного выполнения на пуле потоков.
Исходный код
источник
👉@BookJava
👍6
  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
  