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

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

Сотрудничество @offercraft_support
Download Telegram
Паттерны проектирования. Структурные паттерны. Decorator (Декоратор).

Паттерн проектирования "Декоратор" (Decorator) используется для динамического добавления новых обязанностей объектам, не изменяя их структуру. Этот паттерн позволяет расширять функциональность объектов, оборачивая их в класс-декоратор. Это особенно полезно, когда нужно добавить функциональность к объектам на лету, не создавая при этом большое количество подклассов.
interface Car {
void draw();
}
class SportCar implements Car {
public void draw() {
System.out.println("SportCar");
}
}
class UnknownCar implements Car {
public void draw() {
System.out.println("UnknownCar");
}
}
abstract class CarDecorator implements Car {
protected Car decorated;
public CarDecorator(Car decorated){
this.decorated = decorated;
}
public void draw(){
decorated.draw();
}
}
class BlueCarDecorator extends CarDecorator {
public BlueCarDecorator(Car decorated) {
super(decorated);
}
public void draw() {
decorated.draw();
setColor();
}
private void setColor(){
System.out.println("Color: red");
}
}

public class DecoratorTest {
public static void main(String[] args) {
Car sportCar = new SportCar();
Car blueUnknownCar = new BlueCarDecorator(new UnknownCar());
sportCar.draw();
System.out.println();
blueUnknownCar.draw();
}
}

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

1⃣ Гибкость: Можно легко комбинировать различные декораторы.

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

3⃣ Соблюдение принципа единственной ответственности: Каждый класс отвечает за свою часть функциональности.

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

1⃣Сложность: Может привести к большому количеству классов.

2⃣Трудности с отладкой: Из-за оберток может быть сложнее отследить поведение программы.

Таким образом, паттерн "Декоратор" позволяет динамически добавлять новые функциональности к объектам, сохраняя при этом гибкость и расширяемость системы.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2
🔤 Сериализация в Java. Давайте разбираться

Java предоставляет разработчикам удобные инструменты для сериализации объектов. Несмотря на то, что они кажутся донельзя примитивными, их внутренняя реализация содержит много интересных моментов. В этой статье мы рассмотрим основы сериализации и некоторые нюансы, связанные с ней. И, конечно, посмотрим, как она работает изнутри.

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

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9👏3🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4👏2👍1
Leetcode. Задача 135. Candy. (hard)

В очереди стоят n детей. Каждому ребенку присвоено значение рейтинга, указанное в массиве целых чисел ratings.

Вы раздаете конфеты этим детям с соблюдением следующих требований:

Каждый ребенок должен получить как минимум одну конфету.
Дети с более высоким рейтингом должны получать больше конфет, чем их соседи.
Верните минимальное количество конфет, которое вам нужно иметь, чтобы распределить их среди детей.

Пример:
Input: ratings = [1,0,2]
Output: 5
Explanation: You can allocate to the first, second and third child with 2, 1, 2 candies respectively.


👨‍💻 Алгоритм:

1⃣Мы начинаем с создания массива конфет той же длины, что и массив оценок, и инициализируем все его значения значением 1;

2⃣Проход слева-направо. Мы проходим по массиву оценок от начала до конца. Для каждого ребенка (кроме первого) мы сравниваем его рейтинг с рейтингом слева. Если он выше, мы обновляем массив конфет, чтобы этот ребенок был на единицу больше, чем ребенок слева. Это учитывает второе условие, но учитывает только левого соседа ребенка;

3⃣Проход справа-налево. После прямого прохода мы снова проходим по массиву, но в обратном направлении. На этот раз мы сравниваем рейтинг каждого ребенка с рейтингом ребенка справа. Если рейтинг выше, нам нужно убедиться, что у ребенка больше конфет, чем у правого соседа. Итак, мы обновляем массив конфет для этого потомка, чтобы он был максимальным между его текущим количеством конфет и на одну конфету больше, чем конфеты правого соседа. Это гарантирует, что оба соседних условия проверены и выполнены;

4️⃣В конце считаем сумму конфет.

😎 Решение:
class Solution {
public int candy(int[] ratings) {
int n = ratings.length;
int[] candies = new int[n];
Arrays.fill(candies, 1);

for (int i = 1; i < n; i++) {
if (ratings[i] > ratings[i - 1]) {
candies[i] = candies[i - 1] + 1;
}
}
for (int i = n - 2; i >= 0; i--) {
if (ratings[i] > ratings[i + 1]) {
candies[i] = Math.max(candies[i], candies[i + 1] + 1);
}
}
int totalCandies = 0;
for (int candy : candies) {
totalCandies += candy;
}
return totalCandies;
}
}


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

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2👏1
🔤 Оптимистические и пессимистические блокировки на примере Hibernate (JPA)

В данное статье рассказывается про то, зачем нужны оптимистические и пессимистические блокировки

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

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥2
Честно, ещё один баг и я скажу «Я согласна!»

🖥 Java Developer | Backend | #⃣#мемы #java
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5👍4🔥2
Основы Java Collection Framework. Списки (List)

Java Collection Framework (JCF) — это архитектура, которая предоставляет набор интерфейсов и классов для работы с группами объектов. Основные реализации коллекций в Java включают:

😎Списки (List):

1️⃣ArrayList: динамический массив, который позволяет хранить элементы и обеспечивает быстрый доступ по индексу.

2️⃣ LinkedList: реализация списка, основанная на двусвязном списке, обеспечивает быструю вставку и удаление элементов.

Пример:

   import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ListExample {
public static void main(String[] args) {
// Использование ArrayList
List<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
System.out.println("ArrayList: " + arrayList);

// Использование LinkedList
List<String> linkedList = new LinkedList<>();
linkedList.add("Orange");
linkedList.add("Grape");
System.out.println("LinkedList: " + linkedList);
}
}


Java Collection Framework предлагает множество классов и интерфейсов для работы с данными. Выбор конкретной реализации зависит от требований к производительности и функциональности, таких как необходимость в сохранении порядка элементов или быстром доступе к элементам по индексу.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4🔥2👍1
🔤 Кэширование с FeignClient: как ускорить микросервисы и стать героем проекта

FeignClient — это такая магия в мире Spring, которая позволяет взаимодействовать с другими сервисами так, будто вы вызываете локальный метод. Никакой головной боли с HTTP-запросами, сериализацией и прочими мелочами.

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

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2👏2
Основы Java Collection Framework. Множества (Set).

Java Collection Framework (JCF) — это архитектура, которая предоставляет набор интерфейсов и классов для работы с группами объектов. Основные реализации коллекций в Java включают:

😎Множества (Set):

1️⃣ HashSet: реализация множества, которая не сохраняет порядок элементов и не допускает дубликатов.

2️⃣ LinkedHashSet: сохраняет порядок добавления элементов.

3️⃣ TreeSet: реализует интерфейс NavigableSet и хранит элементы в отсортированном порядке.

Пример:

   import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;
import java.util.Set;

public class SetExample {
public static void main(String[] args) {
// Использование HashSet
Set<String> hashSet = new HashSet<>();
hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Apple"); // Дубликат не будет добавлен
System.out.println("HashSet: " + hashSet);

// Использование LinkedHashSet
Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("Orange");
linkedHashSet.add("Grape");
System.out.println("LinkedHashSet: " + linkedHashSet);

// Использование TreeSet
Set<String> treeSet = new TreeSet<>();
treeSet.add("Banana");
treeSet.add("Apple");
treeSet.add("Grape");
System.out.println("TreeSet: " + treeSet);
}
}


Java Collection Framework предлагает множество классов и интерфейсов для работы с данными. Выбор конкретной реализации зависит от требований к производительности и функциональности, таких как необходимость в сохранении порядка элементов или быстром доступе к элементам по индексу.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥1
Что такое ненадежные апплеты?
Ответ -
Ненадежные апплеты — это те апплеты Java, которые не могут получить доступ к локальным системным файлам или выполнить их. По умолчанию все загруженные апплеты считаются ненадежными.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
4👏2🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7🤩3👍2
Объясните роль драйвера в JDBC.
Ответ -
Драйвер JDBC предоставляет специфичные для поставщика реализации абстрактных классов, предоставляемых API JDBC. Каждый драйвер должен предоставлять реализации для следующих классов пакета java.sql: Connection, Statement, PreparedStatement, CallableStatement, ResultSet и Driver.

🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1👏1
Основы Java Collection Framework. Карты (Map):

Java Collection Framework (JCF) — это архитектура, которая предоставляет набор интерфейсов и классов для работы с группами объектов. Основные реализации коллекций в Java включают:

😎Карты (Map):

1️⃣HashMap: реализация карты, которая не сохраняет порядок ключей и допускает один null ключ.

2️⃣ LinkedHashMap: сохраняет порядок добавления элементов.

3️⃣TreeMap: реализует интерфейс NavigableMap и хранит элементы в отсортированном порядке по ключу.

Пример:

   import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

public class MapExample {
public static void main(String[] args) {
// Использование HashMap
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Apple", 1);
hashMap.put("Banana", 2);
System.out.println("HashMap: " + hashMap);

// Использование LinkedHashMap
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("Orange", 3);
linkedHashMap.put("Grape", 4);
System.out.println("LinkedHashMap: " + linkedHashMap);

// Использование TreeMap
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Banana", 2);
treeMap.put("Apple", 1);
treeMap.put("Grape", 3);
System.out.println("TreeMap: " + treeMap);
}
}


Java Collection Framework предлагает множество классов и интерфейсов для работы с данными. Выбор конкретной реализации зависит от требований к производительности и функциональности, таких как необходимость в сохранении порядка элементов или быстром доступе к элементам по индексу.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍1👏1
🔤 От подвала до облака: как обучить нейросеть в домашних условиях

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

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

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5👍3🔥3
Задача:
Leetcode. Задача 35. Search Insert Position (easy)

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

Вы должны написать алгоритм со временной сложностью O(log n).

Пример:
Input: nums = [1,3,5,6], target = 5
Output: 2


👨‍💻 Алгоритм:

1⃣Инициализируйте указатели left и right: left = 0, right = n - 1.

2⃣Пока left <= right:
Сравните средний элемент массива nums[pivot] с целевым значением target.
Если средний элемент является целевым, то есть target == nums[pivot]: верните pivot.
Если цель не найдена:
Если target < nums[pivot], продолжайте поиск в левом подмассиве. right = pivot - 1.
Иначе продолжайте поиск в правом подмассиве. left = pivot + 1.
3⃣Верните left.

😎 Решение:
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return left;
}
}


🖥 Java Developer | Backend | #⃣#задача #java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👏2👍1
Что такое JDBC?
Ответ -
JDBC — это уровень абстракции, который позволяет пользователям выбирать между базами данных. JDBC позволяет разработчикам писать приложения баз данных на Java, не беспокоясь о базовых деталях конкретной базы данных.
🖥 Java Developer | Backend | #⃣#вопрос #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2👏1
🔤 Мастерство работы с Java Stream

В этой статье мы постараемся подробно рассмотреть Java Stream. Без долгих предисловий сразу приступим к делу. Для начала возьмём знакомый класс Student. Представим, что у нас есть группа студентов:

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

🖥Java Developer | Backend |#⃣ #статья #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2👏1