uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

Java | Фишки и трюки

Java | Фишки и трюки

Відкрити в Telegram

Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg

Показати більше
6 687
Підписники
Немає даних24 години
-187 днів
-6530 днів
Архів дописів
Параметр fetch в аннотациях @ManyToOne, @ManyToMany, @OneToOne, @OneToMany определяет как будет загружаться связанная сущност
Параметр fetch в аннотациях @ManyToOne, @ManyToMany, @OneToOne, @OneToMany определяет как будет загружаться связанная сущность: вместе с загрузкой родительской сущности или в момент обращения к аннотированному полю. Этот параметр может принимать два значения: EAGER: при загрузке родительской сущности будет загружена и дочерняя сущность. Это один SQL-запрос с выбором родительской сущности к которой присоединяется (LEFT JOIN) дочерняя. LAZY: при загрузке родительской сущности, дочерняя сущность загружена не будет. Вместо нее будет создан proxy-объект. С помощью этого proxy-объекта Hibernate будет отслеживать обращение к этой дочерней сущности и при первом обращении загрузит ее в память. Какой же использовать? Если сущности не большие и связей не много, а проект не сильно нагруженный, то можно использовать EAGER, иначе нагрузка на БД может быть большой и в результате приложение может стать задумчивым. Но LAZY не панацея, например мы можем выбрать список сущностей и что то с ними делать в цикле обращаясь к полю LAZY, в результате мы получим дополнительный запрос на каждый элемент списка, что так же увеличит нагрузку на БД. В данном случае нужно выбрать это поле как EAGER. Получается что у нас могут быть разные варианты использования выбранной сущности. Как же быть? Первое что приходит в голову это сделать набор сущностей которые смотрят на одну и ту же таблицу, но в которых параметр fetch задан по разному, в зависимости от использования сущности. Но такой способ выглядит криво: дублирование кода, проблемы с передачей сущности в методы (классы сущностей все разные). В следующих постах поговорим о том как этого избежать. Не переключайте канал.

🔥 Прожарка резюме Java-разработчиков Откликаешься, а в ответ тишина? Или зовут, но предлагают меньше, чем рассчитываешь? Воз
🔥 Прожарка резюме Java-разработчиков Откликаешься, а в ответ тишина? Или зовут, но предлагают меньше, чем рассчитываешь? Возможно, дело не в навыках, а в резюме. 27 октября рекрутер из Skyeng и Java-разработчик из Wildberries разберут резюме участников в прямом эфире! Что разберём:
✦ почему рекрутер закрывает резюме, не дочитав до конца; ✦ как показать свой вклад и результаты, а не просто перечислить технологии; ✦ какие формулировки могут занизить твой грейд.
🗓 27 октября в 19:00 МСК Участие бесплатное 👥 Спикеры: — Анастасия Дегтярь, Senior TA в Skyeng, 6+ лет в найме; — Виктор Анохин, Java/Kotlin-разработчик в Wildberries, ex-Билайн. Эфир проводит ШОРТКАТ – менторская программа для разработчиков, которые хотят сменить работу или вырасти в грейде и зарплате. Переходи в бота, чтобы зарегистрироваться на эфир: @shortcut_sh_bot Реклама. О рекламодателе.

Проблема N+1 (N+1 Issue) в JPA (Java Persistence API) возникает, когда при получении списка сущностей с их связанными сущност
Проблема N+1 (N+1 Issue) в JPA (Java Persistence API) возникает, когда при получении списка сущностей с их связанными сущностями (например, при использовании отношения OneToMany или ManyToOne), для каждой основной сущности выполняется дополнительный запрос для загрузки связанной сущности. Это приводит к выполнению N+1 запросов к базе данных, где N - количество основных сущностей. В нашем примере, даже если авторы были извлечены одним запросом, при обращении к каждому списку книг (author.getBooks()) будет выполнен дополнительный запрос для каждого автора, что может привести к большому количеству запросов и снижению производительности. Использование управления загрузкой, такого как JOIN FETCH или использование JPA Entity Graphs, позволяет предотвратить проблему N+1 и повысить производительность при работе с базой данных через JPA.

Backend под нагрузкой: архитектура, базы и System Design Таймаут сработал. А операция на сервере точно остановилась? В канале Алексея Рыбака вы найдёте разборы инженерных нюансов, которые влияют на надёжность системы: от таймаутов и идемпотентности до архитектуры данных. Почему DNS может увеличить задержку? Как распределять бюджет времени между микросервисами? Что учитывать при переезде с Greenplum на Lakehouse? Эти темы уже разобраны в канале. А ещё Алексей делится практическим опытом разработки с AI-агентами. Подписывайтесь, чтобы глубже понимать поведение систем и обоснованнее выбирать технические решения. Подписаться #реклама 16+ О рекламодателе

SOLID — принципы объектно‑ориентированного программирования SOLID — это аббревиатура пяти основных принципов проектирования в объектно‑ориентированном программировании — Single responsibility, Open-closed, Liskov substitution, Interface segregation и Dependency inversion. В переводе на русский: принципы единственной ответственности, открытости / закрытости, подстановки Барбары Лисков, разделения интерфейса и инверсии зависимостей. Аббревиатура SOLID была предложена Робертом Мартином, автором нескольких книг, широко известным в сообществе разработчиков. Следование принципам позволяет строить на базе ООП масштабируемые и сопровождаемые программные продукты с понятной бизнес‑логикой. Код, который написан с соблюдением принципов SOLID, проще понимать, поддерживать, расширять или изменять его функциональность. Принцип единственной обязанности / ответственности (single responsibility principle / SRP) обозначает, что каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулирована в класс. Все его сервисы должны быть направлены исключительно на обеспечение этой обязанности. Принцип открытости / закрытости (open-closed principle / OCP) декларирует, что программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения. Это означает, что эти сущности могут менять свое поведение без изменения их исходного кода. Принцип подстановки Барбары Лисков (Liskov substitution principle / LSP) в формулировке Роберта Мартина: «функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа не зная об этом». Принцип разделения интерфейса (interface segregation principle / ISP) в формулировке Роберта Мартина: «клиенты не должны зависеть от методов, которые они не используют». Принцип разделения интерфейсов говорит о том, что слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы клиенты маленьких интерфейсов знали только о методах, которые необходимы им в работе. В итоге, при изменении метода интерфейса не должны меняться клиенты, которые этот метод не используют. Принцип инверсии зависимостей (dependency inversion principle / DIP) — модули верхних уровней не должны зависеть от модулей нижних уровней, а оба типа модулей должны зависеть от абстракций; сами абстракции не должны зависеть от деталей, а вот детали должны зависеть от абстракций.

⌨️ Управление доступом к членам класса Модификаторы уровня доступа определяют, могут ли другие классы использовать определенн
⌨️ Управление доступом к членам класса Модификаторы уровня доступа определяют, могут ли другие классы использовать определенное поле или вызывать определенный метод. Существует 4 уровня доступа: private Указывает, что доступ возможен только в его собственном классе. package-private (нет явного модификатора) Указывает, что доступ только внутри своего собственного пакета. protected Указывает, что доступ возможен только внутри его собственного пакета (как в случае с package-private) и, кроме того, для подкласса его класса в другом пакете. public Указывает, что доступ возможен отовсюду.

Claude снова банит пользователей из РФ Многим начали приходить письма счастья от Anthropic: аккаунт заблокирован, доступ закр
Claude снова банит пользователей из РФ Многим начали приходить письма счастья от Anthropic: аккаунт заблокирован, доступ закрыт. Банят за вход из неподдерживаемого региона и оплату через серые схемы. А в CatCode Claude работает без ограничений. CatСode - это десктопный агент с топовыми нейросетями на борту всего за 1550 рублей в месяц: 😒 Claude Fable 🤖 GPT-6 Astra 😐 Grok 4.6 и многие другие. Твой аккаунт точно не забанят: подписка оформлена у международной компании. Работает без VPN, оплата российской картой или СБП, никаких перекупов. Первые задачи бесплатно, просто зарегистрируйся и пробуй. Оформи пакет нейросетей разом и не бойся банов: catcode.dev

Метод dropWhile был введен в интерфейсе Stream в JDK 9. Этот метод позволяет пропускать элементы в начале потока данных, пока
Метод dropWhile был введен в интерфейсе Stream в JDK 9. Этот метод позволяет пропускать элементы в начале потока данных, пока они удовлетворяют определенному условию, и возвращает новый поток, начиная с первого элемента, который не соответствует условию. В нашем примере метод dropWhile используется для пропуска элементов в потоке до тех пор, пока они меньше 0. После первого элемента, не соответствующего условию, оставшиеся элементы добавляются в новый поток.

Класс Properties В Java класс Properties представляет собой таблицу хэш-значений ключ-значение. Он является частью пакета jav
Класс Properties В Java класс Properties представляет собой таблицу хэш-значений ключ-значение. Он является частью пакета java.util, и обычно используется для работы с конфигурационными файлами, настройками приложений и другими данными в формате ключ-значение. Некоторые методы класса Properties: setProperty(String key, String value) - добавление или изменение значения ключа. getProperty(String key) - получение значения по ключу. load(InputStream in) - загрузка свойств из InputStream. store(OutputStream out, String comments) - сохранение свойств в OutputStream. defaults(Properties defaults) - устанавливает значения по умолчанию, которые будут использоваться при поиске значения для ключа, если оно не найдено в текущих свойствах. Пример файла Properties:
version=1.0 name=TestApp

Что почитать разработчику? Разборы Алексея Рыбака Пишете backend и хотите глубже понимать архитектурные решения? В канале Алексея Рыбака есть что разобрать: • Микросервисы – какой ценой? Почему они могут стать неподъёмным «налогом» для стартапа • Очереди сообщений – что выбрать? Чем отличаются решения и для каких задач подходят • AI – помощь или новая нагрузка? Как меняется работа мейнтейнеров PostgreSQL, когда генерировать отчёты об ошибках становится проще, чем проверять А ещё – System Design Framework, производительность, масштабируемость и блокировки СУБД. В канале выходят и анонсы AI-митапов и обучения разработке с агентами Начните с интересующей темы и подписывайтесь на канал Алексея! Подписаться #реклама 16+ О рекламодателе

Цепочка методов (Method chaining) — это общий синтаксис для нескольких вызовов методов в объектно-ориентированных языках прог
Цепочка методов (Method chaining) — это общий синтаксис для нескольких вызовов методов в объектно-ориентированных языках программирования. Каждый метод возвращает объект, что позволяет объединить вызовы в один оператор без необходимости использования переменных для хранения промежуточных результатов. Пример для String:

text = text
        .trim()
        .replace("?", "")
        .replace(" ", "-")
        .toLowerCase();
Для того чтобы сделать такую штуку в своем классе, нужно что бы каждый метод возвращал из метода ссылку на текущий объект (this).

🤺 Почему ты получаешь отказ после «норм собеса»? Дело не в знаниях — ты просто не знаешь, что реально проверяют на собеседов
🤺 Почему ты получаешь отказ после «норм собеса»? Дело не в знаниях — ты просто не знаешь, что реально проверяют на собеседованиях. Решение — знать, чего от тебя ждёт интервьюер, и уметь правильно донести свою мысль. Для этого ребята из ШОРТКАТ (менторской программы для разработчиков) собрали в один файл ОТВЕТЫ НА 50 СЛОЖНЫХ ВОПРОСОВ с Java-собеседований 🔥 Они проанализировали более 100 мок-интервью и собрали внутри реальные вопросы + ответы сильного кандидата. ⚠️ Забрать можно бесплатно в боте — @shortcut_sh_bot В том же боте ты сможешь зарегаться на эфир с бесплатным тестовым интервью на Java-разработчика! Эфир пройдёт 7 октября в 19:00 МСК. Его проведёт Виктор Анохин — Senior-разработчик из Wildberries, ex-Билайн. Ты сможешь вживую услышать, какие вопросы задают на собесах в топовых компаниях, и лично задать вопрос ментору из бигтеха 🔝 Всё это бесплатно, тебе нужно только нажать на ссылку и забрать все плюшки ↓ @shortcut_sh_bot Реклама. О рекламодателе.

⌨️ Несколько способов для избежания NullPointerException: 👉 Используйте Optional из пакета java.util. 👉 При сравнении константы с переменной пришедшей из вне, нужно вызывать equals() на константе. 👉 А при сравнении двух переменных используйте java.util.Objects#equals. 👉 Используйте библиотеки с null-безопасностью, например, Apache Commons StringUtils. 👉 Вызывайте методы equals() и equalsIgnoreCase() на известных объектах. 👉 Применяйте valueOf() вместо toString(). 👉 Воспользуйтесь аннотациями @NotNull и @Nullable на основе IDE. 👉 При возврате из метода коллекций, не стоит возвращать null, лучше пустую коллекцию (java.util.Collections#emptyList).

⚡️⚡️Строки кода стремятся подешеветь до цены токена. Что остается ценным? Про это — трек «Замысел» 15 октября. Во второй день
+4
⚡️⚡️Строки кода стремятся подешеветь до цены токена. Что остается ценным? Про это — трек «Замысел» 15 октября. Во второй день Joker, посвященный разработке будущего. О том, как человек понимает, почему он называет что-то проблемой, и формулирует свою цель, а не ту, что навязана ему извне. Теперь это общая работа для всех ролей, от разработчика до CEO: шаблонными решениями и готовыми схемами думает модель. В карточках к посту рассказываем, почему так получилось, и показываем доклады из трека: спикеры расскажут, о чем нужно подумать еще до постановки задачи, и чем будет заниматься новый тип инженера — Context Engineer. К дискуссиям после докладов — собираем ваши кейсы. Напишите в комментариях поста, если у вас бывало такое: — агент час работал не над той задачей, потому что задача была сформулирована плохо; — ускорение одного этапа не сдвинуло общий срок; — узким местом оказалась не модель или инфраструктура, а знание, которое никто не записал. Joker 2026 — 14–15 октября, Санкт-Петербург и онлайн. 🌟По промокоду javatipsandtricks персональные билеты дешевле 🔜🔜Исследуйте разработку будущего — на сайте Joker. Реклама. ООО «Джуг Ру Груп». ИНН 7801341446

Метод retainAll() Метод retainAll() интерфейса Collection, удаляет из коллекции все элементы, не содержащиеся в переданной ко
Метод retainAll() Метод retainAll() интерфейса Collection, удаляет из коллекции все элементы, не содержащиеся в переданной коллекции. По сути оставляет в коллекции только пересекающиеся элементы из двух коллекций.

boolean retainAll(Collection<?> c);
Параметры: c – коллекция, содержащая элементы, которые следует сохранить в коллекции. Возврат: true, если коллекция изменилась в результате вызова

Метод putIfAbsent() интерфейса Map. Если указанный ключ еще не связан со значением (или сопоставлен со значением null), он св
Метод putIfAbsent() интерфейса Map. Если указанный ключ еще не связан со значением (или сопоставлен со значением null), он связывает его с заданным значением и возвращает значение null, в противном случае возвращается текущее значение.

default V putIfAbsent(K key, V value) {
    V v = get(key);
    if (v == null) {
        v = put(key, value);
    }

    return v;
}
Параметры: key – ключ, с которым должно быть связано указанное значение. value – значение, которое должно быть связано с указанным ключом. Возврат: предыдущее значение, связанное с указанным ключом, или значение null, если для ключа не было сопоставления. Возврат null может также указывать на то, что мапа ранее ассоциировала с ключом значение null, если реализация поддерживает значения null.

Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Пр
Ищете облачную платформу? Есть Beget ✅ Аптайм 99,98% в дата-центрах Tier III ✅ Техподдержка 24/7 — живые люди, без ботов ✅ Прозрачная оплата без скрытых платежей ✅ Более 200 000 клиентов доверяют Beget Узнать больше

⌨️ Можно ли объявить метод абстрактным и статическим одновременно? Нет. В таком случае компилятор выдаст ошибку: "Illegal combination of modifiers: ‘abstract’ and ‘static’". Модификатор abstract говорит, что метод будет реализован в другом классе, а static наоборот указывает, что этот метод будет доступен по имени класса.

Кто сказал, что начинать надо с малого? Тестировать цифровых двойников или настраивать проход по лицу в метро — неплохо для с
Кто сказал, что начинать надо с малого? Тестировать цифровых двойников или настраивать проход по лицу в метро — неплохо для старта карьеры, правда? А еще это отличный способ обнаружить у себя новую ИТ-суперспособность. Т1 — это бигтех для бизнеса и одна из крупнейших аккредитованных ИТ-компаний России. Здесь молодые специалисты получают реальные задачи: можно работать с большими данными, участвовать в разработке решений для ритейла, создавать инструменты для обучения и общения и многое другое. И все это: ✅ онлайн из любой точки страны; ✅ под руководством наставника; ✅ удобно совмещать с учебой. Для старта карьеры ИТ-холдинг выбрали уже более 4 000 студентов из 300+ вузов. ⚡ Присоединяйся и узнай, какая суперспособность в ИТ твоя. Перейти на сайт #реклама 16+ career.t1.ru О рекламодателе

⌨️ Где и для чего используется модификатор abstract? Класс, помеченный модификатором abstract, называется абстрактным классом. Такие классы могут выступать только предками для других классов. Создавать экземпляры самого абстрактного класса не разрешается. При этом наследниками абстрактного класса могут быть как другие абстрактные классы, так и классы, допускающие создание объектов. Метод, помеченный ключевым словом abstract - абстрактный метод, т.е. метод, который не имеет реализации. Если в классе присутствует хотя бы один абстрактный метод, то весь класс должен быть объявлен абстрактным. Использование абстрактных классов и методов позволяет описать некий шаблон объекта, который должен быть реализован в других классах. В них же самих описывается лишь некое общее для всех потомков поведение.