## page was renamed from LecturesCMC/ExamQuestions #acl FrBrGeorge,Ximaera,eSyr,GQ,EdwardHades,MaximByshevskiKonopko,dendik,OlgaTsaun,Allena:read,write,admin,revert,delete All:read Разделы третьего уровня написал (или скопировал из планов) FrBrGeorge, разделы второго уровня получены от докладчиков. Внимание: объём вопросов по разным темам неравномерен, просьба глубоко не зарываться. === Общие принципы программирования для 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, … == Git == 1. Системы управления версиями: понятие (расплывчатое). 1. Системы управления версиями: основные задачи. 1. Системы управления версиями: основные операции. 1. Централизованные системы управления версиями. 1. Распределённые системы управления версиями: основные понятия, концепции. 1. Распределённые системы управления версиями: сравнение с централизованными. 1. Git: основные принципы и отличительные черты. 1. Git: ветви и удалённые репозитории. 1. Git: методы синхронизации репозиториев. 1. Распределённые системы управления версиями: модели совместной разработки. == Valgrind == 1. Типичные ошибки при использовании памяти: утечки, выход за границу массива, использование неинициализированных значений. Их возможные последствия. 1. Ошибки в многопоточных приложениях: "состояние гонки" (data races), "тупики" (deadlocks). Их возможные последствия. 1. Инструменты для поиска ошибок при использовании памяти и многопоточных ошибок. == buildbot == 1. Сборочные системы: понятие, основные задачи, примеры реализаций. 1. Buildbot: схема работы, основные компоненты. 1. Buildbot: интерфейсы уведомлений. == Doxygen == 1. Документирование кода: цели, классификация по Макконнеллу, способы. 1. Генерация документации к проекту на основе комментариев к коду: цели, ограничения. 1. Doxygen: сфера применения, принципы работы, функциональность. Отличия от javadoc. == GDB == 1. Интерактивная runtime-отладка приложений: цели, функциональность. 1. Инструмент GDB: функциональность, примеры команд, фронтэнды. == Strace/Ltrace == 1. Системные вызовы в Си и UNIX: классификация функций Glibc по отношению к вводу-выводу, принципы работы механизма системных вызовов. 1. Инструмент strace: цели, функциональность, ограничения. 1. Инструмент ltrace: цели, отличия от strace, ограничения. 1. Принципы динамического связывания в GNU/Linux. Переменные окружения. Механизм отладки специфических внешних вызовов. === 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"