Что такое Method Reference (ссылки на методы)? 🤓
Ответ:
Method Reference — это еще более краткая форма записи лямбда-выражения, когда вы просто вызываете существующий метод.
Синтаксис: ClassName::methodName.
Есть четыре типа:
ссылка на статический метод (Math::max),
ссылка на метод экземпляра конкретного объекта (System.out::println),
ссылка на метод экземпляра произвольного объекта конкретного типа (String::length),
ссылка на конструктор (ArrayList::new). Method Reference делают код еще более читаемым и лаконичным.
#собеседование
Ответ:
Method Reference
Синтаксис: ClassName::methodName.
Есть четыре типа:
ссылка на статический метод (Math::max),
ссылка на метод экземпляра конкретного объекта (System.out::println),
ссылка на метод экземпляра произвольного объекта конкретного типа (String::length),
ссылка на конструктор (ArrayList::new). Method Reference делают код еще более читаемым и лаконичным.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
История технологий сегодня — 3 апреля
ℹ️ Кто родился в этот день
Не нашел((
🌐 Знаковые события
1885 — немецкий изобретатель Готлиб Даймлер получил патент на свой первый двигатель — в половину лошадиной силы.
1973 – Мартин Купер из компании Motorola совершает первый звонок с мобильного телефона, используя портативное устройство, Джоэлу С. Энгелю из Bell Labs.
1981 – На выставке West Coast Computer Faire в Сан-Франциско был представлен Osborne 1, первый успешный портативный компьютер.
2010 – компания Apple Inc. выпустила первое поколение iPad , планшетного компьютера.
#Biography #Birth_Date #Events #03апреля
Не нашел((
1885 — немецкий изобретатель Готлиб Даймлер получил патент на свой первый двигатель — в половину лошадиной силы.
1973 – Мартин Купер из компании Motorola совершает первый звонок с мобильного телефона, используя портативное устройство, Джоэлу С. Энгелю из Bell Labs.
1981 – На выставке West Coast Computer Faire в Сан-Франциско был представлен Osborne 1, первый успешный портативный компьютер.
2010 – компания Apple Inc. выпустила первое поколение iPad , планшетного компьютера.
#Biography #Birth_Date #Events #03апреля
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
[Совет по Java #022]
Тема: BigDecimal с конструктором от double теряет точность.
Проблема: Конструктор BigDecimal(double) принимает значение double с плавающей точкой, которое уже содержит погрешность из-за двоичного представления десятичных дробей.
Эта погрешность не исчезает при создании BigDecimal — она фиксируется и становится частью его масштаба.
Например, new BigDecimal(0.1) создает объект, равный 0.1000000000000000055511151231257827021181583404541015625, а не 0.1. Это приводит к неожиданным ошибкам при сравнении, сложении и других операциях, полностью нивелируя смысл использования BigDecimal для точных вычислений.
Ошибка коварна тем, что при выводе через System.out.println() может отобразиться округленное значение, создавая иллюзию корректности.
Решение: Используйте один из двух безопасных способов создания BigDecimal:
- BigDecimal.valueOf(double) — статический фабричный метод, который использует Double.toString() для преобразования и гарантирует точное представление десятичного значения.
- Конструктор BigDecimal(String) — самый надежный, но требует явного преобразования числа в строку.
- Никогда не используйте конструктор BigDecimal(double) для значений, которые не являются целыми или не могут быть точно представлены в двоичной системе.
Объяснение: Ключевое различие между конструктором и фабричным методом в том, что BigDecimal.valueOf(double) сначала преобразует double в строку с помощью Double.toString(), которая использует алгоритм для получения минимального количества знаков, точно представляющих значение. Это устраняет избыточную погрешность.
Конструктор BigDecimal(String) является самым прозрачным — он парсит десятичную строку напрямую, что идеально для значений, поступающих из пользовательского ввода или API. Для целых чисел (например, 10.0) погрешность отсутствует, но безопаснее использовать BigDecimal.valueOf(10) или BigDecimal.TEN.
Статический анализ кода (SonarQube, SpotBugs) автоматически подсвечивает использование конструктора BigDecimal(double) как критический дефект.
#Java #советы
Тема: BigDecimal с конструктором от double теряет точность.
Проблема: Конструктор BigDecimal(double) принимает значение double с плавающей точкой, которое уже содержит погрешность из-за двоичного представления десятичных дробей.
Эта погрешность не исчезает при создании BigDecimal — она фиксируется и становится частью его масштаба.
Например, new BigDecimal(0.1) создает объект, равный 0.1000000000000000055511151231257827021181583404541015625, а не 0.1. Это приводит к неожиданным ошибкам при сравнении, сложении и других операциях, полностью нивелируя смысл использования BigDecimal для точных вычислений.
Ошибка коварна тем, что при выводе через System.out.println() может отобразиться округленное значение, создавая иллюзию корректности.
Решение: Используйте один из двух безопасных способов создания BigDecimal:
- BigDecimal.valueOf(double) — статический фабричный метод, который использует Double.toString() для преобразования и гарантирует точное представление десятичного значения.
- Конструктор BigDecimal(String) — самый надежный, но требует явного преобразования числа в строку.
- Никогда не используйте конструктор BigDecimal(double) для значений, которые не являются целыми или не могут быть точно представлены в двоичной системе.
import java.math.BigDecimal;
public class BigDecimalPrecision {
public static void main(String[] args) {
//Антипаттерн: конструктор от double
BigDecimal fromDouble = new BigDecimal(0.1);
System.out.println("new BigDecimal(0.1): " + fromDouble);
// Вывод: 0.1000000000000000055511151231257827021181583404541015625
//Ошибка в сравнении
BigDecimal expected = new BigDecimal("0.1");
System.out.println("Равны? " + fromDouble.equals(expected)); // false!
//Ошибка в арифметике
BigDecimal sum = new BigDecimal(0.1).add(new BigDecimal(0.2));
System.out.println("0.1 + 0.2 = " + sum);
// Вывод: 0.3000000000000000166533453693773481063544750213623046875
//Решение 1: BigDecimal.valueOf(double)
BigDecimal fromValueOf = BigDecimal.valueOf(0.1);
System.out.println("BigDecimal.valueOf(0.1): " + fromValueOf); // 0.1
//Решение 2: конструктор от String
BigDecimal fromString = new BigDecimal("0.1");
System.out.println("new BigDecimal(\"0.1\"): " + fromString); // 0.1
// Проверка равенства
System.out.println("valueOf == string: " + fromValueOf.equals(fromString)); // true
//Безопасная арифметика
BigDecimal safeSum = BigDecimal.valueOf(0.1).add(BigDecimal.valueOf(0.2));
System.out.println("Безопасная сумма: " + safeSum); // 0.3
// Для целых чисел конструктор от double безопасен
BigDecimal intValue = new BigDecimal(10.0);
System.out.println("Целое число: " + intValue); // 10
}
}
Объяснение: Ключевое различие между конструктором и фабричным методом в том, что BigDecimal.valueOf(double) сначала преобразует double в строку с помощью Double.toString(), которая использует алгоритм для получения минимального количества знаков, точно представляющих значение. Это устраняет избыточную погрешность.
Конструктор BigDecimal(String) является самым прозрачным — он парсит десятичную строку напрямую, что идеально для значений, поступающих из пользовательского ввода или API. Для целых чисел (например, 10.0) погрешность отсутствует, но безопаснее использовать BigDecimal.valueOf(10) или BigDecimal.TEN.
Статический анализ кода (SonarQube, SpotBugs) автоматически подсвечивает использование конструктора BigDecimal(double) как критический дефект.
#Java #советы
👍6
Что выведет код?
#Tasks
import java.math.BigDecimal;
public class Task030426 {
public static void main(String[] args) {
BigDecimal bd1 = new BigDecimal(0.1);
BigDecimal bd2 = BigDecimal.valueOf(0.1);
BigDecimal bd3 = new BigDecimal("0.1");
System.out.println(bd1.equals(bd2));
System.out.println(bd1.equals(bd3));
System.out.println(bd2.equals(bd3));
System.out.println(bd1.compareTo(bd2));
}
}
#Tasks
👍2
Как создать неизменяемый (immutable) класс? 🤓
Ответ:
Чтобы создать immutable класс, следуйте правилам:
1) Объявите класс как final (чтобы нельзя было наследовать).
2) Все поля сделайте private final.
3) Не предоставляйте сеттеры.
4) Инициализируйте все поля через конструктор, делая глубокие копии для изменяемых объектов (массивы, Date, List).
5) В геттерах для изменяемых полей возвращайте копии, а не оригинальные ссылки (Collections.unmodifiableList(), клонирование массива).
Пример: класс String.
#собеседование
Ответ:
1) Объявите класс как final (чтобы нельзя было наследовать).
2) Все поля сделайте private final.
3) Не предоставляйте сеттеры.
4) Инициализируйте все поля через конструктор, делая глубокие копии для изменяемых объектов (массивы, Date, List).
5) В геттерах для изменяемых полей возвращайте копии, а не оригинальные ссылки (Collections.unmodifiableList(), клонирование массива).
Пример: класс String.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
История технологий сегодня — 4 апреля
ℹ️ Кто родился в этот день
Карл Вильгельм Сименс (4 апреля 1823 года — 19 ноября 1883 года) — немецкий и британский инженер-механик, изобретатель и промышленник. Ему принадлежит ряд изобретений, в том числе регенеративного конденсатора для предварительного нагревания воды, употребляемой в пищу (1850 год), водомера (1851 год), пирометра (1860 год), гидравлического компрессора для уменьшения отката артиллерийских орудий (1867 год) и прочего.
🌐 Знаковые события
1983 — состоялся первый полёт американского космического челнока «Челленджер».
1994 — основана компания Netscape Communications (называвшаяся в то время «Mosaic Communications Corporation»).
#Biography #Birth_Date #Events #04апреля
Карл Вильгельм Сименс (4 апреля 1823 года — 19 ноября 1883 года) — немецкий и британский инженер-механик, изобретатель и промышленник. Ему принадлежит ряд изобретений, в том числе регенеративного конденсатора для предварительного нагревания воды, употребляемой в пищу (1850 год), водомера (1851 год), пирометра (1860 год), гидравлического компрессора для уменьшения отката артиллерийских орудий (1867 год) и прочего.
1983 — состоялся первый полёт американского космического челнока «Челленджер».
1994 — основана компания Netscape Communications (называвшаяся в то время «Mosaic Communications Corporation»).
#Biography #Birth_Date #Events #04апреля
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
С 28.03 по 03.04
Предыдущий пост(с 21.03 по 27.03)
Воскресный мотивационный пост:
Не было мотивации, а вообще нужна?) (Признался что только один читает... Напишу ему в личку, наверно)
Запись встреч/видео:
В процессе подготовки
Обучающие статьи:
Раздел 8. Stream API и функциональный стиль
Глава 7: Stream API в экосистеме Java. Интеграционные паттерны
Рефакторинг legacy-кода в проекте «Библиотека»
Глава 8: За пределами коллекций. Бесконечность и I/O
Бесконечные стримы и ленивая генерация
[Совет по Java #020]
Тема: HashSet с изменяемыми объектами ломает контракт.
[Совет по Java #021]
Тема: Использование intern() в (String.intern()) для уникальных строк может забить PermGen/Metaspace и вызвать утечку памяти.
[Совет по Java #022]
Тема: BigDecimal с конструктором от double теряет точность.
Полезные статьи и видео:
Хватит винить кривые руки. Твой язык программирования энергетически тебе не подходит
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
Предыдущий пост(с 21.03 по 27.03)
Воскресный мотивационный пост:
Не было мотивации, а вообще нужна?)
Запись встреч/видео:
В процессе подготовки
Обучающие статьи:
Раздел 8. Stream API и функциональный стиль
Глава 7: Stream API в экосистеме Java. Интеграционные паттерны
Рефакторинг legacy-кода в проекте «Библиотека»
Глава 8: За пределами коллекций. Бесконечность и I/O
Бесконечные стримы и ленивая генерация
[Совет по Java #020]
Тема: HashSet с изменяемыми объектами ломает контракт.
[Совет по Java #021]
Тема: Использование intern() в (String.intern()) для уникальных строк может забить PermGen/Metaspace и вызвать утечку памяти.
[Совет по Java #022]
Тема: BigDecimal с конструктором от double теряет точность.
Полезные статьи и видео:
Хватит винить кривые руки. Твой язык программирования энергетически тебе не подходит
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
👍2
История технологии сегодня — 5 апреля
ℹ️ Кто родился в этот день
Барон Павел Львович Шиллинг (нем. Schilling von Cannstatt; 5 [16] апреля 1786, Ревель — 25 июля [6 августа] 1837, Санкт-Петербург) — известный российский учёный, член-корреспондент Санкт-Петербургской академии наук, этнограф, филолог, криптограф, изобретатель первого в мире принятого в эксплуатацию электромагнитного телеграфа, автор первого в истории подрыва мины по электрическому проводу, создатель первого в мире телеграфного кода и лучшего в XIX веке секретного шифра, историк-востоковед.
Серге́й Алексе́евич Чаплы́гин (24 марта [5 апреля] 1869, Раненбург, Рязанская губерния — 8 октября 1942, Новосибирск) — русский и советский механик и математик, один из основоположников современной аэромеханики и аэродинамики.
Лоуренс («Ларри») Дейл Белл (5 апреля 1894 — 20 октября 1956) — американский инженер и промышленник, основатель и президент Bell Aircraft: истребитель Аэрокобра, первый в мире самолёт, преодолевший скорость звука, X-1 и самый массовый вертолёт в истории авиации Bell 204 / UH-1.
🌐 Знаковые события
1818 — в Париже барон Карл де Дрез продемонстрировал первое двухколёсное средство передвижения (прообраз велосипеда).
1913 — Нильс Бор завершил статью «О строении атомов и молекул», давшую начало квантовой теории.
1940 — совершён пробный полёт первого отечественного высокоскоростного истребителя И-200.
#Biography #Birth_Date #Events #05апреля
Барон Павел Львович Шиллинг (нем. Schilling von Cannstatt; 5 [16] апреля 1786, Ревель — 25 июля [6 августа] 1837, Санкт-Петербург) — известный российский учёный, член-корреспондент Санкт-Петербургской академии наук, этнограф, филолог, криптограф, изобретатель первого в мире принятого в эксплуатацию электромагнитного телеграфа, автор первого в истории подрыва мины по электрическому проводу, создатель первого в мире телеграфного кода и лучшего в XIX веке секретного шифра, историк-востоковед.
Серге́й Алексе́евич Чаплы́гин (24 марта [5 апреля] 1869, Раненбург, Рязанская губерния — 8 октября 1942, Новосибирск) — русский и советский механик и математик, один из основоположников современной аэромеханики и аэродинамики.
Лоуренс («Ларри») Дейл Белл (5 апреля 1894 — 20 октября 1956) — американский инженер и промышленник, основатель и президент Bell Aircraft: истребитель Аэрокобра, первый в мире самолёт, преодолевший скорость звука, X-1 и самый массовый вертолёт в истории авиации Bell 204 / UH-1.
1818 — в Париже барон Карл де Дрез продемонстрировал первое двухколёсное средство передвижения (прообраз велосипеда).
1913 — Нильс Бор завершил статью «О строении атомов и молекул», давшую начало квантовой теории.
1940 — совершён пробный полёт первого отечественного высокоскоростного истребителя И-200.
#Biography #Birth_Date #Events #05апреля
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4