Сегодня я работал над прототипом некоторого кода для выполнения следующих действий.
- Буферизация ряда объектов в памяти (порядок не важен)
- Обработайте буферизованные объекты одним пакетом, используя…
- startBatch() // установка
- для каждого объекта в буфере: сделать что-нибудь()
- stopBatch() // фиксация
- При закрытии кода любые оставшиеся объекты в буфере должны быть обработаны пакетно (некоторая потеря данных здесь допустима).
У меня ушло более 4 часов, и я до сих пор не закончил этот прототип. Я обнаружил, что попробовал несколько разных дизайнов.
Однажды у меня был момент «ага» вокруг каналов. Я неоднократно ловил себя на том, что гуглю поведение каналов — идет блокировка при чтении с закрытого канала или нет? Блокирует ли go чтение с пустого канала? Каков синтаксис для указания буферизованного канала? Выходит ли оператор break внутри оператора select из оператора select или его окружения for? Я не знаю эти вещи наизусть, поэтому мне требуется некоторое время, чтобы изучить их детали и правильно составить дизайн. Если бы вы попросили меня сделать это во время собеседования как «простой вопрос по программированию», я бы потерпел неудачу.
То, что вы считаете простым вопросом, может не быть таковым. В некоторых случаях ваш вопрос может быть проверкой знаний кандидата в языке. Учитывая, что большинство из нас считает, что компетентный программист может быстро выучить новый язык, вы должны спросить себя, правильно ли вы тестируете.