Differences between revisions 12 and 13
Revision 12 as of 2010-05-16 22:49:18
Size: 9412
Editor: FrBrGeorge
Comment:
Revision 13 as of 2010-05-16 22:51:38
Size: 8728
Editor: FrBrGeorge
Comment:
Deletions are marked like this. Additions are marked like this.
Line 4: Line 4:

Внимание: объём вопросов по разным темам неравномерен, просьба глубоко не зарываться.
Line 12: Line 14:
## * # Детализация задачи (про упрощение каждой составляющей)
## * фронтенд/бэкенд
## * бэкенд — библиотека
##
### Поиск чего-то существующего
##
## 1. переписать всё с нуля
## 2. дописать
## 3. форкнуться
##
### Об интерфейсах. IPC, shared memory, текстовых интерфейсах, библиотеках
### KISS, про отказ от монстров. про простой протокол, про стек. рассказ про проектирование протокола. про## стандарты, POSIX, RFC
### Про выбор языка (вспоминаем про компонентность), про скриптовые языки

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

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

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

  • Постановка задачи: детализация, разделение на фронтенд/бэкенд
  • Изолированная разработка / совместное участие в существующем проекте / ветвление существующего проекта: достоинства и недостатки
  • Значение стандартов. POSIX, RFC, …
  • Принцип KISS и его значение при работе в сообществе
  • Выбор языка разработки
  • Особенности 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

  • Makefile: Workflow сборки.
  • Понятие зависимости и правила.
  • Недостатки простого понятия правил.
  • Встроенные правила и встроенные переменные.
  • Правила-шаблоны.
  • Автоматические переменные.
  • Автоматическая генерация зависимостей.
  • Расширения GNU make (для подстановок, правил-шаблонов, условий).

CMake

  1. Задачи, решаемые с помощью CMake
  2. Кроссплатформенность CMake
  3. Возможности CMake:
    • изолированный каталог сборки
    • порождение исполняемых файлов и библиотек
    • установка собранного проекта
    • поиск требуемых по зависимости библиотек и функций
    • специальные модули для распространённых библиотек
  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 (last edited 2010-05-17 11:34:49 by FrBrGeorge)