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

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

Сотрудничество @offercraft_support
Download Telegram
Вопрос: Объясните, что такое Optional в Java и зачем он нужен?
Ответ -

Optional — это контейнер, который может содержать значение или быть пустым (null). Он используется для избежания NullPointerException и улучшения читаемости кода. Вместо того чтобы возвращать null, методы могут возвращать Optional, позволяя разработчикам явно обрабатывать случаи отсутствия значения.


🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
🔤 Знакомство с WebAssembly

Данная статья есть компиляция мыслей и идей, полученных из выступлений других людей на данную тему, плюс эпизодического опыта изучения WebAssembly в течение нескольких месяцев.

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

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2👏1
🔤 Java: перспективы, тренды и почему новичкам стоит его знать

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

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

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43🔥2
Вопрос: Что такое потокобезопасность и как ее достичь в Java?
Ответ -

Потокобезопасность означает, что несколько потоков могут безопасно взаимодействовать с объектами без риска повреждения данных. Достичь потокобезопасности можно с помощью ключевых слов synchronized, volatile, а также с использованием классов из пакета java.util.concurrent, таких как ConcurrentHashMap, CopyOnWriteArrayList и других.


🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
7👏3🔥2👍1
Что такое аннотации метаданных в Java и как они используются?
Ответ -

Аннотации метаданных — это специальные конструкции, которые добавляют метаданные к элементам программы (классам, методам и т.д.). Они могут использоваться для конфигурации фреймворков, генерации кода и валидации. Например, аннотация
@Override указывает, что метод переопределяет метод суперкласса.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🔥2
Вопрос: Что такое Spring Framework и какие его основные модули вы знаете?
Ответ -

Spring Framework — это мощный фреймворк для разработки корпоративных приложений на Java. Он предоставляет контейнер внедрения зависимостей и различные модули для работы с различными аспектами разработки приложений. Основные модули включают:
*️⃣Spring Core: основной модуль для внедрения зависимостей.
*️⃣ Spring MVC: модуль для создания веб-приложений.
*️⃣Spring Data: модуль для работы с базами данных.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👏3👍2
Вопрос: Каковы основные принципы SOLID в объектно-ориентированном программировании?
Ответ -

SOLID — это набор пяти принципов проектирования:
*️⃣S: Single Responsibility Principle (SRP) — класс должен иметь одну ответственность.
*️⃣O: Open/Closed Principle (OCP) — классы должны быть открыты для расширения, но закрыты для модификации.
*️⃣L: Liskov Substitution Principle (LSP) — объекты подкласса должны быть заменяемыми на объекты суперкласса.
*️⃣I: Interface Segregation Principle (ISP) — клиенты не должны зависеть от интерфейсов, которые они не используют.
*️⃣D: Dependency Inversion Principle (DIP) — модули верхнего уровня не должны зависеть от модулей нижнего уровня; оба должны зависеть от абстракций.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👏2👍1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3😁21
Please open Telegram to view this post
VIEW IN TELEGRAM
Сборка мусора в Java

Сборка мусора (Garbage Collection) в Java — это автоматический процесс управления памятью. JVM отслеживает объекты, которые больше не используются, и освобождает память, чтобы предотвратить утечки. Это позволяет разработчикам сосредоточиться на логике приложения, не беспокоясь о ручном управлении памятью.

*️⃣Кратко о структуре памяти в JVM
Куча (Heap)
Куча - это область памяти JVM, где хранятся все объекты Java и связанные с ними данные. Выделение памяти в куче происходит динамически во время выполнения программы.
Стек (Stack)
Каждый поток в Java имеет собственный стек, который содержит информацию о вызовах методов и локальных переменных. Стек устроен по принципу LIFO (last-in, first-out) и используется для управления выполнением методов и их локальными переменными.

Когда в Java создается новый объект (например, через оператор new), JVM выделяет для него память в куче (heap). Размер выделяемой памяти зависит от структуры объекта, включая его поля и связанные объекты.
После создания объект активно используется приложением. Это означает, что на объект существуют активные ссылки из других частей кода.
Обычные ссылки в Java являются сильными ссылками. Пока на объект есть хотя бы одна сильная ссылка, он остается в памяти.

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

🖥 Java Developer | Backend | #⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Вопрос: Что такое Java Remote Method Invocation (RMI)?
Ответ -
RMI - это API Java, который выполняет объектно-ориентированный эквивалент удаленных вызовов процедур (RPC) с поддержкой прямой передачи сериализованных классов Java и распределенной сборки мусора. Удаленный вызов метода (RMI) также можно рассматривать как процесс активации метода на удаленно запущенном объекте. RMI обеспечивает прозрачность местоположения, поскольку для пользователя это выглядит так, что метод выполняется на локально запущенном объекте.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
Паттерны проектирования. Структурные паттерны. Bridge (Мост).

Паттерн проектирования "Мост" (Bridge) используется для разделения абстракции и реализации, что позволяет изменять их независимо друг от друга. Этот паттерн особенно полезен, когда у вас есть множество возможных реализаций и абстракций, которые могут изменяться независимо, что делает систему более гибкой и расширяемой.
interface Engine {
void setEngine();
}
abstract class Car {
protected Engine engine;
public Car(Engine engine){
this.engine = engine;
}
abstract public void setEngine();
}
class SportCar extends Car {
public SportCar(Engine engine) {
super(engine);
}
public void setEngine() {
System.out.print("SportCar engine: ");
engine.setEngine();
}
}
class UnknownCar extends Car {
public UnknownCar(Engine engine) {
super(engine);
}
public void setEngine() {
System.out.print("UnknownCar engine: ");
engine.setEngine();
}
}
class SportEngine implements Engine {
public void setEngine(){
System.out.println("sport");
}
}
class UnknownEngine implements Engine {
public void setEngine(){
System.out.println("unknown");
}
}
public class BridgeTest {
public static void main(String[] args) {
Car sportCar = new SportCar(new SportEngine());
sportCar.setEngine();
System.out.println();
Car unknownCar = new UnknownCar(new UnknownEngine());
unknownCar.setEngine();
}
}

😎 Преимущества паттерна Bridge

1⃣ Гибкость: Позволяет изменять реализацию и абстракцию независимо друг от друга.

2⃣Упрощение кода: Избегает создания множества подклассов для каждой комбинации абстракции и реализации.

3⃣ Легкость в расширении: Новые реализации и абстракции могут быть добавлены без изменения существующего кода.

😌 Недостатки паттерна Bridge

1⃣Сложность: Увеличивает количество классов в системе.

2⃣Потенциальная путаница: Понимание структуры может быть сложнее из-за разделения на абстракцию и реализацию.

Таким образом, паттерн "Мост" является мощным инструментом для создания гибких и расширяемых систем с четким разделением ответственности между абстракцией и реализацией.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
🔤 Test-Driven Development: как полюбить модульное тестирование

Мы разберём страхи, останавливающие разработчика перед тем, чтобы начать, наконец, писать тесты. Выявим очевидные преимущества. Рассмотрим основные правила разработки через тестирование. И подкрепим всё это реальными примерами.

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

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21
Использование 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