Java Portal | Программирование
11.8K subscribers
1.6K photos
119 videos
45 files
1.66K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Разница между Java и JavaScript

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣5
Как HashMap устроен внутри

• Вычисляет хеш ключа.
• Определяет индекс корзины во внутреннем массиве.
• Сохраняет запись в узле с хешем, ключом и значением.
• При коллизиях использует связный список, а начиная с Java 8 при определённых условиях преобразует его в красно-чёрное дерево.

Если такой ключ уже существует, put() заменяет его значение.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Java, Spring Boot, React, микросервисы… А чем веб-сервер отличается от сервера приложений?

У кандидата в резюме несколько full-stack проектов и внушительный стек. Но простой вопрос на собеседовании поставил его в тупик.

• Веб-сервер принимает HTTP-запросы, отдаёт статические файлы и может перенаправлять запросы приложению как reverse proxy. Примеры: Nginx, Apache HTTP Server.

• Сервер приложений предоставляет среду для выполнения приложения и его бизнес-логики. В экосистеме Java примеры — WildFly и Payara.

При этом граница не строгая: сервер приложений может сам принимать HTTP-запросы. Например, Spring Boot со встроенным Tomcat способен обслуживать их без отдельного Nginx, хотя Tomcat точнее называть контейнером сервлетов.

Собрать проект из десяти технологий полезно. Понимать, за что отвечает каждая, — не менее важно.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
3 бесплатных ресурса для изучения Java

• Effective Java — конспект — основные идеи книги Джошуа Блоха о том, как писать качественный Java-код.
• Java Design Patterns — паттерны проектирования с объяснениями и примерами реализации на Java.
• Подготовка к собеседованиям — алгоритмы, структуры данных и примеры решений на Java.

Сохраняйте, чтобы вернуться к практике

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Java-совет: делайте строки понятнее с String.format()

Если сообщение состоит из множества фрагментов и переменных, шаблон может быть удобнее цепочки +:

String message = String.format(
"Пользователь %s оформил %d заказов",
name, orderCount
);


✅ Шаблон отделён от значений.
✅ Проще менять структуру сообщения и добавлять поля.
✅ Для локализуемых сообщений с числами и датами пригодится MessageFormat.

Для простых строк конкатенация вполне уместна: выбирайте форматирование ради читаемости, а не скорости.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Описывайте состояния через enum вместо строк

Именованные константы помогают избежать опечаток в статусах и явно задают набор состояний.

✅ Используйте PENDING, APPROVED, REJECTED вместо произвольных строк.
✅ Держите правила допустимых переходов рядом с описанием состояний.
✅ Используйте проверку полноты switch, если язык и выбранная конструкция её поддерживают.

Но enum сам по себе не запрещает неверные переходы — эту логику нужно реализовать отдельно.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Почему большинство объектов в Java «умирают молодыми»?

Приложение может создавать миллионы объектов:

for (int i = 0; i < 1_000_000; i++) {
User user = new User();
}


Многие нужны лишь на время выполнения метода, обработки запроса или промежуточного вычисления. Когда объект становится недостижимым, сборщик мусора может освободить его память.

На этом наблюдении основана слабая поколенческая гипотеза: большинство объектов живут недолго. Поколенческие сборщики мусора используют её так:

• Новые объекты обычно размещаются в молодом поколении.
• Оно очищается чаще: сборщик сохраняет выжившие объекты и освобождает остальную память.
• Достаточно долго живущие объекты переводятся в старое поколение, которое собирается реже.

Так GC может освобождать память короткоживущих объектов, не обрабатывая каждый раз всю кучу.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
💡 Собираете строку в цикле? Используйте StringBuilder вместо +=.

Строки в Java неизменяемы: при последовательной конкатенации приходится создавать новые строки и копировать накопленное содержимое. Чем больше итераций, тем выше затраты.

StringBuilder добавляет данные в изменяемый буфер, расширяя его при необходимости:

StringBuilder builder = new StringBuilder();

for (String item : items) {
builder.append(item);
}

String result = builder.toString();


Для накопления текста в цикле это обычно эффективнее.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Сборщик мусора не защищает Java от утечек памяти.

GC освобождает память объектов, которые больше недостижимы. Но если приложение сохраняет ссылки на ненужные объекты, они продолжают занимать память.

Типичные причины:

• Растущая статическая коллекция.
• Кэш без удаления устаревших записей.
• Неочищенный ThreadLocal в долгоживущем потоке.
• Слушатель, который забыли отписать.

«Объект больше не нужен» ≠ «объект недостижим». Поэтому приложение может расходовать всё больше памяти в куче, даже когда сборщик мусора работает исправно.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Память в Java растёт? Сначала выясните, что удерживает объекты

Рост потребления памяти не всегда означает утечку или проблему со сборщиком мусора. GC может освободить только те объекты, которые больше недостижимы.

Если ненужные объекты остаются в статической Map, безразмерном кэше или коллекции, которую никто не очищает, они продолжают занимать память. Это уже может быть утечкой на уровне приложения.

Увеличение -Xmx даст больше времени, но не устранит причину.
Анализируйте heap dump: какие объекты накапливаются, кто хранит ссылки на них и почему они остаются достижимыми.

Важен не только объём занятой памяти, но и причина, по которой объекты всё ещё живы.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
💡 GC есть, а утечки памяти в Java всё равно возможны

Сборщик мусора освобождает недостижимые объекты. Если ненужный объект всё ещё удерживается сильной ссылкой, он остаётся в памяти.

✅ Статические коллекции, кэши и слушатели могут удерживать объекты дольше необходимого.
✅ Коллекция, которая постоянно растёт без удаления элементов, увеличивает потребление памяти.
✅ Отписывайте слушатели, ограничивайте кэши и удаляйте ненужные ссылки. Слабые ссылки используйте там, где это соответствует логике приложения.

Объект больше не нужен — ещё не значит, что GC может его удалить.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3