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

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

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

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

  1. Что такое машинное слово и как его размер влияет на адресацию памяти?
  2. Почему 32-битная система не может напрямую использовать более 4 ГБ оперативной памяти?
  3. Как размер машинного слова влияет на производительность арифметических операций?
  4. Что такое порядок байтов (endianness) и почему он важен при работе с сетевыми протоколами?
  5. Как регистры процессора связаны с размером машинного слова?
  6. Почему выравнивание данных повышает производительность доступа к памяти?
  7. Что такое padding и зачем компилятор его вставляет в структуры?
  8. Как директива #pragma pack(1) влияет на расположение полей в структуре?
  9. Какие последствия имеет отключение выравнивания для производительности и совместимости?
  10. Почему глобальные переменные размещаются в сегменте данных, а локальные — в стеке?
  11. В чём разница между автоматическим и динамическим размещением данных?
  12. Как работает указатель стека (RSP/ESP) при входе и выходе из функции?
  13. Что такое фрейм стека и какие данные он содержит?
  14. Почему обращение к неинициализированной локальной переменной приводит к неопределённому поведению?
  15. Как сборщик мусора определяет, что объект больше не используется?
  16. Что такое жизненный цикл переменной и как он зависит от области видимости?
  17. В чём разница между передачей по значению и по ссылке?
  18. Почему строки в Python и C# считаются неизменяемыми?
  19. Что происходит при присвоении нового значения строковой переменной в управляемых языках?
  20. Как замыкания влияют на время жизни переменных?
  21. Что такое чистая функция и почему она предсказуема?
  22. Как стек вызовов помогает отслеживать цепочку ошибок?
  23. Почему важно давать функциям говорящие имена?
  24. Как композиция функций упрощает построение сложной логики?
  25. Что такое сигнатура функции и зачем она нужна?
  26. Как работает оператор return и почему он немедленно завершает функцию?
  27. Что такое итерация и как она реализуется в цикле?
  28. В чём разница между циклом for и циклом while?
  29. Почему цикл do-while гарантированно выполняется хотя бы один раз?
  30. Как избежать бесконечного цикла при использовании while?
  31. Что такое вложенные циклы и как рассчитывается общее число их итераций?
  32. Почему использование одной переменной-счётчика в нескольких вложенных циклах — ошибка?
  33. Как условный оператор реализуется на уровне машинных инструкций?
  34. Что такое флаговый регистр и как он используется при сравнениях?
  35. В чём разница между if, if-else и if-elif-else?
  36. Когда уместно использовать тернарный оператор?
  37. Почему смешивание присваивания (=) и сравнения (==) — частая ошибка?
  38. Как ранний выход (early return) упрощает чтение кода с множественными условиями?
  39. Что такое байт-код и чем он отличается от машинного кода?
  40. Как виртуальная машина обеспечивает платформонезависимость?
  41. В чём разница между интерпретацией и JIT-компиляцией?
  42. Почему JIT-компиляция может быть быстрее чистой интерпретации?
  43. Что такое AOT-компиляция и когда она предпочтительна?
  44. Как работает стековая модель виртуальной машины?
  45. Что такое верификация байт-кода и зачем она нужна?
  46. Как сборка мусора интегрирована в жизненный цикл программы в JVM или .NET?
  47. Что такое дизассемблирование и какие инструменты его выполняют?
  48. Чем декомпиляция отличается от дизассемблирования?
  49. Почему восстановленный код редко компилируется без доработки?
  50. Что такое неопределённое поведение и почему оно опаснее исключения?

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