Go онлайн: редактор и компилятор для собеседований
Пишите и запускайте программы на Go прямо в браузере, без установки тулчейна: код компилируется на сервере, ошибки и вывод видны сразу. Для собеседования откройте общую сессию и отправьте ссылку кандидату. Бесплатно и без регистрации.
Бесплатно, без регистрацииКак провести лайвкодинг-собеседование на GoСовместный редактор кода: сравнение сервисовПример кода
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
words := strings.Fields("go is fun and go is fast")
count := map[string]int{}
for _, w := range words {
count[w]++
}
keys := make([]string, 0, len(count))
for k := range count {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
fmt.Printf("%s=%d ", k, count[k])
}
fmt.Println()
}
Вывод
and=1 fast=1 fun=1 go=2 is=2
Что умеет редактор
- Go 1.16: программа компилируется и выполняется на сервере в изолированной песочнице, ошибки компиляции и вывод видят все участники.
- Стандартная библиотека под рукой: strings, sort, strconv, container/heap, горутины и каналы.
- Автотесты: если у задачи есть юнит-тесты, их можно запустить из сессии и увидеть, сколько прошло.
- Совместное редактирование в реальном времени: до 5 участников в одной сессии, правки и курсоры видны сразу.
- Банк задач открыт без входа. После бесплатного входа — свои задачи, режим интервью с таймерами, оценка кандидата и история собеседований.
Как провести собеседование
- Нажмите «Провести собеседование» — сессия создастся с примером программы, его можно заменить своей задачей.
- Опишите условие в Markdown и отправьте ссылку кандидату: регистрация ему не нужна.
- Попросите кандидата проверять решение вызовами из main и выводом через fmt. Входные данные задавайте в коде или в поле «Ввод (stdin)» над выводом — его видят все участники.
Типичные задачи на собеседовании
- Посчитать частоту слов через map и вывести их в стабильном порядке: почему порядок обхода map в Go случаен.
- Запустить несколько горутин, собрать результаты через канал и дождаться их с sync.WaitGroup.
- Написать пул воркеров с ограничением на число одновременных задач.
- Реализовать стек и очередь на срезах и объяснить, когда append выделяет новую память.
- Обработать ошибки идиоматично: вернуть error, обернуть его через fmt.Errorf и проверить через errors.Is.
- Найти k самых частых элементов с помощью container/heap.
Задачи на Go с проверкой онлайн
Ограничения
- Это Go 1.16: дженериков ещё нет, они появились в Go 1.18. Пишите функции для конкретных типов или через interface{}.
- Доступна только стандартная библиотека: сторонние модули не скачиваются.
- Сборка и запуск вместе ограничены 3 секундами и 64 КБ вывода: go run собирает программу в том же запуске.
Частые вопросы
- Какая версия Go используется?
- Go 1.16. Программа компилируется и запускается на сервере, поэтому результат одинаков у всех участников.
- Можно ли использовать дженерики?
- Нет: дженерики появились в Go 1.18, а здесь Go 1.16. Для задач собеседования хватает конкретных типов, срезов и map.
- Работают ли горутины и каналы?
- Да, это обычная программа на Go. Только помните, что один запуск ограничен 3 секундами: дождитесь горутин через sync.WaitGroup или канал, иначе main завершится раньше.
- Есть ли автотесты для Go?
- Да. Если у задачи есть юнит-тесты, их можно запустить из сессии. Свои задачи с тестами доступны после бесплатного входа. Задачи банка с пометкой «Любой язык» открываются с заготовкой и тестами на Go.
- Нужна ли регистрация?
- Нет. Редактор открывается сразу, а кандидату для собеседования достаточно ссылки и имени. Банк задач тоже открыт без входа. Вход нужен для своих задач, режима интервью и истории.