Какие задачи вы выполняли на последнем проекте? Опишите свой опыт.

Ответ

В качестве примера ответа:

"На последнем проекте я занимался разработкой высоконагруженных микросервисов для платежной системы на Go. В мои основные обязанности входило:

  • Проектирование и реализация REST/gRPC API для взаимодействия между сервисами (использовал фреймворки Gin и стандартную библиотеку net/http).
  • Работа с базой данных PostgreSQL: написание миграций (goose/migrate), оптимизация сложных SQL-запросов с помощью EXPLAIN ANALYZE и обеспечение консистентности данных.
  • Написание unit и интеграционных тестов с использованием стандартного пакета testing и библиотеки testify для повышения покрытия и надежности кода.
  • Контейнеризация приложений с помощью Docker и оркестрация локального окружения через docker-compose.
  • Настройка CI/CD пайплайнов на GitHub Actions для автоматической сборки, тестирования и развертывания приложений.
  • Активное участие в code review для поддержания высокого качества кодовой базы и обмена знаниями в команде.

Пример простого обработчика на Gin:

func (h *Handler) CreateUser(c *gin.Context) {
    var input UserInput
    if err := c.ShouldBindJSON(&input); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": "invalid input"})
        return
    }

    // ... вызов сервисного слоя для создания пользователя ...

    c.Status(http.StatusCreated)
}

"

Ответ 18+ 🔞

Давай я тебе расскажу, на чём я последний раз собаку съел, а то резюме эти — пиздец как надоели. Сидел я, значит, на одном проекте, где микросервисов было, как говна за баней. Платежная система, всё серьёзно, блядь. И вот чем я там мозги выносил:

  • Эти ваши REST и gRAPI-шные API — проектировал и пилил их так, чтобы они друг с другом не ругались, как бабки на лавочке. Использовал Gin, а иногда и голый net/http, когда хотелось почувствовать себя настоящим мужчиной, а не пижоном с фреймворком.
  • База данных PostgreSQL — моя боль и любовь. Писал миграции, которые потом сам же проклинал. Оптимизировал запросы через EXPLAIN ANALYZE до такого состояния, что они летали, как угорелые. Консистентность данных — святое, иначе потом ищи-свищи, где хуйня вылезла.
  • Тесты, блядь, тесты — unit-тесты, интеграционные тесты, покрытие кода. Стандартный testing и testify — мои лучшие друзья на ночных дебагах, когда всё ебнулось и нужно понять, кто из нас двоих идиот.
  • Docker и docker-compose — заворачивал всё это добро в контейнеры, чтобы на любой машине поднялось, а не как обычно: «ой, а у меня на локалке работает».
  • CI/CD на GitHub Actions — настраивал пайплайны, чтобы при каждом пуше автоматически собиралось, тестировалось и, если не сломалось, летело в прод. Сам себе сапожник, сам себе и деплой.
  • Code review — священная война. Сидишь, смотришь в чужой код и думаешь: «Мужик, ты это серьёзно?». Или наоборот, учишься у коллег каким-то трюкам, от которых сам офигеваешь.

Вот, например, кусочек кода, который я мог написать с закрытыми глазами, но всё равно потом десять раз перепроверял:

func (h *Handler) CreateUser(c *gin.Context) {
    var input UserInput
    if err := c.ShouldBindJSON(&input); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": "invalid input"})
        return
    }

    // ... тут вызывается сервис, где вся магия и потенциальные косяки ...

    c.Status(http.StatusCreated)
}

Вот такая, блядь, работа. Не сахар, но зато интересно, когда всё летает и не падает в три часа ночи.