Вопрос на собеседовании · Go-разработчик
Почему map не потокобезопасна и что будет при конкурентной записи?
Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.
Обычная map в Go не поддерживает конкурентную запись и одновременное чтение с записью без синхронизации. Такие операции создают data race, могут завершить программу runtime-ошибкой и в любом случае делают поведение некорректным.
Типичное решение — защищать карту sync.Mutex или sync.RWMutex и определить единое место владения. sync.Map полезна для специальных профилей нагрузки, но не является автоматической заменой map с мьютексом.
01 · Структура ответа
Что важно сказать интервьюеру
Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:
02 · Пример
Как объяснить на практике
Кеш хранит map и RWMutex. Get берёт RLock, Set — Lock. Операция get-or-create не должна отпускать блокировку между проверкой и записью, иначе два запроса одновременно создадут одно значение.
Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.
03 · Ошибки
Чего избегать в ответе
04 · Углубление
Что могут спросить следом
- Когда использовать RWMutex?
- Для чего подходит sync.Map?
- Как организовать карту через одну goroutine-владельца?
Практика ответа
Ответьте вслух, а не про себя
Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с опорой.
Mira