Был ли ваш последний проект веб-приложением?

«Был ли ваш последний проект веб-приложением?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, последний проект был веб-приложением с полным стеком (full-stack), построенным по принципам RESTful API.

Архитектура и пример кода: Приложение следовало многослойной архитектуре (Controller-Service-Repository).

// Контроллер (Слой представления)
@RestController
@RequestMapping("/api/tasks")
public class TaskController {
    private final TaskService taskService;

    @GetMapping
    public ResponseEntity<Page<TaskDTO>> getTasks(Pageable pageable) {
        return ResponseEntity.ok(taskService.getAllTasks(pageable));
    }

    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public TaskDTO createTask(@Valid @RequestBody TaskCreateDTO dto) {
        return taskService.createTask(dto);
    }
}

// Сервис (Бизнес-логика)
@Service
@Transactional
@RequiredArgsConstructor
public class TaskService {
    private final TaskRepository taskRepository;
    private final UserService userService;

    public TaskDTO createTask(TaskCreateDTO dto) {
        User assignee = userService.findById(dto.getAssigneeId());
        Task task = new Task(dto.getTitle(), dto.getDescription(), assignee);
        task = taskRepository.save(task);
        return TaskMapper.INSTANCE.toDTO(task); // Используем MapStruct
    }
}

Технологический стек:

  • Backend: Spring Boot, Spring Security (JWT-аутентификация), Hibernate, PostgreSQL.
  • Frontend: Single Page Application (SPA) на современном фреймворке.
  • Деплой: Приложение было упаковано в Docker-контейнеры, оркестрировалось с помощью Kubernetes, а для балансировки нагрузки использовался Nginx как reverse proxy.