Какие существуют виды ClassLoader'ов и как работает делегирование? 🤓
Ответ:
В Java три встроенных ClassLoader'а, работающих по принципу делегирования (parent-delegation model).
1) Bootstrap ClassLoader (загрузчик начальной загрузки) — самый верхний, загружает ядро JDK из rt.jar.
2) Extension ClassLoader — загружает классы из jre/lib/ext.
3) System/Application ClassLoader — загружает классы из classpath приложения. Когда запрашивается загрузка класса, загрузчик сначала делегирует запрос родителю. Если родитель не может найти класс, только тогда загрузчик пытается загрузить его сам. Это обеспечивает безопасность (системные классы не подменяются)..
#собеседование
Ответ:
1) Bootstrap ClassLoader (загрузчик начальной загрузки) — самый верхний, загружает ядро JDK из rt.jar.
2) Extension ClassLoader — загружает классы из jre/lib/ext.
3) System/Application ClassLoader — загружает классы из classpath приложения. Когда запрашивается загрузка класса, загрузчик сначала делегирует запрос родителю. Если родитель не может найти класс, только тогда загрузчик пытается загрузить его сам. Это обеспечивает безопасность (системные классы не подменяются)..
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
8. Логирование и ELK-стек: как расследуют инциденты в production
Мы прошли огромный путь по созданию Observability для микросервисов: у нас уже есть метрики в Prometheus/Grafana (чтобы знать, ЧТО происходит) и трассировка в Jaeger (чтобы знать, ГДЕ искать проблему). Но когда случается инцидент, мы всё ещё «тыкаемся как слепые котята», потому что не знаем главного — ПОЧЕМУ это произошло.
В этом видео мы закроем последний, самый важный пробел — научимся работать с логами.
Из этого видео вы узнаете:
🔵 Почему чтение логов по контейнерам — это боль и архаизм. Чем структурированные логи отличаются от текстовых и почему без них вы не расследуете инциденты, а гадаете на кофейной гуще.
🔵 MDC — сердце структурированных логов. Что такое Mapped Diagnostic Context, как он работает (спойлер: это ThreadLocal) и как наступить на грабли с асинхронностью. Разберем паттерн TaskDecorator, который спасет ваши нервы и данные.
🔵 JSON-логи без боли. Настройка logstash-logback-encoder, правильное форматирование стектрейсов (ShortenedThrowableConverter) и два способа доставки логов: TCP против stdout + Filebeat.
🔵 ELK-стек под капотом. Разворачиваем Elasticsearch, Logstash и Kibana в Docker. Схема работы, компоненты и их роль.
🔵 Расследование инцидента. Живая демонстрация: от графика в Grafana до конкретной строчки лога с ошибкой через Jaeger и Kibana. Увидите, как traceId связывает три столпа Observability воедино.
Исходный код проекта на GitHub очень ждет Ваших звезд☺️
Ссылка на Youtube
Ссылка на Рутьюб
Смотрите, ставьте лайки, подписывайтесь на каналы!✌️
❗️ ❗️ ❗️ Огромная просьба - если Вам понравилась моя работа, распространите эту серию по всем доступным вам местам: телеграм, discord и прочим каналам. Буду крайне благодарен ❗️ ❗️ ❗️
Мы прошли огромный путь по созданию Observability для микросервисов: у нас уже есть метрики в Prometheus/Grafana (чтобы знать, ЧТО происходит) и трассировка в Jaeger (чтобы знать, ГДЕ искать проблему). Но когда случается инцидент, мы всё ещё «тыкаемся как слепые котята», потому что не знаем главного — ПОЧЕМУ это произошло.
В этом видео мы закроем последний, самый важный пробел — научимся работать с логами.
Из этого видео вы узнаете:
Исходный код проекта на GitHub очень ждет Ваших звезд
Ссылка на Youtube
Ссылка на Рутьюб
Смотрите, ставьте лайки, подписывайтесь на каналы!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2
История технологий сегодня — 05 марта
ℹ️ Кто родился в этот день
Владимир Константинович Ле́вин (5 марта 1929, Москва — 4 февраля 2026) — советский и российский учёный в области кибернетики, академик РАН (2003), специалист в области вычислительной техники и элементной базы вычислительных машин. Научный руководитель Федерального государственного унитарного предприятия «Научно-исследовательский институт „КВАНТ“». Лауреат Ленинской премии и Государственной премии СССР.
Момофуку Андо (яп. 安藤 百福 Андо: Момофуку, при рождении Го Пек-Хок, 5 марта 1910, Пуцзы, Японская империя — 5 января 2007, Икеда, Осака) — изобретатель и бизнесмен, основавший компанию Nissin Foods. Он известен как изобретатель лапши быстрого приготовления и создатель торговых марок Top Ramen и Cup Noodles. В опросе общественного мнения в Японии, проведённом в 2000 году, изобретение Момофуку Андо лапши быстрого приготовления назвали главным японским изобретением XX века.
🌐 Знаковые события
1979 — космический аппарат «Вояджер-1» достиг планеты Юпитер.
#Biography #Birth_Date #Events #05марта
Владимир Константинович Ле́вин (5 марта 1929, Москва — 4 февраля 2026) — советский и российский учёный в области кибернетики, академик РАН (2003), специалист в области вычислительной техники и элементной базы вычислительных машин. Научный руководитель Федерального государственного унитарного предприятия «Научно-исследовательский институт „КВАНТ“». Лауреат Ленинской премии и Государственной премии СССР.
Момофуку Андо (яп. 安藤 百福 Андо: Момофуку, при рождении Го Пек-Хок, 5 марта 1910, Пуцзы, Японская империя — 5 января 2007, Икеда, Осака) — изобретатель и бизнесмен, основавший компанию Nissin Foods. Он известен как изобретатель лапши быстрого приготовления и создатель торговых марок Top Ramen и Cup Noodles. В опросе общественного мнения в Японии, проведённом в 2000 году, изобретение Момофуку Андо лапши быстрого приготовления назвали главным японским изобретением XX века.
1979 — космический аппарат «Вояджер-1» достиг планеты Юпитер.
#Biography #Birth_Date #Events #05марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
[Совет по Java #012]
Тема: При итерации по Map для получения и ключа, и значения используйте entrySet(), а не keySet() с последующим get().
Проблема: Итерация по Map через keySet() с последующим вызовом get(key) для получения значения создает избыточную нагрузку.
Каждый вызов get() выполняет полноценный поиск по хэш-таблице: повторное вычисление хэш-кода, поиск в корзине (bucket) и сравнение ключей. При обходе всей мапы это означает двукратное выполнение работы — один раз для получения ключа из keySet(), и второй раз внутри get().
Для больших мап или частых итераций это приводит к неоправданному снижению производительности, особенно если хэш-функция сложная или коллизии часты.
Решение: Используйте entrySet(), который возвращает набор пар Map.Entry<K, V>. Каждый entry содержит и ключ, и значение, полученные за одну операцию доступа. Методы entry.getKey() и entry.getValue() работают с уже извлеченными данными и не выполняют повторного поиска по мапе. Это оптимальный способ итерации, когда нужны обе составляющие пары.
Объяснение: keySet() возвращает представление ключей, не содержащее значений.
При вызове get(key) происходит повторный проход по структуре данных. Для HashMap это повторное вычисление хэша и поиск в корзине; для TreeMap — логарифмический поиск; для LinkedHashMap — повторный обход цепочки. entrySet() предоставляет прямой доступ к паре, которая была извлечена при обходе внутренней структуры.
Начиная с Java 8, метод forEach напрямую принимает би-функцию (ключ, значение), что делает код еще более лаконичным и читаемым.
Разработчик всегда выбирает entrySet() или forEach при работе с обоими компонентами записи и использует keySet() только когда нужны исключительно ключи.
#Java #советы
Тема: При итерации по Map для получения и ключа, и значения используйте entrySet(), а не keySet() с последующим get().
Проблема: Итерация по Map через keySet() с последующим вызовом get(key) для получения значения создает избыточную нагрузку.
Каждый вызов get() выполняет полноценный поиск по хэш-таблице: повторное вычисление хэш-кода, поиск в корзине (bucket) и сравнение ключей. При обходе всей мапы это означает двукратное выполнение работы — один раз для получения ключа из keySet(), и второй раз внутри get().
Для больших мап или частых итераций это приводит к неоправданному снижению производительности, особенно если хэш-функция сложная или коллизии часты.
Решение: Используйте entrySet(), который возвращает набор пар Map.Entry<K, V>. Каждый entry содержит и ключ, и значение, полученные за одну операцию доступа. Методы entry.getKey() и entry.getValue() работают с уже извлеченными данными и не выполняют повторного поиска по мапе. Это оптимальный способ итерации, когда нужны обе составляющие пары.
import java.util.*;
public class Advice050326 {
private static final Map<String, Integer> SCORES = new HashMap<>();
static {
SCORES.put("Alice", 95);
SCORES.put("Bob", 87);
SCORES.put("Charlie", 92);
SCORES.put("Diana", 98);
}
//Антипаттерн: итерация через keySet() + get()
public static void badIteration() {
System.out.println("Bad iteration (keySet + get):");
for (String key : SCORES.keySet()) {
// get() выполняет ПОЛНЫЙ поиск по мапе
Integer value = SCORES.get(key);
System.out.println(key + " = " + value);
}
}
//Правильно: итерация через entrySet()
public static void goodIteration() {
System.out.println("Good iteration (entrySet):");
for (Map.Entry<String, Integer> entry : SCORES.entrySet()) {
// Данные уже извлечены, повторного поиска нет
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + " = " + value);
}
}
//Java 8+: forEach с лямбдой
public static void lambdaIteration() {
System.out.println("Lambda iteration (forEach):");
SCORES.forEach((key, value) ->
System.out.println(key + " = " + value)
);
}
//Модификация значений через entrySet
public static void modifyValues() {
Map<String, Integer> mutableMap = new HashMap<>(SCORES);
// Увеличить баллы всем на 5
for (Map.Entry<String, Integer> entry : mutableMap.entrySet()) {
entry.setValue(entry.getValue() + 5); // Работает!
}
// Через keySet так не сделать
System.out.println("Modified: " + mutableMap);
}
public static void main(String[] args) {
badIteration();
goodIteration();
lambdaIteration();
modifyValues();
}
}
Объяснение: keySet() возвращает представление ключей, не содержащее значений.
При вызове get(key) происходит повторный проход по структуре данных. Для HashMap это повторное вычисление хэша и поиск в корзине; для TreeMap — логарифмический поиск; для LinkedHashMap — повторный обход цепочки. entrySet() предоставляет прямой доступ к паре, которая была извлечена при обходе внутренней структуры.
Начиная с Java 8, метод forEach напрямую принимает би-функцию (ключ, значение), что делает код еще более лаконичным и читаемым.
Разработчик всегда выбирает entrySet() или forEach при работе с обоими компонентами записи и использует keySet() только когда нужны исключительно ключи.
#Java #советы
👍6
Что выведет код?
#Tasks
import java.util.*;
public class Task050326 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
Set<String> keys = map.keySet();
for (String key : keys) {
if (key.equals("b")) {
map.remove("c");
}
System.out.print(key + "=" + map.get(key) + " ");
}
}
}
#Tasks
👍2
Варианты ответа:
Anonymous Quiz
0%
a=1 b=2 c=3
29%
a=1 b=2
17%
a=1 b=2 null
54%
ConcurrentModificationException
👍2
Что такое Future и Callable? Чем Callable отличается от Runnable? 🤓
Ответ:
Оба интерфейса представляют задачи для выполнения в отдельном потоке.
Runnable существует с Java 1.0, его метод run() не возвращает результат и не может бросить проверяемое исключение.
Callable<V> появился в Java 5, его метод call() возвращает результат типа V и может бросать проверяемые исключения.
Callable удобно использовать с ExecutorService, который возвращает объект Future, позволяющий отслеживать состояние задачи, ожидать ее завершения и получать результат методом get().
#собеседование
Ответ:
Runnable существует с Java 1.0, его метод run() не возвращает результат и не может бросить проверяемое исключение.
Callable<V> появился в Java 5, его метод call() возвращает результат типа V и может бросать проверяемые исключения.
Callable удобно использовать с ExecutorService, который возвращает объект Future, позволяющий отслеживать состояние задачи, ожидать ее завершения и получать результат методом get().
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
История технологий сегодня — 06 марта
ℹ️ Кто родился в этот день
Адам Осборн (англ. Adam Osborne; 6 марта 1939, Бангкок, Таиланд — 18 марта 2003, Кодаиканал[англ.], Индия) — американский предприниматель британского происхождения, издатель книг и создатель программного обеспечения, компьютерный дизайнер, основавший несколько компаний в США и других странах. Создатель первого коммерчески успешного портативного компьютера Osborne 1.
🌐 Знаковые события
1869 — Дмитрий Менделеев представил периодическую систему химических элементов Русскому химическому обществу.
1983 — стартовали продажи Motorola DynaTAC 8000X, первого коммерчески успешного сотового телефона.
1992 — в день рождения великого художника и скульптора Микеланджело впервые активизировался компьютерный вирус Michelangelo, от которого только в Германии пострадали 1500 компьютеров.
#Biography #Birth_Date #Events #06марта
Адам Осборн (англ. Adam Osborne; 6 марта 1939, Бангкок, Таиланд — 18 марта 2003, Кодаиканал[англ.], Индия) — американский предприниматель британского происхождения, издатель книг и создатель программного обеспечения, компьютерный дизайнер, основавший несколько компаний в США и других странах. Создатель первого коммерчески успешного портативного компьютера Osborne 1.
1869 — Дмитрий Менделеев представил периодическую систему химических элементов Русскому химическому обществу.
1983 — стартовали продажи Motorola DynaTAC 8000X, первого коммерчески успешного сотового телефона.
1992 — в день рождения великого художника и скульптора Микеланджело впервые активизировался компьютерный вирус Michelangelo, от которого только в Германии пострадали 1500 компьютеров.
#Biography #Birth_Date #Events #06марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Раздел 8. Stream API и функциональный стиль в Java
Глава 4: Искусство агрегации. Коллекторы и группировки
(Практика): Анализ библиотеки в один проход
Подготовка: обновление модели Book
Для этой практики расширьте класс Book:
Задача: три агрегации над библиотекой
Требуемые результаты:
Map<String, Book> — автор → его самая старая книга (минимальный год)
int — общее количество страниц во всех книгах
OptionalDouble — средняя цена книг жанра «Фантастика»
Способ 1: Три отдельных Stream (три прохода)
Простой, читаемый, но неэффективный для больших данных.
Агрегация 1: автор → самая старая книга
Агрегация 2: общее количество страниц
Агрегация 3: средняя цена фантастики
Анализ трёх проходов
Плюсы:
Каждый метод простой и понятный
Легко тестировать изолированно
Легко добавить или убрать агрегацию
Минусы:
Три полных обхода списка — O(3n) время
Три раза загружаются данные в кэш процессора
Для миллиона книг — заметная разница с одним проходом
#Java #для_новичков #beginner #stream_api #практика
Глава 4: Искусство агрегации. Коллекторы и группировки
(Практика): Анализ библиотеки в один проход
Подготовка: обновление модели Book
Для этой практики расширьте класс Book:
public class Book {
private final String title;
private final String author;
private final int year; // год издания
private final int pages; // количество страниц
private final double price; // цена
private final List<String> genres;
// конструктор, геттеры...
public boolean hasGenre(String genre) {
return genres.contains(genre);
}
}Задача: три агрегации над библиотекой
Требуемые результаты:
Map<String, Book> — автор → его самая старая книга (минимальный год)
int — общее количество страниц во всех книгах
OptionalDouble — средняя цена книг жанра «Фантастика»
Способ 1: Три отдельных Stream (три прохода)
Простой, читаемый, но неэффективный для больших данных.
Агрегация 1: автор → самая старая книга
public Map<String, Book> getOldestBookByAuthor() {
return books.stream()
.collect(Collectors.toMap(
Book::getAuthor, // ключ — автор
Function.identity(), // значение — книга
(existing, replacement) -> // разрешение коллизии
existing.getYear() < replacement.getYear()
? existing : replacement
));
}
Что происходит: при встрече второй книги того же автора сравниваем годы, оставляем старую.Агрегация 2: общее количество страниц
public int getTotalPages() {
return books.stream()
.mapToInt(Book::getPages)
.sum();
}
Что происходит: mapToInt создаёт примитивный поток, sum — терминальная редукция.Агрегация 3: средняя цена фантастики
public OptionalDouble getAverageFantasyPrice() {
return books.stream()
.filter(Book::hasGenre, "Фантастика")
.mapToDouble(Book::getPrice)
.average();
}
Что происходит: фильтр оставляет только фантастику, average возвращает OptionalDouble для пустого результата.Анализ трёх проходов
Плюсы:
Каждый метод простой и понятный
Легко тестировать изолированно
Легко добавить или убрать агрегацию
Минусы:
Три полных обхода списка — O(3n) время
Три раза загружаются данные в кэш процессора
Для миллиона книг — заметная разница с одним проходом
#Java #для_новичков #beginner #stream_api #практика
👍4
Способ 2: Один Stream с комбинированным коллектором
Используем Collectors.teeing (Java 12+) или кастомный коллектор для одного прохода.
Подход через teeing (Java 12+)
teeing направляет элементы в два коллектора параллельно, затем объединяет результаты. Для трёх агрегаций применяем вложенно.
Что происходит:
Каждая книга обрабатывается один раз
teeing разветвляет поток: одна копия идёт в Map авторов, другая — в сумматор страниц и усреднитель фантастики
filtering (Java 9+) — коллектор-обёртка, пропускающий элементы по условию
#Java #для_новичков #beginner #stream_api #практика
Используем Collectors.teeing (Java 12+) или кастомный коллектор для одного прохода.
Подход через teeing (Java 12+)
teeing направляет элементы в два коллектора параллельно, затем объединяет результаты. Для трёх агрегаций применяем вложенно.
public LibraryStatistics analyzeInOnePass() {
return books.stream()
.collect(Collectors.teeing(
// Первый коллектор: автор → старая книга
Collectors.toMap(
Book::getAuthor,
Function.identity(),
(a, b) -> a.getYear() < b.getYear() ? a : b
),
// Второй коллектор: teeing для страниц и фантастики
Collectors.teeing(
Collectors.summingInt(Book::getPages),
Collectors.filtering(
b -> b.hasGenre("Фантастика"),
Collectors.averagingDouble(Book::getPrice)
),
(totalPages, avgFantasyPrice) ->
new IntermediateStats(totalPages, avgFantasyPrice)
),
// Объединение результатов
(oldestByAuthor, intermediate) -> new LibraryStatistics(
oldestByAuthor,
intermediate.totalPages,
intermediate.avgFantasyPrice
)
));
}
// Вспомогательные классы-контейнеры
private static class IntermediateStats {
final int totalPages;
final Double avgFantasyPrice; // null если нет фантастики
IntermediateStats(int totalPages, Double avgFantasyPrice) {
this.totalPages = totalPages;
this.avgFantasyPrice = avgFantasyPrice;
}
}
public static class LibraryStatistics {
public final Map<String, Book> oldestByAuthor;
public final int totalPages;
public final OptionalDouble avgFantasyPrice;
// конструктор, преобразование Double → OptionalDouble...
}Что происходит:
Каждая книга обрабатывается один раз
teeing разветвляет поток: одна копия идёт в Map авторов, другая — в сумматор страниц и усреднитель фантастики
filtering (Java 9+) — коллектор-обёртка, пропускающий элементы по условию
#Java #для_новичков #beginner #stream_api #практика
👍5
Подход через кастомный коллектор (Java 8+)
Если teeing недоступен, реализуем Collector вручную:
Практические задания
Задача 1: реализовать оба способа
В проекте «Библиотека» создайте класс LibraryAnalyzer с методами:
analyzeThreePasses() — три отдельных Stream
analyzeOnePassTeeing() — через teeing (если Java 12+)
analyzeOnePassCustom() — через кастомный Collector
Протестируйте на 100, 10 000 и 100 000 книг. Измерьте время System.nanoTime().
Задача 2: добавить четвёртую агрегацию
Добавьте: Map<String, Long> — жанр → количество книг.
Обновите оба подхода. В кастомном коллекторе используйте Map.merge() для подсчёта.
Задача 3: параллельная версия
Модифицируйте кастомный коллектор: добавьте CONCURRENT в характеристики, замените HashMap на ConcurrentHashMap или используйте toConcurrentMap.
Сравните stream() vs parallelStream() для 1 000 000 книг на многоядерной машине.
Задача 4: ленивая статистика (звёздочка)
Реализуйте LazyLibraryStatistics — класс, который не вычисляет агрегации при создании, а при первом обращении к любому полю выполняет один проход и кэширует все результаты.
Используйте Supplier + AtomicReference для thread-safe ленивой инициализации.
#Java #для_новичков #beginner #stream_api #практика
Если teeing недоступен, реализуем Collector вручную:
public LibraryStatistics analyzeWithCustomCollector() {
return books.stream()
.collect(new LibraryStatsCollector());
}
private static class LibraryStatsCollector
implements Collector<Book, StatsAccumulator, LibraryStatistics> {
@Override
public Supplier<StatsAccumulator> supplier() {
return StatsAccumulator::new;
}
@Override
public BiConsumer<StatsAccumulator, Book> accumulator() {
return (acc, book) -> {
// Обновление Map авторов
acc.oldestByAuthor.merge(
book.getAuthor(),
book,
(a, b) -> a.getYear() < b.getYear() ? a : b
);
// Накопление страниц
acc.totalPages += book.getPages();
// Накопление для фантастики
if (book.hasGenre("Фантастика")) {
acc.fantasyCount++;
acc.fantasyPriceSum += book.getPrice();
}
};
}
@Override
public BinaryOperator<StatsAccumulator> combiner() {
return (left, right) -> {
// Слияние для параллельных потоков
left.oldestByAuthor.putAll(right.oldestByAuthor); // с разрешением
left.totalPages += right.totalPages;
left.fantasyCount += right.fantasyCount;
left.fantasyPriceSum += right.fantasyPriceSum;
return left;
};
}
@Override
public Function<StatsAccumulator, LibraryStatistics> finisher() {
return acc -> new LibraryStatistics(
acc.oldestByAuthor,
acc.totalPages,
acc.fantasyCount == 0
? OptionalDouble.empty()
: OptionalDouble.of(acc.fantasyPriceSum / acc.fantasyCount)
);
}
@Override
public Set<Characteristics> characteristics() {
return Collections.emptySet(); // не CONCURRENT из-за HashMap
}
}
private static class StatsAccumulator {
Map<String, Book> oldestByAuthor = new HashMap<>();
int totalPages = 0;
int fantasyCount = 0;
double fantasyPriceSum = 0.0;
}Практические задания
Задача 1: реализовать оба способа
В проекте «Библиотека» создайте класс LibraryAnalyzer с методами:
analyzeThreePasses() — три отдельных Stream
analyzeOnePassTeeing() — через teeing (если Java 12+)
analyzeOnePassCustom() — через кастомный Collector
Протестируйте на 100, 10 000 и 100 000 книг. Измерьте время System.nanoTime().
Задача 2: добавить четвёртую агрегацию
Добавьте: Map<String, Long> — жанр → количество книг.
Обновите оба подхода. В кастомном коллекторе используйте Map.merge() для подсчёта.
Задача 3: параллельная версия
Модифицируйте кастомный коллектор: добавьте CONCURRENT в характеристики, замените HashMap на ConcurrentHashMap или используйте toConcurrentMap.
Сравните stream() vs parallelStream() для 1 000 000 книг на многоядерной машине.
Задача 4: ленивая статистика (звёздочка)
Реализуйте LazyLibraryStatistics — класс, который не вычисляет агрегации при создании, а при первом обращении к любому полю выполняет один проход и кэширует все результаты.
Используйте Supplier + AtomicReference для thread-safe ленивой инициализации.
#Java #для_новичков #beginner #stream_api #практика
👍5
Что выведет код?
#Tasks
import java.util.concurrent.*;
public class Task060326 {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(3);
CyclicBarrier barrier = new CyclicBarrier(3, () -> System.out.print("GO "));
for (int i = 0; i < 3; i++) {
new Thread(() -> {
try {
latch.countDown();
latch.await();
barrier.await();
} catch (Exception e) {}
}).start();
}
latch.await();
System.out.print("FINISH ");
}
}
#Tasks
👍2
Варианты ответа:
Anonymous Quiz
40%
GO FINISH
10%
FINISH GO
20%
GO FINISH или FINISH GO (недетерминировано)
30%
Исключение Deadlock
👍2
Что такое CountDownLatch и CyclicBarrier? В чем разница? 🤓
Ответ:
Оба класса из java.util.concurrent используются для синхронизации потоков.
CountDownLatch — это счетчик, который уменьшается вызовом countDown(). Потоки, вызывающие await(), блокируются, пока счетчик не станет равен 0. Используется одноразово, например, когда один поток ждет завершения нескольких других.
CyclicBarrier — это барьер, который собирает потоки. Когда все потоки достигают барьера (вызывают await()), они одновременно освобождаются. Может быть повторно использован (cyclic). Используется, когда потоки ждут друг друга, чтобы начать новый этап работы.
#собеседование
Ответ:
CountDownLatch — это счетчик, который уменьшается вызовом countDown(). Потоки, вызывающие await(), блокируются, пока счетчик не станет равен 0. Используется одноразово, например, когда один поток ждет завершения нескольких других.
CyclicBarrier — это барьер, который собирает потоки. Когда все потоки достигают барьера (вызывают await()), они одновременно освобождаются. Может быть повторно использован (cyclic). Используется, когда потоки ждут друг друга, чтобы начать новый этап работы.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
История технологий сегодня — 07 марта
ℹ️ Кто родился в этот день
Фрэнсис Элизабет «Бетти» Холбертон (7 марта 1917, Филадельфия, Пенсильвания — 8 декабря 2001, Роквилл, Мэриленд) — американский программист. Одна из первых шести программистов ENIAC — первого универсального электронного цифрового компьютера. Автор изобретения точки останова для отладки программ.
🌐 Знаковые события
1876 — Александр Белл получил патент на телефон.
1926 — установлена радиотелефонная связь между Лондоном и Нью-Йорком.
1997 — журнал «Nature» сообщил, что учёные из Рослинского института в Эдинбурге (Шотландия) воспроизвели ягнёнка без участия половых клеток барана. На свет появилась клонированная овца Долли.
#Biography #Birth_Date #Events #07марта
Фрэнсис Элизабет «Бетти» Холбертон (7 марта 1917, Филадельфия, Пенсильвания — 8 декабря 2001, Роквилл, Мэриленд) — американский программист. Одна из первых шести программистов ENIAC — первого универсального электронного цифрового компьютера. Автор изобретения точки останова для отладки программ.
1876 — Александр Белл получил патент на телефон.
1926 — установлена радиотелефонная связь между Лондоном и Нью-Йорком.
1997 — журнал «Nature» сообщил, что учёные из Рослинского института в Эдинбурге (Шотландия) воспроизвели ягнёнка без участия половых клеток барана. На свет появилась клонированная овца Долли.
#Biography #Birth_Date #Events #07марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Как вам первая фаза нашего OrderHub? Нравится?
Можно выбрать много вариантов.
Можно выбрать много вариантов.
Anonymous Poll
80%
Да, все ок, как всегда!
0%
Проработка плохая, настройки проекта не до конца освещены, все работает кое- как
5%
Качество проработки норм, но качество записи или звука так себе.
0%
Плохой сценарий
5%
Много времени занимает болтовня, надо короче, больше кода
10%
Слишком сложно для начинающих
0%
Это не продакшен уровень, а херня
5%
Слишком большие видео некомфортно смотреть
5%
В целом все плохо, прекращай записывать ерунду
🔥5 2🆒1
С 28.02 по 06.03
Предыдущий пост(с 21.02 по 27.02)
Воскресный мотивационный пост:
Не было мотивации
Запись встреч/видео:
8. Логирование и ELK-стек: как расследуют инциденты в production
Обучающие статьи:
Раздел 8. Stream API и функциональный стиль
Глава 4: Искусство агрегации. Коллекторы и группировки
Коллектор — это рецепт агрегации
groupingBy и многоуровневая агрегация
(Практика): Анализ библиотеки в один проход
Советы по Java:
[Совет по Java #011]
Тема: Random — потоконебезопасный и медленный для многопоточки.
[Совет по Java #012]
Тема: При итерации по Map для получения и ключа, и значения используйте entrySet(), а не keySet() с последующим get().
Полезные статьи и видео:
Модель памяти Java процесса
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
Предыдущий пост(с 21.02 по 27.02)
Воскресный мотивационный пост:
Не было мотивации
Запись встреч/видео:
8. Логирование и ELK-стек: как расследуют инциденты в production
Обучающие статьи:
Раздел 8. Stream API и функциональный стиль
Глава 4: Искусство агрегации. Коллекторы и группировки
Коллектор — это рецепт агрегации
groupingBy и многоуровневая агрегация
(Практика): Анализ библиотеки в один проход
Советы по Java:
[Совет по Java #011]
Тема: Random — потоконебезопасный и медленный для многопоточки.
[Совет по Java #012]
Тема: При итерации по Map для получения и ключа, и значения используйте entrySet(), а не keySet() с последующим get().
Полезные статьи и видео:
Модель памяти Java процесса
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
👍3🔥1
Java for Beginner
Как вам первая фаза нашего OrderHub? Нравится?
Можно выбрать много вариантов.
Можно выбрать много вариантов.
Как всегда все те же голосуют))
Обнял - приподнял❤️
Обнял - приподнял
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
История технологий сегодня — 08 марта
💐 Международный женский день — праздник, который отмечается ежегодно 8 марта в ряде государств и стран мира.
Появился как день солидарности женщин в борьбе за женские права и эмансипацию. В 1945 году устав Организации Объединённых Наций стал первым международным документом, утвердившим принцип равенства мужчин и женщин. С 1977 года Международный женский день отмечается государствами-членами ООН.
Всех присутствующих на канале женщин поздравляю с праздником, желаю всегда оставаться обворожительными и незаменимыми🌹
ℹ️ Кто родился в этот день
Отто Ган (нем. Otto Hahn — Отто Хан; 8 марта 1879, Франкфурт-на-Майне — 28 июля 1968, Гёттинген) — немецкий физик, учёный-новатор в области радиохимии, открывший ядерную изомерию (Уран Z) и расщепление урана. Получил Нобелевскую премию по химии за 1944 год. Гленн Сиборг назвал его «отцом ядерной химии».
Ральф Генри Бер (англ. Ralph Henry Baer; 8 марта 1922, Родальбен, Юго-западный Пфальц — 6 декабря 2014, Манчестер, Нью-Гэмпшир) — американский изобретатель, разработчик видеоигр, инженер, предприниматель, получивший прозвище «Отец видеоигр» за свой огромный вклад в развитие этой индустрии, особенно в первые годы существования компьютерных игр как таковых. В 1956 году основал собственную компанию. В ней работали до 500 инженеров, которые занимались преимущественно военными заказами. Именно эта работа подала Беру идею, которая в итоге привела к созданию первой в мире игровой приставки.
Майкл Стерн Харт (англ. Michael Stern Hart; 8 марта 1947 — 6 сентября 2011) — американский писатель, изобретатель электронных книг и основатель проекта «Гутенберг», который сделал электронные книги свободно доступными через Интернет. Большинство первых материалов он напечатал и разместил лично. В 1971 году Майкл Харт получил неограниченный доступ ко времени крупного компьютера Xerox Sigma V от операторов в университете штата Иллинойс. Пытаясь достойно применить этот ресурс, он создал первую электронную книгу Декларация независимости США, когда впечатал её текст в компьютер. Так путём создания электронных копий большего количества книг получил начало Проект «Гутенберг». Избегал расходов на врачей, предпочитая домашние средства. Собрал много компьютеров и стереосистем, другой аппаратуры, часто из вышедшего из употребления оборудования, жертвуя собственной роскошью ради борьбы с безграмотностью и сохранения доступа общественности к информационным ресурсам. Вёл жизнь, близкую к бедности, «питаясь, в основном, бобовыми консервами».
🌐 Знаковые события
1950 — СССР объявил о наличии атомной бомбы.
1979 — компания Philips представляет компакт-диск.
1979 — изображения, сделанные Вояджером-I, доказали существование вулканизма на Ио, спутнике Юпитера.
#Biography #Birth_Date #Events #08марта
Появился как день солидарности женщин в борьбе за женские права и эмансипацию. В 1945 году устав Организации Объединённых Наций стал первым международным документом, утвердившим принцип равенства мужчин и женщин. С 1977 года Международный женский день отмечается государствами-членами ООН.
Всех присутствующих на канале женщин поздравляю с праздником, желаю всегда оставаться обворожительными и незаменимыми
Отто Ган (нем. Otto Hahn — Отто Хан; 8 марта 1879, Франкфурт-на-Майне — 28 июля 1968, Гёттинген) — немецкий физик, учёный-новатор в области радиохимии, открывший ядерную изомерию (Уран Z) и расщепление урана. Получил Нобелевскую премию по химии за 1944 год. Гленн Сиборг назвал его «отцом ядерной химии».
Ральф Генри Бер (англ. Ralph Henry Baer; 8 марта 1922, Родальбен, Юго-западный Пфальц — 6 декабря 2014, Манчестер, Нью-Гэмпшир) — американский изобретатель, разработчик видеоигр, инженер, предприниматель, получивший прозвище «Отец видеоигр» за свой огромный вклад в развитие этой индустрии, особенно в первые годы существования компьютерных игр как таковых. В 1956 году основал собственную компанию. В ней работали до 500 инженеров, которые занимались преимущественно военными заказами. Именно эта работа подала Беру идею, которая в итоге привела к созданию первой в мире игровой приставки.
Майкл Стерн Харт (англ. Michael Stern Hart; 8 марта 1947 — 6 сентября 2011) — американский писатель, изобретатель электронных книг и основатель проекта «Гутенберг», который сделал электронные книги свободно доступными через Интернет. Большинство первых материалов он напечатал и разместил лично. В 1971 году Майкл Харт получил неограниченный доступ ко времени крупного компьютера Xerox Sigma V от операторов в университете штата Иллинойс. Пытаясь достойно применить этот ресурс, он создал первую электронную книгу Декларация независимости США, когда впечатал её текст в компьютер. Так путём создания электронных копий большего количества книг получил начало Проект «Гутенберг». Избегал расходов на врачей, предпочитая домашние средства. Собрал много компьютеров и стереосистем, другой аппаратуры, часто из вышедшего из употребления оборудования, жертвуя собственной роскошью ради борьбы с безграмотностью и сохранения доступа общественности к информационным ресурсам. Вёл жизнь, близкую к бедности, «питаясь, в основном, бобовыми консервами».
1950 — СССР объявил о наличии атомной бомбы.
1979 — компания Philips представляет компакт-диск.
1979 — изображения, сделанные Вояджером-I, доказали существование вулканизма на Ио, спутнике Юпитера.
#Biography #Birth_Date #Events #08марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
История технологий сегодня — 09 марта
ℹ️ Кто родился в этот день
Ю́рий Алексе́евич Гага́рин (9 марта 1934, Клушино, Гжатский (ныне Гагаринский) район, Западная область (ныне — Смоленская область) — 27 марта 1968, возле села Новосёлово, Киржачский район, Владимирская область) — советский космонавт и военный лётчик, первый человек, совершивший космический полёт. Герой Советского Союза, кавалер высших знаков отличия ряда государств, почётный гражданин многих российских и зарубежных городов.
Го́вард Ха́тауэй Э́йкен (англ. Howard Hathaway Aiken; 9 марта 1900, Хобокен, штат Нью-Джерси, США — 14 марта 1973, Сент-Луис, штат Миссури, США) — американский пионер компьютеростроения. В должности инженера IBM руководил работами по созданию первого американского компьютера «Марк I».
Эндрю Джеймс Витерби (англ. Andrew James Viterbi, имя при рождении Андреа Джакомо Витерби (итал. Andrea Giacomo Viterbi); род. 9 марта 1935 года, Бергамо, Королевство Италия) — американский инженер и бизнесмен, сооснователь Qualcomm и разработчик алгоритма Витерби.
🌐 Знаковые события
1937 — Московский телецентр на Шаболовке осуществил первую в СССР опытную передачу электронного телевидения в эфир.
1948 — на циклотроне в Калифорнии удаётся получить мезоны.
#Biography #Birth_Date #Events #09марта
Ю́рий Алексе́евич Гага́рин (9 марта 1934, Клушино, Гжатский (ныне Гагаринский) район, Западная область (ныне — Смоленская область) — 27 марта 1968, возле села Новосёлово, Киржачский район, Владимирская область) — советский космонавт и военный лётчик, первый человек, совершивший космический полёт. Герой Советского Союза, кавалер высших знаков отличия ряда государств, почётный гражданин многих российских и зарубежных городов.
Го́вард Ха́тауэй Э́йкен (англ. Howard Hathaway Aiken; 9 марта 1900, Хобокен, штат Нью-Джерси, США — 14 марта 1973, Сент-Луис, штат Миссури, США) — американский пионер компьютеростроения. В должности инженера IBM руководил работами по созданию первого американского компьютера «Марк I».
Эндрю Джеймс Витерби (англ. Andrew James Viterbi, имя при рождении Андреа Джакомо Витерби (итал. Andrea Giacomo Viterbi); род. 9 марта 1935 года, Бергамо, Королевство Италия) — американский инженер и бизнесмен, сооснователь Qualcomm и разработчик алгоритма Витерби.
1937 — Московский телецентр на Шаболовке осуществил первую в СССР опытную передачу электронного телевидения в эфир.
1948 — на циклотроне в Калифорнии удаётся получить мезоны.
#Biography #Birth_Date #Events #09марта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3