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

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

Сотрудничество @offercraft_support
Download Telegram
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5😁3👍2👏1
Тестирование с помощью JUnit 5

JUnit 5 — это популярный фреймворк для тестирования Java-приложений. Он предоставляет мощные инструменты для написания и выполнения тестов, а также поддерживает различные возможности, такие как аннотации, расширения и параметры тестирования. Вот основные моменты тестирования Java-кода с помощью JUnit 5, включая примеры.

*️⃣Основные аннотации JUnit 5

1️⃣@Test: аннотация, указывающая, что метод является тестовым.

2️⃣ @BeforeEach: метод, помеченный этой аннотацией, будет выполняться перед каждым тестом.

3️⃣ @AfterEach: метод, помеченный этой аннотацией, будет выполняться после каждого теста.

4️⃣ @BeforeAll: метод, помеченный этой аннотацией, будет выполняться один раз перед всеми тестами (должен быть статическим).

5️⃣@AfterAll: метод, помеченный этой аннотацией, будет выполняться один раз после всех тестов (должен быть статическим).

6️⃣@DisplayName: позволяет задать более читаемое имя для теста.

Рассмотрим пример простого класса Calculator и его тестирования с помощью JUnit 5.

public class Calculator {
public int add(int a, int b) {
return a + b;
}

public int subtract(int a, int b) {
return a - b;
}

public int multiply(int a, int b) {
return a * b;
}

public double divide(int a, int b) {
if (b == 0) {
throw new IllegalArgumentException("Division by zero");
}
return (double) a / b;
}
}


Тестовый класс TestCalculator
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class CalculatorTest {

private Calculator calculator;

@BeforeEach
void setUp() {
calculator = new Calculator();
}

@AfterEach
void tearDown() {
// Здесь можно освободить ресурсы, если это необходимо
}

@Test
@DisplayName("Тестирование сложения")
void testAdd() {
assertEquals(5, calculator.add(2, 3), "2 + 3 должно быть равно 5");
assertEquals(-1, calculator.add(-2, 1), "-2 + 1 должно быть равно -1");
}

@Test
@DisplayName("Тестирование вычитания")
void testSubtract() {
assertEquals(1, calculator.subtract(3, 2), "3 - 2 должно быть равно 1");
assertEquals(-3, calculator.subtract(-2, 1), "-2 - 1 должно быть равно -3");
}

@Test
@DisplayName("Тестирование умножения")
void testMultiply() {
assertEquals(6, calculator.multiply(2, 3), "2 * 3 должно быть равно 6");
assertEquals(-2, calculator.multiply(-1, 2), "-1 * 2 должно быть равно -2");
}

@Test
@DisplayName("Тестирование деления")
void testDivide() {
assertEquals(2.0, calculator.divide(4, 2), "4 / 2 должно быть равно 2.0");
assertThrows(IllegalArgumentException.class, () -> calculator.divide(1, 0), "Деление на ноль должно выбрасывать IllegalArgumentException");
}
}


Тесты можно запускать из IDE (например, IntelliJ IDEA или Eclipse) или с помощью командной строки с использованием Maven или Gradle.

Если вы используете Maven, убедитесь, что у вас в pom.xml добавлена зависимость JUnit 5:

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.0</version>
<scope>test</scope>
</dependency>


*️⃣Заключение

JUnit 5 — это мощный инструмент для тестирования Java-приложений. Он предоставляет множество возможностей для организации и выполнения тестов. Использование аннотаций @BeforeEach, @AfterEach, @Test и других позволяет создавать чистые и понятные тестовые классы. Тестирование кода помогает обеспечить его корректность и надежность при изменениях и добавлении новых функций.

🖥Java Developer | Backend |#⃣ #обучение #java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3👏2