GO Go  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Middleware

Проверяет обёртки обработчиков, структурированные журналы, аутентификацию, порядок цепочки и безопасную работу промежуточных слоёв под нагрузкой. В тесте 30 вопросов, из них 18 требуют чтения кода, команд или диагностических фрагментов. Задания опираются на устойчивые правила современного Go; если поведение зависит от версии, это оговорено в самом вопросе.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат и результаты по 6 тематическим шкалам с объяснениями и практическими рекомендациями.
Вопрос 1 из 30
В разделе «Обёртки handler» показан конкретный случай. Какой результат даст этот код на поддерживаемой реализации Go?
GoОбёртки handler: результат выполнения
// Фрагмент для трассировки.
package main
import("fmt";"net/http")
func trace(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){fmt.Println("before");next.ServeHTTP(w,r);fmt.Println("after")})}
func main(){}
Вопрос 2 из 30
Команда проверяет решение по теме «Обёртки handler». Что нужно поменять, чтобы граничный случай не превратился в сбой?
GoОбёртки handler: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import("fmt";"net/http")
func trace(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){fmt.Println("before");next.ServeHTTP(w,r);fmt.Println("after")})}
func main(){}
Вопрос 3 из 30
Перед публикацией кода по теме «Обёртки handler» нужно уточнить контракт. Какое свойство конструкции определяет её поведение?
GoОбёртки handler: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import("fmt";"net/http")
func trace(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){fmt.Println("before");next.ServeHTTP(w,r);fmt.Println("after")})}
func main(){}
Вопрос 4 из 30
В рабочем примере по теме «Обёртки handler» важно отделить гарантию от догадки. Что стоит проверить до переноса решения в общий компонент?
Вопрос 5 из 30
Фрагмент относится к теме «Обёртки handler». Как точнее всего описать пользу и цену этого решения?
Вопрос 6 из 30
Команда проверяет решение по теме «Логи». К какому результату приводит показанная конструкция?
GoЛоги: результат выполнения
// Фрагмент для трассировки.
package main
import "net/http"
type capture struct{ http.ResponseWriter; status int }
func(c *capture)WriteHeader(n int){c.status=n;c.ResponseWriter.WriteHeader(n)}
func main(){}
Вопрос 7 из 30
Перед публикацией кода по теме «Логи» нужно уточнить контракт. Какую правку стоит предложить на ревью, сохранив назначение кода?
GoЛоги: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "net/http"
type capture struct{ http.ResponseWriter; status int }
func(c *capture)WriteHeader(n int){c.status=n;c.ResponseWriter.WriteHeader(n)}
func main(){}
Вопрос 8 из 30
В рабочем примере по теме «Логи» важно отделить гарантию от догадки. На какой контракт языка или стандартной библиотеки здесь нужно опереться?
GoЛоги: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "net/http"
type capture struct{ http.ResponseWriter; status int }
func(c *capture)WriteHeader(n int){c.status=n;c.ResponseWriter.WriteHeader(n)}
func main(){}
Вопрос 9 из 30
Фрагмент относится к теме «Логи». Какое ограничение опаснее всего пропустить?
Вопрос 10 из 30
На ревью разбирают тему «Логи». Какой вывод о сопровождении решения наиболее взвешенный?
Вопрос 11 из 30
Перед публикацией кода по теме «Аутентификация» нужно уточнить контракт. Как завершится показанный фрагмент при указанных входных данных?
GoАутентификация: результат выполнения
// Фрагмент для трассировки.
package main
import "net/http"
func auth(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){if r.Header.Get("Authorization")!="Bearer ok"{http.Error(w,"unauthorized",401);return};next.ServeHTTP(w,r)})}
func main(){}
Вопрос 12 из 30
В рабочем примере по теме «Аутентификация» важно отделить гарантию от догадки. Что здесь следует изменить прежде всего?
GoАутентификация: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "net/http"
func auth(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){if r.Header.Get("Authorization")!="Bearer ok"{http.Error(w,"unauthorized",401);return};next.ServeHTTP(w,r)})}
func main(){}
Вопрос 13 из 30
Фрагмент относится к теме «Аутентификация». Какое правило отделяет верный разбор от правдоподобной догадки?
GoАутентификация: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "net/http"
func auth(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){if r.Header.Get("Authorization")!="Bearer ok"{http.Error(w,"unauthorized",401);return};next.ServeHTTP(w,r)})}
func main(){}
Вопрос 14 из 30
На ревью разбирают тему «Аутентификация». Какой крайний случай обязан попасть в тесты?
Вопрос 15 из 30
В разделе «Аутентификация» показан конкретный случай. Какой выбор лучше отражает баланс простоты и контроля?
Вопрос 16 из 30
В рабочем примере по теме «Порядок цепочки» важно отделить гарантию от догадки. Как изменится состояние программы после этого фрагмента?
GoПорядок цепочки: результат выполнения
// Фрагмент для трассировки.
package main
import "net/http"
func chain(h http.Handler)http.Handler{ return recoverMW(logMW(auth(h))) }
func recoverMW(h http.Handler)http.Handler{return h};func logMW(h http.Handler)http.Handler{return h};func auth(h http.Handler)http.Handler{return h}
func main(){}
Вопрос 17 из 30
Фрагмент относится к теме «Порядок цепочки». Какое замечание на ревью будет наиболее точным?
GoПорядок цепочки: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "net/http"
func chain(h http.Handler)http.Handler{ return recoverMW(logMW(auth(h))) }
func recoverMW(h http.Handler)http.Handler{return h};func logMW(h http.Handler)http.Handler{return h};func auth(h http.Handler)http.Handler{return h}
func main(){}
Вопрос 18 из 30
На ревью разбирают тему «Порядок цепочки». Какое правило важнее случайных деталей конкретного запуска?
GoПорядок цепочки: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "net/http"
func chain(h http.Handler)http.Handler{ return recoverMW(logMW(auth(h))) }
func recoverMW(h http.Handler)http.Handler{return h};func logMW(h http.Handler)http.Handler{return h};func auth(h http.Handler)http.Handler{return h}
func main(){}
Вопрос 19 из 30
В разделе «Порядок цепочки» показан конкретный случай. Где корректный фрагмент легко становится ошибочным?
Вопрос 20 из 30
Команда проверяет решение по теме «Порядок цепочки». Что учитывать при выборе этого приёма для публичного API?
Вопрос 21 из 30
Фрагмент относится к теме «Тестирование и наблюдаемость» в тесте «Middleware». Какой результат даст этот код на поддерживаемой реализации Go?
GoТестирование и наблюдаемость: результат выполнения
// Фрагмент для трассировки.
package sample
import("net/http";"net/http/httptest";"testing")
func TestAuthStops(t *testing.T){called:=0;next:=http.HandlerFunc(func(http.ResponseWriter,*http.Request){called++});r:=httptest.NewRequest("GET","/",nil);w:=httptest.NewRecorder();auth(next).ServeHTTP(w,r);if called!=0||w.Code!=401{t.Fatal(called,w.Code)}}
func auth(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){http.Error(w,"no",401)})}
Вопрос 22 из 30
На ревью разбирают тему «Тестирование и наблюдаемость» в тесте «Middleware». Что нужно поменять, чтобы граничный случай не превратился в сбой?
GoТестирование и наблюдаемость: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package sample
import("net/http";"net/http/httptest";"testing")
func TestAuthStops(t *testing.T){called:=0;next:=http.HandlerFunc(func(http.ResponseWriter,*http.Request){called++});r:=httptest.NewRequest("GET","/",nil);w:=httptest.NewRecorder();auth(next).ServeHTTP(w,r);if called!=0||w.Code!=401{t.Fatal(called,w.Code)}}
func auth(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){http.Error(w,"no",401)})}
Вопрос 23 из 30
В разделе «Тестирование и наблюдаемость» показан конкретный случай в тесте «Middleware». Какое свойство конструкции определяет её поведение?
GoТестирование и наблюдаемость: проверка контракта
// Определите правило Go, которое объясняет результат.
package sample
import("net/http";"net/http/httptest";"testing")
func TestAuthStops(t *testing.T){called:=0;next:=http.HandlerFunc(func(http.ResponseWriter,*http.Request){called++});r:=httptest.NewRequest("GET","/",nil);w:=httptest.NewRecorder();auth(next).ServeHTTP(w,r);if called!=0||w.Code!=401{t.Fatal(called,w.Code)}}
func auth(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){http.Error(w,"no",401)})}
Вопрос 24 из 30
Команда проверяет решение по теме «Тестирование и наблюдаемость» в тесте «Middleware». Что стоит проверить до переноса решения в общий компонент?
Вопрос 25 из 30
Перед публикацией кода по теме «Тестирование и наблюдаемость» нужно уточнить контракт в тесте «Middleware». Как точнее всего описать пользу и цену этого решения?
Вопрос 26 из 30
На ревью разбирают тему «Конкурентность и эксплуатация». К какому результату приводит показанная конструкция?
GoКонкурентность и эксплуатация: результат выполнения
// Фрагмент для трассировки.
package main
import("net/http";"sync/atomic")
var requests atomic.Uint64
func count(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){requests.Add(1);next.ServeHTTP(w,r)})}
func main(){}
Вопрос 27 из 30
В разделе «Конкурентность и эксплуатация» показан конкретный случай. Какую правку стоит предложить на ревью, сохранив назначение кода?
GoКонкурентность и эксплуатация: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import("net/http";"sync/atomic")
var requests atomic.Uint64
func count(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){requests.Add(1);next.ServeHTTP(w,r)})}
func main(){}
Вопрос 28 из 30
Команда проверяет решение по теме «Конкурентность и эксплуатация». На какой контракт языка или стандартной библиотеки здесь нужно опереться?
GoКонкурентность и эксплуатация: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import("net/http";"sync/atomic")
var requests atomic.Uint64
func count(next http.Handler)http.Handler{return http.HandlerFunc(func(w http.ResponseWriter,r *http.Request){requests.Add(1);next.ServeHTTP(w,r)})}
func main(){}
Вопрос 29 из 30
Перед публикацией кода по теме «Конкурентность и эксплуатация» нужно уточнить контракт. Какое ограничение опаснее всего пропустить?
Вопрос 30 из 30
В рабочем примере по теме «Конкурентность и эксплуатация» важно отделить гарантию от догадки. Какой вывод о сопровождении решения наиболее взвешенный?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу