소스 검색

Merge branch 'master' of u20kovalev_den/ISRPO into master

ypv 2 주 전
부모
커밋
9a1c25a3fc

BIN
Лекции/API/api1.png


BIN
Лекции/API/api2.png


+ 27 - 0
Лекции/API/Шайдуко_API.md

@@ -0,0 +1,27 @@
+# API как контракт взаимодействия программных систем
+
+**API (Application Programming Interface)** представляет собой формализованный контракт, определяющий правила и способы взаимодействия между программными компонентами или распределёнными системами. С инженерной точки зрения API абстрагирует внутреннюю реализацию сервиса и предоставляет строго определённый набор операций, данных и ограничений, что позволяет системам развиваться независимо друг от друга без нарушения совместимости.
+
+В современной архитектуре ПО API является фундаментом микросервисного подхода, клиент-серверных приложений и интеграционных платформ. Разработчик, работающий с API, оперирует не реализацией, а спецификацией: эндпоинтами, HTTP-методами, форматами данных и кодами ответов. Это снижает связанность компонентов и повышает масштабируемость системы.
+
+![Alt](api1.png)
+
+Наиболее распространённым архитектурным стилем является REST (Representational State Transfer). В REST API каждая сущность представляется как ресурс, доступный по уникальному URI, а операции над ним выполняются стандартными HTTP-методами: GET, POST, PUT, DELETE. Такой подход упрощает понимание интерфейса и делает его совместимым с инфраструктурой веба (кеширование, прокси, балансировщики).
+
+Важным аспектом проектирования API является контракт данных. Как правило, для сериализации используется JSON, реже XML или бинарные форматы (Protocol Buffers, Avro). Ошибки в структуре ответа или неявные изменения полей приводят к нарушению обратной совместимости, поэтому в промышленной разработке применяется версионирование API — через URI (/v1/, /v2/) или заголовки запроса.
+
+## Таблица 1. Ключевые характеристики качественного API
+| Характеристика  | Описание                                       | Инженерная ценность              |
+| --------------- | ---------------------------------------------- | -------------------------------- |
+| Явный контракт  | Документированная структура запросов и ответов | Снижение ошибок интеграции       |
+| Стабильность    | Минимизация breaking changes                   | Долгосрочная поддержка клиентов  |
+| Идемпотентность | Повторяемость операций без побочных эффектов   | Надёжность распределённых систем |
+| Наблюдаемость   | Логирование, метрики, коды ошибок              | Упрощение диагностики            |
+
+Документация играет критическую роль в жизненном цикле API. Инструменты вроде OpenAPI (Swagger) позволяют описывать интерфейс в машиночитаемом виде, автоматически генерировать документацию, клиентские SDK и тесты. Для разработчика API это становится частью CI/CD-конвейера и повышает общее качество DevEx.
+
+![Alt](api2.png)
+
+С точки зрения безопасности API требует строгого контроля доступа. На практике применяются API-ключи, OAuth 2.0, JWT-токены, а также ограничения по частоте запросов (rate limiting). Эти механизмы защищают сервис от несанкционированного доступа и перегрузки.
+
+Таким образом, API — это не просто технический интерфейс, а стратегический элемент архитектуры программного продукта. Грамотно спроектированный API снижает стоимость поддержки, ускоряет разработку и позволяет системе эволюционировать без потери устойчивости.

+ 20 - 0
Лекции/API/Шайдуко_Вопросы.md

@@ -0,0 +1,20 @@
+# Вопросы и ответы
+Что такое API с инженерной точки зрения?
+
+API — это формализованный контракт, определяющий правила взаимодействия между программными компонентами без раскрытия их внутренней реализации.
+
+В чём заключается основная идея архитектурного стиля REST?
+
+REST основан на представлении данных в виде ресурсов, доступных по URI, и использовании стандартных HTTP-методов для операций над ними.
+
+Зачем используется версионирование API?
+
+Версионирование API применяется для сохранения обратной совместимости и предотвращения нарушения работы существующих клиентов.
+
+Какую роль играет документация в жизненном цикле API?
+
+Документация API обеспечивает единое понимание контракта и позволяет автоматизировать генерацию клиентских библиотек и тестов.
+
+Почему безопасность является критически важным аспектом API?
+
+Безопасность API необходима для защиты сервисов от несанкционированного доступа, утечек данных и чрезмерной нагрузки.

BIN
Лекции/C++/cpp1.png


BIN
Лекции/C++/cpp2.png


+ 21 - 0
Лекции/C++/Вопросы_Шайдуко.md

@@ -0,0 +1,21 @@
+# Вопросы и ответы
+
+Почему C++ считается системным языком программирования?
+
+C++ считается системным языком, поскольку предоставляет прямой контроль над памятью, ресурсами и моделью выполнения программы.
+
+В чём заключается принцип RAII в C++?
+
+RAII связывает время жизни ресурса с временем жизни объекта, гарантируя автоматическое освобождение ресурсов.
+
+Какую роль играют шаблоны в C++?
+
+Шаблоны позволяют реализовывать обобщённое программирование без потери производительности за счёт компиляции на этапе сборки.
+
+Чем компиляция C++ отличается от интерпретируемых языков?
+
+Код C++ преобразуется в нативный машинный код до выполнения программы, что снижает накладные расходы.
+
+Почему современный C++ использует умные указатели?
+
+Умные указатели применяются для безопасного управления памятью и предотвращения утечек ресурсов.

+ 26 - 0
Лекции/C++/Шайдуко_C++.md

@@ -0,0 +1,26 @@
+# C++ как системный язык программирования общего назначения
+
+**C++ — это компилируемый язык программирования**, ориентированный на разработку высокопроизводительных и ресурсоэффективных приложений. Он широко применяется в системном программировании, разработке игровых движков, финансовых платформ, встроенных систем и высоконагруженных серверов. Ключевой особенностью C++ является сочетание **низкоуровневого контроля над памятью** и **высокоуровневых абстракций**, что делает язык универсальным, но требовательным к квалификации разработчика.
+
+С архитектурной точки зрения C++ предоставляет прямой доступ к управлению ресурсами: памяти, потокам, файловым дескрипторам. В отличие от языков с автоматическим управлением памятью, C++ использует детерминированную модель времени жизни объектов, основанную на **RAII (Resource Acquisition Is Initialization)**. Этот принцип позволяет связывать владение ресурсом с временем жизни объекта и гарантирует корректное освобождение ресурсов даже при возникновении исключений.
+
+![Alt](cpp1.png)
+
+Современный C++ (начиная с C++11 и далее) активно развивает парадигмы **обобщённого программирования**, **метапрограммирования** и **параллельных вычислений**. Шаблоны позволяют создавать типобезопасные и переиспользуемые компоненты без потери производительности, поскольку все обобщения разрешаются на этапе компиляции. Это критически важно для библиотек стандартной библиотеки (STL), таких как `vector`, `map` и `algorithm`.
+
+Отдельного внимания заслуживает модель компиляции C++. Процесс включает стадии препроцессинга, компиляции, ассемблирования и линковки. Ошибки могут возникать на любой из этих стадий, что требует от разработчика понимания не только синтаксиса языка, но и устройства инструментальной цепочки (compiler toolchain). Именно поэтому C++ часто рассматривается как язык, формирующий **инженерное мышление**.
+
+## Таблица 1. Ключевые особенности языка C++
+
+| Особенность        | Описание                         | Практическое значение                   |
+| ------------------ | -------------------------------- | --------------------------------------- |
+| Управление памятью | Ручное или через умные указатели | Максимальный контроль над ресурсами     |
+| RAII               | Связывание ресурсов с объектами  | Надёжность и безопасность               |
+| Шаблоны            | Обобщённое программирование      | Высокая производительность без overhead |
+| Компиляция         | Генерация нативного кода         | Минимальные накладные расходы           |
+
+Современная практика разработки на C++ предполагает активное использование **умных указателей** (`std::unique_ptr`, `std::shared_ptr`), стандартных контейнеров и статического анализа кода. Это снижает вероятность ошибок управления памятью и повышает сопровождаемость проектов, не жертвуя производительностью.
+
+![Alt](cpp2.png)
+
+Таким образом, **C++ остаётся одним из самых мощных инструментов в арсенале разработчика**, позволяя создавать предсказуемые, быстрые и масштабируемые системы при условии строгого соблюдения инженерных практик и стандартов кодирования.

BIN
Лекции/Git/git1.png


BIN
Лекции/Git/git2.png


+ 28 - 0
Лекции/Git/Шайдуко_Git.md

@@ -0,0 +1,28 @@
+# Git как распределённая система контроля версий
+
+**Git — это распределённая система контроля версий**, предназначенная для отслеживания изменений в исходном коде и координации работы нескольких разработчиков. В отличие от централизованных систем, Git хранит полную историю проекта локально у каждого участника, что обеспечивает отказоустойчивость, высокую скорость операций и гибкость в управлении ветками.
+
+С инженерной точки зрения Git оперирует не файлами, а **снимками состояния репозитория**. Каждый коммит фиксирует состояние всего проекта в конкретный момент времени и содержит ссылку на предыдущие коммиты, формируя направленный ациклический граф. Такой подход позволяет эффективно выполнять операции слияния, отката и анализа истории изменений.
+
+![Alt](git1.png)
+
+Одной из ключевых концепций Git является **ветвление (branching)**. Ветка представляет собой подвижный указатель на определённый коммит и позволяет изолировать разработку новых функций, исправлений или экспериментов от основной кодовой базы. Операция создания ветки в Git практически мгновенна, что стимулирует активное использование feature-branch-подхода в командной разработке.
+
+Процесс интеграции изменений осуществляется через **слияние (merge)** или **перебазирование (rebase)**. Merge сохраняет историю ветвления, создавая дополнительный коммит, тогда как rebase переписывает историю, последовательно накладывая коммиты поверх целевой ветки. Выбор стратегии зависит от требований к читаемости истории и политики проекта.
+
+## Таблица 1. Основные объекты Git
+
+| Объект | Назначение                 | Практическая роль       |
+| ------ | -------------------------- | ----------------------- |
+| Blob   | Хранение содержимого файла | Фиксация данных         |
+| Tree   | Структура каталогов        | Организация файлов      |
+| Commit | Снимок состояния проекта   | История изменений       |
+| Branch | Указатель на коммит        | Параллельная разработка |
+
+Важным элементом рабочего процесса является **индекс (staging area)** — промежуточная область между рабочей директорией и репозиторием. Он позволяет точно контролировать, какие изменения попадут в следующий коммит, что особенно важно при логическом разделении правок.
+
+Git активно используется в сочетании с удалёнными репозиториями (GitHub, GitLab, Bitbucket), где реализуются процессы **code review**, автоматического тестирования и CI/CD. Команды `fetch`, `pull` и `push` обеспечивают синхронизацию локальной истории с удалённой, при этом Git строго контролирует целостность данных с помощью хешей SHA-1 или SHA-256.
+
+![Alt](git2.png)
+
+Таким образом, **Git является не просто инструментом хранения кода**, а полноценной системой управления изменениями, критически важной для масштабируемой и предсказуемой разработки программного обеспечения.

+ 21 - 0
Лекции/Git/Шайдуко_Вопросы.md

@@ -0,0 +1,21 @@
+# Вопросы и ответы
+
+Почему Git относится к распределённым системам контроля версий?
+
+Git является распределённой системой, поскольку каждый разработчик имеет полную копию репозитория и его истории.
+
+Что представляет собой коммит в Git?
+
+Коммит — это зафиксированный снимок состояния всего проекта с ссылкой на предыдущие изменения.
+
+Зачем используются ветки в Git?
+
+Ветки позволяют изолировать разработку отдельных задач без влияния на основную кодовую базу.
+
+В чём разница между merge и rebase?
+
+Merge сохраняет историю ветвления, а rebase переписывает её, последовательно применяя коммиты.
+
+Какую роль играет staging area в Git?
+
+Staging area используется для точного контроля набора изменений, включаемых в следующий коммит.

BIN
Лекции/Java/java1.png


BIN
Лекции/Java/java2.png


+ 26 - 0
Лекции/Java/Шайдуко_Java.md

@@ -0,0 +1,26 @@
+# Java как платформа объектно-ориентированной разработки
+
+**Java — это объектно-ориентированный язык программирования и платформа выполнения**, ориентированные на переносимость, безопасность и масштабируемость приложений. Ключевая инженерная идея Java формулируется принципом *«write once, run anywhere»*, который достигается за счёт компиляции исходного кода в байт-код и его выполнения на **Java Virtual Machine (JVM)**.
+
+Архитектура JVM абстрагирует аппаратные и операционные особенности среды выполнения. Это позволяет одному и тому же приложению работать на различных платформах без изменения исходного кода. JVM включает интерпретатор, JIT-компилятор, подсистему управления памятью и механизмы безопасности, что делает её полноценной виртуальной вычислительной средой.
+
+![Alt](java1.png)
+
+Одним из ключевых преимуществ Java является **автоматическое управление памятью**. Сборщик мусора (Garbage Collector) отвечает за освобождение неиспользуемых объектов, снижая риск утечек памяти и ошибок, связанных с ручным управлением ресурсами. Современные реализации JVM предлагают несколько алгоритмов GC (G1, ZGC, Shenandoah), позволяющих настраивать баланс между пропускной способностью и латентностью.
+
+Java строго придерживается **статической типизации**, что повышает надёжность программ и выявляет значительное количество ошибок на этапе компиляции. Объектная модель языка основана на классах, интерфейсах и механизмах наследования и полиморфизма, что делает Java удобным инструментом для разработки сложных корпоративных систем.
+
+## Таблица 1. Ключевые особенности платформы Java
+
+| Особенность           | Описание                           | Практическая ценность       |
+| --------------------- | ---------------------------------- | --------------------------- |
+| JVM                   | Виртуальная машина выполнения      | Платформенная независимость |
+| Garbage Collection    | Автоматическое управление памятью  | Снижение ошибок и утечек    |
+| Статическая типизация | Проверка типов на этапе компиляции | Повышенная надёжность       |
+| Многопоточность       | Встроенная поддержка потоков       | Масштабируемость приложений |
+
+Java активно используется в серверной разработке, особенно в сочетании с фреймворками **Spring**, **Jakarta EE** и инструментами экосистемы Maven и Gradle. Встроенная модель многопоточности и развитые средства синхронизации позволяют создавать высоконагруженные и отказоустойчивые сервисы.
+
+![Alt](java2.png)
+
+Таким образом, **Java представляет собой зрелую и устойчивую платформу**, предназначенную для долгоживущих проектов, где критичны поддерживаемость, безопасность и масштабируемость архитектуры.

+ 21 - 0
Лекции/Java/Шайдуко_Вопросы.md

@@ -0,0 +1,21 @@
+# Вопросы и ответы
+
+В чём заключается принцип «write once, run anywhere» в Java?
+
+Этот принцип означает выполнение байт-кода Java на любой платформе, где доступна JVM.
+
+Какую роль выполняет JVM в архитектуре Java?
+
+JVM отвечает за выполнение байт-кода, управление памятью и оптимизацию производительности.
+
+Почему автоматическое управление памятью важно для Java?
+
+Garbage Collection снижает риск утечек памяти и упрощает разработку сложных приложений.
+
+Зачем Java использует статическую типизацию?
+
+Статическая типизация позволяет выявлять ошибки типов на этапе компиляции и повышает надёжность кода.
+
+В каких областях Java применяется наиболее активно?
+
+Java широко используется в серверной и корпоративной разработке высоконагруженных приложений.

BIN
Лекции/Node.js/nodejs1.png


BIN
Лекции/Node.js/nodejs2.png


+ 26 - 0
Лекции/Node.js/Шайдуко_Node.js.md

@@ -0,0 +1,26 @@
+# Node.js как среда выполнения серверного JavaScript
+
+**Node.js — это среда выполнения JavaScript на сервере**, построенная на движке V8 от Google. Она позволяет использовать один язык программирования как для клиентской, так и для серверной части приложения, обеспечивая высокую производительность и масштабируемость благодаря **асинхронной событийно-ориентированной модели**.
+
+В основе Node.js лежит **однонитевой цикл событий (event loop)**, который управляет неблокирующими операциями ввода-вывода. Это позволяет обрабатывать тысячи соединений одновременно без создания множества потоков, что существенно снижает накладные расходы на контекстные переключения и улучшает производительность в I/O-интенсивных приложениях.
+
+![Alt](nodejs1.png)
+
+Node.js активно использует модульную архитектуру через систему **CommonJS** и **ES Modules**, что обеспечивает структурирование кода и повторное использование компонентов. Пакетный менеджер **npm** предоставляет богатую экосистему библиотек, упрощая интеграцию с базами данных, HTTP-серверами, инструментами тестирования и фреймворками, такими как **Express** и **Fastify**.
+
+Асинхронность в Node.js реализуется через **колбэки, промисы и async/await**, что позволяет писать читаемый код, минимизируя блокировки потока. Управление ошибками в асинхронных операциях является критическим аспектом разработки для обеспечения надёжности и устойчивости серверных приложений.
+
+## Таблица 1. Основные характеристики Node.js
+
+| Характеристика | Описание                            | Практическая ценность                                   |
+| -------------- | ----------------------------------- | ------------------------------------------------------- |
+| Event Loop     | Однонитевой цикл обработки событий  | Высокая производительность при большом числе соединений |
+| Асинхронность  | Неблокирующие операции ввода-вывода | Масштабируемость и отзывчивость сервиса                 |
+| Модули         | CommonJS и ES Modules               | Организация и повторное использование кода              |
+| npm            | Пакетный менеджер                   | Быстрая интеграция сторонних библиотек                  |
+
+Node.js также поддерживает работу с потоками данных через **Streams**, позволяя обрабатывать большие объёмы информации без загрузки всего файла в память. Это особенно важно для приложений с потоковой обработкой мультимедиа или интеграцией с внешними API.
+
+![Alt](nodejs2.png)
+
+Таким образом, **Node.js обеспечивает лёгкую, модульную и асинхронную платформу** для создания высокопроизводительных серверных приложений, способных обрабатывать большое количество одновременных соединений с минимальными накладными расходами.

+ 21 - 0
Лекции/Node.js/Шайдуко_Вопросы.md

@@ -0,0 +1,21 @@
+# Вопросы и ответы
+
+Что такое Node.js?
+
+Node.js — это серверная среда выполнения JavaScript с асинхронной событийно-ориентированной моделью.
+
+Как работает event loop в Node.js?
+
+Event loop управляет неблокирующими операциями ввода-вывода в одном потоке, обеспечивая масштабируемость.
+
+Какие механизмы асинхронности используются в Node.js?
+
+Асинхронность реализуется через колбэки, промисы и async/await.
+
+Зачем нужны модули и npm в Node.js?
+
+Модули и npm обеспечивают организацию кода и быструю интеграцию сторонних библиотек.
+
+Для чего применяются Streams в Node.js?
+
+Streams позволяют обрабатывать большие объёмы данных по частям, снижая нагрузку на память.