Skip to content

Latest commit

 

History

History
231 lines (179 loc) · 12.5 KB

control-questions.md

File metadata and controls

231 lines (179 loc) · 12.5 KB

Список контрольных вопросов


  1. Инструменты разработки
  2. Системы контроля версий
  3. Модульное тестирование
  4. Test-Driven Development
  5. Непрерывная интеграция
  6. Коллективная разработка
  7. Создание проектов
  8. CI & CD & DevOps
  9. Текстовые форматы
  10. Обработка текста
  11. Автоматизация
  12. Рабочее окружение
  13. Отладка с помощью GDB
  14. Документация
  15. Анализ бинарных модулей
  16. Дополнительные вопросы

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