Документ взят из кэша поисковой машины. Адрес оригинального документа : http://uneex.lorien.cs.msu.su/LecturesCMC/Programming2010/ExamQuestions
Дата изменения: Unknown
Дата индексирования: Sun Apr 10 04:15:52 2016
Кодировка: UTF-8
LecturesCMC/Programming2010/ExamQuestions - UNИX

Разделы третьего уровня написал (или скопировал из планов) 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 11:34:49)