Два backend-разработчика решали одну и ту же задачу.
Вариант A:
Вариант B:
Какой запрос отправится в прод?
Многие выбирают B, потому что он выглядит надёжнее. Пользователь может ввести
Но есть нюанс.
В большинстве СУБД вызов
На 100 строках разницы не видно.
На 10 миллионах пользователей разница становится очень заметной.
Поэтому в проде обычно используют один из вариантов:
• хранить email в нормализованном виде (например, всегда lowercase);
• использовать case-insensitive collation;
• создать функциональный индекс на
Самая опасная часть запроса часто выглядит как самая безобидная.
👉 Java Portal
Вариант A:
SELECT *
FROM users
WHERE email = ?
Вариант B:
SELECT *
FROM users
WHERE LOWER(email) = LOWER(?)
Какой запрос отправится в прод?
Многие выбирают B, потому что он выглядит надёжнее. Пользователь может ввести
John@Example.com, а в базе лежит john@example.com.Но есть нюанс.
В большинстве СУБД вызов
LOWER() над колонкой ломает использование обычного индекса. Вместо быстрого Index Seek база часто уходит в полный скан таблицы.На 100 строках разницы не видно.
На 10 миллионах пользователей разница становится очень заметной.
Поэтому в проде обычно используют один из вариантов:
• хранить email в нормализованном виде (например, всегда lowercase);
• использовать case-insensitive collation;
• создать функциональный индекс на
LOWER(email).Самая опасная часть запроса часто выглядит как самая безобидная.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2
Spring Boot 4.1 получит поддержку ленивого получения JDBC-соединений
DataSource будет оборачиваться в🔥
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.1.0-RC1-Release-Notes
👉 Java Portal
DataSource будет оборачиваться в
LazyConnectionDataSourceProxy, а физическое соединение из пула станет запрашиваться только в тот момент, когда приложению действительно потребуется выполнить JDBC-запрос. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.1.0-RC1-Release-Notes
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Spring Boot 4.1.0 RC1 Release Notes
Spring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss. - spring-projects/spring-boot
🤯4
Лучшие практики Spring Boot REST API
Часть 1: Реализация API Get Collection
Часть 2: Реализация API Create и Update
Часть 3: Реализация FindById и DeleteById API
Часть 4: Обработка исключений в REST API
👉 Java Portal
Часть 1: Реализация API Get Collection
Часть 2: Реализация API Create и Update
Часть 3: Реализация FindById и DeleteById API
Часть 4: Обработка исключений в REST API
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
💡 Java: Используйте default-методы в интерфейсах для сохранения обратной совместимости (начиная с Java 8).
Если добавить новый default-метод в интерфейс, существующие реализации не придётся менять. Они автоматически получат реализацию по умолчанию.
#Java #Interfaces
👉 Java Portal
Если добавить новый default-метод в интерфейс, существующие реализации не придётся менять. Они автоматически получат реализацию по умолчанию.
#Java #Interfaces
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
10 июня(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
📂 Виктор Анохин, старший разработчик из WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Виктор будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Виктору
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Java: По возможности не возвращайте из методов изменяемые внутренние коллекции, чтобы:
Не раскрывать внутреннее состояние объекта, повышая безопасность.
Иметь возможность менять реализацию без риска сломать другие части приложения.
#Java #JavaDev
👉 Java Portal
Не раскрывать внутреннее состояние объекта, повышая безопасность.
Иметь возможность менять реализацию без риска сломать другие части приложения.
#Java #JavaDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Вышла статья о распространённых случаях, когда
Поскольку такие ситуации встречаются во фреймворках, библиотеках и обычных приложениях, материал будет полезен разработчикам всех этих типов проектов.🤝
Разбираются причины использования рефлексии для изменения
https://inside.java/2026/04/27/avoiding-final-field-mutation/
👉 Java Portal
final-поля изменяются через рефлексию, и какие альтернативы можно использовать вместо этого.Поскольку такие ситуации встречаются во фреймворках, библиотеках и обычных приложениях, материал будет полезен разработчикам всех этих типов проектов.
Разбираются причины использования рефлексии для изменения
final-полей, связанные проблемы и варианты миграции на более безопасные решения.https://inside.java/2026/04/27/avoiding-final-field-mutation/
Please open Telegram to view this post
VIEW IN TELEGRAM