Экзамен

Формат экзамена

Экзамен будет состоять из двух частей: устной и практической. После получения билета вам выделяется 40 минут на подготовку ответа. В билете три вопроса: по одному из каждого семестра. В процессе подготовки теоретической части запрещено использование любых вспомогательных материалов в любом виде на любом носителе. Даже калькулятор под запретом - вам если и будут необходимы какие-то вычисления, вы должны способны их воспроизвести в уме. Экзаменаторы будут за этим строго следить и не нужно их провоцировать. В случае возникновения малейших подозрений сначала последует 1 предупреждение, затем удаление с экзамена.

После подготовки отвечаете экзаменатору. Экзаменатор вправе спросить дополнительные вопросы как по билету, так и не по билету. Ответ на каждый вопрос билета оценивается по десятибалльной шкале. В случае ответа на балл меньше проходного, экзаменуемому выставляется оценка “неудолетворительно” с правом пересдачи осенью. В случае успешного прохождения устной части экзаменуемый получает практическую задачу и удаляется для её выполнения в соседнюю аудиторию. Для выполнения практической задачи разрешено пользоваться всеми доступными источниками, включая модели искусственного интеллекта, так как умение пользоваться готовыми прмиерами кода являются важным навыком программиста, проверяемым на экзамене. На подготовку практической части выделяется 1 час времени. Важно убедить экзаменатора, что ваша программа работает и вы знаете как она работает, поэтому кроме запуска программы на разных примерах, будут дополнительные вопросы по коду. Практическая часть оценивается в 20 балльной шкале. Практическая часть суммируется с устной и итоговый балл идет для расчета экзаменационного рейтинга и оценки за экзамен.

Вопросы к экзамену

2 семестр

  1. Операционные системы на основе ядра Linux. Основные концепции работы подобных операционных систем. Применение в биоинформатике.

  2. Определение файла и файловой системы. Принципы работы файловой системы на примере ext4.

  3. Определение процесса. Управление процессами.

  4. Терминал Linux. Принципы работы в терминале и базовые команды.

  5. Администрирование Linux. Управление пользователями, доступом к файлам, процессами

  6. Работа с текстом в терминале. Команды и утилиты для работы с текстом. Терминальные интерактивные текстовые редакторы.

  7. Регулярные выражения

  8. Язык исполняемой оболочки bash. Особенности работы, синтаксис, основные конструкции.

  9. Определение алгоритма и структур данных. Основные структуры данных. Вычислительная сложность алгоритмов.

  10. Характеристика языка программирования Python. Настройка среды разработчика. Виртуальные окружения. Дзен Python.

  11. Система контроля версий git. Принципы работы системы. Организация работы коллектива с учетом использования git.

  12. Понятие переменной. Типы переменных в Python. Арифметические и логические операции.

  13. Строки в Python. Операции над строками.

  14. Условия и циклы в Python.

  15. Работа с списками, словарями, кортежами и множествами в Python

3 семестр

  1. Понятие функции в Python. Определение и вызовы функции. Параметры и возвращаемые значения.

  2. Виды функций в Python.

  3. Оформление документации проекта. Понятие “чистый код”.

  4. Операции ввода-вывода. Работа с файлами в Python.

  5. Парадигмы программирования. Принципы объектно-ориентированное программирования.

  6. Реализация принципов объектно-ориентированного программирования в Python.

  7. Паттерны объектно-ориентированного проектирования.

  8. Понятия декоратора и замыкания. Принципы использования.

  9. Аргументы командной строки в Python. Работа с операционной системой средствами Python.

  10. Исключительные ситуации и методы их обработки.

  11. Стандартная библиотека Python.

  12. Научные вычисления и анализ данных в Python. Библиотеки для анализа данных.

  13. Принципы анализа данных.

  14. Принципы визуализации данных. Типы графиков. Визуализация данных в Python.

  15. Техники проектирования алгоритмов с примерами.

4 семестр

  1. Параллельное программирование. Виды параллелизма. Реализация в Python

  2. Асинхронное программирование. Понятие корутины, цикла событий и конечного автомата. Реализация в Python.

  3. Работа с сетью средствами Python.

  4. Компьютерная сеть. опредление понятия. Классификация сетей, сетевое оборудование. Понятие VPN, NAT. Принципы маршрутизации.

  5. Интернет, принципы работы. Понятия DNS, DHCP, URL, IP. Протоколы TCP, UDP.

  6. Администрирование сетей. Орагнизация безопасной работы в локальных и глобальных сетях.

  7. Понятие дашбоарда. Создание дашбоардов в Python. Публикация интерактивных отчетов в сети Интернет.

  8. Базы данных. Определение, виды. Понятие СУБД и её функции.

  9. Реляционные СУБД. Анатомия отношения. Установление связей между отношениями.

  10. Принципы проектирования БД. Модели данных. ER-диаграмма.

  11. Язык SQL. Принципы использования, составные части. Проведение аналитики по БД с помощью SQL.

  12. Понятие виртуализации и способы виртуализации. Пространства имён и контрольные группы в Linux.

  13. Использование систем контейнеризации (docker, podman, singularity) в биоинформатике.

  14. Высокопроизводительные вычисления. Оркестраторы и системы организации очереди задач.

  15. Пайплайны Nextflow и Snakemake. Назначение и основные принципы функционирования.

Примеры практических задач

Слияние двух отсортированных массивов.

Дано: два положительных числа: n,m <= \(10^5\) . Их вводит пользователь с клавиатуры.

Задача:

  1. Сгенерировать два массива случайными числами длиной n и m соответственно.
  2. Отсортировать оба массива любым алгоритмом сортировки. Использовать встроенные методы и готовые библиотеки запрещается.
  3. Вывести на экран исходные массивы и отсортированные
  4. Выполнить слияние двух отсортированных массивов и его сортировку. Сортировать объединение исходных массивов запрещается.

Вернуть: отсортированный массив длиной n+m и вывести его на экран.

Предусмотреть интерфейс командной строки для программы, сохранение результатов в файл и обработку исключительных ситуаций.

Статистика по файлу с нуклеотидными последовательностями.

Дано: файл, содержащий в себе файлы с нуклеотидными последовательностями в формате fasta.

Вернуть следующую статистику по файлу:

  1. Количество последовательностей в файле
  2. Длину каждой последовательности в файле
  3. Процентное содержание GC для каждой последовательности в файле.

Запрещается использовать специализированные библиотеки для решения этой задачи.

Предусмотреть;

  • интерфейс командной строки для программы,

  • сохранение результатов в файл

  • обработку исключительных ситуаций.

  • расчет среднего по пунктам 2 и 3.

  • построение гистограмм по пунктам 2 и 3.

  • тестовые примеры для работы программы.