Представь, что API, который вы писали с командой, внезапно начал отвечать в пять раз дольше. Что бы ты стал проверять и с чего начал расследование?

В одном из проектов на Go я повысил эффективность REST API, оптимизировав обработку запросов и уменьшив время отклика.

Короткий ответ

Что ответить на собеседовании

В одном из проектов на Go я повысил эффективность REST API, оптимизировав обработку запросов и уменьшив время отклика.

Подробный разбор

Ответ с пояснениями

В одном из проектов на Go я повысил эффективность REST API, оптимизировав обработку запросов и уменьшив время отклика.

Что было сделано:

  1. Кэширование: добавил кэширование часто запрашиваемых данных с помощью in-memory кэша (например, Redis или встроенный map с mutex), чтобы снизить нагрузку на базу данных.
  2. Параллельная обработка: использовал горутины для параллельного выполнения независимых операций внутри обработки запроса.
  3. Оптимизация запросов к базе: переписал SQL-запросы, добавил индексы, чтобы уменьшить время выполнения.
  4. Использование контекста (context.Context): для своевременного прерывания долгих запросов и освобождения ресурсов.

Пример кода с кэшированием и горутинами:

var cache = make(map[string]string)
var mu sync.RWMutex

func getData(key string) (string, error) {
    mu.RLock()
    if val, ok := cache[key]; ok {
        mu.RUnlock()
        return val, nil
    }
    mu.RUnlock()

    // Имитация запроса к базе
    data := "данные из БД для " + key

    mu.Lock()
    cache[key] = data
    mu.Unlock()

    return data, nil
}

func handler(w http.ResponseWriter, r *http.Request) {
    key := r.URL.Query().Get("key")

    // Параллельное получение данных
    var wg sync.WaitGroup
    var result string
    var err error

    wg.Add(1)
    go func() {
        defer wg.Done()
        result, err = getData(key)
    }()

    wg.Wait()

    if err != nil {
        http.Error(w, "Ошибка", http.StatusInternalServerError)
        return
    }

    w.Write([]byte(result))
}

В результате время отклика API снизилось, а нагрузка на базу уменьшилась, что повысило общую производительность сервиса.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее