Перейти к основному содержимому

Чек-лист самопроверки

Разработчику Архитектору Инженеру

Чек-лист самопроверки

  1. Вы понимаете разницу между статическим и динамическим массивом по способу выделения памяти и поведению при изменении размера.
  2. Вы знаете, почему доступ к элементу массива по индексу выполняется за O(1).
  3. Вы можете объяснить, как происходит реаллокация в динамическом массиве и почему амортизированная сложность добавления в конец — O(1).
  4. Вы понимаете, когда целесообразно использовать разрежённый массив вместо плотного.
  5. Вы различаете зигзагообразный (jagged) и прямоугольный многомерный массив по структуре памяти и производительности.
  6. Вы знаете, почему односвязный список неэффективен для произвольного доступа по индексу.
  7. Вы понимаете, как двусвязный список позволяет обходить структуру в обоих направлениях.
  8. Вы можете привести пример применения циклического списка в системном программировании.
  9. Вы знаете, какие операции стек поддерживает и какова их временная сложность.
  10. Вы понимаете разницу между реализацией стека на массиве и на связном списке по потреблению памяти и предсказуемости задержек.
  11. Вы знаете, почему в real-time системах часто используют стек фиксированного размера.
  12. Вы понимаете принцип работы кольцевого буфера и как он реализует очередь без сдвига элементов.
  13. Вы можете объяснить, почему очередь на основе двух стеков имеет амортизированную сложность O(1) на операцию.
  14. Вы знаете, как дек (двусторонняя очередь) обобщает стек и очередь.
  15. Вы понимаете, как хеш-функция преобразует ключ в индекс корзины.
  16. Вы знаете два основных метода разрешения коллизий в хеш-таблицах и их компромиссы.
  17. Вы понимаете, почему Java 8+ преобразует длинные цепочки в красно-чёрные деревья.
  18. Вы знаете, что такое универсальное хеширование и зачем оно нужно для защиты от DoS-атак.
  19. Вы можете назвать свойства хорошей хеш-функции: скорость, равномерность, лавинный эффект.
  20. Вы понимаете, как бинарная куча представляет почти полное двоичное дерево в виде массива.
  21. Вы знаете, как вычисляются индексы потомков и родителя в массивном представлении кучи.
  22. Вы понимаете разницу между операциями sift-up и sift-down и когда каждая из них применяется.
  23. Вы знаете, почему построение кучи из неупорядоченного массива можно выполнить за O(n), а не O(n log n).
  24. Вы понимаете, как d-арные кучи уменьшают высоту дерева и когда это выгодно.
  25. Вы знаете, почему стандартная бинарная куча не поддерживает эффективное обновление приоритета существующего элемента.
  26. Вы понимаете, как AVL-дерево поддерживает строгую сбалансированность через баланс-фактор и вращения.
  27. Вы знаете, почему красно-чёрные деревья делают меньше вращений при модификациях по сравнению с AVL.
  28. Вы понимаете, как B⁺-дерево оптимизирует диапазонные запросы за счёт связанных листьев.
  29. Вы знаете, почему B-деревья используются в СУБД, а не бинарные деревья поиска.
  30. Вы понимаете, как размер узла B-дерева соотносится с размером страницы файловой системы.
  31. Вы знаете, чем суффиксный массив отличается от суффиксного дерева по потреблению памяти и времени построения.
  32. Вы понимаете, как LCP-массив ускоряет поиск подстрок в суффиксном массиве.
  33. Вы знаете, почему CSR-формат эффективен для разрежённых графов в high-performance computing.
  34. Вы понимаете, как property graph в Neo4j отличается от математического графа наличием свойств и типов рёбер.
  35. Вы знаете, как native graph storage в Neo4j обеспечивает быстрый обход соседей без полного сканирования.
  36. Вы понимаете принцип работы фильтра Блума и почему он допускает ложноположительные, но не ложноотрицательные срабатывания.
  37. Вы знаете, как Count-Min Sketch оценивает частоту элементов и почему оценка всегда завышена.
  38. Вы понимаете, как HyperLogLog оценивает количество уникальных элементов с фиксированным объёмом памяти.
  39. Вы знаете, почему Cuckoo Filter поддерживает удаление, а классический фильтр Блума — нет.
  40. Вы понимаете, как красно-чёрное дерево используется в планировщике задач Linux CFS.
  41. Вы знаете, почему B⁺-деревья применяются в кластеризованных индексах InnoDB.
  42. Вы понимаете, как LSM-деревья оптимизируют запись за счёт фонового слияния SSTable’ов.
  43. Вы знаете, как .NET Dictionary<TKey, TValue> использует открытую адресацию с двойным хешированием.
  44. Вы понимаете, как JVM HashMap переключается с цепочек на красно-чёрные деревья при длине корзины > 8.
  45. Вы знаете, как V8 оптимизирует массивы, переключаясь между fast elements и dictionary mode.
  46. Вы понимаете, как карта памяти ядра Linux использует radix-дерево для управления VMA.
  47. Вы знаете, как slab allocator использует связные списки и битовые карты для выделения объектов фиксированного размера.
  48. Вы понимаете, как card table в generational GC помечает «грязные» регионы памяти при записи.
  49. Вы знаете, как HNSW и IVF индексы ускоряют поиск ближайших соседей в векторных базах данных.
  50. Вы понимаете, как выбор структуры данных влияет не только на алгоритмическую сложность, но и на кэш-локальность, предсказуемость задержек и масштабируемость в распределённых системах.

Освоение главы0%