Java | Фишки и трюки
Ir al canal en Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg
Mostrar más6 685
Suscriptores
-624 horas
-227 días
-6730 días
Cargando datos
Canales Similares
Nube de Etiquetas
Menciones Entrantes y Salientes
---
---
---
---
---
---
Atraer Suscriptores
octubre '26oct '26
octubre '26
+24
en 0 canales
septiembre '26
+27
en 0 canales
Get PRO
agosto '26
+51
en 9 canales
Get PRO
julio '26
+38
en 0 canales
Get PRO
junio '26
+98
en 0 canales
Get PRO
mayo '26
+128
en 10 canales
Get PRO
abril '26
+52
en 1 canales
Get PRO
marzo '26
+51
en 8 canales
Get PRO
febrero '26
+42
en 3 canales
Get PRO
enero '26
+38
en 0 canales
Get PRO
diciembre '25
+75
en 25 canales
Get PRO
noviembre '25
+108
en 11 canales
Get PRO
octubre '25
+50
en 0 canales
Get PRO
septiembre '25
+28
en 6 canales
Get PRO
agosto '25
+187
en 24 canales
Get PRO
julio '25
+156
en 16 canales
Get PRO
junio '25
+169
en 29 canales
Get PRO
mayo '25
+221
en 32 canales
Get PRO
abril '25
+290
en 35 canales
Get PRO
marzo '25
+291
en 32 canales
Get PRO
febrero '25
+1 295
en 114 canales
Get PRO
enero '25
+292
en 14 canales
Get PRO
diciembre '24
+196
en 1 canales
Get PRO
noviembre '24
+302
en 21 canales
Get PRO
octubre '24
+439
en 9 canales
Get PRO
septiembre '24
+226
en 1 canales
Get PRO
agosto '24
+281
en 3 canales
Get PRO
julio '24
+462
en 16 canales
Get PRO
junio '24
+229
en 1 canales
Get PRO
mayo '24
+395
en 9 canales
Get PRO
abril '24
+874
en 9 canales
Get PRO
marzo '24
+408
en 6 canales
Get PRO
febrero '24
+339
en 7 canales
Get PRO
enero '24
+330
en 5 canales
Get PRO
diciembre '23
+595
en 10 canales
Get PRO
noviembre '23
+663
en 12 canales
Get PRO
octubre '23
+656
en 8 canales
Get PRO
septiembre '23
+538
en 0 canales
| Fecha | Crecimiento de Suscriptores | Menciones | Canales | |
| 27 octubre | +1 | |||
| 26 octubre | +1 | |||
| 25 octubre | +1 | |||
| 24 octubre | +3 | |||
| 23 octubre | +2 | |||
| 22 octubre | 0 | |||
| 21 octubre | 0 | |||
| 20 octubre | +1 | |||
| 19 octubre | +1 | |||
| 18 octubre | 0 | |||
| 17 octubre | 0 | |||
| 16 octubre | +1 | |||
| 15 octubre | 0 | |||
| 14 octubre | +3 | |||
| 13 octubre | +1 | |||
| 12 octubre | +3 | |||
| 11 octubre | +1 | |||
| 10 octubre | +1 | |||
| 09 octubre | +2 | |||
| 08 octubre | 0 | |||
| 07 octubre | 0 | |||
| 06 octubre | 0 | |||
| 05 octubre | 0 | |||
| 04 octubre | +1 | |||
| 03 octubre | 0 | |||
| 02 octubre | +1 | |||
| 01 octubre | 0 |
Publicaciones del Canal
Память кучи
В Java память кучи (heap memory) является областью памяти, где хранятся объекты и массивы. Куча управляется сборщиком мусора (garbage collector), который автоматически освобождает память, занятую объектами, которые больше не используются.
Динамическое выделение
Объекты в Java создаются динамически во время выполнения программы. Куча предоставляет пространство для хранения этих объектов, и их размер может изменяться в процессе выполнения программы.
Управление сборкой мусора
Java-программисты не обязаны явно освобождать память после использования объектов. Сборщик мусора автоматически отслеживает объекты, на которые больше нет ссылок, и освобождает память, которую они занимали. Это позволяет избежать утечек памяти.
Поколения кучи
Память кучи в Java обычно делится на три поколения: молодое поколение (young generation), поколение средней жизни (tenured/old generation) и поколение постоянных объектов (permanent generation, до Java 7) или область метаспейса (metaspace, начиная с Java 8).
👉 Молодое поколение содержит новые объекты, которые создаются в программе. Сборка мусора часто выполняется в этом поколении.
👉 Поколение средней жизни содержит объекты, которые пережили несколько циклов сборки мусора в молодом поколении.
👉 Поколение постоянных объектов (или область метаспейса) содержит метаданные классов и постоянные строки. В Java 8 и более поздних версиях используется метаспейс вместо постоянного поколения.
Настройка кучи
Размеры и параметры работы сборщика мусора и памяти кучи можно настраивать с использованием опций командной строки при запуске Java-приложения. Например, можно указать максимальный и начальный размеры кучи, выбрать алгоритм сборки мусора и другие параметры.
Производительность и оптимизации
Память кучи и сборка мусора в Java подвергаются постоянным оптимизациям и улучшениям в новых версиях JDK. Производительность приложений может зависеть от эффективности работы сборщика мусора и правильного управления памятью.
| 2 | 🧠 Прокачай мозг с NonoQuest! 🧩
Хочешь не просто убивать время, а тренировать мышление? Попробуй NonoQuest — увлекательные японские кроссворды (нонограммы), где логика превращается в яркие пиксельные картинки! 🎨
✨ Тренируй логику и внимание
🔍 Развивай концентрацию
💡 Поддерживай умственную активность
Регулярные интеллектуальные занятия полезны для когнитивного здоровья.
🎮 NonoQuest — устрой мозгу полезную разминку!
📱 Игра для Android. Попробуй разгадать свою первую головоломку! | 357 |
| 3 | Параметр fetch в аннотациях @ManyToOne, @ManyToMany, @OneToOne, @OneToMany определяет как будет загружаться связанная сущность: вместе с загрузкой родительской сущности или в момент обращения к аннотированному полю.
Этот параметр может принимать два значения:
EAGER: при загрузке родительской сущности будет загружена и дочерняя сущность. Это один SQL-запрос с выбором родительской сущности к которой присоединяется (LEFT JOIN) дочерняя.
LAZY: при загрузке родительской сущности, дочерняя сущность загружена не будет. Вместо нее будет создан proxy-объект. С помощью этого proxy-объекта Hibernate будет отслеживать обращение к этой дочерней сущности и при первом обращении загрузит ее в память.
Какой же использовать? Если сущности не большие и связей не много, а проект не сильно нагруженный, то можно использовать EAGER, иначе нагрузка на БД может быть большой и в результате приложение может стать задумчивым.
Но LAZY не панацея, например мы можем выбрать список сущностей и что то с ними делать в цикле обращаясь к полю LAZY, в результате мы получим дополнительный запрос на каждый элемент списка, что так же увеличит нагрузку на БД. В данном случае нужно выбрать это поле как EAGER.
Получается что у нас могут быть разные варианты использования выбранной сущности. Как же быть? Первое что приходит в голову это сделать набор сущностей которые смотрят на одну и ту же таблицу, но в которых параметр fetch задан по разному, в зависимости от использования сущности. Но такой способ выглядит криво: дублирование кода, проблемы с передачей сущности в методы (классы сущностей все разные). В следующих постах поговорим о том как этого избежать. Не переключайте канал. | 467 |
| 4 | 🔥 Прожарка резюме Java-разработчиков
Откликаешься, а в ответ тишина? Или зовут, но предлагают меньше, чем рассчитываешь? Возможно, дело не в навыках, а в резюме.
27 октября рекрутер из Skyeng и Java-разработчик из Wildberries разберут резюме участников в прямом эфире!
Что разберём:
✦ почему рекрутер закрывает резюме, не дочитав до конца;
✦ как показать свой вклад и результаты, а не просто перечислить технологии;
✦ какие формулировки могут занизить твой грейд.
🗓 27 октября в 19:00 МСК
Участие бесплатное
👥 Спикеры:
— Анастасия Дегтярь, Senior TA в Skyeng, 6+ лет в найме;
— Виктор Анохин, Java/Kotlin-разработчик в Wildberries, ex-Билайн.
Эфир проводит ШОРТКАТ – менторская программа для разработчиков, которые хотят сменить работу или вырасти в грейде и зарплате.
Переходи в бота, чтобы зарегистрироваться на эфир: @shortcut_sh_bot
Реклама.
О рекламодателе. | 469 |
| 5 | Проблема N+1 (N+1 Issue) в JPA (Java Persistence API) возникает, когда при получении списка сущностей с их связанными сущностями (например, при использовании отношения OneToMany или ManyToOne), для каждой основной сущности выполняется дополнительный запрос для загрузки связанной сущности. Это приводит к выполнению N+1 запросов к базе данных, где N - количество основных сущностей.
В нашем примере, даже если авторы были извлечены одним запросом, при обращении к каждому списку книг (author.getBooks()) будет выполнен дополнительный запрос для каждого автора, что может привести к большому количеству запросов и снижению производительности.
Использование управления загрузкой, такого как JOIN FETCH или использование JPA Entity Graphs, позволяет предотвратить проблему N+1 и повысить производительность при работе с базой данных через JPA. | 794 |
| 6 | Backend под нагрузкой: архитектура, базы и System Design
Таймаут сработал. А операция на сервере точно остановилась?
В канале Алексея Рыбака вы найдёте разборы инженерных нюансов, которые влияют на надёжность системы: от таймаутов и идемпотентности до архитектуры данных.
Почему DNS может увеличить задержку? Как распределять бюджет времени между микросервисами? Что учитывать при переезде с Greenplum на Lakehouse? Эти темы уже разобраны в канале.
А ещё Алексей делится практическим опытом разработки с AI-агентами.
Подписывайтесь, чтобы глубже понимать поведение систем и обоснованнее выбирать технические решения.
Подписаться
#реклама 16+
О рекламодателе | 520 |
| 7 | 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) — модули верхних уровней не должны зависеть от модулей нижних уровней, а оба типа модулей должны зависеть от абстракций; сами абстракции не должны зависеть от деталей, а вот детали должны зависеть от абстракций. | 794 |
| 8 | ⌨️ Управление доступом к членам класса
Модификаторы уровня доступа определяют, могут ли другие классы использовать определенное поле или вызывать определенный метод.
Существует 4 уровня доступа:
private
Указывает, что доступ возможен только в его собственном классе.
package-private (нет явного модификатора)
Указывает, что доступ только внутри своего собственного пакета.
protected
Указывает, что доступ возможен только внутри его собственного пакета (как в случае с package-private) и, кроме того, для подкласса его класса в другом пакете.
public
Указывает, что доступ возможен отовсюду. | 1 007 |
| 9 | Claude снова банит пользователей из РФ
Многим начали приходить письма счастья от Anthropic: аккаунт заблокирован, доступ закрыт. Банят за вход из неподдерживаемого региона и оплату через серые схемы.
А в CatCode Claude работает без ограничений.
CatСode - это десктопный агент с топовыми нейросетями на борту всего за 1550 рублей в месяц:
😒 Claude Fable
🤖 GPT-6 Astra
😐 Grok 4.6
и многие другие.
Твой аккаунт точно не забанят: подписка оформлена у международной компании. Работает без VPN, оплата российской картой или СБП, никаких перекупов. Первые задачи бесплатно, просто зарегистрируйся и пробуй.
Оформи пакет нейросетей разом и не бойся банов: catcode.dev | 568 |
| 10 | Метод dropWhile был введен в интерфейсе Stream в JDK 9. Этот метод позволяет пропускать элементы в начале потока данных, пока они удовлетворяют определенному условию, и возвращает новый поток, начиная с первого элемента, который не соответствует условию.
В нашем примере метод dropWhile используется для пропуска элементов в потоке до тех пор, пока они меньше 0. После первого элемента, не соответствующего условию, оставшиеся элементы добавляются в новый поток. | 1 154 |
| 11 | Класс 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 | 1 390 |
| 12 | Что почитать разработчику? Разборы Алексея Рыбака
Пишете backend и хотите глубже понимать архитектурные решения? В канале Алексея Рыбака есть что разобрать:
• Микросервисы – какой ценой? Почему они могут стать неподъёмным «налогом» для стартапа
• Очереди сообщений – что выбрать? Чем отличаются решения и для каких задач подходят
• AI – помощь или новая нагрузка? Как меняется работа мейнтейнеров PostgreSQL, когда генерировать отчёты об ошибках становится проще, чем проверять
А ещё – System Design Framework, производительность, масштабируемость и блокировки СУБД. В канале выходят и анонсы AI-митапов и обучения разработке с агентами
Начните с интересующей темы и подписывайтесь на канал Алексея!
Подписаться
#реклама 16+
О рекламодателе | 453 |
| 13 | Цепочка методов (Method chaining) — это общий синтаксис для нескольких вызовов методов в объектно-ориентированных языках программирования. Каждый метод возвращает объект, что позволяет объединить вызовы в один оператор без необходимости использования переменных для хранения промежуточных результатов.
Пример для String:
text = text
.trim()
.replace("?", "")
.replace(" ", "-")
.toLowerCase();
Для того чтобы сделать такую штуку в своем классе, нужно что бы каждый метод возвращал из метода ссылку на текущий объект (this). | 1 089 |
| 14 | 🤺 Почему ты получаешь отказ после «норм собеса»?
Дело не в знаниях — ты просто не знаешь, что реально проверяют на собеседованиях.
Решение — знать, чего от тебя ждёт интервьюер, и уметь правильно донести свою мысль.
Для этого ребята из ШОРТКАТ (менторской программы для разработчиков) собрали в один файл ОТВЕТЫ НА 50 СЛОЖНЫХ ВОПРОСОВ с Java-собеседований 🔥
Они проанализировали более 100 мок-интервью и собрали внутри реальные вопросы + ответы сильного кандидата.
⚠️ Забрать можно бесплатно в боте — @shortcut_sh_bot
В том же боте ты сможешь зарегаться на эфир с бесплатным тестовым интервью на Java-разработчика!
Эфир пройдёт 7 октября в 19:00 МСК.
Его проведёт Виктор Анохин — Senior-разработчик из Wildberries, ex-Билайн.
Ты сможешь вживую услышать, какие вопросы задают на собесах в топовых компаниях, и лично задать вопрос ментору из бигтеха 🔝
Всё это бесплатно, тебе нужно только нажать на ссылку и забрать все плюшки ↓
@shortcut_sh_bot
Реклама.
О рекламодателе. | 486 |
| 15 | ⌨️ Несколько способов для избежания 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). | 1 075 |
| 16 | ⚡️⚡️Строки кода стремятся подешеветь до цены токена. Что остается ценным?
Про это — трек «Замысел» 15 октября. Во второй день Joker, посвященный разработке будущего. О том, как человек понимает, почему он называет что-то проблемой, и формулирует свою цель, а не ту, что навязана ему извне. Теперь это общая работа для всех ролей, от разработчика до CEO: шаблонными решениями и готовыми схемами думает модель.
В карточках к посту рассказываем, почему так получилось, и показываем доклады из трека: спикеры расскажут, о чем нужно подумать еще до постановки задачи, и чем будет заниматься новый тип инженера — Context Engineer.
К дискуссиям после докладов — собираем ваши кейсы. Напишите в комментариях поста, если у вас бывало такое:
— агент час работал не над той задачей, потому что задача была сформулирована плохо;
— ускорение одного этапа не сдвинуло общий срок;
— узким местом оказалась не модель или инфраструктура, а знание, которое никто не записал.
Joker 2026 — 14–15 октября, Санкт-Петербург и онлайн.
🌟По промокоду javatipsandtricks персональные билеты дешевле
🔜🔜Исследуйте разработку будущего — на сайте Joker.
Реклама. ООО «Джуг Ру Груп». ИНН 7801341446 | 853 |
| 17 | Метод retainAll()
Метод retainAll() интерфейса Collection, удаляет из коллекции все элементы, не содержащиеся в переданной коллекции. По сути оставляет в коллекции только пересекающиеся элементы из двух коллекций.
boolean retainAll(Collection<?> c);
Параметры:
c – коллекция, содержащая элементы, которые следует сохранить в коллекции.
Возврат:
true, если коллекция изменилась в результате вызова | 936 |
| 18 | Метод 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. | 1 117 |
| 19 | Ищете облачную платформу? Есть Beget
✅ Аптайм 99,98% в дата-центрах Tier III
✅ Техподдержка 24/7 — живые люди, без ботов
✅ Прозрачная оплата без скрытых платежей
✅ Более 200 000 клиентов доверяют Beget
Узнать больше | 415 |
| 20 | ⌨️ Можно ли объявить метод абстрактным и статическим одновременно?
Нет. В таком случае компилятор выдаст ошибку: "Illegal combination of modifiers: ‘abstract’ and ‘static’".
Модификатор abstract говорит, что метод будет реализован в другом классе, а static наоборот указывает, что этот метод будет доступен по имени класса. | 1 051 |
