Java for Beginner
870 subscribers
1.01K photos
275 videos
14 files
1.69K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Что выведет код?

public class Task160426 {
static class CloseableCounter160426 implements AutoCloseable {
private String id;
public CloseableCounter160426(String id) { this.id = id; }
public void close() throws Exception {
System.out.print(id);
throw new RuntimeException("close error: " + id);
}
}

public static void main(String[] args) {
try (CloseableCounter160426 c1 = new CloseableCounter160426("A");
CloseableCounter160426 c2 = new CloseableCounter160426("B")) {
throw new RuntimeException("body error");
} catch (Exception e) {
System.out.print(e.getMessage());
for (Throwable suppressed : e.getSuppressed()) {
System.out.print(suppressed.getMessage());
}
}
}
}


#Tasks
👍1
Что такое invokedynamic и зачем он нужен? 🤓

Ответ:

invokedynamic
(появился в Java 7) — это новая инструкция байт-кода, которая позволяет динамически связывать вызов метода в рантайме, а не на этапе компиляции.

Это ключевой механизм для реализации динамических языков на JVM.

В Java 8+ invokedynamic используется для реализации лямбда-выражений — вместо генерации анонимных классов на этапе компиляции, лямбды связываются динамически, что улучшает производительность и гибкость.


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
История технологии сегодня — 17 апреля

ℹ️ Кто родился в этот день

Джованни Баттиста Риччоли (итал. Giovanni Battista Riccioli; 17 апреля 1598, Феррара — 25 июня 1671, Болонья) — итальянский астроном и теолог, автор труда «Новый Альмагест» (Almagestum Novum) — свода астрономических знаний своего времени. Вместе с Франческо Гримальди составил карту Луны и ввёл в практику обозначение лунных кратеров именами учёных.


🌐 Знаковые события

2014 – космический телескоп НАСА « Кеплер» подтвердил открытие первой планеты размером с Землю в обитаемой зоне другой звезды.


#Biography #Birth_Date #Events #17апреля
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Обновил devforge.ru

Наладил работу рефреш токенов.

Заходите тестить - чат доступен и работает. 👋
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
[Совет по Java #027]

Тема: double и float не подходят для циклов с условием на равенство.

Проблема: Числа с плавающей запятой (float, double) не могут быть точно представлены в двоичной системе.

Значение 0.1 в двоичном виде — это бесконечная периодическая дробь, поэтому в памяти хранится его приближение. При многократном прибавлении 0.1 к 0.0 накопленная погрешность приводит к тому, что переменная никогда не станет точно равной 1.0. В результате условие d != 1.0 остается истинным всегда, и цикл становится бесконечным.

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

Решение: Никогда не используйте операторы равенства (==, !=) с числами с плавающей запятой в условиях циклов.

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

Для проверки близости используйте Math.abs(a - b) < epsilon.

public class FloatLoopProblem {

//Антипаттерн: бесконечный цикл
public static void badLoop() {
int iterations = 0;
for (double d = 0.0; d != 1.0; d += 0.1) {
iterations++;
System.out.printf("Итерация %d: %.20f%n", iterations, d);
if (iterations > 20) break; // защита от вечности
}
// Реальный вывод: d проходит через 0.0, 0.1, 0.2, ..., 0.9, 1.0000000000000002, ...
// Никогда не равно 1.0
}

//Ошибка с float
public static void badFloatLoop() {
for (float f = 0.0f; f != 1.0f; f += 0.1f) {
// Тоже бесконечный
}
}

//Решение 1: целочисленный счетчик
public static void goodLoopWithCounter() {
for (int i = 0; i <= 10; i++) {
double d = i * 0.1; // Вычисляем на каждой итерации
System.out.println("d = " + d);
}
}

//Решение 2: сравнение с эпсилон (допуском)
public static void goodLoopWithEpsilon() {
double d = 0.0;
final double EPSILON = 1e-10;
while (Math.abs(d - 1.0) > EPSILON) {
System.out.println("d = " + d);
d += 0.1;
}
System.out.println("Достигнуто: " + d);
}

//Решение 3: фиксированное количество итераций
public static void goodFixedIterations() {
int steps = 10;
for (int step = 0; step <= steps; step++) {
double ratio = (double) step / steps; // От 0.0 до 1.0
System.out.println(ratio);
}
}

// Демонстрация погрешности
public static void demonstratePrecision() {
double sum = 0.0;
for (int i = 0; i < 10; i++) {
sum += 0.1;
}
System.out.println("Сумма десяти 0.1: " + sum); // 0.9999999999999999
System.out.println("Сравнение с 1.0: " + (sum == 1.0)); // false
}

public static void main(String[] args) {
demonstratePrecision();
goodLoopWithCounter();
}
}


Объяснение:
Стандарт IEEE 754 определяет двоичное представление чисел с плавающей запятой. Десятичные дроби, не являющиеся суммой степеней двойки (например, 0.1 = 1/16 + 1/32 + 1/256 + ...), представляются бесконечным рядом, который обрезается до 53 бит мантиссы для double. Из-за этого ошибка округления накапливается.

В примере с циклом после десяти сложений получается не 1.0, а 0.9999999999999999. Условие d != 1.0 остается истинным, и цикл продолжается до бесконечности (точнее, до достижения бесконечности или переполнения).

Корректные подходы: использовать целочисленный счетчик (погрешность не накапливается, так как каждый раз вычисляется заново), применять сравнение с допустимой абсолютной погрешностью (epsilon), либо использовать BigDecimal для точных десятичных расчетов.

#Java #советы
👍3
Что выведет код?

public class Task170426 {
public static void main(String[] args) {
double sum = 0;
for (double d = 0.0; d != 1.0; d += 0.1) {
sum += d;
}
System.out.println(sum);
}
}


#Tasks
👍2
Варианты ответа:
Anonymous Quiz
5%
4.5
16%
5.0
5%
45.0
74%
Бесконечный цикл
👍2
Что такое JMX (Java Management Extensions)? 🤓

Ответ:

JMX
— это технология для мониторинга и управления Java-приложениями.

Она позволяет в рантайме получать информацию о состоянии приложения (метрики, счетчики) и даже изменять параметры, не перезапуская приложение.

Основные понятия:
MBean (Managed Bean) — управляемый ресурс, который вы хотите мониторить;
MBean Server — реестр MBean'ов; адаптеры и коннекторы — для удаленного доступа (например, JConsole, VisualVM используют JMX).


#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
История технологии сегодня — 18 апреля

ℹ️ Кто родился в этот день

Не нашел(


🌐 Знаковые события

1953 — в Англии совершил первый коммерческий полёт первый в мире турбовинтовой самолёт.


#Biography #Birth_Date #Events #18апреля
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
С 11.04 по 17.04
Предыдущий пост(с 04.04 по 10.04)

Воскресный мотивационный пост:
Что случилось и почему сайт не работал или хронология одного хренового утра

Запись встреч/видео:
В процессе подготовки...

Обучающие статьи:
Раздел 9. Исключения, логирование, отладка

Глава 1. Иерархия исключений (Exceptions)
try-catch-finally – правильная обработка и освобождение ресурсов
try-with-resources (Java 7+) – автоматическое закрытие AutoCloseable

[Совет по Java #025]
Тема: ThreadLocal может вызвать утечку в серверах приложений.

[Совет по Java #026]
Тема: Синхронизация (synchronized) по строковой константе опасна.

[Совет по Java #027]
Тема: double и float не подходят для циклов с условием на равенство.

Полезные статьи и видео:
Где хранить код? Сравнение GitHub, GitLab и Bitbucket

Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
🔥3👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Тестировщики они такие, да 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣3🤓1
🤣5
🗿3🤣1
🤓4🤣1
История технологии сегодня — 19 апреля

ℹ️ Кто родился в этот день

Андре́й Петро́вич Ершо́в (19 апреля 1931, Рубежное, Рубежанский район, Старобельский округ, УССР, Советский Союз — 8 декабря 1988, Новосибирск, Новосибирская область, Советский Союз)советский учёный, один из пионеров теоретического и системного программирования, создатель Сибирской школы информатики, академик АН СССР (1980). Его работы оказали влияние на формирование и развитие вычислительной техники не только в СССР, но и во всём мире.

Фредери́к Фи́ллипс Брукс-младший (англ. Frederick Phillips Brooks, Jr.; 19 апреля 1931, Дарем, Северная Каролина — 17 ноября 2022, Чапел-Хилл, Северная Каролина) — американский учёный в области теории вычислительных систем, автор книги «Мифический человеко-месяц». Управлял разработкой OS/360 в IBM. Награждён Премией Тьюринга в 1999 году.


🌐 Знаковые события

1965 — Гордоном Муром сформулирован так называемый «закон Мура», согласно которому количество транзисторов в кристалле микропроцессора удваивается каждые два года.

2021 — вертолёт НАСА Ingenuity стал первым летательным аппаратом землян, совершившим полёт на другой планете.



#Biography #Birth_Date #Events #19апреля
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
11. Fallback и graceful degradation — когда всё сломалось, но пользователь этого не заметил

Retry, Circuit Breaker, Bulkhead, Timeout — мы настроили всё, но что получает пользователь, когда внешний сервис всё равно недоступен? В лучшем случае — 500 ошибку. В худшем — тишину. Это бизнес-потеря.

В этом видео мы закрываем последний пробел — Fallback (план «Б») и graceful degradation (грациозную деградацию).

Показываем, как система должна адаптироваться к отказам, а не падать вместе с зависимостями.

На примере OrderHub (Spring Boot + Resilience4j):
почему 500 ошибка — это не вариант, когда речь идёт о бизнесе;
как переработать существующие fallback-методы — от «бросить исключение» до «спасти заказ»;
локальная очередь на примере статуса PENDING;
шедулер для повторной обработки отложенных платежей;


Исходный код проекта на GitHub очень ждет Ваших звезд ☺️ (Вам че блин, жалко?)

Ссылка на Youtube
Ссылка на Рутьюб

Смотрите, ставьте лайки, подписывайтесь на каналы!✌️

❗️❗️❗️ Огромная просьба - если Вам понравилась моя работа, распространите эту серию по всем доступным вам местам: телеграм, discord и прочим каналам. ❗️❗️❗️

Буду крайне благодарен
🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3