 
        
        - •Программа. Программирование.
- •Язык программирования. Синтаксис, семантика.
- •Способы представления алгоритмов. Язык блок-схем.
- •Этапы решения задач на эвм.
- •Информационная модель. Система.
- •Декомпозиция, композиция, редукция.
- •Атрибуты переменной. Объявление, определение и инициализация переменной.
- •Область видимости переменной. Время жизни переменной.
- •Типы данных в языках программирования. Переполнение типа данных.
- •Представление массивов в памяти. N-мерные массивы, тензоры.
- •Массивы и указатели. Массивы указателей и указатель на массив. Арифметика указателей.
- •Функции в языках программирования. Функция как подпрограмма. “Черный ящик”.
- •Концептуализация кода с помощью функций. Интерфейс функции. Процедура. Прототип функции.
- •Перегрузка функций. Правила вызова перегруженной функции. Сигнатура функции.
- •Рекурсия. Static-переменная функции.
- •Способы передачи аргументов в функцию.
- •1) Передача аргументов по значению
- •2) Передача параметров по ссылке
- •Архитектура Фон-Неймана. Принципы архитектуры Фон-Неймана.
- •Линейная память. Адресация.
- •Виртуальная память.
- •Процесс операционной системы. Основные разделы памяти процесса.
- •Стековая память.
- •Динамическая память или куча.
- •Статическая память.
- •Работа с файлами. Ввод/вывод на консоль.
- •Компилятор и компиляция. Сборка программы.
- •Интегрированная среда разработки.
- •Препроцессор и директивы препроцессора.
- Рекурсия. Static-переменная функции.
Рекурсия - это многократный вызов функции самой себя определённой количество раз.
static-переменная функции - это переменная, которая была выделена "статически", что означает, что ее время жизни (или "экстент") - это весь запуск программы.
- Способы передачи аргументов в функцию.
1) Передача аргументов по значению
Аргументы могут передаваться по значению (by value) и по ссылке (by reference). При передаче аргументов по значению внешний объект, который передается в качестве аргумента в функцию, не может быть изменен в этой функции. В функцию передается само значение этого объекта.
2) Передача параметров по ссылке
При передаче параметров по ссылке передается ссылка на объект, через которую мы можем манипулировать самим объектов, а не просто его значением.
- Архитектура Фон-Неймана. Принципы архитектуры Фон-Неймана.
Архитектура фон Неймана — широко известный принцип совместного хранения команд и данных в памяти компьютера.
Принципы архитектуры фон Неймана:
1) Принцип двоичности.
Для представления данных и команд используется двоичная система счисления.
2) Принцип программного управления.
Программа состоит из набора команд, которые выполняются процессором друг за другом в определённой последовательности.
3) Принцип однородности памяти.
Как программы (команды), так и данные хранятся в одной и той же памяти. Над командами можно выполнять такие же действия, как и над данными.
4) Принцип адресуемости памяти.
Структурно основная память состоит из пронумерованных ячеек; процессору в произвольный момент времени доступна любая ячейка.
5) Принцип последовательного программного управления.
Все команды располагаются в памяти и выполняются последовательно, одна после завершения другой.
6) Принцип условного перехода.
Команды из программы не всегда выполняются одна за другой. Возможно присутствие в программе команд условного перехода, которые изменяют последовательность выполнения команд в зависимости от значений данных.
- Линейная память. Адресация.
Линейная адресация – сплошной массив ячеек, неразбиваемый на независимые участки.
- Указатели и ссылки в C++. Операции разыменования и взятия адреса. 
Указатель – переменная, значением которой является адрес ячейки памяти.
Ссылка (в программировании) — это объект, указывающий на определенные данные, но не хранящий их.
Операция взятия адреса (&) используется для получения адреса объекта и помещения его в указатель.
Операция разыменования (*) осуществляет косвенный доступ к адресуемой величине через указатель.
- Виртуальная память.
Виртуальная память — метод управления памятью компьютера, позволяющий выполнять программы, требующие больше оперативной памяти, чем имеется в компьютере, путём автоматического перемещения частей программы между основной памятью и вторичным хранилищем.
- Процесс операционной системы. Основные разделы памяти процесса.
Процесс — это в выполняемая в данный момент программа. Выполнение процесса должно осуществляться последовательно. Процесс определяется как сущность, представляющая основную единицу работы, которая должна быть реализована в системе.
Вся виртуальная память процесса в Linux поделена на несколько областей (сегментов), различного назначения. Выделяются следующие области:
- сегмент кода, содержащий инструкции процессора, который отображается на соответствующие области исполняемого файла. Традиционно обозначается как text. 
- сегмент инициализированных глобальных переменных, которые изначально загружаются из исполняемого файла. Обозначаются как data. 
- сегмент неинициализированных глобальных переменных, который изначально заполнен нулями. Традиционно обозначается BSS (Block Started by Symbol). Поскольку хранить в исполняемом файле нули не имеет смысла, то в нём хранится имя переменной (symbol) и её размер, а выделение памяти и инициализация нулями, происходит в момент запуска программы. 
- сегмент стека - Stack. 
- область кучи, для динамического выделения памяти функциями malloc(), new() и т.п. - Heap. 
- дополнительные сегменты кода, данных и BSS для каждой разделяемой между процессами библиотеки, такой как библиотека libc. Динамические библиотеки в Linux имеют суффикс в имени файла - .so, что означает shared object. 
- область для отображения в память файлов. 
- область для отображения разделяемой памяти (shared memory). 
- в современном Linux в отдельные области памяти vsyscall и vdso (virtual dynamic shared object) вынесен часто вызываемый код ядра, не требующий системных полномочий. В качестве примера такого обычно приводят вызов gettimeofday(). Вынесение кода в виртуальную память пространства помогает сэкономить время, расходуемое на изменение таблицы страниц во время системного вызова. 
