Привет, это карта мира программирования С/С++. Под "миром" понимается все, с чем может и будет сталкиваться программист на этих языках программирования. Некоторые понятия пропустим (случайно или не очень), но в целом хотелось бы максимально систематизировать существующие знания в описанных доменах.
- Языки программирования
- C/C++, основные вводимые темы (если считать C поднабором C++, что не совсем точно):
- C
- Переменные
- Функции
- Массивы
- Структуры
- Указатели
- C++
- Классы
- Шаблоны
- Лямбда-функции
- Ссылки
- Полиморфизм и перегрузка функций
- Пространства имен
- C
- Ассемблер.
- Языки с влиянием C/C++:
- Rust
- C#
- Java
- C/C++, основные вводимые темы (если считать C поднабором C++, что не совсем точно):
- Инфраструктура разработки
- Компиляторы
- gcc/g++
- Clang (Часть LLVM)
- Visual C++
- Системы сборки
- Make
- Automake
- CMake
- Meson
- MSBuild
- Низкоуровневые системы сборки:
- Ninja
- Отладчики
- GDB
- LLDB (из LLVM/Clang)
- Реверсивные отладчики:
- RR
- UndoDB
- Анализаторы
- Статический анализ - анализ исходного кода без запуска.
- Динамический анализ - анализ уже скомпилированной программы.
- Верификаторы - доказательство корректности программ.
- Системы контроля версий
- git, основные команды:
git clone
git checkout
git pull
git commit
git push
- SVN
- Mercurial
- git, основные команды:
- Непрерывная интеграция
- GitHub Actions
- GitLab
- Jenkins
- Среды разработки
- Visual Studio
- Visual Studio Code
- CLion
- Компиляторы
- Операционные системы
- Контексты исполнения программ:
- Ядро ОС
- Модули ядра
- Драйверы устройств
- Пользовательское пространство
- Системные приложения
- Пользовательские приложения
- Методы взаимодействия программ и/или ядра
- Системные вызовы
- ioctl
- Netlink
- Сигналы
- Семафоры для разграничения доступа к общим ресурсам
- Очереди сообщений
- Сокеты
- Пайпы
- Общая память
- Ядро ОС
- Файловые системы
- Основные файловые систеы
- EXT
- NTFS
- EXFAT
- Специализированные файловые системы:
- procfs
- devfs
- sysfs
- tmpfs
- sshfs
- Понятие "точка монтирования":
- Само понятие.
- Методы монтирования файловых систем.
- Основные файловые систеы
- Методы разграничения прав доступа:
- Контрольные списки доступа (ACL).
- AppArmor, SELinux.
- Вывод на экран.
- X-сервер.
- X-форвардинг.
- Контексты исполнения программ:
- Сетевые технологии.
- Что внутри.
- OSI.
- Layering в ядре.
- Разгрузка ЦП с помощью железа.
- Как это выглядит в юзерленде.
- Сокеты.
- TCP/UDP, HTTP.
- poll/epoll.
- Сервисы.
- Веб-серверы.
- Nginx.
- Apache.
- VPN.
- ssh (ну ок).
- L2TP/IPSec.
- OpenVPN.
- Wireguard.
- Веб-серверы.
- Что внутри.
- Низкий уровень.
- Архитектуры ЦП.
- x86_64, x86.
- arm64, arm.
- mips, mipsel, mips64, mipsel64.
- Виды скомпилированных файлов.
- Исполняемые файлы.
- Библиотеки.
- Объектные файлы.
- Форматы исполняемых файлов.
- PE (Windows).
- ELF (Linux).
- DWARF.
- Mach-O (Mac).
- Устройство памяти
- Виртуальная память и MMU.
- Загрузка исполняемых файлов.
- Общая память.
- Как работают указатели.
- Устройство аллокаторов памяти.
- Поиск утечек памяи.
- Реверс-инжиниринг
- Архитектура Фон Неймана.
- Дизассемблеры и декомпиляторы.
- Архитектуры ЦП.