Примеры решений в Java

Приветствую! Здесь вы наверняка найдете, что ищете. Примеры в лаборатории рассчитаны на то, что мы разбираем что-то конкретное.

Текущая статья посвящена java: NIO, HttpClient, JDBC, коллекции, многопоточность и практики надёжного серверного кода..

Поэтому за теорией по текущей теме вам — в энциклопедию. Если ещё не погружались, то маршрут прост:

  1. Основы
  2. Система и сеть
  3. Данные и разметка
  4. Код и разработка
  5. Языки
  6. Искусственный интеллект
  7. Проект
  8. Инфраструктура и безопасность
  9. Спин-офф

Обязательно пройдитесь.

А теперь приступим к нашему предмету.

Теория и соседние материалы

Термины

Термин Назначение
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 для бизнес-логики.