Разделы третьего уровня написал (или скопировал из планов) FrBrGeorge, разделы второго уровня получены от докладчиков.

Внимание: объём вопросов по разным темам неравномерен, просьба глубоко не зарываться.

Общие принципы программирования для Linux в свободном сообществе

Соглашения о стиле программирования

  1. Понятие «coding style»
  2. Цели введения coding style в свободном сообществе
    • Дисциплина разработки и её влияние на сообщество
    • Предотвращение распространённых ошибок и заблуждений
    • Увеличение повторного использования кода
    • Популяризация определённых «правильных» методов разработки
  3. Особенности рекомендованного стиля программирования в зависимости от задач, решаемых сообществом
  4. Linux kernel coding style как пример подобного соглашения:
    • Мотивация
    • Пробелы и табуляции
    • Именование и typedef
    • Функции и goto
    • Комментарии; комментирование функций, данных и кода
    • Особенности LKCS: Magic numbers, #ifdefs, labaled identifiers
  5. Другие CSP: NetBSD, Google, Mozilla, …

Make

CMake

  1. Задачи, решаемые с помощью CMake
  2. Кроссплатформенность CMake
  3. Возможности CMake:
    • изолированный каталог сборки
    • порождение исполняемых файлов и библиотек
    • Порождение config.h

    • установка собранного проекта
    • поиск требуемых по зависимости библиотек и функций
    • специальные модули для распространённых библиотек
  4. Другие инструменты автоматической сборки: SCons, ant, qmake, …

Git

  1. Системы управления версиями: понятие (расплывчатое).
  2. Системы управления версиями: основные задачи.
  3. Системы управления версиями: основные операции.
  4. Централизованные системы управления версиями.
  5. Распределённые системы управления версиями: основные понятия, концепции.
  6. Распределённые системы управления версиями: сравнение с централизованными.
  7. Git: основные принципы и отличительные черты.
  8. Git: ветви и удалённые репозитории.
  9. Git: методы синхронизации репозиториев.
  10. Распределённые системы управления версиями: модели совместной разработки.

Valgrind

  1. Типичные ошибки при использовании памяти: утечки, выход за границу массива, использование неинициализированных значений. Их возможные последствия.
  2. Ошибки в многопоточных приложениях: "состояние гонки" (data races), "тупики" (deadlocks). Их возможные последствия.
  3. Инструменты для поиска ошибок при использовании памяти и многопоточных ошибок.

buildbot

  1. Сборочные системы: понятие, основные задачи, примеры реализаций.
  2. Buildbot: схема работы, основные компоненты.
  3. Buildbot: интерфейсы уведомлений.

Doxygen

  1. Документирование кода: цели, классификация по Макконнеллу, способы.
  2. Генерация документации к проекту на основе комментариев к коду: цели, ограничения.
  3. Doxygen: сфера применения, принципы работы, функциональность. Отличия от javadoc.

GDB

  1. Интерактивная runtime-отладка приложений: цели, функциональность.
  2. Инструмент GDB: функциональность, примеры команд, фронтэнды.

Strace/Ltrace

  1. Системные вызовы в Си и UNIX: классификация функций Glibc по отношению к вводу-выводу, принципы работы механизма системных вызовов.
  2. Инструмент strace: цели, функциональность, ограничения.
  3. Инструмент ltrace: цели, отличия от strace, ограничения.
  4. Принципы динамического связывания в GNU/Linux. Переменные окружения. Механизм отладки специфических внешних вызовов.

Qt

  1. Объектная модель Qt
  2. Графические возможности Qt
  3. Метаобъекты, сборка Qt-проекта
  4. Что разработчики Qt причисляют к достоинствам этого инструментария?

Инструментальные библиотеки

  1. Зачем нужны библиотеки, что такое "разделяемые библиотеки"
  2. Кроссплатформенность
  3. Задачи, решаемые библиотекой "общего назначения"
    • унификация окружения
    • решения популярных подзадач
    • обеспечение пользовательского интерфейса
  4. POSIX
    • Недостаточность POSIX как библиотекой "общего назначения"
  5. GLib как пример инструментальной библиотеки
    1. Ориентация на GUI
    2. Кроссплатформенность
    3. Повышение уровня работы с программными примитивами (напр., StreamingIO)
    4. "Новые" программные примитивы (списки, исключения, кодировки, IPC, сеть и т. п.)
  6. QtCore и wxBase, их особенности

  7. Что не входит в библиотеку "общего назначения"?
  8. Особенности "ориентации на GUI"

LecturesCMC/Programming2010/ExamQuestions (последним исправлял пользователь FrBrGeorge 2010-05-17 14:34:49)