Перейти к содержимому

Необходимо реализовать middleware. Middleware будет отбрасывать n+1 запрос за секунду. Мы не пропускаем больше 100 запро

go · concurrencyKaspersky / Касперский - 52 кв 2025не решено

Необходимо реализовать middleware. Middleware будет отбрасывать n+1 запрос за секунду. Мы не пропускаем больше 100 запросов, например, как у нас здесь на 25 строчке указано, за одну секунду. То есть, если 101 пришел, то мы вернем клиенту ошибку с 429 статусом. Можно доработать конструктор, можно доработать структуру и можно добавить дополнительные приватные методы, если они нужны. Все, что выше комментария, править разрешено, все, что ниже комментария - не править. Как много памяти будет потреблять алгоритм и может ли быть проблема с памятью? Какова алгоритмическая сложность алгоритма? Как можно уменьшить алгоритмическую сложность?

type RateLimiter struct {
N int
}
func NewRateLimiter(n int) *RateLimiter {
return &RateLimiter{}
}
func (rl *RateLimiter) Middleware(h func(w http.ResponseWriter, r *http.Request)) func(w http.ResponseWriter) {
return h
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Println("REQUEST COMPLETED ")
}
func main() {
rl := NewRateLimiter(100)
http.HandleFunc("/", rl.Middleware(handler))
go func() {
for i := 0; i < 1000; i++ {
time.Sleep(10 * time.Millisecond)
if _, err := http.Get("http://localhost:8080/"); err != nil {
log.Fatal(err)
}
os.Exit(0)
}
}()
}

Источник: Kaspersky / Касперский - 5 · 2 кв 2025

← Что выведется в первом, во втором и в т… · Все задачи · Go · Что выведет этот код? →