Какие технологии и инструменты вы изучили помимо Java Core?

Ответ

Помимо Java Core, я освоил следующие технологии и инструменты:

Основные фреймворки и ORM:

  • Spring Framework: Spring Boot, Spring MVC, Spring Data, Spring Security.
  • Hibernate для работы с базами данных.

Базы данных и SQL:

  • Реляционные СУБД: PostgreSQL, MySQL.
  • Написание и оптимизация SQL-запросов.

Инструменты и практики:

  • Системы сборки: Maven, Gradle.
  • Контейнеризация: Docker.
  • Система контроля версий: Git.
  • Тестирование: JUnit, Mockito.

Дополнительные области:

  • Разработка и потребление REST API.
  • Основы многопоточности в Java.
  • Алгоритмы и структуры данных.
  • Паттерны проектирования (Singleton, Factory, Observer).

Пример кода на Spring Boot:

@RestController
@RequestMapping("/api/users")
public class UserController {
    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/{id}")
    public ResponseEntity<UserDto> getUser(@PathVariable Long id) {
        UserDto user = userService.findById(id);
        return ResponseEntity.ok(user);
    }
}

Ответ 18+ 🔞

А, ну вот, смотри, пришёл очередной джедай со списком технологий, как в магазин за продуктами. Ну что ж, разложим по полочкам, блядь, посмотрим, что у тебя в арсенале.

Ну, Java Core — это святое, без этого вообще нихуя. Это как алфавит выучить, блядь. А дальше пошла уже конкретика, епта.

Основные фреймворки и ORM:

  • Spring Framework: Ну, конечно, блядь, куда ж без него. Spring Boot, чтобы с одного пинка поднять приложение, Spring MVC, чтобы запросы разгребать, Spring Data, чтобы с базой не ебаться вручную, и Spring Security, чтобы всякие левые пидорасы не ломились куда не надо. Стандартный набор, чё.
  • Hibernate: Ага, чтобы объекты в таблицы превращать и обратно, магия, блядь, чистой воды. Главное — N+1 проблему не создай, а то заебёшь всех.

Базы данных и SQL:

  • PostgreSQL, MySQL: Ну, выбор есть — это хорошо. Один — для серьёзных проектов, другой — чтоб побыстрее. JOIN'ы там всякие, индексы... Понимание есть? А то бывает, запрос пишешь, а он выполняется, пока чай второй раз заваришь, ебать.
  • Написание и оптимизация SQL: Вот это уже дело. EXPLAIN ANALYZE — твой лучший друг, когда всё ебёт мозг и тормозит.

Инструменты и практики:

  • Maven, Gradle: Ну, собрать проект, зависимости подтянуть — база. Gradle, говорят, шустрее, но Maven — как старый добрый тапок, блядь.
  • Docker: О, это модно-молодёжно. Запаковал своё творение в контейнер и спи спокойно. "А у меня на машине работало!" — это уже не прокатит, ёпта.
  • Git: Ну, а куда без него? commit, push, pull, merge, а потом орать "БЛЯДЬ, КТО МОЙ КОД ПОЛОМАЛ?!" — священный ритуал.
  • JUnit, Mockito: Чтобы твой код не развалился при первом же чихе. Замокал зависимости и тестируй, не выходя из кабинета. Красота.

Дополнительные области:

  • REST API: Ну, это сейчас везде. JSON'ы туда-сюда, статусы 200, 404, 500... Главное, @RestController не забудь, а то нихуя не заработает.
  • Многопоточность: О, это уже опасно. synchronized, volatile, ConcurrentHashMap... Один неверный шаг — и race condition тебя сожрёт, в рот меня чих-пых.
  • Алгоритмы и структуры данных: Ну, чтобы на собеседовании блеснуть, когда спросят про сложность O(n log n). В работе-то ArrayList и HashMap хватает за глаза, блядь.
  • Паттерны проектирования: Singleton, чтобы один экземпляр был, Factory, чтобы объекты штамповать, Observer, чтобы все оповещать... Знакомые всё лица, да.

И пример кода твой, Spring Boot-овский:

@RestController
@RequestMapping("/api/users")
public class UserController {
    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/{id}")
    public ResponseEntity<UserDto> getUser(@PathVariable Long id) {
        UserDto user = userService.findById(id);
        return ResponseEntity.ok(user);
    }
}

Стандартный контроллер, чё. @Autowired через конструктор — это грамотно, не как некоторые, которые прямо в поля инжектят, ебушки-воробушки. Возвращаешь ResponseEntity — тоже правильно, статусы контролировать можно. В общем, основа есть, блядь. Теперь бы это всё в одном проекте живом применить, чтобы не в теории, а на практике понять, где оно всё взаимно ебётся.