Публичное собеседование по алгоритмам • Сергей Милимко vs Иван Лещёв

YOUTUBE · 28.11.2025 06:32

Ключевые темы и таймкоды

Введение и обсуждение алгоритмов

0:25
  • Ведущий приветствует зрителей и рассказывает о недавнем собеседовании.
  • В комментариях разгорелся спор о необходимости алгоритмов на собеседованиях.
  • Ведущий нашел двух коллег, которые согласились провести собеседование по алгоритмам.

Представление участников

1:22
  • Ведущий представляет Сергея и Ивана.
  • Иван рассказывает свою историю увлечения алгоритмами с 1998 года.
  • Сергей делится своим опытом программирования и увлечения алгоритмами.

Подготовка к собеседованию

3:55
  • Иван и Сергей обсуждают важность алгоритмической подготовки для программистов.
  • Иван делится своим опытом решения задач на LeetCode.
  • Сергей рассказывает о своем опыте работы в компании Twinka и использовании алгоритмов в их проектах.

Начало собеседования

8:00
  • Ведущий объясняет, что собеседование будет состоять из трех задач.
  • Первая задача будет простой для разогрева, вторая - более сложной, а третья - философской.
  • Ведущий скидывает условия первой задачи.

Решение первой задачи

9:03
  • Иван и Сергей обсуждают условия задачи.
  • Иван объясняет, что задача требует структуры данных для поддержания наибольших чисел.
  • Сергей предлагает использовать кучу для решения задачи.

Реализация алгоритма

10:38
  • Иван и Сергей начинают реализовывать алгоритм на PHP.
  • Иван объясняет, как использовать методы кучи для поддержания структуры данных.
  • Сергей помогает с реализацией и обсуждением деталей.

Заключение

15:46
  • Ведущий и участники обсуждают ошибки и детали реализации.
  • Ведущий подчеркивает важность алгоритмической подготовки для программистов.

Работа с массивами и итераторами

16:21
  • Преобразование содержимого среза в массив.
  • Использование итераторов для работы с массивами.
  • Важность выделения памяти заранее в Go.

Сортировка и выделение памяти

17:16
  • В Go важно заранее выделять память для массивов.
  • В PHP это часто пропускается на собеседованиях.
  • Использование функции для заполнения массива нулями.

Работа с кучей

18:29
  • Использование кучи для сортировки элементов.
  • Куча позволяет эффективно обрабатывать большие объемы данных.
  • Реализация абстрактного метода для сравнения элементов.

Применение кучи в реальных задачах

21:11
  • Куча полезна для сортировки и анализа данных в реальном времени.
  • Пример использования для сравнения ключевых слов.
  • Куча позволяет избежать загрузки всех данных в память.

Сложность алгоритмов

23:07
  • Объяснение сложности алгоритмов с использованием кучи.
  • Средняя и наихудшая сложность алгоритмов.
  • Важность понимания типовых структур данных.

Задача на логику и алгоритмы

29:00
  • Задача на создание программного кода на основе абстрактного синтаксического дерева AST.
  • Преобразование AST в программный код на PHP.
  • Важность правильной расстановки скобок и логики в алгоритмах.

Преобразование чисел и операций

32:48
  • Число должно быть трансформировано в число.
  • Унарные операции имеют один операнд, бинарные - два.
  • Мультиарные операции могут иметь более двух операндов.

Обработка массивов и AST

34:15
  • Массив содержит операцию и AST деревья.
  • Необходимо преобразовать AST деревья в строки.
  • При необходимости добавляются скобки для корректного вычисления.

Интерпретация арифметических выражений

35:30
  • Задача на собеседовании: интерпретация арифметических выражений в виде строк.
  • Перебор элементов и склеивание AST деревьев.
  • Проверка на валидность и корректность вычислений.

Проверка и обработка операций

37:08
  • Проверка корневых случаев и корректности вычислений.
  • Применение операций к операндам и проверка на нулевые операнды.
  • Создание валидной строки для вычисления.

Логика скобок и приоритет операций

41:09
  • Логика расстановки скобок для корректного вычисления.
  • Приоритет операций: сложение требует скобок, умножение - нет.
  • Определение необходимости скобок в зависимости от приоритета операций.

Разделение задачи на части

45:48
  • Разделение задачи на три части: число, унарные операции, остальные операции.
  • Обработка унарных операций и их операндов.
  • Преобразование AST деревьев в строки и добавление скобок при необходимости.

Обработка унарных операций

51:32
  • Унарные операции требуют скобок при наличии подряд идущих знаков.
  • Проверка на наличие унарных операций и добавление скобок при необходимости.
  • Обработка сложных унарных операций и их корректное вычисление.

Обработка плюсов и минусов

56:55
  • Плюсы можно выводить и вводить как есть.
  • Сложные операции требуют добавления скобок.
  • Унарные операции обрабатываются иначе, чем бинарные.

Приоритеты операций

1:00:25
  • Сравниваются приоритеты операций.
  • Унарные операции могут быть только плюсами или минусами.
  • Бинарные операции требуют проверки каждого элемента.

Сложные элементы

1:02:43
  • Проверяются сложные элементы внутри бинарных операций.
  • Если внутри есть плюс или минус, элемент заворачивается в скобки.
  • Умножение и деление не требуют скобок.

Оптимизация кода

1:05:47
  • Рассматривается возможность оптимизации кода.
  • Задача оптимизации оказалась сложной и была отклонена.
  • Проверяются случаи, когда нужны скобки.

Приоритеты и ассоциативность

1:10:33
  • Приоритеты операций сравниваются.
  • Ассоциативность операций не учитывается.
  • Если приоритет выше, элемент заворачивается в скобки.

Проверка условий

1:13:38
  • Проверяются условия для заворачивания скобок.
  • Если приоритет одинаковый, элемент заворачивается, если внутри минус.
  • Проверяются все возможные случаи.

Тестирование кода

1:17:31
  • Проверяется корректность кода.
  • Исправление синтаксических ошибок.
  • Тестирование кода на корректность вывода.

Решение задачи

1:21:09
  • Обсуждение числа пидов и их значения.
  • Исправление ошибки в коде, связанной с пропущенной скобкой.
  • Завершение работы над задачей и обсуждение её сложности.

Обсуждение алгоритмов

1:23:03
  • Обсуждение сложности алгоритмов и их реализации.
  • Сравнение сложности работы с массивами и таблицами.
  • Важность понимания хэш-функций и их влияния на производительность.

Заключение и планы на будущее

1:26:08
  • Подведение итогов решения задач и обсуждение их сложности.
  • Предложение организовать второй раунд для более глубокого разбора задач.
  • Благодарность зрителям и анонс будущих стримов.