Differences between revisions 10 and 15 (spanning 5 versions)
Revision 10 as of 2010-05-15 12:35:43
Size: 3518
Editor: Ximaera
Comment:
Revision 15 as of 2010-05-17 11:34:49
Size: 8764
Editor: FrBrGeorge
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
#acl FrBrGeorge,Ximaera,eSyr,GQ,EdwardHades,MaximByshevskiKonopko,dendik,OlgaTsaun:read,write,admin,revert,delete -All:read #acl FrBrGeorge,Ximaera,eSyr,GQ,EdwardHades,MaximByshevskiKonopko,dendik,OlgaTsaun,Allena:read,write,admin,revert,delete All:read
Разделы третьего уровня написал (или скопировал из планов) FrBrGeorge, разделы второго уровня получены от докладчиков.
Line 4: Line 5:
== Valgrind ==
 1. Типичные ошибки при использовании памяти: утечки, выход за границу массива, использование неинициализированных значений. Их возможные последствия.
 1. Ошибки в многопоточных приложениях: "состояние гонки" (data races), "тупики" (deadlocks). Их возможные последствия.
 1. Инструменты для поиска ошибок при использовании памяти и многопоточных ошибок.
Внимание: объём вопросов по разным темам неравномерен, просьба глубоко не зарываться.

=== Общие принципы программирования для Linux в свободном сообществе ===
 * Постановка задачи: детализация, разделение на фронтенд/бэкенд
 * Изолированная разработка / совместное участие в существующем проекте / ветвление существующего проекта: достоинства и недостатки
 * Значение стандартов. POSIX, RFC, …
 * Принцип KISS и его значение при работе в сообществе
 * Выбор языка разработки
 * Особенности Linux как среды разработки и эксплуатации
== Соглашения о стиле программирования ==

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

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

=== CMake ===
 1. Задачи, решаемые с помощью CMake
 1. Кроссплатформенность CMake
 1. Возможности CMake:
  * изолированный каталог сборки
  * порождение исполняемых файлов и библиотек
  * Порождение `config.h`
  * установка собранного проекта
  * поиск требуемых по зависимости библиотек и функций
  * специальные модули для распространённых библиотек
 1. Другие инструменты автоматической сборки: SCons, ant, qmake, …
Line 20: Line 65:

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

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

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

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

Разделы третьего уровня написал (или скопировал из планов) 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:
    • изолированный каталог сборки
    • порождение исполняемых файлов и библиотек
    • Порождение 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 (last edited 2010-05-17 11:34:49 by FrBrGeorge)