GO Go  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

defer, panic и recover

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат и результаты по 5 тематическим шкалам с объяснениями и практическими рекомендациями.
Вопрос 1 из 25
В разделе «Порядок defer» показан конкретный случай. Какой результат даст этот код на поддерживаемой реализации Go?
GoПорядок defer: результат выполнения
// Фрагмент для трассировки.
package main
import "fmt"
func main(){ for i:=1;i<=3;i++{ defer fmt.Print(i," ") } }
Вопрос 2 из 25
Команда проверяет решение по теме «Порядок defer». Что нужно поменять, чтобы граничный случай не превратился в сбой?
GoПорядок defer: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "fmt"
func main(){ for i:=1;i<=3;i++{ defer fmt.Print(i," ") } }
Вопрос 3 из 25
Перед публикацией кода по теме «Порядок defer» нужно уточнить контракт. Какое свойство конструкции определяет её поведение?
GoПорядок defer: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "fmt"
func main(){ for i:=1;i<=3;i++{ defer fmt.Print(i," ") } }
Вопрос 4 из 25
В рабочем примере по теме «Порядок defer» важно отделить гарантию от догадки. Что стоит проверить до переноса решения в общий компонент?
Вопрос 5 из 25
Фрагмент относится к теме «Порядок defer». Как точнее всего описать пользу и цену этого решения?
Вопрос 6 из 25
Команда проверяет решение по теме «Паника». К какому результату приводит показанная конструкция?
GoПаника: результат выполнения
// Фрагмент для трассировки.
package main
import "fmt"
func main(){ defer fmt.Println("cleanup"); panic("broken invariant") }
Вопрос 7 из 25
Перед публикацией кода по теме «Паника» нужно уточнить контракт. Какую правку стоит предложить на ревью, сохранив назначение кода?
GoПаника: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
import "fmt"
func main(){ defer fmt.Println("cleanup"); panic("broken invariant") }
Вопрос 8 из 25
В рабочем примере по теме «Паника» важно отделить гарантию от догадки. На какой контракт языка или стандартной библиотеки здесь нужно опереться?
GoПаника: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
import "fmt"
func main(){ defer fmt.Println("cleanup"); panic("broken invariant") }
Вопрос 9 из 25
Фрагмент относится к теме «Паника». Какое ограничение опаснее всего пропустить?
Вопрос 10 из 25
На ревью разбирают тему «Паника». Какой вывод о сопровождении решения наиболее взвешенный?
Вопрос 11 из 25
Перед публикацией кода по теме «Восстановление recover» нужно уточнить контракт. Как завершится показанный фрагмент при указанных входных данных?
GoВосстановление recover: результат выполнения
// Фрагмент для трассировки.
package main
func run(){ defer func(){ _=recover() }(); panic("boom") }
func main(){ run() }
Вопрос 12 из 25
В рабочем примере по теме «Восстановление recover» важно отделить гарантию от догадки. Что здесь следует изменить прежде всего?
GoВосстановление recover: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
func run(){ defer func(){ _=recover() }(); panic("boom") }
func main(){ run() }
Вопрос 13 из 25
Фрагмент относится к теме «Восстановление recover». Какое правило отделяет верный разбор от правдоподобной догадки?
GoВосстановление recover: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
func run(){ defer func(){ _=recover() }(); panic("boom") }
func main(){ run() }
Вопрос 14 из 25
На ревью разбирают тему «Восстановление recover». Какой крайний случай обязан попасть в тесты?
Вопрос 15 из 25
В разделе «Восстановление recover» показан конкретный случай. Какой выбор лучше отражает баланс простоты и контроля?
Вопрос 16 из 25
В рабочем примере по теме «Границы восстановления» важно отделить гарантию от догадки. Как изменится состояние программы после этого фрагмента?
GoГраницы восстановления: результат выполнения
// Фрагмент для трассировки.
package main
func main(){
    defer func(){ _=recover() }()
    done:=make(chan struct{})
    go func(){ defer close(done); panic("worker") }()
    <-done
}
Вопрос 17 из 25
Фрагмент относится к теме «Границы восстановления». Какое замечание на ревью будет наиболее точным?
GoГраницы восстановления: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package main
func main(){
    defer func(){ _=recover() }()
    done:=make(chan struct{})
    go func(){ defer close(done); panic("worker") }()
    <-done
}
Вопрос 18 из 25
На ревью разбирают тему «Границы восстановления». Какое правило важнее случайных деталей конкретного запуска?
GoГраницы восстановления: проверка контракта
// Определите правило Go, которое объясняет результат.
package main
func main(){
    defer func(){ _=recover() }()
    done:=make(chan struct{})
    go func(){ defer close(done); panic("worker") }()
    <-done
}
Вопрос 19 из 25
В разделе «Границы восстановления» показан конкретный случай. Где корректный фрагмент легко становится ошибочным?
Вопрос 20 из 25
Команда проверяет решение по теме «Границы восстановления». Что учитывать при выборе этого приёма для публичного API?
Вопрос 21 из 25
Фрагмент относится к теме «Тестирование и наблюдаемость». Какой результат даст этот код на поддерживаемой реализации Go?
GoТестирование и наблюдаемость: результат выполнения
// Фрагмент для трассировки.
package sample
import "testing"
func TestPanic(t *testing.T){
    defer func(){ if recover()==nil { t.Fatal("panic expected") } }()
    panic("x")
}
Вопрос 22 из 25
На ревью разбирают тему «Тестирование и наблюдаемость». Что нужно поменять, чтобы граничный случай не превратился в сбой?
GoТестирование и наблюдаемость: фрагмент на ревью
// Фрагмент из ревью: требуется выбрать безопасную правку.
package sample
import "testing"
func TestPanic(t *testing.T){
    defer func(){ if recover()==nil { t.Fatal("panic expected") } }()
    panic("x")
}
Вопрос 23 из 25
В разделе «Тестирование и наблюдаемость» показан конкретный случай. Какое свойство конструкции определяет её поведение?
GoТестирование и наблюдаемость: проверка контракта
// Определите правило Go, которое объясняет результат.
package sample
import "testing"
func TestPanic(t *testing.T){
    defer func(){ if recover()==nil { t.Fatal("panic expected") } }()
    panic("x")
}
Вопрос 24 из 25
Команда проверяет решение по теме «Тестирование и наблюдаемость». Что стоит проверить до переноса решения в общий компонент?
Вопрос 25 из 25
Перед публикацией кода по теме «Тестирование и наблюдаемость» нужно уточнить контракт. Как точнее всего описать пользу и цену этого решения?

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

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

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

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