ТП весна 2027 Продвинутый: различия между версиями
Линукс |
Основные темы |
||
| Строка 57: | Строка 57: | ||
Установите WSL 2 по [https://learn.microsoft.com/ru-ru/windows/wsl/install официальному гайду]. Рекоммендации по дистрибутиву сохраняются. | Установите WSL 2 по [https://learn.microsoft.com/ru-ru/windows/wsl/install официальному гайду]. Рекоммендации по дистрибутиву сохраняются. | ||
= Система оценивания = | = Система оценивания = | ||
| Строка 71: | Строка 69: | ||
= Программа курса = | = Программа курса = | ||
Курс представляет из себя 30 пар, по формату являющихся чем-то средним между лекцей и семинаром. Презентации с пар и часть материалов курса будут на английском языке для более эффективного погружения в среду. | |||
== Основные темы курса == | |||
* Linux | |||
** Файловая система | |||
*** Типы файлов | |||
*** Разрешения файлов | |||
*** Монтирования ФС | |||
*** Общее устройство ФС ext семейства | |||
*** Временные и lock файлы | |||
** Systemd | |||
*** Монтирования | |||
*** Сервисы | |||
*** journalctl | |||
** Пакетные менеджеры | |||
*** dpkg и apt (apt-get) | |||
*** apt репозитории | |||
*** rpm и dnf (yum) | |||
*** yum репозитории | |||
** Интерпретатор командной строки | |||
*** Bash и bash скрипты, автодополнение | |||
*** Процесс инициализации zsh & bash | |||
*** Принцип работы ИКС, фунции fork & exec | |||
*** Терминалы и эмуляторы терминалов | |||
*** Взаимодействие процессов (фоновые задачи, сигналы) | |||
** Man pages и их создание | |||
** Утилита xdg-open и MIME | |||
* Git | |||
** Основные команды | |||
** Внутреннее устройство и принципы работы | |||
** Сабмодули | |||
** Настройка репозитория (основные файлы, project badges, особенности GitLab & GitHub) | |||
** LFS | |||
* Взаимодейтсвие с ресурсами по сети | |||
** curl, wget (для HTTP & FTP) | |||
** Сертификаты HTTPS | |||
** SSH клиент | |||
** Утилита nmcli | |||
** nginx | |||
** Правила отдачи статического контента | |||
* Сборка С/С++ | |||
** Этапы компиляции | |||
** Макросы | |||
** Базовые команды ASM x86, устройство стека исполнения | |||
** Объектные файлы, name mangling, виды символов | |||
** Хедеры, поиск системных хедеров | |||
** Библиотеки: статические и динамические | |||
** Линковка. ldd, rpath, LD_LIBRARY_PATH. Поиск динамических библиотек. | |||
** Дебаггер gdb | |||
** Санитайзер. Алгоритм работы ASAN | |||
** Линтеры: clang-format, clang-tidy | |||
** GNU Make | |||
** Дефолтные пути в системе и стандартные переменные окружения | |||
** Установка библиотек и бинарей в Linux | |||
** CMake. Настройка сборки проекта | |||
** CMake модули. Подключение зависимостей через FetchContent | |||
** Устновка через CMake. CMake пакеты | |||
* Тестирование C/C++ | |||
** Фреймворки gtest и gmock | |||
** Принципы работы gtest & gmock | |||
** Мутационное тестирование: фреймворк Mull | |||
** Фаззинг: фреймворк fuzztest | |||
** Покрытие тестов: утилиты gcov, lcov, gcovr | |||
* Профилирование C/C++ | |||
** Утилиты /usr/bin/time и perf, flamegraph | |||
** Фреймворк google benchmark | |||
** Эмпирическая сложность алгоритмов | |||
* Контейнеризация и виртуализация | |||
** Написание Dockerfile и сборка контейнеров | |||
** GitLab & GitHub Container Registry | |||
** Multistaging build | |||
** Плагины buildx & compose | |||
** Healthcheck | |||
** Запуск докера внутри контейнеров: DOOD & DIND | |||
** Принцип работы Docker (linux namespaces, chroot, cgroups, overlayfs) | |||
** Docker VS Podman | |||
** Oracle VM Box. Виртуальные машины | |||
* CI | |||
** GitLab CI | |||
** Настройка и создание GitLab Runners | |||
** GitHub Actions | |||
** GitLab & GitHub pages | |||
** Antora для генерации сайтов | |||
* Прочее | |||
** Markup languages (JSON, YAML, TOML, XML) и схемы данных | |||
** Asciidoctor | |||
** Regex | |||
** Основные Open-source лицензии | |||
** Цифровые подписи (gpg) | |||
== План == | |||
''TBD..'' | ''TBD..'' | ||
Версия от 16:34, 14 сентября 2026
Внимание! Страница в разработке. Данные могут меняться! Дождитесь окончательной публикации страницы!
Описание курса
Курс посвящен пользовательской стороне Linux, а также ряду популярных инструментов разработки. Продвинутый поток фокусируется на глубоком погружении в технические аспекты и детали реализации инструментов. В рамках курса будут изучены как сами инструменты, так и устроство некоторых из них (например, внутреннее устройство и принципы работы Git, реализация Docker средствами ядра Linux, общий принцип работы интерпретаторов командной оболочки и др.)
Важно! Курс не предусматривает какого-либо использования ИИ (не рекомендуется даже поиск информации) и использование ИИ-инструментов карается вплоть до дисциплинарных взысканий. Одним из результатов курса является умение верифицировать на высоком уровне результаты генерации кода с помощью ИИ, однако получить такой навык, используя ИИ нельзя.
Курс досточно объемный, интенсивный и для закрытия на высокую оценку требует много потраченного времени. Домашние задания будут публиковаться каждую неделю.
Пререквизиты курса
- Закрытый хотя бы на хор курс С++
- Продвинутый поток продолжает изучать экосистему С/С++, а также использует их механизмы для изучения ОС. Без хороших знаний первого семестра пройти курс будет достаточно сложно.
- Знание основных структур данных
- Мы не ожиданием умения "вслепую написать RBT дерево", однако ждем, что вы понимаете общие принципы работы основных структур данных из 1го семестра и можете их сравнивать. Например, ожидается понимание различий AVL, RBT и B деревьев.
- Наличие Linux платформы
- Так как курс про Linux и его инструменты, то без него (или mac OS) курс пройти будет невозможно.
- Умение и готовность самостоятельно искать информацию
- Домашние задания специально продуманы так, чтобы вы сталкивались с различными ошибками и нестандартными ситуациями. Мы ожидаем, что вы готовы гуглить ошибки, читать man страницы, stackoverflow и другие linux форумы. Использование ИИ для разрешения ошибок максимально не приветствуется, а для решения задач вообще запрещается.
Установка Linux системы
Требуется только если у вас уже нет ни Linux, ни mac OS.
Если вы впервые работаете с Linux, то советуем выбрали либо Ubuntu, либо Fedora. Ubuntu -- более Windows-like система с большим числом гайдов в интернете, однако потребляет много ресурсов. Fedora -- более дружелюбная по потреблению ресурсов система, также позволяет выбрать графическое окружение (KDE или GNOME), однако уже дальше от Windows по дизайну и чуть меньше гайдов, преимущественно на английском языке.
Oracle VM Box
Подойдет людям с 6+ ядрами процессора, 16ГБ+ оперативной памяти и 256ГБ+ жесткого диска (!= нельзя поставить иначе, просто будут часто фриззы в системе). Причем свободного места на диске должно быть хотя бы 64ГБ. Позволяет иметь полноценный Linux, однако придется чуть заморочиться. При работе с ВМ на хосте лучше не запускать ресурсо-требовальных приложений (например, несколько окон Chrome) -- тут уже ориентируйтесь на объем вашей оперативной памяти.
Скачайте образ диска ОС (.iso-файл):
- Fedora 43, 44 версия слишком свежая, пока лучше не ставить
- Ubuntu 2026, не устанавливайте нечетные версии, можно альтернативно 24, более старые не стоит.
Устновите Oracle VM Box и создайте виртуальную машину по следующим гайдам:
Рекомендуемые параметры ВМ:
- Оперативная память
- Fedora: 6ГБ+, оптимально 8ГБ+
- Ubuntu: 8ГБ+, оптимально 10ГБ+
- Диск
- Тип: VDI, динамически расширяемый
- Объем: 64ГБ+, должны уложиться в 128ГБ
- Минимум 2 ядра, а так лучше 4+ ядер (больше половины лучше не отдавать)
Крайне советуем сразу настроить возможность копировать данные из хоста в ВМ и обратно. Дополнительно полезно создать разделяемую папку, чтобы перекидывать файлы туда-сюда.
Dual boot
Подойдет тем, кто имеет 512ГБ+ жесткого диска (оптимально 1ТБ+). Позволяет иметь две независимые системы на одном устройстве, однако самый сложный процесс настройки из всех вариантов. Здесь уже лучше найти видео-гайды в ютубе по тому, как настроить для вашей версии Windows и выбранной ОС.
WSL
Подойдет всем у кого стоит Windows, поставит почти что Linux (все же WSL -- не до конца полноценный Linux и на курсе мы это увидим, с дз этого курса проблем не будет, но в будущем могут быть приколы, если начнете заниматься низкоуровневым программированием) причем будет возможность из Linux взаимодействовать с файлами в Windows.
Установите WSL 2 по официальному гайду. Рекоммендации по дистрибутиву сохраняются.
Система оценивания
Итоговая оценка вычисляется по формуле min{Ex, Ts + Iv}, где
Ex-- Оценка за итоговый зачетTs-- Оценка за домашние задания (45% оценки)Ex-- Оценка за устные сдачи в формате технических интервью (55% оценки)
Итоговый зачет проводится на зачетной неделе и содержит базовые вопросы по темам курса aka теормин.
Также для положительного (не пересдача) закрытия курса потребуется набрать в сумме ненулевое число баллов за домашки по каждому из блоков курса.
Программа курса
Курс представляет из себя 30 пар, по формату являющихся чем-то средним между лекцей и семинаром. Презентации с пар и часть материалов курса будут на английском языке для более эффективного погружения в среду.
Основные темы курса
- Linux
- Файловая система
- Типы файлов
- Разрешения файлов
- Монтирования ФС
- Общее устройство ФС ext семейства
- Временные и lock файлы
- Systemd
- Монтирования
- Сервисы
- journalctl
- Пакетные менеджеры
- dpkg и apt (apt-get)
- apt репозитории
- rpm и dnf (yum)
- yum репозитории
- Интерпретатор командной строки
- Bash и bash скрипты, автодополнение
- Процесс инициализации zsh & bash
- Принцип работы ИКС, фунции fork & exec
- Терминалы и эмуляторы терминалов
- Взаимодействие процессов (фоновые задачи, сигналы)
- Man pages и их создание
- Утилита xdg-open и MIME
- Файловая система
- Git
- Основные команды
- Внутреннее устройство и принципы работы
- Сабмодули
- Настройка репозитория (основные файлы, project badges, особенности GitLab & GitHub)
- LFS
- Взаимодейтсвие с ресурсами по сети
- curl, wget (для HTTP & FTP)
- Сертификаты HTTPS
- SSH клиент
- Утилита nmcli
- nginx
- Правила отдачи статического контента
- Сборка С/С++
- Этапы компиляции
- Макросы
- Базовые команды ASM x86, устройство стека исполнения
- Объектные файлы, name mangling, виды символов
- Хедеры, поиск системных хедеров
- Библиотеки: статические и динамические
- Линковка. ldd, rpath, LD_LIBRARY_PATH. Поиск динамических библиотек.
- Дебаггер gdb
- Санитайзер. Алгоритм работы ASAN
- Линтеры: clang-format, clang-tidy
- GNU Make
- Дефолтные пути в системе и стандартные переменные окружения
- Установка библиотек и бинарей в Linux
- CMake. Настройка сборки проекта
- CMake модули. Подключение зависимостей через FetchContent
- Устновка через CMake. CMake пакеты
- Тестирование C/C++
- Фреймворки gtest и gmock
- Принципы работы gtest & gmock
- Мутационное тестирование: фреймворк Mull
- Фаззинг: фреймворк fuzztest
- Покрытие тестов: утилиты gcov, lcov, gcovr
- Профилирование C/C++
- Утилиты /usr/bin/time и perf, flamegraph
- Фреймворк google benchmark
- Эмпирическая сложность алгоритмов
- Контейнеризация и виртуализация
- Написание Dockerfile и сборка контейнеров
- GitLab & GitHub Container Registry
- Multistaging build
- Плагины buildx & compose
- Healthcheck
- Запуск докера внутри контейнеров: DOOD & DIND
- Принцип работы Docker (linux namespaces, chroot, cgroups, overlayfs)
- Docker VS Podman
- Oracle VM Box. Виртуальные машины
- CI
- GitLab CI
- Настройка и создание GitLab Runners
- GitHub Actions
- GitLab & GitHub pages
- Antora для генерации сайтов
- Прочее
- Markup languages (JSON, YAML, TOML, XML) и схемы данных
- Asciidoctor
- Regex
- Основные Open-source лицензии
- Цифровые подписи (gpg)
План
TBD..
Отбор на курс
На курсе планируется 55-60 студентов (мах 60). Для отбора на курс необходимо зарегистрироваться на GitLab (регистрация -- это нулевой этап отбора) и заполнить форму (появится позже).
GitLab имеет систему защиты от ботов, поэтому при подозрительных действиях может потребовать пройти дополнительную верификацию, которую в РФ сделать проблематично. Как не попасть под подозрения:
- Не использовать VPN и прочие средства модификации интернет трафика
- Использовать человеческие имена и пароли (минимизировать число паттернов сгенерированного набора символов)
- Не использовать одну сеть для регистрации большого числа аккаунтов. Так, если с сети уже был недавно найден подозрительный аккаунт, то последующие регистрации также могут вызвать подозрения
- Не спидранить регистрацию и не быть улиткой: заполняйте все поля в среднем, спокойном темпе
- Использовать почту
phystech.edu-- она вызывает минимум сомнений - При повторной попытке регистрации не использовать данные похожие на прошлые: если уже в подозрения улетел ник
qwerty, тоqwerty2008будет также вызывать подозрения - Иногда может помогать режим инкогнито
В случае превышения числа желающих 60 человек будет произведен отбор по следующим параметрам:
- Студенты ФУПМа и ПМИ.Мат имеют наинизший приоритет
- Студенты ПМИ.Инф и ИВТсп имеют более высокий приоритет при прочих равных
- Ожидается, что студенты закрыли курсы плюсов и алгосов на хор и выше
- Будут проведены устные собесы, по результатам которых отранжируем желающих
Собесы будут больше не про знания, а про мотивацию/интересы.
Если вы не прошли отбор, то вы можете посещать занятия при наличии мест в аудитории и закрывать задачи для себя: все домашние задания будут в открытом доступе. Важно: не публикуйте свои решения, позвольте другим получить знания!
Факультативное закрытие курса
Возможность факультативного закрытия курса обсуждается индивидуально с лектором. Для этого напишите ему в личные сообщения
Команда курса
Лектор: Иван Калинин (tg: @taekwandodo)
Старший ассистент: Виктория Попова
Ассистенты: tbd..