Java Developer – Telegram
Java Developer
15.6K subscribers
1.89K photos
144 videos
2 files
2.14K links
Авторский канал действующего разработчика — интересные заметки, новые технологии, библиотеки и фреймворки

Сотрудничество: @bape_ads
Прайс: @bape_media

РКН: https://clck.ru/3GHfTK

Реклама на бирже: https://telega.in/c/java_tg
Download Telegram
👩‍💻 Как должен выглядеть правильный Docker Image для Spring Boot приложения?

В статье показано, как собрать Docker-образ Spring-приложения с готовыми средствами для диагностики и мониторинга.

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

Читать статью

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
Вопрос с собеседования

Какие существуют модели авторизации и в чём их отличия?

Ответ: Авторизация определяет, какие действия и ресурсы разрешены пользователю после аутентификации. Основные модели авторизации различаются тем, как принимается решение о доступе.

Ролевая модель (RBAC) основана на ролях. Пользователю назначаются роли, а каждая роль определяет набор разрешённых действий. Модель проста в реализации и широко используется, но плохо подходит для сложных и динамических правил доступа.

Модель на основе разрешений оперирует конкретными правами, а не ролями. Пользователю напрямую назначаются разрешения на действия или ресурсы. Это более гибкий подход, но он сложнее в управлении при большом количестве пользователей и прав.

Атрибутная модель (ABAC) принимает решение о доступе на основе атрибутов пользователя, ресурса и контекста, например времени, местоположения или типа запроса. Это самая гибкая модель, но и самая сложная в реализации и сопровождении.

Итог: RBAC подходит для простых систем, permission-based — для более точного контроля, ABAC — для сложных бизнес-правил и динамических политик доступа.


tags: #собеседование

📱 Java Developer | 📲 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥2
👩‍💻 Hibernate Best Practices для начинающих

В статье собраны базовые рекомендации по работе с Hibernate, которые помогут сразу выстроить устойчивую архитектуру и не допустить распространённых ошибок.

Автор разбирает, как задавать id, настраивать связи между сущностями, избегать N+1, использовать ленивую загрузку, кэш второго уровня и корректно работать с equals, hashCode и исключениями.

⛓️ Читать статью

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍3🔥1
Вопрос с собеседования

Где хранятся объекты?

Ответ: Все объекты, создаваемые через new, размещаются в куче (heap) — области памяти, управляемой сборщиком мусора. Ссылки на эти объекты могут храниться в стеке, если они являются локальными переменными внутри метода. Таким образом, объект — в куче, ссылка на него — в стеке.

tags: #собеседование

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍144
Вопрос с собеседования

Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?

Ответ: Метод clone() определён в классе Object, потому что он реализует базовый механизм побитового копирования объекта средствами JVM (через native-реализацию). Он объявлен как protected, чтобы не допустить прямого вызова вне класса, если метод не переопределён.

Интерфейс Cloneable при этом — маркерный, без методов. Он служит лишь индикатором того, что объект допускает клонирование. Если объект не реализует Cloneable, а метод clone() всё же вызывается, будет выброшено исключение CloneNotSupportedException. Это позволяет обеспечить контроль над тем, какие классы разрешают копирование, и избежать некорректного поведения при клонировании по умолчанию.


tags: #собеседование

📱 Java Developer | 📲 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3
👩‍💻 Mockito и как им пользоваться

В статье рассказывается, как использовать Mockito для написания модульных тестов в Java без зависимости от реальных сервисов и баз данных.

Автор объясняет, как создавать моки, задавать их поведение и проверять вызовы — с примерами кода и интеграцией с JUnit.

Читать статью

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Вопрос с собеседования

Почему в Java интерфейс может иметь методы с реализацией (default)? Это не противоречит идее интерфейса?

Ответ: Нет, не противоречит. Они нужны, чтобы можно было добавлять новые методы в интерфейс, не ломая старые классы, которые уже его реализуют.

Без default при добавлении нового метода пришлось бы менять весь существующий код. С default-методом интерфейс даёт базовую реализацию метода, которую необязательно переопределять в реализующих классах.


tags: #собеседование

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍4
Вопрос с собеседования

Что делает метод clone()?

Ответ: clone() создаёт копию объекта. Реализация по умолчанию делает поверхностное копирование: примитивы копируются, а ссылки на вложенные объекты остаются теми же. Чтобы clone() работал, класс обязан реализовывать Cloneable, иначе будет ошибка CloneNotSupportedException.

Метод обычно переопределяют, чтобы настроить логику копирования или сделать копию глубже. При этом стандартно вызывают super.clone() и дальше вручную дублируют необходимые поля.

Использование clone() считается не самым удобным способом копирования объектов, поэтому в реальных проектах чаще применяют конструкторы копирования или фабричные методы.


tags: #собеседование

📱 Java Developer | 📲 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
👩‍💻 Перевод Spring Boot на HTTPS без ругани браузера

Данная статья рассчитана на тех, кто хочет сделать так, чтобы их Spring Boot приложение могло работать с HTTPS без предупреждений со стороны браузера о небезопасном подключении.

В этой статье разбирается именно работа со Spring Boot и вшитым в него Apache Tomcat.

Читать статью

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔5👍3
Вопрос с собеседования

Что такое оптимистичная и пессимистичная блокировки в контексте баз данных?

Ответ: Это два подхода к управлению конкурентным доступом к данным.

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

Оптимистичная блокировка исходит из того, что конфликты редки. Данные читаются без блокировки, а перед фиксацией изменений выполняется проверка версии: не изменил ли их кто-то ещё. Если изменил — транзакция откатывается и повторяется. Такой подход даёт лучшую производительность при низкой конкуренции.


tags: #собеседование

📱 Java Developer | 📲 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Вопрос с собеседования

Что будет, если добавлять элементы в TreeSet по возрастанию?

Ответ: TreeSet основан на самобалансирующемся красно-чёрном дереве. Оно автоматически поддерживает баланс, поэтому порядок добавления элементов (по возрастанию, убыванию или случайный) не влияет на производительность операций — они остаются логарифмическими: O(log n) для добавления, поиска и удаления.

tags: #собеседование

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥6
Вопрос с собеседования

Почему String считается безопасным ключом для HashMap?

Ответ: Объекты класса String в Java неизменяемы — это значит, что после создания их значение не может быть изменено. Это важно, потому что ключ в HashMap должен оставаться стабильным: и хеш, и сравнение не должны меняться со временем.

Кроме того, String кэширует результат hashCode(), что делает доступ к элементам быстрее и стабильнее при многократном использовании. Благодаря этим свойствам String — надёжный и предсказуемый ключ для хеш-таблиц.


tags: #собеседование

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
Вопрос с собеседования

Как управлять кешированием в HTTP?

Ответ: Кеширование в HTTP управляется с помощью специальных заголовков, которые определяют, когда и как можно повторно использовать загруженные данные.

▶️ Cache-Control — основной заголовок, задающий правила кеширования: время жизни (max-age), доступность (public, private), запрет кеширования (no-store) и др.

▶️ Last-Modified + If-Modified-Since — позволяют серверу сообщить дату последнего изменения ресурса, а клиенту — запрашивать данные только при обновлении

▶️ ETag + If-None-Match — используют уникальный идентификатор версии ресурса. Если версия не изменилась, сервер отвечает 304 Not Modified

Эти механизмы снижают нагрузку на сеть и ускоряют повторные загрузки.


tags: #собеседование

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍2🤣1
This media is not supported in your browser
VIEW IN TELEGRAM
👍 Самый простой способ поделиться своим localhost

Pinggy позволяет быстро сделать локальный сервер доступным в интернете и просто скинуть ссылку кому угодно.

Ключевые особенности:
▶️ Запускается через одну команду или прямо из браузера

▶️ Мгновенно выдаёт публичный URL, которым можно делиться

▶️ Не требует регистрации и сложной настройки


Удобно, когда нужно протестировать вебхук/API или быстро дать доступ к демо прямо с localhost — пробуем тут.

tags: #полезное

📱 Java Developer | 📲 MAX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥91
👍2
Что выведет код сверху?
Anonymous Quiz
4%
null
28%
Null
29%
NullPointerException
35%
Ошибка
4%
Ничего
2👍1
👩‍💻 Циклические зависимости в Spring: как находить и устранять

Если в вашем проекте внезапно Spring ругается на circular dependency, вы не одиноки — такие ошибки возникают даже в продуманных архитектурах.

В статье разобраны причины появления циклических зависимостей, показано, как их отследить с помощью Bean Navigation, и даны рабочие способы решения проблемы.

Читать статью

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Вопрос с собеседования

Что такое FutureTask?

Ответ:
FutureTask представляет собой отменяемое асинхронное вычисление и реализует интерфейсы Runnable и Future. Он позволяет запускать задачу, проверять её состояние, отменять выполнение и получать результат по завершении. Если результат ещё не готов, метод получения блокируется до окончания вычисления. FutureTask может оборачивать как Callable, так и Runnable, и благодаря реализации Runnable может передаваться в Executor для выполнения.

tags: #собеседование

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
👩‍💻 JDBC: как Java научилась дружить с базами данных?

В статье объясняется, как работает JDBC — стандартный способ подключения Java-приложений к базам данных.

Разбираются типы драйверов, методы выполнения запросов и управление транзакциями, что поможет понять, как Java взаимодействует с различными СУБД.

Читать статью

tags: #статья

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Вопрос с собеседования

Как устроен Message в Kafka?

Ответ:
Сообщение в Kafka — это единица данных, которую продюсер отправляет в топик. Каждое сообщение состоит из следующих компонентов:

Ключ (key) — используется для распределения сообщений по партициям. Сообщения с одинаковым ключом попадают в одну партицию.

Значение (value) — основное содержимое сообщения, например строка, JSON, байты и т.п.

Метаданные — включают смещение (offset), временную метку, имя топика и номер партиции.

Все сообщения в партиции упорядочены и неизменяемы. Kafka хранит их как commit log и позволяет читать данные повторно, начиная с любого смещения.


tags: #собеседование

📱 Java Developer | Чат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82👀1