для поступающих на основную образовательную программу магистратуры
«Программная инженерия»
по направлению подготовки 09.04.09 «Программная инженерия»
по предмету «Информатика»
-
Понятие алгоритма и его уточнения: машины Тьюринга, нормальные алгоритмы Маркова, рекурсивные функции. Эквивалентность данных формальных моделей алгоритмов. Понятие об алгоритмической неразрешимости. Примеры алгоритмически неразрешимых проблем.
-
Понятие сложности алгоритмов. Классы P и NP. Полиномиальная сводимость задач. Теорема Кука об NP-полноте задачи выполнимости булевой формулы. Примеры NP- полных задач, подходы к их решению. Субоптимальные решения неразрешимых проблем и вычислительно сложных задач.
-
Примеры эффективных (полиномиальных) алгоритмов: быстрые алгоритмы поиска и сортировки; полиномиальные алгоритмы для задач на графах и сетях (поиск в глубину и ширину, о минимальном остове, о кратчайшем пути, о назначениях).
-
Алгебра логики. Булевы функции, канонические формы задания булевых функций. Понятие полной системы. Критерий полноты Поста. Минимизация булевых функций в классах нормальных форм.
-
Исчисление предикатов первого порядка. Понятие интерпретации. Выполнимость и общезначимость формулы первого порядка. Понятие модели. Теорема о полноте исчисления предикатов первого порядка.
-
Автоматы. Алгебры регулярных выражений. Теорема Клини о регулярных языках.
-
Формальные языки и способы их описания. Классификация формальных грамматик. Их использование в лексическом и синтаксическом анализе.
-
λ-исчисление, правила редукции, единственность нормальной формы и правила ее достижения, представление рекурсивных функций.
-
Докомпьютерные вычислительные устройства. Первые компьютеры 1930–40-х. Гарвардская (Эйкена) и Принстонская (Фон Неймана) архитектуры ЭВМ. Поколения ЭВМ.
-
Архитектура современных компьютеров. Организации памяти и архитектура процессора современных вычислительных машин. Организация шин. Страничная и сегментная организация виртуальной памяти. Кэш-память.
-
Конвейеризация, предсказание переходов, спекулятивное и внеочередное выполнение. Конфликты на конвейерах. Особенности конвейеризации для CISC- и RISC-процессоров.
-
Адресация, адресные преобразования. Сегменты, страницы, регионы. Аппаратные средства поддержки виртуальной памяти.
-
Назначение, архитектура и принципы построения информационно-вычислительных сетей (ИВС). Локальные и глобальные ИВС, технические и программные средства объединения различных сетей.
-
Особенности физической архитектуры локальных сетей: Ethernet (коаксиальные кабели, витые пары, оптоволоконные сети), Token Ring, FDDI.
-
Сеть Internet, доменная организация, семейство протоколов TCP/IP версий 4 и 6. Адресация и маршрутизация. Иерархия ISO/OSI на примере протоколов Internet.
-
Языки программирования. Процедурные языки программирования (Fortran, C), Функциональные языки программирования (LISP, ML, Haskell), логическое программирование (Prolog), объектно-ориентированные языки программирования (Java, C#).
-
Процедурные языки программирования. Основные управляющие конструкции, структура программы. Работа с данными: переменные и константы, типы данных (булевский, целочисленные, плавающие, символьные, типы диапазона и перечисления, указатели), структуры данных (массивы и записи). Процедуры (функции): вызов процедур, передача параметров (по ссылке, по значению, по результату), локализация переменных, побочные эффекты. Обработка исключительных ситуаций. Библиотеки процедур и их использование.
-
Языки программирования со статической и динамической типизацией. Сильная и слабая типизация. Языки сценариев.
-
Объектно-ориентированное программирование. Классы и объекты, наследование, интерфейсы. Понятие об объектном окружении. Рефлексия. Библиотеки классов. Средства обработки объектов (контейнеры, итераторы, сопроцедуры).
-
Машинно-ориентированные языки, язык ассемблера. Представление машинных команд и констант. Команды транслятору. Их типы, принципы реализации. Макросредства, макровызовы, языки макроопределений, условная макрогенерация, принципы реализации.
-
Командные оболочки, языки сценариев командных оболочек. Командные оболочки различных семейств операционных систем (Windows, Unix-подобных).
-
Инструменты обработки текстовых данных и файловых систем на примере find, sed, grep.
-
Системы программирования (СП), типовые компоненты СП: языки, трансляторы, редакторы связей, отладчики, текстовые редакторы. Модульное программирование. Типы модулей. Связывание модулей по управлению и данным.
-
Автоматическое построение лексических и синтаксических анализаторов по формальным описаниям грамматик. Инструменты генерации лексических и синтаксических анализаторов: lex, yacc, ANTLR, парсер-комбинаторы.
-
Системы сборки ПО и управления модулями. Универсальные системы (Make) и ориентированные на конкретные языки (CMake, Cargo, Maven и т.д.)
-
Конфигурационное управление. Системы управления версиями. Централизованное и распределённое управление версиями. Git Workflow, GitHub Workflow. Системы CI/CD.
-
Терминология: «программная инженерия» и «технология программирования». Причины возникновения программной инженерии как науки.
-
Процесс разработки ПО и организация работы команды. Водопадная модель, V-модель, инкрементальная, спиральная модели.
-
Гибкие методологии. Agile-манифест, Scrum Guide. История и основные положения экстремального программирования. Современные гибкие методологии.
-
Управление проектом, понятие проекта. Творческие и индустриальные проекты. Типичные фазы индустриального проекта. Сбор требований, планирование. План.
-
Организационная структура проекта. Отслеживание и оперативное управление проектом. Сдача. Определение циклической разработки (Round-Trip Engineering), варианты реализации.
-
UML CASE-системы: описание функциональности, примеры известных систем.
-
Основные понятия реляционной и объектной моделей данных.
-
CASE-средства и их использование при проектировании базы данных (БД), нотация IDEF.
-
Нормальные формы схемы БД с первой по пятую, нормальная форма Бойса-Кодда.
-
Организация и проектирование физического уровня БД. Ключи. Методы индексирования.
-
Обобщенная архитектура, состав и функции системы управления базой данных (СУБД). Характеристика современных технологий БД. Примеры соответствующих СУБД.
-
Основные принципы управления транзакциями, журналированием и восстановлением.
-
Язык SQL. Средства определения и изменения схемы БД, определения ограничений целостности. Контроль доступа. Средства манипулирования данными.
-
Классификация вычислительных систем (ВС) по способу организации параллельной обработки. Многопроцессорные и многомашинные комплексы. Вычислительные кластеры.
-
Проблемно-ориентированные параллельные структуры: матричные ВС, систолические структуры, нейросети.
-
Параллельное программирование над распределенной памятью. Парадигмы SPMD, SIMD и MIMD. Стандартный интерфейс OpenMP.
-
Распределённое программирование с разделяемой памятью. Стандартный интерфейс MPI и его использование в различных языках программирования.
-
Векторные вычисления с использованием GPGPU и возможностей современных центральных процессоров.
-
Высокоуровневые подходы к обработке больших объёмов данных. Обработка массивов данных с использованием подхода MapReduce. Вычисления на графах с использованием Pregel и аналогичных вычислительных систем.
-
Без использования библиотечных контейнеров реализуйте на любом языке программирования с поддержкой классов класс «неизменяемый список». Такой список, будучи единожды сконструированным, не может изменять своё содержимое, тем не менее, в этом классе должны присутствовать операции добавления и удаления элемента по произвольной позиции, получения элемента по позиции. Подумайте, что должны возвращать такие операции и как эффективно использовать память. Список должен быть потокобезопасным.
-
Дан неориентированный граф в виде матрицы смежности / матрицы инцидентности / списка смежности / списка рёбер (способ задания графа и представление входных данных в программе — на ваш выбор). Напишите программу, проверяющую, связный ли это граф.
-
В БД имеются таблицы с аэропортами, рейсами из этих аэропортов и пассажирами, купившими билеты на эти рейсы.
create table airport ( id integer primary key, name varchar(100) ); create table flight ( id integer primary key, departure_airport_id integer, departure_time timestamp, foreign key(departure_aiport_id) references airport(id) ); create table passenger ( id integer primary key, name varchar(150) ); create table booking ( passenger_id integer, flight_id integer, foreign key(passenger_id) references passenger(id), foreign key(flight_id) references flight(id) );
Напишите запрос, выдающий количество пассажиров, зарегистрированных на рейсы, отправляющиеся из аэропорта с заданным названием.
- Ахо, Сети Р., Ульман Дж. Компиляторы: принципы, техника реализации и инструменты. М., 2001.
- Вигерс К.И. Разработка требований к программному обеспечению. Русская редакция, 2004.
- Воеводин В.В., Воеводин Вл. В. Параллельное программирование. СПб.: БХВ- Петербург, 2002.
- Дейт К.Дж. Введение в системы баз данных. М.: Вильямс, 1999.
- Гласс Г., Эйбле К. Unix для программистов и пользователей̆. СПб.: БХВ-Петербург, 2004.
- Кознов Д.В. Основы визуального моделирования. ИНТУИТ.РУ, БИНОМ. Лаборатория знаний, 2008.
- Кнут Д. Искусство программирования. Т. 1 -- 3. М., СПб., Киев: ИД «Вильямс», 2000.
- Кузнецов С.Д. Базы данных: языки и модели. Учебник. М.: Бином-Пресс, 2008.
- Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы, построение и анализ. М.: МЦНМО, 2000.
- Липаев В.В. Программная инженерия. Методологические основы. М.: Государственный̆ Университет -- Высшая школа экономики, 2006.
- Олифер В.Г., Олифер Н.А. Компьютерные сети. Принципы, технологии, протоколы, СПб.: Питер, 2000.
- Сомервилл И. Инженерия программного обеспечения. М.: Вильямс, 2002.
- Стивенс Р., Раго С. UNIX. Профессиональное программирование. СПб.: Символ-Плюс, 2007.
- Таненбаум Э. Современные операционные системы. 4-е изд. СПб.:Питер, 2021.
- Таненбаум Э., Ван Стен М. Распределенные системы. Принципы и парадигмы. СПб.:Питер, 2003.
- Танненбаум Э., Уэзеролл Д. Компьютерные сети. СПб.: Питер, 2003.
- Танненбаум Э. Архитектура компьютера. 6-е изд. СПб.: Питер, 2021.
- Терехов А.Н. Технология программирования. М.: ИНТУИТ.РУ, 2007.
- С.М. Львовский. Набор и верстка в системе LATEX. ЛитРес, 2017.
- Фредерик Брукс. Мифический человеко-месяц или как создаются программные системы. СПб.: «Символ-Плюс», 2000.
- Гласс Г., Эйбле К. Unix для программистов и пользователей. СПб.: БХВ-Петербург, 2004.
- Дейтел Г. Введение в операционные системы. М.: Мир, 1987.
- Когаловский М.Р. Энциклопедия технологий баз данных. М.: Финансы и статистика, 2002.
- Королев Л.Н. Архитектура процессоров электронных вычислительных машин, М.: Издательский отдел ВМиК МГУ, 2003.
- Соломон Д., Руссинович М. Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP, Windows 2000. СПб.: Питер, 2005.
- В.П. Гергель. Современные языки и технологии параллельного программирования. Издательство МГУ, 2012.
- Корнеев В.В. Параллельные вычислительные системы. М.: Нолидж, 1999.
- Дэвид М. Харрис, Сара Л. Харрис Цифровая схемотехника и архитектура компьютера : RISC-V [пер. с англ.] -- М.: ДМК Пресс, 2022. -- 810 с.
- Pro Git book, интернет-ресурс. https://git-scm.com/book/ru/v2
- The Scrum Guide, интернет-ресурс. https://www.scrum.org/resources/scrum-guide
Три астрономических часа (180 минут).
Вступительный экзамен проводится в письменной форме без использование каких-либо информационных источников во время экзамена.
В зависимости от порядка проведения испытания, задание выполняется в электронной форме, либо в простой письменной (от руки) форме.
В случае выполнения в электронной форме с использованием программных средств, не предоставляющих возможности ввода формул и форматированного текста, математические формулы рекомендуется вводить в формате (La)TeX.
В случае выполнения экзамена в простой письменной форме, ответы должны быть написаны аккуратно и разборчиво, затем отсканированы или сфотографированы для передачи проверяющим в качестве, не допускающем неоднозначного прочтение написанного.
Экзаменационное задание включает три раздела.
- Мотивационно-ознакомительная часть.. Абитуриент представляет в обезличенной (не допускающей установление его/её личности) форме:
- мотивационную часть, а именно свой текущий научный и профессиональный опыт, мотивы выбора СПбГУ и данной образовательной программы, планы по применению полученных знаний в профессиональной деятельности;
- ознакомительную часть, а именно аннотацию своей выпускной работы бакалавра или специалиста с раскрытием её актуальности и перечислением результатов работы.
- Теоретическая часть (Раздел 1 данного документа). Абитуриент письменно отвечает на два полученных от экзаменаторов вопроса из разных тем Раздела 1.
- Практическая часть (Раздел 2 данного документа). Абитуриент получает практическую задачу, аналогичную приведённым примерам, и решает её с использованием любого языка программирования на своё усмотрение.
Рекомендуемый объём по 1 части — 200–300 слов, по 2 части (в совокупности по двум вопросам) — 400–800 слов.
Вступительное испытание оценивается по шкале от 0 до 100 баллов.
Критерий | Максимальный балл |
---|---|
Описание текущего профессионального и/или научного опыта | 3 |
Изложение мотивов выбора СПбГУ и данной образовательной программы | 2 |
Планы по применению полученных знаний в профессиональной деятельности | 2 |
Ясность изложения аннотации ВКР, актуальность темы | 7 |
Согласованность результатов ВКР | 6 |
Соответствие тематики и результатов ВКР тематике выбранной образовательной программы | 10 |
Итого от 0 до 30 баллов по данной части.
Ответы на два вопроса оцениваются отдельно, от 0 до 20 баллов каждый. Итого от 0 до 30 баллов по данной части.
Каждый из двух вопросов оценивается следующим образом.
Качество ответа | Количество баллов |
---|---|
Полный корректный ответ | 20 |
Незначительные локальные неточности, опечатки/описки | 15 |
Неточности, не нарушающие ход рассуждения и изложения | 10 |
Неточности, влияющие на ход рассуждения или изложения | 5 |
Ответ, демонстрирующий непонимание смысла вопроса, его тематики | 0 |
Ответ с содержательными (в т.ч. математическими) ошибками | 0 |
Критерий | Максимальный балл |
---|---|
Корректность понимания задания, выбор подходящего алгоритма | 5 |
Работоспособность программного кода, в т.ч. на корректных, но вырожденных (например, пустых) входных данных | 15 |
Аккуратность оформления программного кода | 10 |
Итого от 0 до 30 баллов по данной части.