Сегодня разберемся с транзакциями в Spring так, чтобы всё стало ясно и понятно: зачем они нужны, как работают и как их настроить так, чтобы данные были под контролем.
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
ThreadPool (пул потоков) в Java — это механизм, который позволяет управлять группой потоков для выполнения задач. Вместо создания нового потока для каждой задачи, что может быть неэффективно и затратно по ресурсам, пул потоков переиспользует уже существующие потоки для выполнения новых задач. Это позволяет значительно улучшить производительность приложения, особенно в сценариях с большим количеством задач.
execute(), используемый для выполнения задач.Executor, который добавляет методы для управления жизненным циклом пула.ExecutorService, которая предоставляет расширенные возможности настройки пула потоков.Java предоставляет класс
Executors, который позволяет легко создать пул потоков. Например, можно создать фиксированный пул потоков с заданным количеством потоков.import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// Создание пула из 5 потоков
ExecutorService executorService = Executors.newFixedThreadPool(5);
// Добавление задач в пул
for (int i = 0; i < 10; i++) {
final int taskId = i;
executorService.submit(() -> {
System.out.println("Задача " + taskId + " выполняется в потоке " + Thread.currentThread().getName());
try {
Thread.sleep(2000); // Имитация долгой задачи
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Задача " + taskId + " завершена");
});
}
// Завершение работы пула
executorService.shutdown();
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍2👏2
Ответ -
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Ответ -
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Если вам нужно вернуть результат выполнения задачи, вы можете использовать интерфейсы
Callable и Future:import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ThreadPoolWithCallable {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(3);
// Создание задачи
Callable<Integer> task = () -> {
Thread.sleep(1000);
return 42; // Возвращаемое значение
};
// Выполнение задачи
Future<Integer> future = executorService.submit(task);
try {
// Получение результата
Integer result = future.get();
System.out.println("Результат задачи: " + result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
executorService.shutdown();
}
}
}
ThreadPool в Java — это мощный инструмент для управления многопоточностью, который позволяет эффективно выполнять задачи, минимизируя накладные расходы на создание и уничтожение потоков. Использование пула потоков делает код более чистым и управляемым, а также улучшает производительность приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Почему JVM-инженеры всё так медленно делают? На каком языке стоит писать рантайм, а на каком компилятор? Как «папка бога» в Windows привела к неожиданным последствиям? Может ли «обычный джавист» стать JVM-инженером?
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4
Leetcode. Задача 318. Maximum Product of Word Lengths. (medium)
Дан массив строк
Пример:
👨💻 Алгоритм:
1️⃣ Предварительная обработка масок и длин
Вычислите битовые маски для всех слов и сохраните их в массиве masks. Сохраните длины всех слов в массиве lens.
2️⃣ Сравнение слов и проверка общих букв
Сравните каждое слово с каждым последующим словом. Если два слова не имеют общих букв (проверка с использованием масок: (masks[i] & masks[j]) == 0), обновите максимальное произведение maxProd.
3️⃣ Возврат результата
Верните максимальное значение произведения maxProd.
😎 Решение:
🖥 Java Developer | Backend | #⃣ #задача #java
Дан массив строк
words, верните максимальное значение произведения длины word[i] на длину word[j], где два слова не имеют общих букв. Если таких двух слов не существует, верните 0.Пример:
Input: words = ["abcw","baz","foo","bar","xtfn","abcdef"]
Output: 16
Explanation: The two words can be "abcw", "xtfn".
Вычислите битовые маски для всех слов и сохраните их в массиве masks. Сохраните длины всех слов в массиве lens.
Сравните каждое слово с каждым последующим словом. Если два слова не имеют общих букв (проверка с использованием масок: (masks[i] & masks[j]) == 0), обновите максимальное произведение maxProd.
Верните максимальное значение произведения maxProd.
class Solution {
public int maxProduct(String[] words) {
int n = words.length;
int[] masks = new int[n];
for (int i=0; i<n; i++)
for (char c: words[i].toCharArray())
masks[i] |= (1 << (c - 'a'));
int largest = 0;
for (int i=0; i<n-1; i++)
for (int j=i+1; j<n; j++)
if ((masks[i] & masks[j]) == 0)
largest = Math.max(largest, words[i].length() * words[j].length());
return largest;
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Ответ -
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
В современном мире IT-разработки существует довольно большое множество различных подходов к написанию программ. Так, например, кому-то нравиться представлять программу в виде последовательности действий, а кто-то считает, что программа должна представлять собой множество объектов, общающихся друг с другом. Совокупности этих идей и понятий образуют своего рода стиль написания программы, который принято назвать – парадигма программирования.
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4😁4👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
В данной статье рассказывается о сравнении java и kotlin, а так же почему стоит использовать java вместо kotlin
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
Дорогие подписчики! ☃️
Поздравляю вас с новым годом!🍭 Желаю вам новых профессиональных побед, интересных событий, финансового благополучия и крепкого здоровья в новом году! 🧦 🔴 🎁 🔥
Поздравляю вас с новым годом!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥3👍2
При работе с базами данных в 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-инъекций, но и улучшает читаемость кода. Это особенно важно при работе с пользовательскими данными.Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2👏1
Похоже, многим не нравится объектно-ориентированное программирование. Первое, что приходит в голову, когда слышишь эту трёхбуквенную аббревиатуру — это пример с автомобилем, наследование, геттеры, сеттеры и ObjectFactoryFactorySingleton.
Мне это всегда казалось довольно странным. Мне не только нравится ООП, я ещё и считаю, что часто это лучший/наиболее очевидный способ моделирования задачи. И ниже я расскажу, почему.
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2👍1🔥1
Leetcode. Задача 523. Continuous Subarray Sum. (medium)
Дан целочисленный массив nums и целое число k. Верните true, если в nums есть подходящий подмассив, или false в противном случае.
Подходящий подмассив — это подмассив, который:
*️⃣ имеет длину не менее двух;
*️⃣ сумма элементов подмассива является кратной k.
Учтите:
Подмассив — это непрерывная часть массива.
Целое число x является кратным k, если существует целое число n такое, что x = n * k. Число 0 всегда является кратным k.
Пример:
👨💻 Алгоритм:
1️⃣ Итерация по начальным точкам:
*️⃣ Используйте вложенный цикл для итерации по всем возможным начальным точкам start в списке nums.
*️⃣ Внешний цикл будет итерироваться от 0 до len(nums) - 2 (включительно).
2️⃣ Расширение подмассива:
*️⃣ Внутри внешнего цикла используйте другой цикл для итерации по возможным конечным точкам end.
*️⃣ Внутренний цикл будет итерироваться от start + 1 до len(nums) - 1 (включительно).
3️⃣ Вычислите сумму:
*️⃣ Для каждой комбинации start и end вычислите сумму подмассива с помощью встроенной функции суммы Python.
4️⃣ Проверьте, является ли сумма кратной (k):
*️⃣ Проверьте, является ли сумма кратной k, с помощью оператора остатка от деления (%).
*️⃣ Если сумма равна нулю, обработайте особый случай, когда k также равно нулю.
5️⃣ Верните результат:
*️⃣ Если сумма любого подмассива кратна k, верните True.
*️⃣ Если после проверки всех комбинаций такой подмассив не найден, вернуть False.
😎 Решение:
🖥 Java Developer | Backend | #⃣ #задача #java
Дан целочисленный массив nums и целое число k. Верните true, если в nums есть подходящий подмассив, или false в противном случае.
Подходящий подмассив — это подмассив, который:
Учтите:
Подмассив — это непрерывная часть массива.
Целое число x является кратным k, если существует целое число n такое, что x = n * k. Число 0 всегда является кратным k.
Пример:
Input: nums = [23,2,4,6,7], k = 6
Output: true
Explanation: [2, 4] is a continuous subarray of size 2 whose elements sum up to 6.
public class Solution {
public boolean checkSubarraySum(int[] nums, int k) {
int n = nums.length;
// Step 1: Iterate Through Starting Points
for (int start = 0; start < n - 1; start++) {
// Step 2: Expand the Subarray
for (int end = start + 1; end < n; end++) {
// Step 3: Calculate the Sum
int subarraySum = 0;
for (int i = start; i <= end; i++) {
subarraySum += nums[i];
}
// Step 4: Check if the Sum is a Multiple of k
if (subarraySum == 0 && k == 0) { // Handling special case where k is 0
return true;
}
if (k != 0 && subarraySum % k == 0) {
return true;
}
}
}
// Step 5: Return the Result
return false;
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👏2🔥1