Раздел 12. Работа с файлами, I/O и сетью (NIO.2)
Глава 4. Работа с сетью (Socket, HTTP, HttpClient)
Тема: InetAddress — работа с IP-адресами в Java
Читаем на devforge.ru - ссылка, тык
Заодно расскажите - удобнее ли вам так читать или лучше тут публиковать?
#Java #для_новичков #beginner #IO #NIO #Ip #InetAddress
Глава 4. Работа с сетью (Socket, HTTP, HttpClient)
Тема: InetAddress — работа с IP-адресами в Java
Читаем на devforge.ru - ссылка, тык
Заодно расскажите - удобнее ли вам так читать или лучше тут публиковать?
#Java #для_новичков #beginner #IO #NIO #Ip #InetAddress
👍3
Что выведет код?
#Tasks
import java.net.InetAddress;
public class Task180826 {
public static void main(String[] args) throws Exception {
byte[] ip = {127, 0, 0, 1};
InetAddress addr1 = InetAddress.getByAddress("host1", ip);
InetAddress addr2 = InetAddress.getByAddress("host2", ip);
System.out.println(addr1.equals(addr2));
System.out.println(addr1.getHostName().equals(addr2.getHostName()));
}
}
#Tasks
👍2
👍2
Что такое 🤓
Ответ:
@EntityGraph — это аннотация (и API) в JPA 2.1, которая позволяет явно указать, какие связанные сущности должны быть загружены (Eager) в определенном запросе.
Это альтернатива JOIN FETCH. Можно определить именованный граф ( @NamedEntityGraph ) и использовать его в @EntityGraph на уровне репозитория или на запросе.
Это дает гибкость: по умолчанию LAZY, но в конкретном месте подгружаем всё необходимое. Решает проблему N+1 запросов без изменения базовых настроек.
#собеседование
Entity Graph в JPA? Ответ:
Это альтернатива JOIN FETCH. Можно определить именованный граф (
Это дает гибкость: по умолчанию LAZY, но в конкретном месте подгружаем всё необходимое. Решает проблему N+1 запросов без изменения базовых настроек.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Са́тья Нараяна Наде́лла (англ. Satya Narayana Nadella; телугу సత్యనారాయణ నాదెళ్ల; род. 19 августа 1967, Хайдарабад) — американский топ-менеджер индийского происхождения. Генеральный директор компании Microsoft. CEO Microsoft; развернул компанию на облака и ИИ, провёл сделки LinkedIn и GitHub.
Честер Гордон Белл (англ. Chester Gordon Bell; 19 августа 1934, Керксвилл, США — 17 мая 2024, Коронадо, США) — американский инженер-электрик, компьютерный инженер и менеджер. В 1960—1966 годах в Digital Equipment Corporation (DEC) разработал несколько мини-компьютеров PDP. В 1972—1983 годах был вице-президентом DEC, курируя разработку VAX. Дальнейшая карьера Гордона Белла — предприниматель, инвестор, вице-президент Национального научного фонда, а также почётный представитель Microsoft Research в 1995—2015 годах. В 1972 году сформулировал закон о классах компьютеров (англ. Bell's law of computer classes), в котором обосновал смену компьютерных систем.
Луис Фон Ан (исп. Luis von Ahn; род. 19 августа 1978, Гватемала, Гватемала) — создатель CAPTCHA/reCAPTCHA и со-основатель Duolingo; один из пионеров краудсорсинга.
1960 — «Спутник-5» (Белка и Стрелка): запуск корабля с двумя собаками и бионабором; первый успешный полёт с возвращением живых существ с орбиты (посадка 20 августа).
1964 — Syncom 3: запуск первого геостационарного спутника связи; обеспечил прямые телетрансляции Олимпиады-1964 из Токио.
1976 — «Луна-24»: старт взлётной ступени с лунного грунта (≈170 г) к Земле; последний на сегодня успешный советский/российский образец возврата пробы с Луны.
2003 — Червь Sobig.F: один из самых быстрых почтовых червей; вспышка началась 19 августа и быстро перегрузила почтовые системы мира.
2004 — IPO Google: торги стартовали на NASDAQ по $85; день закрылся $100.34 (+18%). Формат — модифицированный «голландский аукцион».
2010 — Intel покупает McAfee: объявлена сделка на $7.68 млрд (крупнейшая покупка Intel на тот момент) — ставка на интеграцию безопасности в «железо».
#Biography #Birth_Date #Events #19Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Раздел 12. Работа с файлами, I/O и сетью (NIO.2)
Глава 4. Работа с сетью (Socket, HTTP, HttpClient)
Тема: URL, URI и HttpURLConnection: сетевая абстракция Java и путь байтов от сокета до кучи
Читаем на devforge.ru - ссылка, тык
#Java #для_новичков #beginner #HttpURLConnection #URL #URI
Глава 4. Работа с сетью (Socket, HTTP, HttpClient)
Тема: URL, URI и HttpURLConnection: сетевая абстракция Java и путь байтов от сокета до кучи
Читаем на devforge.ru - ссылка, тык
#Java #для_новичков #beginner #HttpURLConnection #URL #URI
👍3
Что выведет код?
#Tasks
import java.net.HttpURLConnection;
import java.net.URL;
public class Task190826 {
public static void main(String[] args) throws Exception {
URL url = new URL("http://example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
System.out.println(conn.getResponseCode());
}
}
#Tasks
👍1
👍3
Что такое 🤓
Ответ:
Session — это основной интерфейс Hibernate для работы с БД, обертка над JPA EntityManager. Она представляет единицу работы (unit of work) и содержит Persistence Context.
Через нее выполняются CRUD-операции, запросы.
Transaction — интерфейс для управления транзакциями. В Spring обычно не работают напрямую с Session (используют EntityManager и @Transactional ). Важно: Session не потокобезопасна, должна быть закрыта после использования.
В Spring она управляется контейнером и привязана к потоку.
#собеседование
Hibernate Session и Transaction? Ответ:
Через нее выполняются CRUD-операции, запросы.
Transaction — интерфейс для управления транзакциями. В Spring обычно не работают напрямую с Session (используют EntityManager и
В Spring она управляется контейнером и привязана к потоку.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Том Демарко (также ДеМарко, род. 20 августа 1940 года, Хейзлтон, штат Пенсильвания, США) — классик инженерии ПО; «Peopleware», структурный анализ, влияние на практику менеджмента проектов.
Мартин Догиамас (Martin Dougiamas 1969) — основатель Moodle, одной из самых распространённых LMS в мире.
Эрик Голес Чакк (Антофагаста, 21 августа 1951) — учёный в области дискретной математики и клеточных автоматов, лауреат премий за вклад в информатику Чили.
1912 — Томас Эдисон патентует электробатарею.
1956 — Начала действовать ядерная электростанция «Колдер Холл», первая ядерная электростанция Британии.
1964 — Основан Интелсат — компания, владеющая группировкой телекоммуникационных спутников.
1975 — запуск американской межпланетной станции Viking 1 к Марсу.
2024 — прекращена работа мессенджера «Агент Mail.ru» (пользователям предложено перейти на VK).
#Biography #Birth_Date #Events #20Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
[Совет по Java #073]
Тема:
Проблема: Классы, реализующие
Методы
Методы
Существуют также перегруженные версии
Решение: Четко различайте сценарии использования. Если поток должен ждать неопределенно долго, пока операция не станет возможной — используйте
Если вы хотите только попытаться выполнить операцию и немедленно вернуть результат — используйте
В многопоточных приложениях предпочтительнее использовать таймауты, чтобы система могла корректно реагировать на перегрузки и завершать потоки.
Объяснение:
При использовании таймаутов всегда проверяйте возвращаемые значения, чтобы отличить успех от таймаута (для
#Java #советы
Тема:
BlockingQueue методы put() и take() блокируются, а offer() и poll() с таймаутом — нет.Проблема: Классы, реализующие
BlockingQueue (например, ArrayBlockingQueue, LinkedBlockingQueue), предоставляют два набора методов для добавления и извлечения элементов. Методы
put() и take() блокируют поток до тех пор, пока не появится возможность выполнить операцию (для put() — пока не освободится место, для take() — пока не появится элемент). Методы
offer() и poll() являются неблокирующими: они пытаются выполнить операцию и сразу возвращают результат (true/false или элемент/null). Существуют также перегруженные версии
offer(e, timeout, unit) и poll(timeout, unit), которые ожидают указанное время и затем возвращают результат. Разработчики часто путают их, полагая, что put() и take() — это просто синонимы, и используют их в ситуациях, где нужна неблокирующая проверка, что приводит к зависанию потоков. В других случаях они используют offer() и poll() без таймаута, когда нужно дождаться освобождения места или появления элемента, что приводит к частым повторным попыткам и busy-wait.Решение: Четко различайте сценарии использования. Если поток должен ждать неопределенно долго, пока операция не станет возможной — используйте
put() и take(). Если вы хотите только попытаться выполнить операцию и немедленно вернуть результат — используйте
offer() и poll() без таймаута. Если нужно ожидать в течение ограниченного времени, а затем отступить — используйте перегруженные версии с таймаутом и обязательно проверяйте возвращаемое значение: offer возвращает true при успешной вставке, poll возвращает null при отсутствии элемента по истечении таймаута. Всегда обрабатывайте случай null или false, чтобы избежать NullPointerException или бесконечных циклов. В многопоточных приложениях предпочтительнее использовать таймауты, чтобы система могла корректно реагировать на перегрузки и завершать потоки.
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
public class BlockingQueueMethods {
private final BlockingQueue<String> queue = new ArrayBlockingQueue<>(1);
//Опасный вариант: put() блокирует навсегда
public void badPut() throws InterruptedException {
queue.put("item"); // Если очередь полна, поток зависнет навсегда
// Никогда не вернется, если никто не потребит
}
//Правильно: try с таймаутом
public boolean safeOffer(String item) throws InterruptedException {
if (queue.offer(item, 1, TimeUnit.SECONDS)) {
System.out.println("Элемент добавлен");
return true;
} else {
System.out.println("Очередь заполнена, таймаут");
return false;
}
}
//Опасный вариант: poll() без таймаута возвращает null немедленно
public String badPoll() {
return queue.poll(); // null, если очередь пуста — нужно проверять!
}
//Блокирующее извлечение, когда нужно ждать
public String takeItem() throws InterruptedException {
return queue.take(); // ждет, пока появится элемент
}
//Извлечение с таймаутом
public String pollWithTimeout() throws InterruptedException {
String item = queue.poll(500, TimeUnit.MILLISECONDS);
if (item != null) {
System.out.println("Получен: " + item);
} else {
System.out.println("Таймаут, элемент не появился");
}
return item;
}
}
Объяснение:
put() и take() используют внутренние условия (Condition) для блокировки, освобождая монитор и вновь захватывая его после пробуждения. Они не возвращают управление до выполнения операции. offer() и poll() без таймаута проверяют состояние очереди и немедленно возвращают результат. Версии с таймаутом реализованы через циклы с ожиданием, но прерываются по истечении времени. При использовании таймаутов всегда проверяйте возвращаемые значения, чтобы отличить успех от таймаута (для
offer — false, для poll — null). Важно также помнить, что null может быть допустимым значением в некоторых очередях (например, LinkedTransferQueue), но в стандартных реализациях null не разрешен, поэтому null однозначно указывает на таймаут.#Java #советы
👍3
Что выведет код?
#Tasks
import java.util.concurrent.*;
public class Task200826 {
public static void main(String[] args) throws InterruptedException {
BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(1);
queue.put(1);
Thread consumer = new Thread(() -> {
try {
Thread.sleep(2000);
queue.take();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
consumer.start();
boolean added = queue.offer(2, 1, TimeUnit.SECONDS);
System.out.println(added);
System.out.println(queue.size());
}
}
#Tasks
👍4
👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2
Что такое 🤓
Ответ:
Circuit Breaker (паттерн, реализованный в Resilience4j, Hystrix) — защищает систему от каскадных отказов. Он отслеживает вызовы внешних сервисов.
Если количество неудачных вызовов превышает порог, цепь размыкается (open) — все последующие вызовы немедленно возвращают ошибку (или fallback), не делая запроса. Через некоторое время цепь переходит в полуоткрытое (half-open) состояние — пропускает пробные запросы, и если они успешны, цепь снова замыкается.
Это предотвращает тайм-ауты и перегрузку сбойных сервисов, давая им время восстановиться.
#собеседование
Circuit Breaker и какую роль играет в микросервисах? Ответ:
Если количество неудачных вызовов превышает порог, цепь размыкается (open) — все последующие вызовы немедленно возвращают ошибку (или fallback), не делая запроса. Через некоторое время цепь переходит в полуоткрытое (half-open) состояние — пропускает пробные запросы, и если они успешны, цепь снова замыкается.
Это предотвращает тайм-ауты и перегрузку сбойных сервисов, давая им время восстановиться.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
19. Read Model на событиях: выбор между JOIN, REST, Replica и CQRS
В этом видео я разбираю реальный вызов: бизнес хочет аналитику по жизненному циклу заказа – время создания, оплаты, отправки уведомления. Данные живут в трёх независимых микросервисах (Order, Payment, Notification) у двух из которых свои базы данных.
Как построить аналитику, не нарушая инкапсуляцию и не создавая синхронной связанности?
Я пройду через все популярные альтернативы:
🔹 SQL JOIN между базами – почему это антипаттерн
🔹REST-агрегация – почему не масштабируется
🔹Read Replica – почему не решает проблему агрегации
🔹CDC → ClickHouse – когда это оправдано, а когда избыточно
🔹CQRS + Event‑driven Read Model Projection – наш выбор и его цена
Я не просто показываю «как сделать CQRS», а объясняю процесс принятия решения: оцениваю стоимость, производительность, надёжность, сложность и поддерживаемость.
Что вы узнаете:
🔹Как отличить операционную аналитику от OLAP-хранилища
🔹Почему CQRS – это не «две базы данных», а принцип разделения команд и запросов
🔹Как строить идемпотентные проекции с помощью INSERT ... ON CONFLICT
🔹Как защитить read-модель от старых событий
🔹Как оценивать архитектурные альтернативы по таблице критериев
Исходный код проекта на GitHub наверняка заслуживает Ваших звезд!🙂
Ссылка на Youtube
Ссылка на Рутьюб
Смотрите, ставьте лайки, подписывайтесь на каналы!✌️
Жду ваших реакций и оценок🙂
В этом видео я разбираю реальный вызов: бизнес хочет аналитику по жизненному циклу заказа – время создания, оплаты, отправки уведомления. Данные живут в трёх независимых микросервисах (Order, Payment, Notification) у двух из которых свои базы данных.
Как построить аналитику, не нарушая инкапсуляцию и не создавая синхронной связанности?
Я пройду через все популярные альтернативы:
🔹 SQL JOIN между базами – почему это антипаттерн
🔹REST-агрегация – почему не масштабируется
🔹Read Replica – почему не решает проблему агрегации
🔹CDC → ClickHouse – когда это оправдано, а когда избыточно
🔹CQRS + Event‑driven Read Model Projection – наш выбор и его цена
Я не просто показываю «как сделать CQRS», а объясняю процесс принятия решения: оцениваю стоимость, производительность, надёжность, сложность и поддерживаемость.
Что вы узнаете:
🔹Как отличить операционную аналитику от OLAP-хранилища
🔹Почему CQRS – это не «две базы данных», а принцип разделения команд и запросов
🔹Как строить идемпотентные проекции с помощью INSERT ... ON CONFLICT
🔹Как защитить read-модель от старых событий
🔹Как оценивать архитектурные альтернативы по таблице критериев
Исходный код проекта на GitHub наверняка заслуживает Ваших звезд!
Ссылка на Youtube
Ссылка на Рутьюб
Смотрите, ставьте лайки, подписывайтесь на каналы!
Жду ваших реакций и оценок
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍2🤯1
Серге́й Брин (англ. Sergey Brin; род. 21 августа 1973, Москва, СССР) — американский программист и интернет-предприниматель. Вместе с Ларри Пейджем он стал создателем Google и одноимённой крупнейшей в мире поисковой системы. Брин был президентом Alphabet Inc., материнской компании Google, пока не ушёл с этой должности 3 декабря 2019 года. Брин и Пейдж остаются в Alphabet в качестве соучредителей, контролирующих акционеров, членов совета директоров и сотрудников. По данным Форбс 2025 года, Брин занимает 8-е место в списке самых богатых людей в мире ($110B).
Джон Д. Кармак II (англ. John D. Carmack II; род. 21 августа 1970 года, Канзас, США) — американский разработчик компьютерных игр; инженер в областях информатики, аэрокосмической техники и виртуальной реальности; предприниматель, соучредитель и совладелец компаний id Software и Armadillo Aerospace. В 1991 году Кармак стал одним из основателей компании id Software, которая прославилась разработкой основополагающих игр в жанре FPS — Wolfenstein 3D, Doom, Quake, — ведущим программистом которых был Кармак. Его революционные методы программирования и уникальные дизайнерские решения Джона Ромеро способствовали популярности этого жанра в 1990-х годах.
Стивен Макконнелл Кейс (родился 21 августа 1958 года) — со-основатель и CEO AOL; один из драйверов массового выхода пользователей в интернет в 1990-х.
1888 — патент У. С. Бэрроуза на счётную машину. Важная веха в линии, ведущей к офисной механизации и ранним вычислительным устройствам.
1957 — первый успешный пуск МБР Р-7 с Байконура. Полёт на ~6000–6500 км до Камчатки; именно этот носитель стал «прародителем» спутниковых и пилотируемых ракет семейства «Союз». 27 августа ТАСС официально сообщил об успешном испытании.
1965 — старт Gemini 5 (NASA). Первый длительный полёт по программе Gemini (8 суток), ключевая проверка топливных элементов как источника энергии для лунных экспедиций.
1989 — исследовательский зонд «Вояджер-2» делает снимки Тритона, спутника планеты Нептун.
2006 — началась регистрация доменных имён в новом домене общего пользования .mobi, предназначенном для мобильных устройств.
#Biography #Birth_Date #Events #21Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Раздел 12. Работа с файлами, I/O и сетью (NIO.2)
Глава 4. Работа с сетью (Socket, HTTP, HttpClient)
Тема: HttpClient в Java 11+: современный HTTP-клиент
Читаем на devforge.ru - ссылка, тык
#Java #для_новичков #beginner #HttpClient #http
Глава 4. Работа с сетью (Socket, HTTP, HttpClient)
Тема: HttpClient в Java 11+: современный HTTP-клиент
Читаем на devforge.ru - ссылка, тык
#Java #для_новичков #beginner #HttpClient #http
👍1
Что выведет код?
#Tasks
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Task210826 {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://httpbin.org/post"))
.POST(HttpRequest.BodyPublishers.ofString("data"))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
}
}
#Tasks
👍1
Варианты ответа:
Anonymous Quiz
80%
200
0%
405
20%
Исключение IllegalArgumentException
0%
Исключение IllegalStateException
👍2