ar
Feedback

لا تقع ضحية للمخادعين! تيليمتريو يكتشف ويُميّز هذه القنوات 👉 إذا كنت تريد رؤية العلامة، اشترك

Java Geek

Java Geek

الذهاب إلى القناة على Telegram

Практичные советы, лайфхаки и код для Java-разработчиков. Каждый пост — реальная польза. Учим Java на примерах. По всем вопросам @evgenycarter

إظهار المزيد
2 354
المشتركون
-124 ساعات
-37 أيام
-1530 أيام
أرشيف المشاركات
🔍 Завтра тестовое собеседование с Java-разработчиком 17 декабря(уже завтра!) в 19:00 по мск приходи онлайн на открытое собес
🔍 Завтра тестовое собеседование с Java-разработчиком 17 декабря(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика. Как это будет: 📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Сергею Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot Реклама. О рекламодателе.

🚀 Hibernate: Эффективное обновление с @DynamicUpdate Часто ли вы задумывались, почему Hibernate при обновлении одного поля в сущности генерирует SQL-запрос, который включает все поля? Это может быть неэффективно, особенно для сущностей с десятками колонок. Именно здесь на помощь приходит аннотация @DynamicUpdate! 💡 В чем проблема? (Без @DynamicUpdate) По умолчанию, когда вы вызываете repository.save(entity) для существующей сущности, Hibernate генерирует UPDATE запрос, который устанавливает значения для всех полей, кроме первичного ключа.

// Without @DynamicUpdate
update employee
set
    age=?, // даже если только age изменился
    first_name=?, //... и это тоже
    last_name=?
where
    id=?
Если изменилось только age, остальные поля обновляются на те же значения, что были. ✨ Решение: @DynamicUpdate(true) Если вы добавите @DynamicUpdate к вашей сущности, Hibernate будет генерировать SQL-запрос UPDATE, который включает только те поля, которые были изменены (dirty-checking) с момента загрузки или создания сущности. Смотрим на код:

@Entity
@DynamicUpdate // ✨ Добавляем эту аннотацию!
public class Employee extends AbstractPersistable<Long> {
    @Column
    String firstName;

    @Column
    String lastName;

    @Column
    Integer age;
    // ...
}

// В EmployeeService:
// var entity = employeeRepository.findById(1L).get();
// entity.setAge(22); // Изменили только возраст
// employeeRepository.save(entity);
Сгенерированный SQL:

// With @DynamicUpdate
update employee
set
    age=? // ✅ Обновляется ТОЛЬКО измененное поле
where
    id=?
⚖️ Когда использовать? - Используйте, если у вас большие сущности (много колонок) и вы часто обновляете только небольшую часть полей. Это сэкономит трафик и немного ускорит базу данных. - Имейте в виду, что Hibernate придется динамически строить SQL-запрос при каждом обновлении, что может добавить небольшой оверхед, но обычно выгода от оптимизации SQL его перевешивает. Сделайте ваш код более чистым и эффективным! 🛠️ ❓ А вы используете @DynamicUpdate в своих проектах? Поделитесь в комментариях! 👇 P.S. Не путайте с @DynamicInsert, который делает то же самое для INSERT запросов (включает только не-null поля). 👉 @java_geek

Что такое пул строк? Это набор строк, хранящийся в Heap. ☕ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк; ☕ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени; ☕ Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё; ☕ При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением; ☕ Пул строк является примером паттерна «Приспособленец» (Flyweight). 👉 @java_geek

🔍Тестовое собеседование с ТехЛидом из МТС уже завтра 3 декабря(уже завтра!) в 19:00 по мск приходи онлайн на открытое собесе
🔍Тестовое собеседование с ТехЛидом из МТС уже завтра 3 декабря(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика. Как это будет: 📂 Илья Аров, старший разработчик в МТС, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Илья будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Илье Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot Реклама. О рекламодателе.

Что не так с кодом? Он не скомпилируется. Это вопрос на знание иерархии исключений: FileNotFoundException унаследован от IOEx
Что не так с кодом? Он не скомпилируется. Это вопрос на знание иерархии исключений: FileNotFoundException унаследован от IOException, первый catch будет перехватывать все исключения, а в следующий блок catch управление передано не будет. Поэтому возникнет ошибка: exception FileNotFoundException has already been caught. 👉 @java_geek

О чем говорит ключевое слово throws? Ответ: Модификатор throws прописывается в заголовке метода и указывает на то, что метод потенциально может выбросить исключение с указанным типом. 👉 @java_geek

Блиц-опрос Scala-разработчиков — самые полезные и бесполезные вещи в работе Смотрите подкаст «Криптонит говорит» о Scala! В нём айтишники обсуждают: 🔹Scala, Java и их перспективы; 🔹как успешно пройти собеседование в айти; 🔹что нужно делать, чтобы стать хорошим программистом; 🔹и когда нейросети смогут делать code review на уровне старшего разработчика и многое другое. 📺 VK Видео 📺 YouTube 📺 Rutube 💬 Подкаст в телеграме 🎵 Яндекс.Музыка Смотрите и подписывайтесь на подкаст «Криптонит говорит» — обсуждаем айти, искусственный интеллект, языки программирования и криптографию. Реклама АО НПК «Криптонит» ИНН 9701115253, erid: 2VtzqveAsgd

رسالة فيديو01:00

Что такое «сессия»? Сессия — это сеанс связи между клиентом и сервером, устанавливаемый на определенное время. Сеанс устанавливается непосредственно между клиентом и веб-сервером в момент получения первого запроса к веб-приложению. Каждый клиент устанавливает с сервером свой собственный сеанс, который сохраняется до окончания работы с приложением. 👉 @java_geek

«Мы поняли, что мы как Тринити и Морфеус. Нам нужен был Нео». Как ночной портье за 3 месяца разобрался в инжиниринге данных Смотрите подкаст «Криптонит говорит» о дата-инженерах! В нём эксперты оюсуждают: 🔹достигла ли пика профессия дата-инженера; 🔹какой стек нужно знать дата-инженерам; 🔹какие намечаются тренды отрасли. 📺 YouTube 📺 Rutube 💙 VK видео 💬 Подкаст в телеграме 🎵 Яндекс.Музыка Смотрите и подписывайтесь на подкаст «Криптонит говорит» — обсуждаем айти, искусственный интеллект, языки программирования и криптографию. Реклама. ООО «Агентство интернет-маркетинга "Ви 8"», ОГРН 1102468051333, erid: 2VtzqveAsgd

رسالة فيديو00:51

Что такое Local Variable? Популярный вопрос на собеседовании Java-разработчика. Local variable — это переменная, которая опре
Что такое Local Variable? Популярный вопрос на собеседовании Java-разработчика. Local variable — это переменная, которая определена внутри метода и существует вплоть до того момента, пока выполняется этот метод. Как только выполнение закончится, локальная переменная перестанет существовать. Вот программа, которая использует локальную переменную helloMessage в методе main(). 👉 @java_geek

Зачем нужен HashMap, если есть Hashtable? ☕ Методы класса Hashtable синхронизированы, что приводит к снижению производительности, а HashMap - нет; ☕ HashTable не может содержать элементы null, тогда как HashMap может содержать один ключ null и любое количество значений null; ☕ Iterator у HashMap, в отличие от Enumeration у HashTable, работает по принципу «fail-fast» (выдает исключение при любой несогласованности данных). Hashtable это устаревший класс и его использование не рекомендовано. 👉 @java_geek

🔍 Завтра тестовое собеседование с Java-разработчиком 19 ноября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собесе
🔍 Завтра тестовое собеседование с Java-разработчиком 19 ноября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика. Как это будет: 📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Сергею Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot Реклама. О рекламодателе.

Расскажите о различиях вложенных классов: простых и статических? Простые вложенные классы используются для тесной связи с внешним классом, а статические — когда нужно логически сгруппировать некоторый функционал. Основные различия: - Простой вложенный класс имеет доступ к членам внешнего класса, статический - нет. - Для создания экземпляра простого вложенного класса нужен экземпляр внешнего класса, для статического - нет. - Простой вложенный класс зависит от экземпляра внешнего класса, статический - нет. 👉 @java_geek

Почему метод clone объявлен как protected? Метод clone() по умолчанию объявлен как protected, чтобы ограничить возможность клонирования объектов. Если бы метод был public, то любой код мог бы клонировать объекты класса. А это не всегда желательно по соображениям безопасности и корректности программы. С protected доступом клонирование разрешено только внутри класса и его наследников. Таким образом разработчик класса может сам решить, будет ли класс поддерживать клонирование и как именно оно будет реализовано в методе clone(). Делая клонирование protected по умолчанию, Java принуждает разработчика сознательно разрешить клонирование класса путем переопределения метода clone() как public в самом классе. Это позволяет более гибко контролировать возможности клонирования в каждом конкретном классе. 👉 @java_geek

Что такое каскадность? Как она используется в Hibernate? Каскадность в Hibernate — это функция, которая позволяет автоматически распространять состояние сущности на связанные с ней сущности. Это означает, что когда мы выполняем определенное действие над целевой сущностью, то же самое действие будет применено к связанным с ней сущностям. Например, если у нас есть отношение между сущностями Person и Address, и без сущности Person сущность Address не имеет смысла. Когда мы удаляем сущность Person, наша сущность Address также должна быть удалена. Каскадность — это способ достижения этого. В JPA/Hibernate имеются различные типы каскадности, которые определяют, какие операции должны распространяться на связанные сущности. Например, CascadeType.ALL распространяет все операции от родительской сущности на дочернюю. 👉 @java_geek

5 ноября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Midd
5 ноября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика. Как это будет: 📂 Илья Аров, старший разработчик в МТС, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Илья будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Илье Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot Реклама. О рекламодателе.

Что вернет выражение 1.0/0.0? Приведет ли оно к генерации исключения или ошибке при компиляции? Еще один каверзный вопрос насчет класса Double. Хотя разработчики Java знают о существовании простого типа данных double и класса Double, при выполнении операций с плавающей точкой они не уделяют достаточного внимания Double.INFINITY, NaN, -0.0 и правилам, которым подчиняются связанные с ними арифметические вычисления. Ответ на этот вопрос прост: генерации исключения ArithmeticException не произойдет, будет возвращено значение Double.INFINITY. 👉 @java_geek

Можно ли перегрузить static метод? Перегрузка методов позволяет создать несколько методов с одинаковым именем, но разными списками параметров. Это работает как для обычных, так и для статических методов класса. Например, можно создать статический метод sum, который будет складывать числа. Метод можно перегрузить, создав одну версию для сложения целых чисел (int), а другую — для сложения чисел с плавающей точкой (double). При вызове метода компилятор будет выбирать нужную версию на основе типа аргументов. Это делает класс с перегруженными методами более гибким и удобным для использования. 👉 @java_geek