Дорогие подписчики! ☃️
Поздравляю вас с новым годом!🍭 Желаю вам новых профессиональных побед, интересных событий, финансового благополучия и крепкого здоровья в новом году! 🧦 🔴 🎁 🔥
Поздравляю вас с новым годом!
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
Ответ -
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1🔥1
Тернист и извилист путь Java-платформы к правильному способу записи строчек в лог-файлы. История logging в Java довольно познавательна в плане изучения особенностей Open Source, в том числе его взаимодействия с корпорациями и единичными программистами.
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2🔥1🤔1
Пул соединений — это механизм, который позволяет многим клиентам использовать ограниченное количество соединений с базой данных. Это значительно увеличивает производительность приложения, особенно в средах с высокой нагрузкой.
Пример использования пула соединений
Для примера мы будем использовать библиотеку HikariCP, которая является популярным пулом соединений.
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class JdbcConnectionPoolExample {
public static void main(String[] args) {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3000/mydatabase");
config.setUsername("username");
config.setPassword("password");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
try (HikariDataSource ds = new HikariDataSource(config);
Connection conn = ds.getConnection()) {
// Использование соединения
System.out.println("Successfully connected to the database!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Использование пула соединений позволяет значительно сократить время на создание соединений и повысить общую производительность приложения. HikariCP является одним из самых быстрых и эффективных пулов соединений на рынке.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁5👍3👏2❤1
Статический анализатор PVS-Studio известен в мире C, C++ и C# как инструмент для выявления ошибок и потенциальных уязвимостей. Однако у нас мало клиентов из финансового сектора, так как выяснилось, что сейчас там востребованы Java и IBM RPG(!). Нам же всегда хотелось стать ближе к миру Enterprise, поэтому, после некоторых раздумий, мы приняли решение заняться созданием Java анализатора.
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1👏1
Управление транзакциями — это важный аспект работы с базами данных. JDBC предоставляет возможность управлять транзакциями вручную, что позволяет контролировать операции с базой данных более точно.
Пример обработки транзакций
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcTransactionExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String user = "username";
String password = "password";
try (Connection conn = DriverManager.getConnection(url, user, password)) {
// Отключаем авто-коммит
conn.setAutoCommit(false);
try (Statement stmt = conn.createStatement()) {
stmt.executeUpdate("INSERT INTO users (username) VALUES ('user1')");
stmt.executeUpdate("INSERT INTO users (username) VALUES ('user2')");
// Если всё прошло успешно, коммитим изменения
conn.commit();
System.out.println("Transaction committed successfully!");
} catch (SQLException e) {
// В случае ошибки откатываем изменения
conn.rollback();
System.out.println("Transaction rolled back!");
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Обработка транзакций в JDBC позволяет обеспечить целостность данных и избежать неполных операций. Убедитесь, что вы правильно обрабатываете исключения и выполняете откат в случае ошибок.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2👍1🔥1
Ответ -
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
Использование профилей в Spring Boot для управления конфигурацией приложения в различных средах (например, dev, test, prod). Для указания учетных записей для подключения к базе данных в разных средах будем использовать файлы конфигураций к определенной среде. Например,
# application-dev.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/devdb
username: devuser
password: devpass
# application-prod.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/proddb
username: produser
password: prodpass
Использование профиля в коде:
@SpringBootApplication
@ActiveProfiles("dev")
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2👏2
В этой статье рассказывается про yet-another-миграцию с базы на базу, которая заняла почти год
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👏2🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3👍2🔥1
Ответ -
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Leetcode. Задача. 1.Two Sum (easy)
Дано массив целых чисел
Вы можете предположить, что каждое входное значение имеет ровно одно решение, и не нужно использовать один и тот же элемент дважды. Верните индексы этих двух чисел в любом порядке.
Пример:
👨💻 Алгоритм:
Алгоритм решения:
1️⃣ Создать хэш-таблицу (Map), чтобы отслеживать числа и их индексы.
2️⃣ Пройтись по массиву
*️⃣ Для каждого элемента
*️⃣ Проверить, есть ли это число в хэш-таблице.
*️⃣ Если есть, вернуть текущий индекс и индекс числа из хэш-таблицы.
*️⃣ Если нет, добавить текущее число и его индекс в хэш-таблицу.
😎 Решение:
🖥 Java Developer | Backend | #⃣ #задача #java
Дано массив целых чисел
nums и целое число target. Необходимо найти индексы двух чисел в массиве, которые в сумме дают target.Вы можете предположить, что каждое входное значение имеет ровно одно решение, и не нужно использовать один и тот же элемент дважды. Верните индексы этих двух чисел в любом порядке.
Пример:
Вход: nums = [2, 7, 11, 15], target = 9
Выход: [0, 1]
Объяснение: nums[0] + nums[1] = 2 + 7 = 9, поэтому возвращаем [0, 1].
Алгоритм решения:
nums:num вычислить необходимое число complement, которое нужно для достижения target (то есть complement = target - num).import java.util.HashMap;
import java.util.Map;
public class TwoSum {
public static int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
public static void main(String[] args) {
int[] nums = {2, 7, 11, 15};
int target = 9;
int[] result = twoSum(nums, target);
System.out.println("Indices: [" + result[0] + ", " + result[1] + "]");
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥2
Это глубокое погружение в управление памятью Java позволит расширить ваши знания о том, как работает куча, ссылочные типы и сборка мусора.
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2👏2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2🔥1