
Итераторы своими руками в Python: протокол __iter__ и __next__
Разбираем, как for на самом деле обходит объекты, чем итератор отличается от итерируемого и почему одноразовый итератор ломается при повторном проходе.

Разбираем, как for на самом деле обходит объекты, чем итератор отличается от итерируемого и почему одноразовый итератор ломается при повторном проходе.

Разбираем, какие dunder-методы делают ваш класс похожим на список: индексация, срезы, len, итерация и распаковка. Что реализовать, чтобы объект вёл себя предсказуемо, и где это ломается.

Один вызов reflect.ValueOf превращает статически типизированный Go в интерпретатор рантайма. Разбираем, что происходит внутри, почему рефлексия аллоцирует и когда её цена оправдана.

append на срезе-подрезке молча портит соседние данные, а один долгоживущий срез держит в памяти мегабайтный буфер. Разбираем, как это устроено внутри и что искать на ревью.

Как объявить и правильно инициализировать static-поля и методы, где их определять и что изменилось с C++17. Разбор на рабочих примерах с проверкой каждого шага.

Дженерики в Go 1.18+ убрали часть interface{} и рефлексии, но принесли раздувание бинарника, ограничения по методам и новую точку споров в код-ревью. Разбираем, где это меняет архитектуру.

Static-поле живёт вне объекта, инициализируется один раз и до C++17 требует определения в .cpp. Разбираем, где это выстреливает и как inline-переменные и function-local static меняют картину.

Незакрытый канал держит горутину живой, буфер прячет дедлок до пиковой нагрузки, а select с default незаметно превращает вашу очередь в busy-loop. Разбираем, где каналы стоят дороже, чем кажется.

Сервис на Go держит нагрузку до определённого предела, а потом latency растёт вертикально, и в логах — accept: too many open files. Разбираем, что упирается первым при 100k одновременных соединений и как это мерить.

Счётчик метрик под нагрузкой в 500 горутин упёрся в contention на одном мьютексе. Разбираем, когда sync.Mutex, sync/atomic и sharding дают разную цену и как это измерить самому.

На собеседованиях любят спрашивать, чем struct отличается от class в C++. Правильный ответ короче, чем кажется, а практические последствия — глубже, чем «одно для данных, другое для логики».

Пустой HTTP-сервис на Go компилируется в 8-мегабайтный бинарь ещё до того, как вы написали бизнес-логику. Разбираем, из чего он состоит и какими флагами и приёмами его реально уменьшить.