Подборка объединяет вопросы, отмеченные на этапах интервью в Action tech. Здесь можно понять структуру технической проверки и заранее повторить связанные темы. В подборке чаще встречаются темы: linux, python.
Ленивое свойство можно реализовать non-data descriptor: при первом чтении вычислить значение и записать его в instance.__dict__. Дальнейшее чтение найдёт сохранённый атрибут без повторного вычисления.
Адаптивный интерпретатор ускоряет часто повторяющиеся динамические операции через специализацию инструкций по наблюдаемым данным. Семантика языка сохраняется: при изменении условий используется общий путь.
__slots__ обычно задаёт фиксированные места для ссылок на атрибуты в экземпляре и дескрипторы доступа к ним. Без __dict__ неизвестное имя некуда сохранить, поэтому добавление такого атрибута запрещено.
Context в CPython основан не на обычной изменяемой хеш-таблице dict, а на персистентной структуре HAMT. Она позволяет дёшево копировать контекст и разделять неизменённые узлы между версиями.
Это оптимизация реализации CPython, а не гарантия языка: при подходящих условиях буфер строки расширяется без копирования старого содержимого. Иначе создаётся новая строка с копированием O(N).
C3 строит единый MRO, сохраняя порядок родителей и согласованность их собственных порядков. Конфликт возникает, когда требования несовместимы, например один путь требует A раньше B, а другой — B раньше A.
Compact dict разделяет разреженную таблицу индексов и плотное хранение записей, что экономит место и упрощает обход в порядке вставки. PEP 468 посвящён порядку **kwargs, а не полному алгоритму dict.
Immortal objects в CPython имеют специальный режим счётчика ссылок, который не меняется при обычных INCREF/DECREF. Это уменьшает записи в память и помогает сохранять общие страницы после fork.
Сделайте первый аргумент функцией по умолчанию None, а настройки — keyword-only. Внутренняя функция создаёт обёртку с functools.wraps, чтобы introspection видел исходные метаданные и сигнатуру.
Циклический GC дополняет подсчёт ссылок и находит недостижимые циклы объектов. gc.garbage содержит не все удалённые объекты, а прежде всего найденные, но не освобождённые, либо сохранённые debug-режимом.
C-расширение работает через Python C API и может обращаться к памяти объектов и собственному глобальному состоянию. Историческая опора на GIL делает переход к свободным потокам нетривиальным.