Что вы знаете про Collection?
Collection — это интерфейс в java.util, который задаёт общий контракт для всех коллекций, хранящих группы объектов. Через него определяются ключевые операции: добавление и удаление элементов, проверка их наличия, очистка коллекции, получение размера и итерация. Основные реализации — List, Set и Queue.
Сам интерфейс не потокобезопасен, но его можно обернуть в синхронизированную версию через Collections.synchronizedCollection() или использовать классы из java.util.concurrent. Collection работает с дженериками, что обеспечивает типобезопасность и упрощает работу с элементами.
Важно помнить, что Map не наследуется от Collection, так как представляет пары ключ–значение и имеет свою иерархию.
Мы в MAX
👉@BookJava
Collection — это интерфейс в java.util, который задаёт общий контракт для всех коллекций, хранящих группы объектов. Через него определяются ключевые операции: добавление и удаление элементов, проверка их наличия, очистка коллекции, получение размера и итерация. Основные реализации — List, Set и Queue.
Сам интерфейс не потокобезопасен, но его можно обернуть в синхронизированную версию через Collections.synchronizedCollection() или использовать классы из java.util.concurrent. Collection работает с дженериками, что обеспечивает типобезопасность и упрощает работу с элементами.
Важно помнить, что Map не наследуется от Collection, так как представляет пары ключ–значение и имеет свою иерархию.
Мы в MAX
👉@BookJava
👍3❤1
Что такое Spring контейнер?
Spring контейнер — это основной компонент фреймворка Spring, который отвечает за управление жизненным циклом объектов (или бинов). Контейнер создаёт, конфигурирует и управляет зависимостями между объектами, а также реализует инъекцию зависимостей (DI), что упрощает разработку, улучшает тестируемость и поддерживаемость кода.
Он также управляет аспектами транзакций и безопасности.
Основной принцип Spring контейнера — это инверсия управления (IoC), при которой ответственность за создание объектов и управление их состоянием перекладывается на контейнер, а не на код разработчика.
Мы в MAX
👉@BookJava
Spring контейнер — это основной компонент фреймворка Spring, который отвечает за управление жизненным циклом объектов (или бинов). Контейнер создаёт, конфигурирует и управляет зависимостями между объектами, а также реализует инъекцию зависимостей (DI), что упрощает разработку, улучшает тестируемость и поддерживаемость кода.
Он также управляет аспектами транзакций и безопасности.
Основной принцип Spring контейнера — это инверсия управления (IoC), при которой ответственность за создание объектов и управление их состоянием перекладывается на контейнер, а не на код разработчика.
Мы в MAX
👉@BookJava
👍1
Стань участником МТС True Tech Champ 2025 — масштабного ИТ-чемпионата по программированию с призовым фондом 10 250 000 рублей.
Соревнования пройдут в двух треках:
1. Алгоритмические задачи
Покажи индивидуальное мастерство в работе со структурами данных и написании алгоритмов. Чтобы успешно справиться с заданиями, пригодится опыт решения олимпиад.
2. Программирование роботов
Оживи робота с помощью кода, чтобы он прошел лабиринт быстрее всех. Трек будет интересен разработчикам: С++, Go, Python, JS, Java, C# и не только.
Участвовать могут школьники, студенты, начинающие ИТ-специалисты и опытные разработчики. Отборочные этапы пройдут онлайн, шоу-финал — 21 ноября в МТС Live Холл в Москве.
Ты можешь выйти на арену как участник или наблюдать за чемпионатом как зритель.
Регистрируйся до 20 октября по ссылке.
Соревнования пройдут в двух треках:
1. Алгоритмические задачи
Покажи индивидуальное мастерство в работе со структурами данных и написании алгоритмов. Чтобы успешно справиться с заданиями, пригодится опыт решения олимпиад.
2. Программирование роботов
Оживи робота с помощью кода, чтобы он прошел лабиринт быстрее всех. Трек будет интересен разработчикам: С++, Go, Python, JS, Java, C# и не только.
Участвовать могут школьники, студенты, начинающие ИТ-специалисты и опытные разработчики. Отборочные этапы пройдут онлайн, шоу-финал — 21 ноября в МТС Live Холл в Москве.
Ты можешь выйти на арену как участник или наблюдать за чемпионатом как зритель.
Регистрируйся до 20 октября по ссылке.
Media is too big
VIEW IN TELEGRAM
Spring-потрошитель
Один из хрестоматийных докладов о Spring обзавелся текстовой версией на Хабре. Удивительно, что ее до сих пор не было. Докладу уже 11 лет, но его все еще можно смело рекомендовать. Евгений Борисов проходится по ключевым фичам фреймворка, которые актуальны и по сей день. А фирменная подача материала делает восприятие в общем-то непростой информации легким и приятным.
https://habr.com/ru/companies/jugru/articles/893638/
Мы в MAX
👉@BookJava
Один из хрестоматийных докладов о Spring обзавелся текстовой версией на Хабре. Удивительно, что ее до сих пор не было. Докладу уже 11 лет, но его все еще можно смело рекомендовать. Евгений Борисов проходится по ключевым фичам фреймворка, которые актуальны и по сей день. А фирменная подача материала делает восприятие в общем-то непростой информации легким и приятным.
https://habr.com/ru/companies/jugru/articles/893638/
Мы в MAX
👉@BookJava
👍5🔥1
Как вы решаете вопрос с покрытием?
Почти в каждом проекте висит задача: поднять покрытие до 70%.
И почти в каждой команде никто не хочет этим заниматься.
Explyt – AI-плагин для Java и Kotlin разработчиков, который снимает эту боль.
Он генерирует юнит-тесты прямо в IDE: по коду, по runtime-трассам, по спекам. И делает это так, как будто реально вник в проект.
📌 Что умеет:
- создаёт осмысленные тесты для Java и Kotlin-кода
- поддерживает JUnit 4/5, TestNG, кастомные фреймворки
- превращает execution trace в автотесты
- предлагает фиксы, если сгенерированный тест падает
- есть режим агента, где AI сам меняет код, запускает тесты и ищет ошибки
📦 Плагин доступен:
- через JetBrains Marketplace
- или напрямую с сайта разработчика
🎁 30 дней бесплатного доступа – просто пользуйтесь.
👉 Попробовать на своём проекте
Почти в каждом проекте висит задача: поднять покрытие до 70%.
И почти в каждой команде никто не хочет этим заниматься.
Explyt – AI-плагин для Java и Kotlin разработчиков, который снимает эту боль.
Он генерирует юнит-тесты прямо в IDE: по коду, по runtime-трассам, по спекам. И делает это так, как будто реально вник в проект.
📌 Что умеет:
- создаёт осмысленные тесты для Java и Kotlin-кода
- поддерживает JUnit 4/5, TestNG, кастомные фреймворки
- превращает execution trace в автотесты
- предлагает фиксы, если сгенерированный тест падает
- есть режим агента, где AI сам меняет код, запускает тесты и ищет ошибки
📦 Плагин доступен:
- через JetBrains Marketplace
- или напрямую с сайта разработчика
🎁 30 дней бесплатного доступа – просто пользуйтесь.
👉 Попробовать на своём проекте
👍1
Хочу показать, как за 5 минут включить виртуальные потоки (Project Loom) и не словить типичные грабли. Работает на Java 21+.
📌 Включение (авто)
📌 Ручной контроль (если нужен кастом)
💡 Tomcat под Loom (MVC)
💡 JDBC и пул соединений
Виртуальные потоки не отменяют лимиты БД. Не раздувайте пул, наоборот:
⚠️ Три частые ошибки
1. ThreadLocal-засады. Виртуальные потоки дешёвые, но ThreadLocal всё так же утекает. Используйте
2. Блокирующие HTTP-клиенты. Для массового I/O берите
3. Метрики и трейсинг. Обновите Micrometer/Brave до версий, корректно работающих с виртуальными потоками, и включите
✅ Когда включать?
- Много блокирующего I/O (JDBC, REST к внешним сервисам) → почти всегда плюс.
- Чисто CPU-bound → выгоды мало, но и вреда нет.
Бонус: быстрый smoke-тест
С Virtual Threads сервер не «захлебнётся» потоками — упадёте ровно в реальные лимиты: БД, сеть, таймауты. Мониторьте их, а не «число потоков».
Мы в MAX
👉@BookJava
📌 Включение (авто)
# application.yml
spring:
threads:
virtual:
enabled: true # MVC, @Async, schedulers получат VirtualThreadPerTaskExecutor
📌 Ручной контроль (если нужен кастом)
@Bean
TaskExecutor vthreads() {
return new TaskExecutorAdapter(Executors.newVirtualThreadPerTaskExecutor());
}
// Привязать к @Async по умолчанию:
@Bean(name = {TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME})
TaskExecutor appExecutor() { return vthreads(); }
💡 Tomcat под Loom (MVC)
server:
tomcat:
threads:
max: 200 # это число платформенных (!) потоков, оставьте умеренным
💡 JDBC и пул соединений
Виртуальные потоки не отменяют лимиты БД. Не раздувайте пул, наоборот:
spring:
datasource:
hikari:
maximum-pool-size: 20 # ориентируйтесь на лимиты БД/кейсы, а не на «тысячи» v-threads
minimum-idle: 5
⚠️ Три частые ошибки
1. ThreadLocal-засады. Виртуальные потоки дешёвые, но ThreadLocal всё так же утекает. Используйте
@Transactional
/Context Propagation или ScopedValue
вместо самодельных ThreadLocal.2. Блокирующие HTTP-клиенты. Для массового I/O берите
HttpClient
(JDK) или WebClient
c ограничением пула сокетов; не плодите соединения до бесконечности — узкое место сеть/БД.3. Метрики и трейсинг. Обновите Micrometer/Brave до версий, корректно работающих с виртуальными потоками, и включите
@Observed
— без этого дебаг станет болью.✅ Когда включать?
- Много блокирующего I/O (JDBC, REST к внешним сервисам) → почти всегда плюс.
- Чисто CPU-bound → выгоды мало, но и вреда нет.
Бонус: быстрый smoke-тест
IntStream.range(0, 10_000).parallel()
.forEach(i -> RestClient.create().get().uri("https://example.com").retrieve().toBodilessEntity());
С Virtual Threads сервер не «захлебнётся» потоками — упадёте ровно в реальные лимиты: БД, сеть, таймауты. Мониторьте их, а не «число потоков».
Мы в MAX
👉@BookJava
👍3
Deprecated Event
В статье рассматривается новое событие в JDK 22 для JFR, позволяющее отслеживать вызовы устаревших методов. Это полезно для определения зависимостей в сторонних библиотеках, которые используют методы, планируемые к удалению, такие как методы Security Manager. Такое отслеживание позволяет заранее обновить библиотеки, что может сократить технический долг и упростить переход на актуальные версии библиотек и инструментов.
https://egahlin.github.io/2024/05/31/deprecated-event.html
Мы в MAX
👉@BookJava
В статье рассматривается новое событие в JDK 22 для JFR, позволяющее отслеживать вызовы устаревших методов. Это полезно для определения зависимостей в сторонних библиотеках, которые используют методы, планируемые к удалению, такие как методы Security Manager. Такое отслеживание позволяет заранее обновить библиотеки, что может сократить технический долг и упростить переход на актуальные версии библиотек и инструментов.
public class API {
public static void enableLogging(boolean enable) {
AccessController.doPrivileged(new PrivilegedAction<Void>() {
public Void run() {
System.setProperty("log", String.valueOf(enable));
return null;
}
});
}
public static void runTask(Runnable task) {
try {
task.run();
} catch (ThreadDeath td) {
System.out.println("Task stopped.");
}
}
}
public class Service {
public static void log(String message) {
String shouldLog = System.getProperty("log", "true");
if (new Boolean("log")) {
System.out.print(message);
}
}
}
https://egahlin.github.io/2024/05/31/deprecated-event.html
Мы в MAX
👉@BookJava
👍3👎2
Media is too big
VIEW IN TELEGRAM
Spring – эволюция или революция!? | Spring АйО Подкаст №1
В первом выпуске подкаста Spring АйО в студии собрались 4 эксперта сообщества, чтобы попытаться раз и навсегда ответить на вопрос, чем же для нас стал Spring – эволюцией или революцией?
––––– Таймкоды –––––
00:00:00 – Всем привет!
00:00:28 – Какими были ваши первые ощущения от Spring?
00:01:14 – В чём секрет популярности Spring?
00:02:56 – Существует ли Spring без Boot?
00:05:30 – Победил ли Spring?
00:07:08 – А что с другими DI-фреймворками?
00:10:15 – Spring Native – таблетка от всех проблем?
00:14:30 – Что должно быть bean, а что нет?
00:22:10 – Как правильно внедрять зависимость?
00:26:20 – Что там со Spring Data, Михаил?
00:34:19 – AI заменит StackOverflow и Baeldung?
00:36:20 – Не становится ли Spring слишком сложным?
00:39:50 – Почему документация Spring так плоха?
00:41:23 – Есть ли рудименты в Spring?
00:43:28 – Зашел ли в тупик реактивный стек?
00:52:20 – Тупеют ли разработчики из-за Spring?
01:00:42 – В чём разница между сеньором сейчас и 10 лет назад?
01:03:40 – Java/Spring – самое удобное, что есть в этом мире?
01:05:08 – Почему Java так сильно тормозит?
01:08:43 – Чего нам не хватает в Spring?
01:18:00 – Как законтрибьютить в Spring?
01:24:15 – На чём зарабатывает Spring?
01:27:12 – Что делать после открытия Pull Request?
01:30:22 – Всем спасибо!
источник
Мы в MAX
👉@BookJava
В первом выпуске подкаста Spring АйО в студии собрались 4 эксперта сообщества, чтобы попытаться раз и навсегда ответить на вопрос, чем же для нас стал Spring – эволюцией или революцией?
––––– Таймкоды –––––
00:00:00 – Всем привет!
00:00:28 – Какими были ваши первые ощущения от Spring?
00:01:14 – В чём секрет популярности Spring?
00:02:56 – Существует ли Spring без Boot?
00:05:30 – Победил ли Spring?
00:07:08 – А что с другими DI-фреймворками?
00:10:15 – Spring Native – таблетка от всех проблем?
00:14:30 – Что должно быть bean, а что нет?
00:22:10 – Как правильно внедрять зависимость?
00:26:20 – Что там со Spring Data, Михаил?
00:34:19 – AI заменит StackOverflow и Baeldung?
00:36:20 – Не становится ли Spring слишком сложным?
00:39:50 – Почему документация Spring так плоха?
00:41:23 – Есть ли рудименты в Spring?
00:43:28 – Зашел ли в тупик реактивный стек?
00:52:20 – Тупеют ли разработчики из-за Spring?
01:00:42 – В чём разница между сеньором сейчас и 10 лет назад?
01:03:40 – Java/Spring – самое удобное, что есть в этом мире?
01:05:08 – Почему Java так сильно тормозит?
01:08:43 – Чего нам не хватает в Spring?
01:18:00 – Как законтрибьютить в Spring?
01:24:15 – На чём зарабатывает Spring?
01:27:12 – Что делать после открытия Pull Request?
01:30:22 – Всем спасибо!
источник
Мы в MAX
👉@BookJava
👍5
В чем отличие между поверхностным и глубоким клонированием?
Поверхностное копирование копирует настолько малую часть информации об объекте, насколько это возможно. По умолчанию, клонирование в Java является поверхностным, т.е. класс Object не знает о структуре класса, которого он копирует. Клонирование такого типа осуществляется JVM по следующим правилам:
✔️ Если класс имеет только члены примитивных типов, то будет создана совершенно новая копия объекта и возвращена ссылка на этот объект.
✔️ Если класс помимо членов примитивных типов содержит члены ссылочных типов, то тогда копируются ссылки на объекты этих классов. Следовательно, оба объекта будут иметь одинаковые ссылки.
Глубокое копирование дублирует абсолютно всю информацию объекта:
✔️ Нет необходимости копировать отдельно примитивные данные;
✔️ Все члены ссылочного типа в оригинальном классе должны поддерживать клонирование. Для каждого такого члена при переопределении метода
✔️ Если какой-либо член класса не поддерживает клонирование, то в методе клонирования необходимо создать новый экземпляр этого класса и скопировать каждый его член со всеми атрибутами в новый объект класса, по одному.
Мы в MAX
👉@BookJava
Поверхностное копирование копирует настолько малую часть информации об объекте, насколько это возможно. По умолчанию, клонирование в Java является поверхностным, т.е. класс Object не знает о структуре класса, которого он копирует. Клонирование такого типа осуществляется JVM по следующим правилам:
✔️ Если класс имеет только члены примитивных типов, то будет создана совершенно новая копия объекта и возвращена ссылка на этот объект.
✔️ Если класс помимо членов примитивных типов содержит члены ссылочных типов, то тогда копируются ссылки на объекты этих классов. Следовательно, оба объекта будут иметь одинаковые ссылки.
Глубокое копирование дублирует абсолютно всю информацию объекта:
✔️ Нет необходимости копировать отдельно примитивные данные;
✔️ Все члены ссылочного типа в оригинальном классе должны поддерживать клонирование. Для каждого такого члена при переопределении метода
clone()
должен вызываться super.clone();
✔️ Если какой-либо член класса не поддерживает клонирование, то в методе клонирования необходимо создать новый экземпляр этого класса и скопировать каждый его член со всеми атрибутами в новый объект класса, по одному.
Мы в MAX
👉@BookJava
👍2
☄️Как устроено автодополнение в поисковых системах?
🗓 8 октября в 20:00 МСК приглашаем на открытый урок OTUS «Как вырастить префиксное дерево». На вебинаре мы пошагово построим префиксное дерево (Trie) для слов из большого текста, добавим счётчики частот и реализуем автодополнение. Вы увидите, как по первым буквам мгновенно находятся все слова с этим префиксом и выводятся самые популярные варианты продолжений.
Урок будет полезен разработчикам, которые хотят глубже понимать работу алгоритмов и применять их для оптимизации поиска, обработки текста и построения быстрых интерфейсов.
Открытый урок проходит в преддверие старта курса «Алгоритмы и структуры данных». Все участники получат скидку на обучение.
👉Зарегистрируйтесь сейчас и узнайте, как вырастить своё первое Trie-дерево: https://vk.cc/cQ8Kxo
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🗓 8 октября в 20:00 МСК приглашаем на открытый урок OTUS «Как вырастить префиксное дерево». На вебинаре мы пошагово построим префиксное дерево (Trie) для слов из большого текста, добавим счётчики частот и реализуем автодополнение. Вы увидите, как по первым буквам мгновенно находятся все слова с этим префиксом и выводятся самые популярные варианты продолжений.
Урок будет полезен разработчикам, которые хотят глубже понимать работу алгоритмов и применять их для оптимизации поиска, обработки текста и построения быстрых интерфейсов.
Открытый урок проходит в преддверие старта курса «Алгоритмы и структуры данных». Все участники получат скидку на обучение.
👉Зарегистрируйтесь сейчас и узнайте, как вырастить своё первое Trie-дерево: https://vk.cc/cQ8Kxo
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤1
Примеры поведенческих шаблонов проектирования
🔴 Цепочка обязанностей (Chain of responsibility) - Предназначен для организации в системе уровней ответственности.
🔴 Команда (Command) - Представляет действие. Объект команды заключает в себе само действие и его параметры.
🔴 Интерпретатор (Interpreter) - Решает часто встречающуюся, но подверженную изменениям, задачу.
🔴 Итератор (Iterator) - Представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого + __из объектов, входящих в состав агрегации.
🔴 Посредник (Mediator) - Обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга.
🔴 Хранитель (Memento) - Позволяет, не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях.
🔴 Наблюдатель (Observer) - Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.
🔴 Состояние (State) - Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния.
🔴 Стратегия (Strategy) - Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости.
🔴 Шаблонный метод (Template method) - Определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.
🔴 Посетитель (Visitor) - Описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы.
Мы в MAX
👉@BookJava
Мы в MAX
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Практикум, который снимет боль про микросервисы, о которой все молчат.
Sync vs Async: что убьёт ваш проект, а что спасёт?
15 октября, 19:00 — практический вебинар для разработчиков, архитекторов и девопсеров от OTUS. Работаем вместе с Олегом Голенищевым, Senior .NET-разработчиком Directum, преподавателем Microsoft.
Приходи, если хочешь:
✍Понимать, где Sync — мастхэв, а где Async — единственный шанс выжить
✍Получить FANG-уровня чек-лист по интеграции (и бонус — шаблоны конфигов Spring Boot для Kafka и RabbitMQ)
✍Забрать 7% скидку на любой курс OTUS (именно так, просто за регистрацию)
✍Не попасть в “клуб тех, кто строил микросервисы по учебнику, а теперь переписывает всё с нуля”
Запишись, чтобы не чинить то, что можно не ломать.
Запись, подарки и скидка — только для своих. Лови шанс — кликай на регистрацию: https://tglink.io/e5b902daf5b9
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFHxXzNU
Sync vs Async: что убьёт ваш проект, а что спасёт?
15 октября, 19:00 — практический вебинар для разработчиков, архитекторов и девопсеров от OTUS. Работаем вместе с Олегом Голенищевым, Senior .NET-разработчиком Directum, преподавателем Microsoft.
Приходи, если хочешь:
✍Понимать, где Sync — мастхэв, а где Async — единственный шанс выжить
✍Получить FANG-уровня чек-лист по интеграции (и бонус — шаблоны конфигов Spring Boot для Kafka и RabbitMQ)
✍Забрать 7% скидку на любой курс OTUS (именно так, просто за регистрацию)
✍Не попасть в “клуб тех, кто строил микросервисы по учебнику, а теперь переписывает всё с нуля”
Запишись, чтобы не чинить то, что можно не ломать.
Запись, подарки и скидка — только для своих. Лови шанс — кликай на регистрацию: https://tglink.io/e5b902daf5b9
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFHxXzNU
Определение и отличие IP адресов LAN, PPP в Java
Чтобы определить IP-адрес локальной машины с использованием Java, примените следующий код:
Работа с несколькими сетевыми интерфейсами
Если ваш компьютер оснащён несколькими сетевыми интерфейсами, иногда бывает необходимо обойти весь список интерфейсов и отфильтровать адреса, не являющиеся обратными петлями и являющиеся локальными для сайта. Это особенно актуально при работе в средах с многочисленными сетями.
Мы в MAX
👉@BookJava
Чтобы определить IP-адрес локальной машины с использованием Java, примените следующий код:
import java.net.*;
public class GetIP {
public static void main(String[] args) throws UnknownHostException {
System.out.println(InetAddress.getLocalHost().getHostAddress());
}
}
Работа с несколькими сетевыми интерфейсами
Если ваш компьютер оснащён несколькими сетевыми интерфейсами, иногда бывает необходимо обойти весь список интерфейсов и отфильтровать адреса, не являющиеся обратными петлями и являющиеся локальными для сайта. Это особенно актуально при работе в средах с многочисленными сетями.
import java.net.*;
import java.util.*;
public class GetMultiIPs {
public static void main(String[] args) throws SocketException {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface iface = interfaces.nextElement();
if (iface.isLoopback() || !iface.isUp()) continue;
Enumeration<InetAddress> addresses = iface.getInetAddresses();
while(addresses.hasMoreElements()) {
InetAddress addr = addresses.nextElement();
if (addr instanceof Inet4Address) {
System.out.println(iface.getDisplayName() + " – " + addr.getHostAddress());
}
}
}
}
}
Мы в MAX
👉@BookJava
1👍3❤1
🔥 Открытый урок «C# и ORM: работаем с базой данных».
Взаимодействие с базами данных - классический сценарий работы программы. В рамках ОУ рассмотрим инструменты из категории ORM, которые позволяют используя язык C# работать с БД (на примере PostgreSQL) безопасно и эффективно.
🗓 21 октября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C# Developer».
🎯 О чём поговорим:
✔️ для чего нужны БД
✔️ Какие сценарии использования реляционных баз данных на примере PostgreSQL
✔️ Что такое ORM
✔️ Какие библиотеки (ORM) используются при разработке на C# для работы с базами данных
✔️CRUD операции (создать, читать, обновить, удалить запись в БД)
👥 Кому будет полезно:
- Тем, кто понимает, как работает C#, но хочет узнать, как применять его в реальных программах
- Тем, кто писал на других языках программирования, и хочет узнать, как работать с БД на платформе .Net
🔗 Ссылка на регистрацию: https://vk.cc/cQlkmt
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Взаимодействие с базами данных - классический сценарий работы программы. В рамках ОУ рассмотрим инструменты из категории ORM, которые позволяют используя язык C# работать с БД (на примере PostgreSQL) безопасно и эффективно.
🗓 21 октября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C# Developer».
🎯 О чём поговорим:
✔️ для чего нужны БД
✔️ Какие сценарии использования реляционных баз данных на примере PostgreSQL
✔️ Что такое ORM
✔️ Какие библиотеки (ORM) используются при разработке на C# для работы с базами данных
✔️CRUD операции (создать, читать, обновить, удалить запись в БД)
👥 Кому будет полезно:
- Тем, кто понимает, как работает C#, но хочет узнать, как применять его в реальных программах
- Тем, кто писал на других языках программирования, и хочет узнать, как работать с БД на платформе .Net
🔗 Ссылка на регистрацию: https://vk.cc/cQlkmt
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Определение и отличие IP адресов LAN, PPP в Java. Использование DatagramSocket для нестандартных ситуаций
В некоторых случаях, например, при работе с Linux-системами, InetAddress.getLocalHost() может давать неожиданный результат. В таких ситуациях может быть полезно использовать другой способ — через DatagramSocket, отправляя запрос в сеть:
Сервер не получает эти данные, однако этот метод поможет определить предпочтительный локальный IP-адрес.
Мы в MAX
👉@BookJava
В некоторых случаях, например, при работе с Linux-системами, InetAddress.getLocalHost() может давать неожиданный результат. В таких ситуациях может быть полезно использовать другой способ — через DatagramSocket, отправляя запрос в сеть:
import java.net.*;
public class GetPreferredIP {
public static void main(String[] args) throws SocketException {
try (final DatagramSocket socket = new DatagramSocket()) {
socket.connect(InetAddress.getByName("8.8.8.8"), 10002);
System.out.println(socket.getLocalAddress().getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
Сервер не получает эти данные, однако этот метод поможет определить предпочтительный локальный IP-адрес.
Мы в MAX
👉@BookJava
1👍2
Хотите собрать свой мини-Google? 🚀
🗓 22 октября, 20:00 приглашаем на открытый урок OTUS «Мини-поисковик своими руками». На этом вебинаре вы создадите поисковик с нуля — без готовых библиотек и магии. Только алгоритмы и код.
Разберём, как:
• объединить КМП и префиксное дерево;
• реализовать автодополнение и подсчёт вхождений;
• оптимизировать поиск под большие тексты;
• превратить всё это в маленький, но работающий офлайн-поисковик.
После вебинара вы сможете самостоятельно:
— строить индекс слов и быстро искать по нему;
— собирать статистику запросов;
— понять, как внутри устроены поисковики.
Открытый урок проходит в преддверие старта курса «Алгоритмы и структуры данных». Все участники получат скидку на обучение.
Присоединяйтесь 22 октября в 20:00:
https://vk.cc/cQoBkb
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🗓 22 октября, 20:00 приглашаем на открытый урок OTUS «Мини-поисковик своими руками». На этом вебинаре вы создадите поисковик с нуля — без готовых библиотек и магии. Только алгоритмы и код.
Разберём, как:
• объединить КМП и префиксное дерево;
• реализовать автодополнение и подсчёт вхождений;
• оптимизировать поиск под большие тексты;
• превратить всё это в маленький, но работающий офлайн-поисковик.
После вебинара вы сможете самостоятельно:
— строить индекс слов и быстро искать по нему;
— собирать статистику запросов;
— понять, как внутри устроены поисковики.
Открытый урок проходит в преддверие старта курса «Алгоритмы и структуры данных». Все участники получат скидку на обучение.
Присоединяйтесь 22 октября в 20:00:
https://vk.cc/cQoBkb
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Media is too big
VIEW IN TELEGRAM
Java для ИИ
Многие существующие и будущие возможности Java способны удовлетворить потребности в области искусственного интеллекта. Среди уже доступных функций — API внешних функций и памяти (Foreign Function and Memory API), а также Vector API. Среди будущих — те, что предлагаются в рамках проектов Valhalla и Babylon. В этой презентации будут рассмотрены эти возможности и то, как они могут использоваться Java-библиотеками и приложениями для создания конкурентоспособных ИИ-решений.
https://openjdk.org/projects/babylon/
https://github.com/openjdk/babylon
https://github.com/openjdk/babylon/tree/code-reflection/hat
https://inside.java/tag/babylon
источник
Мы в MAX
👉@BookJava
Многие существующие и будущие возможности Java способны удовлетворить потребности в области искусственного интеллекта. Среди уже доступных функций — API внешних функций и памяти (Foreign Function and Memory API), а также Vector API. Среди будущих — те, что предлагаются в рамках проектов Valhalla и Babylon. В этой презентации будут рассмотрены эти возможности и то, как они могут использоваться Java-библиотеками и приложениями для создания конкурентоспособных ИИ-решений.
https://openjdk.org/projects/babylon/
https://github.com/openjdk/babylon
https://github.com/openjdk/babylon/tree/code-reflection/hat
https://inside.java/tag/babylon
источник
Мы в MAX
👉@BookJava
👍2
Five Ways to Speed up Your Maven Builds
Как ускорить ваши Maven-сборки? «Поставить Gradle», — скажет кто-то. Ребята из Gradle считают иначе и даже подготовили статью на эту тему. По их мнению, в случае проблем со скоростью ваших сборок стоит присмотреться к профилям: возможно, некоторые плагины сильно замедляют сборку. С помощью профилей можно отключить часть плагинов для локальной или CI-сборки в зависимости от того, что вам нужно ускорить.
https://gradle.com/blog/five-ways-to-speed-up-your-apache-maven-builds/
Мы в MAX
👉@BookJava
Как ускорить ваши Maven-сборки? «Поставить Gradle», — скажет кто-то. Ребята из Gradle считают иначе и даже подготовили статью на эту тему. По их мнению, в случае проблем со скоростью ваших сборок стоит присмотреться к профилям: возможно, некоторые плагины сильно замедляют сборку. С помощью профилей можно отключить часть плагинов для локальной или CI-сборки в зависимости от того, что вам нужно ускорить.
https://gradle.com/blog/five-ways-to-speed-up-your-apache-maven-builds/
Мы в MAX
👉@BookJava