Технические основы прикладного программирования: Информация
Автор: Александр Тормасов
Форма обучения:
дистанционная
Стоимость самостоятельного обучения:
бесплатно
Доступ:
свободный
Документ об окончании:
Вам нравится? Нравится 21 студенту
Уровень:
Специалист
Длительность:
3:36:00
Студентов:
836
Выпускников:
82
Качество курса:
4.61 | 4.22
Курс обсуждает несколько тем, связанных с прикладным программированием – параллельное программирование на разделяемой памяти (многопоточные программы), технические и технологические основы объектно-ориентированного программирования, общие вопросы оформления и написания текста программ, использование структур данных в параллельном окружении, безопасность программного обеспечения и применение криптографии, системы виртуализации.
Курс представляет собой завершающую часть полного фундаментального цикла по информатике, занимающего в МФТИ 4 семестра. Он ориентирован на студентов технических ВУЗов, специализирующихся на информатике, и соединяет в себе теоретическую и практическую информацию. Он не является «систематическим изложением базовых основ программирования», представляя собой дополнение к обычным курсам программирования.
В него вошли несколько тем, знание которых, как представляется автору, необходимо современному программисту.
Темы: Программирование
Специальности: Программист, Системный архитектор
Теги: алгоритмы, безопасность, виртуализация, криптография, моделирование, объектно-ориентированное программирование, поддержка, программирование, программное обеспечение, процессоры, структуры данных
Дополнительные курсы
План занятий
Занятие
Заголовок <<
Дата изучения
Обзор задач
Дается обзор курса, рассматриваемые проблемы, возникающие при программировании и их решения. Также рассматриваются требования к заданиям и к курсовой работе, которые необходимо сделать в процессе работы над курсом.
Детально рассказываются некоторые задачи, которые можно использовать как курсовые проекты (индивидуальные или коллективные) – например, задачи о триангуляции.
-
История создания программ
Продолжается обзор задач, которые можно использовать в качестве курсовых проектов.
Написание программ, комментарии, сопровождение, жизненный цикл программ.
Краткий экскурс в историю создания программ. Оформление текста программ, требования к нему и откуда они берутся.
-
Оформление текста программ и основные структуры
Оформление текста программ – написание комментариев, их типы и разновидности, содержание.
Несколько слов о правах на программу, копирайтах, откуда берутся права, отличия в законодательстве России и США.
Хорошая и плохая практика написания текста программ – выбор имен для переменных, использование препроцессора и тд.
Структуры данных, и их выбор для задач. Типовые элементы структур данных и связанных с ними алгоритмов, итераторы. Проблемы использования структур данных в параллельном окружении на примере односвязного списка.
-
Структуры данных
Что такое "структуры данных" в общем, типовые элементы и понятия, итераторы.
Односвязный список и его использование в куче (heap) рантайма (библиотеке периода исполнения) языка С, в функциях malloc/free. Проблемы создания программ, использующих односвязные списки, в том числе в параллельном окружении. Двусвязные списки и очереди на их основе. Стек, его использование в программах на языке С, поддержка рекурсии на его основе. Расположение данных в памяти. Использование структур памяти в параллельном окружении, операции синхронизации. Графы, деревья, использование их для компрессии данных.
-
Параллельное программирование и безопасность программного обеспечения
Хеш таблица и ее параллельное использование.
Хорошая и плохая практика написания параллельных программ.
Безопасность программного обеспечение. Типовые проблемы, откуда они берутся.
Оглавление
- Введение
- Типизация примитивов
- Аспекты надежности пргограмм
- Хеш-таблицы
- Коллизия хеш-функции
- Классификация хеш-таблиц. Разрешение коллизий
- Параллельное использование хеш-таблиц
- Хорошая и плохая практика написания параллельных программ
- Безопасность программного обеспечения
- Типовые проблемы безопасности, откуда они берутся
-
Техника кодирования и основы криптографии
Безопасность ПО. Написание программ без "дырок". Техника кодирования защищенных программ и типичные ошибки. Переполнение буфера, определение уровня доступа, работа с минимально возможными привилегиями, криптография и ее корректное применение, предохранение секретных данных, работа с входными данными, проблемы разных путей доступа к одним и тем же данным, запросов к базам данных и веб-страницам, а также проблемы поддержки интернационального ПО.
Основные понятия криптографии, история. Симметричная и ассиметричная криптография, использование ее для безопасной почты. Безопасные и небезопасные алгоритмы (является ли секретный алгоритм безопасным?), генераторы случайных чисел. Устройство цифровой подписи.
Как правильно применять криптографию для обеспечения безопасности.
Способы взлома программ.
Оглавление
- Введение
- Безопасность ПО
- Переполнение буфера
- Форматные указатели
- Определение уровня доступа, работа с минимально возможными привилегиями
- Криптография и ее корректное применение
- Предохранение секретных данных
- Безопасные и небезопасные алгоритмы
- Генераторы случайных чисел
- EFS. Сессионные ключи
- Устройство цифровой подписи
-
Моделирование угроз. Эволюция аппаратного обеспечения
Моделирование угроз. Классификация опасностеий STRIDE – Spoofing (подмена данных), Tampering (подделка и изменение содержания данных), Repudiation (незаконныий отказ от проведенноий операции), Information disclosure (разглашение информации), Denial of service (отказ в обслуживании), Elevation of privilege (незаконное поднятие привилегиий). Методика оценки риска DREAD - Damage potential (что может быть сломано), Reproducibility (повторяемость), Exploitability (пригодность угрозы для использования), Affected users (на каких пользователеий повлияет), Discoverability (возможно ли детектировать факт использования).
Эволюция современного аппаратного обеспечения и ее влияние на программное обеспечение. Гипертредовые (многопоточные) и многоядерные процессоры, универсальные графические (GPU) процессоры и новые возможности по их использованию.
Оглавление
- Введение
- Классификация опасностеий STRIDE
- Методика оценки риска DREAD
- Анализ риска и детектированных проблем
- Эволюция современного аппаратного обеспечения и ее влияние на программное обеспечение
- Бинарная совместимость
- Гипертредовые (многопоточные) и многоядерные процессоры
- Универсальные графические (GPU) процессоры
-
Параллельное программирование
Параллельное программирование. Параллельные программы – от работы с разделяемоий памятью, использования массивнопараллельных компьютеров и до распределенных расчетов на многих физических компьютерах. Декомпозиция задач на параллельные куски. Закон Амдала. Геометрическая декомпозиция. Параллелизм данных, параллелизм кода. Паттерны параллельного программирования: параллелизм на уровне задач – декомпозиция задачи, "разделяий и властвуй" - декомпозиция задач и данных, геометрическая декомпозиция – декомпозиция данных, конвеиерное исполнение – декомпозиция потока данных, "фронт волны" - декомпозиция данных c "многомерными" зависимостями. Пример типового шаблона программирования – пул нитей.
Оглавление
- Введение
- Параллельное программирование
- Кластеры
- Задачи для суперкомпьютеров
- Массивнопараллельные компьютеры
- Распределенные расчеты на многих физических компьютерах
- Декомпозиция задач на параллельные куски
- Закон Амдала
- Параллелизм данных, параллелизм кода
- Декомпозиция. Типы декомпозиции
- Потоки данных
- Конвеиерное исполнение
- Декомпозиция данных c многомерными зависимостями
- Фронт волны
- Пул нитей
-
Технические аспекты написания параллельных программ
Технические аспекты написания параллельных программ на разделяемой памяти. Многопоточные программы. Работа с разделяемоий памятью. Атомарность операций. Синхронизационные примитивы (низкоуровневые атомарные команды, критические секции, взаимоисключающая блокировка - mutex, рекурсивная блокировка - lock, блокировка чтения-записи – read/write lock, многопроцессорная блокировка - spin-lock, семафоры, барьеры). Принятие во внимание особенностей аппаратной платформы, например, последовательности операций записи в память и т.д. Тупики и взаимные блокировки. Неблокирующая синхронизация.
Реализация одних примитивов через другие, относительная "мощность" примитивов. Задача о консенсусе как способ оценки примитивов.
-
Объектно ориентированное программирование
Объектно ориентированное программирование с понятийной точки зрения. Экскурс в историю появления, возникновение понятий. Объекты как способ моделирования "параллельного внешнего мира" и формализации понятий. Объект как совокупность методов и данных, классы объектов, мета объекты. Объектная модель. Жизненный цикл объектов. Статические и динамические объекты.
Раннее и позднее связывание, постоянно существующие объекты.
Инкапсуляция и полиморфизм как базовые понятия ООП. Наследование и агрегирование как способы создания новых, более сложных, объектов, их достоинства и недостатки (на примере С++ и COM).
Технические способы создания объектов в языках типа С++, представление их в компьютере.
Оглавление
- Введение
- Экскурс в историю появления объектно-ориентированного программирования
- Объекты как способ моделирования "параллельного внешнего мира" и формализации понятий
- Объект как совокупность методов и данных
- Классы объектов
- Метаобъекты
- Объектная модель
- Инкапсуляция
- Полиморфизм
- Наследование и агрегирование как способы создания новых, более сложных, объектов
- Технические способы создания объектов в языках типа С++
-
Техническая реализация ООП в языке программирования С++
Техническая реализация ООП в языке программирования С++ - конструкторы и деструкторы, представление методов через функции, расположение данных в памяти. Реализация понятия полиморфизма через таблицы виртуальных функций. НАследование и его реализация, связь с виртуальными функциями, абстрактные типы данных. Исключения, их техническая реализация и особенности применения в языке и ОС Windows.
Оглавление
- Введение
- Закон Мура
- Применение С-подобных языков
- Технические способы создания объектов в языках типа С++
- Реализация понятия полиморфизма через таблицы виртуальных функций
- Наследование и его реализация
- Множественное наследование
- Абстрактные типы данных
- Использование препроцессора. Generic и template
- Исключения
-
Поддержка ООП в различных системах и средах. Технологии виртуализации
Поддержка ООП в языке и системе программирования ObjectiveC, категории, сообщения и методы. Поддержка ООП в ОС Windows, отличия от поддержки ООП в языке программирования. Реализация основных понятий ООП в этих системах.
Использование подходов ООП в разных условиях.
Технологии виртуализации. Почему они стали в последнее время столь широко распространены, их типы – виртуализация ОС и виртуализация оборудования.
Преимущества и недостатки разных виртуализационных подходов с точки зрения потребителя. Технические основы виртуализации уровня ОС, контейнеры, уровни изоляции.
Оглавление
- Введение
- Поддержка ООП в языке и системе программирования ObjectiveC
- Ссылки
- Объекты
- Категории
- Методы
- Поддержка ООП в ОС Windows
- Реализация основных понятий ООП в ОС Windows
- Использование подходов ООП в разных условиях
- Технологии виртуализации
- Виртуализация оборудования
- Виртуализация ОС
- Уровни изоляции
-
Технология аппаратной виртуализации и виртуальные машины
Технология аппаратной виртуализации. Особенности работы кода прикладных программ внутри виртуальных машин. Новые возможности, предоставляемые виртуальными машинами и контейнерами – миграция, универсальность конфигурации, быстрота развертывания и обновления, удобства управления.
Технические принципы организации виртуальных машин. Монитор виртуальных машин, аппаратная поддержка виртуализации, бинарная трансляция и другие подходы. Накладные расходы в реализации поддержки системы виртуальных машин. Паравиртуализация.
Какие типы виртуализации следует применять в разных условиях.
Оглавление
- Введение
- Технология аппаратной виртуализации
- Особенности работы кода прикладных программ внутри виртуальных машин
- Новые возможности, предоставляемые виртуальными машинами и контейнерами
- Технические принципы организации виртуальных машин
- Аппаратная поддержка виртуализации
- Паравиртуализация
- BTX
- Какие типы виртуализации следует применять в разных условиях
-