Примеры решений в Java
Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.
Текущая статья посвящена java: NIO, HttpClient, JDBC, коллекции, многопоточность и практики надёжного серверного кода..
Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:
- Основы
- Система и сеть
- Данные и разметка
- Код и разработка
- Языки
- Искусственный интеллект
- Проект
- Инфраструктура и безопасность
- Спин-офф
Обязательно пройдитесь.
А теперь приступим к нашему предмету.
Теория и соседние материалы
Термины
| Термин | Назначение |
|---|---|
try-with-resources |
Автозакрытие AutoCloseable |
PreparedStatement |
Параметризованный SQL |
record (Java 16+) |
Неизменяемый DTO |
CompletableFuture |
Асинхронные цепочки |
1. Чтение и запись файла (NIO.2)
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
Path path = Path.of("data", "input.txt");
String text = Files.readString(path, StandardCharsets.UTF_8);
Files.writeString(path.resolveSibling("output.txt"), text.toUpperCase StandardCharsets.UTF_8);
2. HTTP GET (HttpClient)
Тот же запрос из терминала без Java-кода — утилита curl, curl / fetch — примеры.
import java.net.URI;
import java.net.http.*;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilderuri(URI.create("https://api.example.com/ping"))
.GETtimeout(java.time.Duration.ofSeconds(10))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
throw new IllegalStateException("HTTP " + response.statusCode());
}
3. JDBC с параметрами
String sql = "SELECT id, name FROM users WHERE email = ?";
try (PreparedStatement ps = connection.prepareStatement(sql)) {
ps.setString(1, email);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
long id = rs.getLong("id");
String name = rs.getString("name");
}
}
}
4. Коллекции: группировка
import java.util.stream.*;
Map<String, List<User>> byCity = users.streamcollect(Collectors.groupingBy(User::city));
5. Асинхронный вызов
CompletableFuture.supplyAsync(() -> fetchRemote())
.orTimeout(5, java.util.concurrent.TimeUnit.SECONDS)
.exceptionally(ex -> "fallback");
Типичные ошибки
- SQL через конкатенацию строк → SQL-injection.
- Потоки без пула и без обработки
InterruptedException. - Игнорирование
Optionalи NPE на null из API.
Чек-лист
- Ресурсы в
try-with-resources. - Логирование через SLF4J, не
System.out. - Юнит-тесты на JUnit 5 для бизнес-логики.