В этой подборке вопросы сгруппированы по формату «Лайвкодинг», чтобы подготовку можно было вести от базовых тем к практическим задачам. В подборке чаще встречаются темы: frontend, browser, database.
Coroutine можно ожидать напрямую через await, а для конкурентного выполнения — создать Task через asyncio.create_task(). Несколько связанных задач удобно запускать в TaskGroup или ожидать через gather().
В Python степень вычисляется оператором **: например, 2 ** 10 равно 1024. Если запрещён и оператор степени, можно реализовать быстрое возведение в целую неотрицательную степень.
Меняем местами симметричные элементы списка: первый с последним, второй с предпоследним и так до середины. Список изменяется на месте за O(n) времени и O(1) дополнительной памяти.
Храним времена допущенных вызовов в deque и под Lock удаляем записи вне окна, проверяем лимит и резервируем новый вызов. Для измерения интервалов нужен monotonic(), а функцию выполняем уже вне блокировки.
Если задача — найти минимальную подстроку s, содержащую все символы a, подходит скользящее окно. Для указанного примера результат aceb, а при отсутствии подходящего окна возвращается пустая строка.
Проходим массив и храним уже встреченные значения с индексами. Для каждого числа ищем target − число в словаре: так получаем разные индексы за ожидаемое O(n) времени и O(n) памяти.
В одном процессе можно защитить проверку и изменение баланса общим Lock. Важно блокировать весь read-check-write, а не только присваивание; все обращения к состоянию должны соблюдать тот же протокол.
Код ищет минимальную подстроку s со всеми различными символами a. Повторы в a не учитываются. Нужно обработать пустое a и сохранять индексы, а не многократно копировать найденные подстроки.
Ленивое свойство можно реализовать non-data descriptor: при первом чтении вычислить значение и записать его в instance.__dict__. Дальнейшее чтение найдёт сохранённый атрибут без повторного вычисления.
Сначала извлеките уникальные URL в порядке появления, затем выделите первые N, облачные, файловые и остальные ссылки. Сортировать по длине нужно только последнюю группу; общий лимит применяют в конце.
QuerySet.update() возвращает число изменённых строк, а не User. Исходный код уже списывает деньги до проверки, затем пытается обращаться к balance у числа; проверку и списание нужно объединить атомарно.
Отбираем пользователей с age > 18, сохраняем их в JSON и отдельно считаем статистику по выбранной группе. Для пустой выборки средний, минимальный и максимальный возраст записываем как null.