Вообще, в мире Java разработки существует несколько простых правил, позволяющих практически полностью исключить возможности внедрения SQL:
— Не использовать конкатенацию строк в запросах к базам данных.
— Использовать
PreparedStatement/CallableStatement
вместо Statement
. Библиотеки spring-jdbc
, Hibernate
, MyBatis
, JOOQ
и прочие также внутри используют PreparedStatement
.— Передавать параметры запросов с помощью методов
setParameter
, а не в самом запросе.Этому и посвящена статья.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#Java #Spring @SpringSecurity
Совет: Если вы хотите получить доступ к текущему аутентифицированному пользователю в любом месте кода, вы можете использовать класс
SecurityContextHolder
. С ним, вам не нужно передавать объект аутентификации из вашего
RestController
через несколько служб.@javatg
Если пишешь на Java в VS Code, то можешь затестить полезный плагин PVS-Studio (он существует ещё и для IntelliJ IDEA)
Плагин позволяет находить ошибки, проблемные места в коде и уязвимости.
Все предупреждения делятся на 3 уровня, отражающих вероятность того, что они окажутся истинными:
В целом, довольно полезная штука, можно затестить
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Держите видео с мок-интервью на позицию Junior Java Developer.
Самое то, чтобы проверить себя, особенно, если только начинаете свой путь в Java
План видео:
02:00 — ООП, архитектура и дизайн, шаблоны проектирования, SOLID
25:30 — collection framework, коллекции Java, mutable/immutable collections
45:50 — exception, исключения в Java
58:40 — spring framework, spring boot, spring beb, HTTP, JSON
1:12:00 — dependency injection, inversion of control, bean, bean scope, spring context, конфигурация бинов
1:24:40 — Базы данных, принципы ACID, параллельные транзакции, аномалии при параллельных транзакциях, уровни изоляции транзакции, Foreign Key, Join, связи
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Class<?>
— классовый литерал неуточненного типа, что схоже с wildcard-символом в дженериках. Такая запись позволяет взаимодействовать с объектом типа Class
, не привязываясь к его конкретному типу, при этом гарантируя типобезопасность. Это означает, что методы могут работать с любым объектом Class
, независимо от его принадлежности к какому-то классу.Пример:
public void processClass(Class<?> anyClass) {
System.out.println(anyClass.getName() + " готов к работе!");
}
// вызов метода с параметром любого класса
processClass(Integer.class); // вывод: java.lang.Integer готов к работе!
В
processClass
использование Class<?>
позволяет взаимодействовать с объектами любых классов, напр. Integer.class
, сохраняя типобезопасность и гарантируя универсальность операций.?
в Class<?>
означает неопределенный тип класса, что удобно при создании универсального кода, способного работать с объектами различных классов.Class<?>
даёт разработчикам возможность обращаться к объектам любых классов, сохраняя при этом строгое типовое контролирование.Class<?>
служит ключом к возможностям рефлексии, позволяя работать с объектами, тип которых неизвестен при компиляции.Class<?>
и Class
— сравнение:С введением дженериков в Java 5 использование
Class<?>
стало предпочтительнее, чем простое Class
. Это делает код понятнее для компилятора, предотвращает небезопасное приведение типов и повышает качество кода.Class<?>
– это подстановочный символ для любого класса, а не для любого типа в Java. Этот нюанс важно учитывать при работе с коллекциями и использовать такую мощную особенность ответственно.@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
✅ Повысьте эффективность MongoDB, используя составной индекс Spring Data по принципу ESR ✅
Позволяет настроить оптимальную индексацию для ускорения поиска данных и повышения производительности приложения. 🔥
https://mongodb.com/docs/manual/tutorial/equality-sort-range-rule/
@javatg
Позволяет настроить оптимальную индексацию для ускорения поиска данных и повышения производительности приложения. 🔥
https://mongodb.com/docs/manual/tutorial/equality-sort-range-rule/
@javatg
Scout — это библиотека, появившаяся как результат большого количества проб и ошибок. Пет-проекты с кастомными DI-контейнерами. Изучение каждого нового DI-фреймворка, который появлялся в комьюнити.
Держите полезную статью о том, как Scout создавалась и какие проблемы может решать.
Вот ещё некоторые факты из статьи:
@android_its
Please open Telegram to view this post
VIEW IN TELEGRAM
OutOfMemoryError
. Такие ошибки, как правило, являются фатальными. Обычно программист не способен контролировать их, и не рекомендуется пытаться их перехватывать. А вот исключения (Exceptions) можно обработать в программе: исключения могут указывать, например, на ошибки пользовательского ввода или проблемы сетевого подключения. Исключения подразделяются на проверяемые, обработка которых их обязательна, как
IOException
, и непроверяемые, подразумевающие ошибки во время выполнения программы, например, NullPointerException
. Обрабатывать рекомендуется как раз исключения, а не ошибки.// Пример защитного программирования
try {
// Участок кода, где могут произойти ошибки ввода/вывода
} catch (IOException ex) {
// Обрабатываем исключение и продолжаем выполнение
}
Проверяемые исключения в Java – это исключения, для которых обязательно использование обработки, необходимо применять конструкции
try-catch
или ключевое слово throws
. Этот тип исключений помогает программисту планировать выход из непредвиденных ситуаций, повышая устойчивость кода.Непроверяемые исключения и ошибки могут появиться при выполнении программы и не требуют явной обработки. Они часто свидетельствуют о непроработанной логике или некорректно заданных данных. Они не прерывают выполнение программы, но могут указывать на необходимость внесения изменений в код.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
val myInterfaceInstance = object : MyInterface {
override fun myFunction() {
// Ваш код здесь
}
}
myInterfaceInstance.myFunction()
В данном примере переменной
myInterfaceInstance
мы присваиваем объект, используя ключевое слово object :
Далее указываем название интерфейса, а затем в фигурных скобках представляем реализацию необходимых функций с помощью переопределения.
Интерфейс с одним абстрактным методом (SAM) в Kotlin может быть представлен лямбдой. Котлин предлагает более лаконичную запись для интерфейсов с единственным методом:
fun interface MySAMInterface {
fun myAction()
}
val myInterfaceInstance = MySAMInterface {
println("Смотрите, мама, я пишу код без использования рук!")
}
myInterfaceInstance.myAction()
Здесь для сокращения записи при создании анонимного экземпляра используется лямбда-выражение. Не забывайте, что SAM-преобразования доступны лишь для интерфейсов, имеющих только один абстрактный метод.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
#JUnit 5.11 наконец-то будет поддерживать стандартную семантику Java при определении того, является ли поле или метод видимым/переопределенным!
Это будет серьезное изменение, но, надеюсь, оно будет одобрено сообществом. 🤞🏼
https://github.com/junit-team/junit5/commit/3e5a5df057093f0edf832bff3cec8d4e0a9af3da
https://junit.org/junit5/docs/snapshot/release-notes/index.html#release-notes-5.11.0-M1-junit-jupiter-bug-fixes
@javatg
Это будет серьезное изменение, но, надеюсь, оно будет одобрено сообществом. 🤞🏼
https://github.com/junit-team/junit5/commit/3e5a5df057093f0edf832bff3cec8d4e0a9af3da
https://junit.org/junit5/docs/snapshot/release-notes/index.html#release-notes-5.11.0-M1-junit-jupiter-bug-fixes
@javatg
В связи с этим не помешает их повторить, держите полезную статью.
Это обсуждение паттернов проектирования в Java Core. Примеры паттернов иллюстрируются на примере интерфейсов и классов Java Core.
— Стратегия
— Декоратор
— Фасад
— Итератор
— Шаблонный метод
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM