В этой подборке вопросы сгруппированы по формату «Лайвкодинг», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: frontend, browser, database.
Используйте singleflight.Group с ключом name: совпадающие незавершённые вызовы получат общий результат, а разные имена выполнятся независимо. Это объединение запросов, не постоянный кэш.
Паттерн fan-in пересылает значения каждого входного канала в общий выход и закрывает его после окончания всех источников. Порядок между разными потоками не фиксируется.
Храните User вместе со сроком истечения под mutex. Таймер удаляет запись автоматически, а Get дополнительно проверяет TTL, чтобы не вернуть просроченное значение при задержке callback.
LRU реализуется сочетанием map и двусвязного списка: map находит запись за O(1) в среднем, список переносит её в начало и удаляет самый давно использованный элемент с конца.
Могут быть напечатаны некоторые числа от 0 до 4999 в произвольном порядке; полный набор не гарантирован, потому что main не ждёт горутины. Разделителей между числами тоже нет.
Используйте горутину-потребитель, которая последовательно читает числа из канала и вызывает printNumber. Она сохранит порядок и секундную паузу, а main дождётся завершения.
Программа сначала вызовет печать hello, затем при раскрутке panic выполнит defer и напечатает world. После этого необработанная panic завершит программу с диагностикой error.
Главная проблема — ожидание через Sleep вместо подтверждения завершения горутин. Для явного управления таймером используйте NewTimer и Stop, а для ожидания — WaitGroup.
Замените Sleep на WaitGroup: Add вызывается до запуска, Done — через defer, Wait — после цикла. В каждом запросе обработайте сетевую ошибку, HTTP-статус и чтение тела.