- Инструменты разработки
- Системы контроля версий
- Модульное тестирование
- Test-Driven Development
- Непрерывная интеграция
- Коллективная разработка
- Создание проектов
- CI & CD & DevOps
- Текстовые форматы
- Обработка текста
- Автоматизация
- Рабочее окружение
- Отладка с помощью GDB
- Документация
- Анализ бинарных модулей
- Дополнительные вопросы
- Общее назначение инструментов, примеры.
- Признаки "хороших" инструментов, с пояснениями.
- Примеры практик Программной инженерии, их суть.
- Приведите примеры инструментов, помогающих применять практики.
- Диаграмма каскадной модели жизненного цикла.
- Диаграмма работы программиста над задачей.
- Определение СКВ
- Основные функции/возможности современных СКВ
- Преимущества DVCS
- Что нельзя протестировать автоматически?
- Классификация тестов по назначению.
- Современная стратегия тестирования (основные 5 утверждений).
- Основные возможности фреймворков модульного тестирования.
- Критерии хорошего теста.
- Возможности Google Test.
- Порядок использования Google Test.
- Что такое TDD, его назначение
- Мифы о TDD
- Цикл разработки по TDD
- Атрибуты хорошего unit-теста (включая AAA)
- Плохие unit-тесты
- Green Test Patterns
- Red Test Patterns
- Определение непрерывной интеграции
- Задачи выделенного сервера
- Эволюция взглядов на непрерывную интеграцию
- Travis CI, преимущества и недостатки
- BuildBot, преимущества и недостатки
- Centralized Workflow (диаграмма, достоинства и недостатки)
- Integration Manager Workflow (диаграмма, достоинства и недостатки)
- Dictator and Lieutenants Workflow (диаграмма, достоинства и недостатки)
- Модель ветвления GitFlow
- Рабочий процесс (модель ветвления), используемый в компании GitHub
- Базовые принципы корректной работы с СКВ
- Простые истины планирования
- Практические рекомендации при учете задач (issue tracking)
- Определение ИСР
- Отличия ИСР от редакторов исходного кода
- Основные функции/возможности современных ИСР
- Иcтория развития билд-систем
- Плюсы и минусы Makefile
- Плюсы и минусы CMake
- Определение непрерывной интеграции и непрерывной доставки (CI/CD)
- Определение DevOps
- Основные компоненты DevOps процесса
- Виртуализация на уровне ОС, контейнеры, Docker
- Преимущества и недостатки простого текста.
- Преимущества и недостатки бинарного формата.
- Примеры ситуаций, когда удобно использовать TXT, XML, YAML, JSON.
- Легковесные языки разметки. Примеры, назначение, преимущества и недостатки.
- Синтаксис Markdown (заголовки, стили, списки, ссылки).
- Примеры использования Markdown, в том числе нестандартные. В чем преимущество использования Markdown в каждой из этих ситуаций.
- Важные свойства текстовых редакторов.
- Определение и синтаксис регулярных выражений.
- Предложите регулярное выражение для поиска:
- Поиска дат в формате
2013-09-18
или14-01-01
- IP-адресов
- номеров банковских карт
- HEX-представления чисел типа
int
- Имен всех классов в вашем С++ проекте
- Поиска дат в формате
- Как будет выглядет команда в Vim для:
- Отсортировать файл и удалить дубликаты
- Перевести слово под курсором в верхний регистр
- Перевести всю строку в верхний регистр (капитализация)
- Создать 10 копий текущей строки
- Удалить все "висячие пробелы" (trailing whitespaces)
- Удалить все пустые строки в файле
- Удалить все строки, содержащие слово
WARNING
- Удалить каждую вторую строку
- Удалить текст в рамках текущих скобок или кавычек
- Виды автоматизации в деятельности человека
- Какие преимущества дает автоматизация
- Типичные классы задач на автоматизацию (в работе программиста)
- Суть деятельности профессионального программиста
- Краткая характеристика и преимущества языка Bash
- Краткая характеристика и преимущества языка Python
- История UNIX
- Философия UNIX
- Полезные UNIX команды, их назначение
- Полезные UNIX команды для обработки текста, их назначение
- Синтаксис составных команд, их семантика
- Команда
history
и ее аргументы - Предложите командную строку для:
- Печати всех заголовков первого и второго уровня в файле Markdown (#-нотация)
- Объявлений виртуальных методов в директории с исходниками
- Что такое отладка и отладчик?
- Назовите 3 метода отладки и опишите их.
- Опишите алгоритм отладки "Волчья ограда" (wolf fence).
- Расшифруйте и объясните следующие термины: breakpoint, watchpoint, checkpoint, catchpoint и call stack.
- Перечислите 3 распространенных приема против отладки.
- Объясните назначение отладочной информации и как нужно скомпилировать программу, чтобы она была.
- Напишите 5 команд отладчика GDB (запуск, поставить точку останова с условием, продолжить, распечатать локальные переменные, завершить работу отладчика).
- Приведите примеры внутренних документов
- Приведите примеры внешних документов
- Распределение ролей при работе над документацией
- Виды автоматических проверок документации и способы их реализации
- Популярные форматы внутренних документов, их достоинства и недостатки
- Содержание/подразбиение README файлов
- Ключевые принципы при работе с документацией
- Определение: Исполняемый модуль
- Определение: API
- Зачем нужно разделение на сегменты и секции в исполняемых модулях?
- Что такое статическое и динамическое связывание, в чём их отличия?
- Что такое бинарная совместимость и совместимость на уровне исходного кода?
- Написать регулярные выражения для
- Времени в американском формате (9:00 AM, но не 19:77 AM)
- Номеров мобильных телефонов в России
- Веб-адресов
- Сравнительный анализ интерфейсов командной строки и графического
- Какие будут негативные последствия при:
- Нарушении базовых принципов работы с VCS
- Недостаточном использовании автоматизации в проекте
- Тестировании без использования соответствующих фреймворков
- Отсутствии практики непрерывной интеграции
- Какие полезные следствия имеет то, что Travis (CMake, GTest) является популярным инструментом
- Почему важно поддерживать бинарную (на уровне исходников) совместимость API, в каких случаях допустимо ее нарушать? (см. http://semver.org/lang/ru/)