Java Developer | Backend
1.71K subscribers
136 photos
1 video
231 links
Авторский канал действующего java разработчика

Платформа: https://offercraft.ru

Сотрудничество @offercraft_support
Download Telegram
Использование PreparedStatement для предотвращения SQL-инъекций

При работе с базами данных в Java, использование PreparedStatement является предпочтительным методом по сравнению с обычным Statement. Это связано с тем, что PreparedStatement помогает предотвратить SQL-инъекции и улучшает производительность за счет предварительной компиляции SQL-запросов.

Пример использования PreparedStatement

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JdbcPreparedStatementExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3000/mydatabase";
String user = "username";
String password = "password";

String sql = "INSERT INTO users (username, password) VALUES (?, ?)";

try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = conn.prepareStatement(sql)) {

pstmt.setString(1, "newuser");
pstmt.setString(2, "securepassword");
pstmt.executeUpdate();

System.out.println("User added successfully!");

} catch (SQLException e) {
e.printStackTrace();
}
}
}


Использование PreparedStatement не только защищает ваше приложение от SQL-инъекций, но и улучшает читаемость кода. Это особенно важно при работе с пользовательскими данными.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2
❗️Разница между JDBC и JPA подходами

Разберём принципиальные различия между низкоуровневым JDBC и ORM-подходом JPA.

1️⃣ JDBC (Java Database Connectivity)
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");

while (rs.next()) {
String name = rs.getString("name");
// ручное преобразование
}

Характеристики:
- Низкоуровневый API для SQL-запросов
- Требует ручного управления соединениями
- Необходимо вручную преобразовывать ResultSet в объекты

2️⃣JPA (Java Persistence API)
@Entity
public class User {
@Id
private Long id;
private String name;
// геттеры/сеттеры
}

// Использование:
User user = entityManager.find(User.class, 1L);

*️⃣Особенности:
- Высокоуровневая абстракция (ORM)
- Работа с объектами вместо SQL
- Автоматическое управление сессиями
- Кеширование, ленивая загрузка

*️⃣Ключевые различия:

▫️ Уровень абстракции
JDBC: SQL-ориентированный
JPA: Объектно-ориентированный

▫️ Преобразование данных
JDBC: Ручное
JPA: Автоматическое

▫️ Производительность
JDBC: Выше
JPA: Может быть ниже из-за накладных расходов

▫️ Код
JDBC: Больше boilerplate
JPA: Лаконичнее

▫️ Портативность
JDBC: Зависит от SQL диалекта
JPA: Независимость от БД

Резюмируем:
- JDBC даёт полный контроль, но требует больше кода
- JPA повышает продуктивность, скрывая сложности
- Для сложных запросов иногда комбинируют оба подхода
- Выбор зависит от проекта: JPA для бизнес-приложений, JDBC для высоконагруженных систем

Совет: Современные проекты часто используют Spring Data JPA, который ещё больше упрощает работу с JPA.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4
Вопрос: Что такое Java Memory Model и как он влияет на многопоточность?
Ответ -
Java Memory Model (JMM) определяет, как потоки взаимодействуют друг с другом через общую память. Он гарантирует видимость изменений, сделанных одним потоком, для других потоков. JMM вводит понятия "синхронизация", "медленная и быстрая память" и "порядок выполнения", что помогает избежать проблем, таких как гонки данных. Для обеспечения корректного взаимодействия потоков используются ключевые слова volatile, synchronized и блоки Lock.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2
Гениально же 😁

🖥 Java Developer | Backend | #⃣#мемы #java
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
🔤 Java Logging: история кошмара

Тернист и извилист путь Java-платформы к правильному способу записи строчек в лог-файлы. История logging в Java довольно познавательна в плане изучения особенностей Open Source, в том числе его взаимодействия с корпорациями и единичными программистами.

🔗 Ссылка на статью

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Какова цель метода Class.forName?
Ответ -
Этот метод используется для загрузки драйвера, который установит соединение с базой данных.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
🔤 Простые сценарии использования Sonarqube

На сегодняшний день sonarqube - один из самый известный способ автоматического анализа кода и его ревью. В данной статье показан процесс настройки sonarqube для вашего проекта.

🔗 Ссылка на статью

👩‍💻 Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
Roadmap "Как стать java разработчиком".
Карта показывает необходимые навыки для изучения

🔗 Ссылка

👩‍💻 Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4
MapStruct: Ультимативный маппинг в Java

Если вы все еще вручную копируете данные из Entity в DTO через сеттеры, пора переходить на MapStruct. Это кодогенератор, который работает на этапе компиляции. В отличие от аналогов на Reflection (типа ModelMapper), он создает чистый и быстрый Java-код, который легко дебажить.

Почему это стандарт индустрии?
*️⃣Производительность: Скорость прямого вызова методов.
*️⃣Безопасность: Ошибка в имени поля обнаружится при сборке, а не в рантайме.
*️⃣Гибкость: Поддержка вложенных объектов и кастомных конвертеров.

Пример реализации:
@Mapper(componentModel = "spring")
public interface UserMapper {
@Mapping(source = "email", target = "login")
@Mapping(target = "fullName", expression = "java(u.getFirstName() + ' ' + u.getLastName())")
UserDto toDto(User u);
}


MapStruct делает ваш код чище, а разработку — приятнее.

👩‍💻Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21
❗️SQL Academy: Где реально набить руку на запросах

Нашел крутой тренажер для тех, кто хочет подтянуть SQL без скучной теории. Главный плюс — вы решаете задачи в браузере на живых базах данных.

Почему стоит глянуть:

*️⃣Sandbox-режим: Пишешь код и сразу видишь результат.
*️⃣Уровни: От простых SELECT до жестких джойнов.
*️⃣Собесы: Задачи максимально приближены к реальным вопросам из интервью

🔗 Ссылка

👩‍💻Java Developer | Backend |#⃣ #полезныересурсы #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21
Эволюция Java-разработки с SonarQube

SonarQube — стандарт индустрии для контроля качества Java-кода. Инструмент автоматизирует поиск багов, уязвимостей и «запахов кода», бесшовно интегрируясь в CI/CD через Maven или Gradle. Это позволяет поддерживать архитектурную целостность и системно минимизировать техдолг. Применение SonarQube гарантирует, что в релизную ветку попадает только код, прошедший строгую проверку на надежность и производительность.

*️⃣Контроль через Quality Gates (QG)
Quality Gates — это автоматизированный «чек-лист», определяющий готовность кода к деплою. Если проект не соответствует заданным порогам, статус проверки меняется на Failed, и сборка блокируется.

ℹ️Вот основные метрики, которые чаще всего настраивают в QG:
*️⃣New Code Coverage: Процент покрытия юнит-тестами новых изменений. Обычно устанавливается порог >80%, чтобы предотвратить попадание непроверенной логики в мастер-ветку.
*️⃣Maintainability Rating: Оценка поддерживаемости. Если расчетное время на исправление «запахов кода» (code smells) превышает лимит, рейтинг падает ниже A, и QG не проходится.
*️⃣Security Rating: Критерий, блокирующий поставку при наличии хотя бы одной открытой уязвимости (Vulnerability) или критической точки риска (Security Hotspot).
*️⃣Duplicated Lines: Контроль за дублированием кода. Обычно считается недопустимым наличие более 3-5% дубликатов на весь объем новых строк.

Использование Quality Gates исключает субъективность при приемке кода и позволяет команде сфокусироваться на создании фич, не отвлекаясь на базовый аудит безопасности.

👩‍💻Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Software Composition Analysis (SCA): Безопасность внешних компонентов

В современной Java-разработке до 90% итогового кода приложения составляют сторонние библиотеки. SCA (Software Composition Analysis) — это методология автоматизированного аудита этих зависимостей. В отличие от классического статического анализа (SAST), который проверяет ваш авторский код, SCA фокусируется на рисках, приходящих извне вместе с Open Source компонентами.

#️⃣ Практические примеры работы SCA

Инструменты SCA анализируют манифесты сборки (например, pom.xml или build.gradle) и выявляют две основные группы проблем:

1️⃣ Идентификация известных уязвимостей (CVE)
Если в проекте используется библиотека с публично известной дырой в безопасности, SCA заблокирует сборку.

Пример в Maven:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>


*️⃣ Действие системы: Инструмент укажет на конкретную запись в базе данных уязвимостей (например, CVE-2021-44228) и выдаст рекомендацию по обновлению до безопасной версии 2.17.1.

2️⃣ Лицензионный комплаенс
SCA проверяет, не нарушают ли лицензии библиотек юридическую политику компании.

*️⃣ Пример: Использование библиотеки с лицензией GPL в коммерческом закрытом продукте.
*️⃣Действие системы: Система предупредит, что данная лицензия является «вирусной» и требует открытия исходного кода всего вашего приложения, что часто недопустимо для проприетарного ПО.

#️⃣ Ключевые функции
*️⃣ Детекция транзитивных зависимостей: Проверка не только тех библиотек, что вы прописали явно, но и тех, что они «тянут» за собой по цепочке.
*️⃣ Формирование SBOM: Создание «паспорта» приложения (Software Bill of Materials) — полного реестра всех используемых компонентов.

#️⃣Вывод

Внедрение SCA в CI/CD пайплайн Java-проекта — это не просто дополнительный этап проверки, а критическое требование безопасности. Это позволяет разработчикам использовать всю мощь Open Source, сохраняя контроль над защищенностью и юридической чистотой продукта. В современных реалиях SCA является обязательным дополнением к анализу кода, формируя комплексный подход к качеству ПО.

👩‍💻Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Станьте SQL-детективом: Тайна убийства в SQL-Сити

Если вы ищете способ подтянуть свои навыки работы с базами данных, забудьте про скучные учебники. Есть кое-что поинтереснее — SQL Murder Mystery.

#️⃣В чем суть?
В городе произошло преступление. У вас есть только дата, место и доступ к полицейской базе данных. Ваша задача — через SQL-запросы восстановить цепочку событий, найти свидетелей и, наконец, вычислить убийцу.

Почему это круто:
1️⃣Геймификация: Вы не просто пишете SELECT *, вы проводите расследование.
2️⃣Реальная практика: Придется работать с JOIN, LIKE, агрегатными функциями и вложенными запросами.
3️⃣Для любого уровня: На сайте есть краткое руководство для новичков, так что можно начинать даже с нулевыми знаниями.

🔗 Ссылка

👩‍💻Java Developer | Backend |#⃣ #полезныересурсы #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
🔥🔥🔥 Вы давно просили — и вот он готов! 🔥🔥🔥

Много раз получал вопросы: «Где попрактиковаться перед собеседованием?», «Как понять, готов ли я?». Наконец сделал то, что сам хотел бы иметь когда готовился.

Представляю @interviewer_tg_bot — тренажёр технических собеседований прямо в Telegram 🎯

Что умеет:
— Задаёт реальные вопросы по Java, Python, Go, C#, React, Angular, Vue, Node.js, PHP, SQL, DevOps, QA и другим направлениям
— Принимает ответы голосом или текстом
— Оценивает ответ через AI и даёт развёрнутый фидбек
— Проводит mock-интервью — 5 вопросов подряд с итоговой оценкой как на настоящем собеседовании
— Подбирает вопросы под твой уровень: Junior / Middle / Senior

Первые 5 вопросов бесплатно — попробуй прямо сейчас.

👉 @interviewer_tg_bot ✔️

Переходи скорее! 🔥🔥🔥

👩‍💻Java Developer | Backend |#⃣ #полезныересурсы #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2