Go · 35 строк
Resolve ищет координаты адреса подачи такси. Ответ нужен за 300 мс, иначе приложение просит поставить точку на карте. Вызовов — 5 000 в секунду, около 3 % не укладываются в таймаут.
Отметьте строки с ошибками.
В работе: Определение точки подачи по введённому адресу.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Плюс 1 вопрос про поведение программы — на зачёт не влияют. Ответ один на подход: после него показываем разбор.
Источник: на задачах Яндекса: геокодер для такси. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
package geoimport ("context""errors""time")var ErrTimeout = errors.New("геокодер не ответил за 300 мс")type Point struct{ Lat, Lon float64 }type Geocoder interface {Geocode(ctx context.Context, addr string) (Point, error)}// Resolve ищет координаты адреса подачи такси.func Resolve(g Geocoder, addr string) (Point, error) {ch := make(chan Point)go func() {p, err := g.Geocode(context.Background(), addr)if err != nil {return}ch <- p}()select {case p := <-ch:return p, nilcase <-time.After(300 * time.Millisecond):return Point{}, ErrTimeout}}