Открытый канал ID 68536775128494

Java библиотека

Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: https://t.me/NadikaKir или в ЛС сообщества ВК https://vk.com/javatutorial

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial

Каналов в рубрике
1 753
Место этого канала
№ 65
Открыть рубрику →
Открыть в MAX

Публикации за период

По реакциям

Поиск и вся лента — после бесплатной регистрации. Свои даты — по подписке; владелец канала видит их бесплатно. Сортировка по реакциям — по подписке. Зарегистрироваться

Загрузка…

DIP и DI: направление зависимости и способ сборки Dependency Inversion Principle относится к архитектуре: политика приложения зависит от подходящего контракта, а детали реализуют его. Dependency Injection — способ передать зависимость объекту. Например, сервису оформления заказа нужен контракт сохранения заказа. Он может получить его через конструктор и не знать, используется JDBC или внешний API. Сам факт наличия интерфейса не исправляет архитектуру. Если контракт заставляет бизнес-слой оперировать ResultSet или деталями конкретного хранилища, зависимость от инфраструктуры осталась. В Spring constructor injection делает обязательные зависимости видимыми. Но решение о границах модулей всё равно принимает разработчик. #Java

Java Библиотека | Мы в Телеграм
Просмотры: 89
Перейти в пост Открыть в MAX Сообщить о неточности
Не прячьте обязательные действия в peek или map Stream может пропустить промежуточные операции, если результат терминальной операции можно получить без обработки элементов. Пример — count() для источника с известным размером:
long size = List.of("A", "B").stream()
.peek(System.out::println)
.count();
Печать здесь не гарантирована. Замена peek() на map(), возвращающий тот же элемент, не создаёт такой гарантии. Если действие обязательно для каждого элемента, вынесите его в обычный цикл или выберите подходящую терминальную операцию. Для последовательного обхода с понятным управлением ошибками цикл часто проще. peek удобно использовать для диагностики потока, но бизнес-операции не должны зависеть от его побочных эффектов. #Java

Java Библиотека | Мы в Телеграм
Просмотры: 147
Перейти в пост Открыть в MAX Сообщить о неточности
Logpoint: диагностика без println в исходнике В IntelliJ IDEA можно настроить breakpoint так, чтобы он выводил выражение и не приостанавливал выполнение. Это logpoint. Он полезен, когда нужно проследить идентификатор запроса или значение переменной без временной правки кода и повторной сборки. Нужна отладочная сессия с доступом к процессу. Выражение вычисляется в целевой JVM. Тяжёлая операция в часто вызываемом методе может повлиять на приложение; вызов метода из выражения также способен изменить состояние. Начинайте с простых значений и узкого условия срабатывания. Logpoint не даёт доступ к произвольному сервису без подключения debugger. #Java

Java Библиотека | Мы в Телеграм
Просмотры: 155
Перейти в пост Открыть в MAX Сообщить о неточности
String.split принимает regex, а не разделитель Точка в регулярном выражении означает любой символ. Для буквальной точки нужны два уровня экранирования:
String[] parts = "app.log".split("\\.");
// [app, log]
Если разделитель приходит из переменной, используйте Pattern.quote:
String[] parts = line.split(Pattern.quote(separator), -1);
Отрицательный limit сохраняет пустые поля справа: у "a,b," их три, последнее — пустая строка. Без limit завершающие пустые элементы удаляются. Такой split подходит для простого текстового формата. Полноценный CSV с кавычками и запятыми внутри значений требует парсера CSV. #Java

Java Библиотека | Мы в Телеграм
Просмотры: 185
Перейти в пост Открыть в MAX Сообщить о неточности
retainAll изменяет исходное множество Метод оставляет в коллекции элементы, которые есть в переданной коллекции. Чтобы сохранить исходное множество, работайте с копией:
var left = Set.of(1, 2, 3, 4);
var right = Set.of(3, 4, 5);
var intersection = new HashSet<>(left);
intersection.retainAll(right);
System.out.println(intersection); // элементы 3 и 4
Порядок вывода HashSet не гарантирован. Вызов retainAll на неизменяемом множестве вроде Set.of(...) завершится UnsupportedOperationException. Возвращаемый boolean сообщает, изменилась ли коллекция, а не является ли пересечение непустым. #Java

Java Библиотека | Мы в Телеграм
Просмотры: 211
Перейти в пост Открыть в MAX Сообщить о неточности
NullPointerException: явно задайте контракт Null-безопасность начинается с договора о данных. Если аргумент обязателен, проверяйте его на границе:
Objects.requireNonNull(user, "user");
Objects.requireNonNull(user.getName(), "user.name");
Для сравнения двух nullable-значений используйте Objects.equals(a, b). Вызов "ready".equals(value) тоже безопасен для nullable value. String.valueOf(obj) для null-ссылки типа Object вернёт строку "null". Это удобно при диагностике, но не исправляет отсутствующие бизнес-данные. Optional может выразить отсутствие результата. @Nullable и @NotNull полезны анализаторам и фреймворкам, однако сами по себе не заставляют JVM проверять каждый вызов. Если метод возвращает коллекцию, обычно проще вернуть пустую коллекцию. #Java

Java Библиотека | Мы в Телеграм
Просмотры: 233
Перейти в пост Открыть в MAX Сообщить о неточности
LLM: инструкции и контекст решают разные задачи Промпт задаёт задачу, ограничения и формат ответа. Контекст предоставляет данные, на которые модель может опираться: документы, код, результаты поиска и инструменты. Для помощника по Java полезно явно передать версию JDK, сигнатуру метода, сообщение ошибки и небольшой пример входа. Просьба «исправь код» без этих данных вынуждает модель угадывать. Если результат нужен программе, задайте схему ответа и проверяйте её на своей стороне. Валидный JSON подтверждает формат, но не истинность содержимого. Документы из поиска и содержимое репозитория следует обрабатывать как данные. Инструкции внутри них не должны менять права инструментов или правила доступа. #Java

Java Библиотека | Мы в Телеграм
Просмотры: 249
Перейти в пост Открыть в MAX Сообщить о неточности
Testcontainers: настоящая БД в интеграционных проверках Мок репозитория не проверяет SQL и особенности конкретной СУБД. Testcontainers поднимает временные контейнеры с PostgreSQL, MySQL и другими зависимостями рядом с проверяемым приложением. Это полезно для миграций, ограничений таблиц, транзакций и запросов, поведение которых зависит от диалекта БД. Для запуска нужен доступ к совместимому контейнерному окружению. Практический порядок: поднимите нужную версию БД, примените миграции и передайте приложению адрес и учётные данные контейнера. Окружение можно создавать на проверку или на набор — это влияет на изоляцию и время запуска. Официальный репозиторий. #Java

Java Библиотека | Мы в Телеграм
Просмотры: 259
Перейти в пост Открыть в MAX Сообщить о неточности
План изучения Java: от языка к сервису План удобнее строить вокруг работающих проектов, а срок подбирать под свою нагрузку. «6–12 месяцев» — ориентир, а не обещание трудоустройства. 1. Язык: типы, ООП, исключения, коллекции, generics. Напишите консольное приложение с сохранением данных. 2. Стандартная библиотека: файлы, даты, Stream API и основы многопоточности. 3. Хранение данных: SQL, JDBC, затем JPA и транзакции. 4. Веб: Spring Boot, REST API, валидация и обработка ошибок. 5. Качество: JUnit, интеграционные проверки, Git, Maven или Gradle. 6. Эксплуатация: Docker, конфигурация, логи, метрики и базовые правила безопасности. ИИ полезен для объяснения ошибки и сравнения решений. Каждый сгенерированный фрагмент нужно уметь объяснить: какие данные он принимает, где может упасть и как проверить результат. #Java

Java Библиотека | Мы в Телеграм
Просмотры: 266
Перейти в пост Открыть в MAX Сообщить о неточности
Log4j 2: куда отправлять логи Appender отвечает за место назначения: консоль, файл, сокет или другое хранилище. Layout задаёт формат записи. Минимальная консольная конфигурация:
<Configuration>
<Appenders>
<Console name="out" target="SYSTEM_OUT">
<PatternLayout pattern="%level %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="out"/>
</Root>
</Loggers>
</Configuration>
Для ротации файлов в Log4j 2 используйте RollingFile с политикой ротации. Примеры с DailyRollingFileAppender из Log4j 1 нельзя переносить в конфигурацию Log4j 2 без изменений. #Java

Java Библиотека | Мы в Телеграм
Просмотры: 283
Перейти в пост Открыть в MAX Сообщить о неточности
Вся лента — после бесплатной регистрации
ВКонтакте Телеграм Одноклассники
Избранное в datool.ru

Следите за каналом в личном кабинете

Зарегистрируйтесь в datool.ru, чтобы добавить канал «Java библиотека» в избранное и отслеживать его показатели.

Зарегистрироваться
Для владельцев каналов

Подтвердите свой канал

Войдите или зарегистрируйтесь в datool.ru, затем добавьте нашего бота в канал по инструкции в личном кабинете. После проверки владения замок исчезнет и вам станет доступно управление каналом.

Войти или зарегистрироваться

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти