Подробнее
Что нужно для старта
- Что необходимо на старте:
- Базовая компьютерная грамотность (умение устанавливать софт, работать с файловой системой и браузером).
- Готовность много практиковаться и спокойно относиться к ошибкам в коде, это часть обучения.
- Что не обязательно, но облегчит прохождение:
- Минимальный опыт в программировании на любом языке.
- Технические требования к технике:
- Компьютер или ноутбук (Windows, macOS или Linux) с доступом в интернет.
- Минимум 4 ГБ оперативной памяти (комфортнее работать с 8 ГБ и более).
- Все используемое в курсе ПО бесплатно и будет установлено по ходу уроков.
- Если коротко: никаких специальных предварительных знаний не требуется. Курс начинается с самого нуля, нужно только желание учиться, терпение и готовность разбираться. Остальному мы научим!
Что вы получите
- Писать код на Go - работать с типами, ошибками, структурами и интерфейсами, используя новейшие конструкции языка.
- Разрабатывать HTTP-серверы и клиенты, создавать CLI-приложения, работать с JSON и файловыми системами.
- Анализировать внутреннее устройство слайсов, мап (Swiss Tables) и интерфейсов, оценивать стоимость аллокаций и оптимизировать работу с памятью.
- Применять паттерны асинхронности, избегать гонок данных (race conditions) и утечек горутин.
- Строить эффективные SQL-запросы, использовать JOIN, подзапросы, оконные функции, подзапросы и анализировать планы выполнения.
- Проектировать схему БД и применять транзакции, представления, хранимые процедуры и триггеры.
- Управлять инфраструктурой в Linux, научитесь работать в терминале, настраивать права доступа, писать Bash-скрипты, использовать SSH и cron.
- Контейнеризировать приложения - создавать оптимизированные Docker-образы, писать Dockerfile и оркестрировать сервисы через Docker Compose.
- Организовывать разработку в Git, вести ветки, разрешать конфликты слияния, оформлять Pull Requests и работать с GitHub.
Для кого этот курс
- Новички в программировании. Если вы выбрали Go в качестве первого языка, этот курс будет идеальным выбором. Вы пройдете все, начиная с базовых вещей до сложных процессов без пробелов в знаниях.
- Разработчикам на Python, Java, PHP или C# и тех, кто хочет перейти на Go - вы быстро освоите специфику языка и научитесь работать, здесь собраны лучшие практики.
- Junior Go-разработчикам курс поможет систематизировать знания, закрыть пробелы в понимании конкурентности, рантайма и работы с памятью.
- Для студентов IT-специальностей данный курс - отличный способ дополнить академическую теорию нужными практическими навыками, актуальными для современного рынка.
- Тем кто готовится к собеседованиям курс будет выглядеть как идеальный интенсив, для подготовки к каверзным вопросам, где будут разобраны все вопросы, в деталях.
Программа курса
- О курсе
- Что нужно сделать
- Про Golang
- Установка Golang
- Установка редактора кода
- Первая программа
- Запуск и компиляция
- Отладка
- Переменные
- Названия переменных
- Типы
- Тип int
- Переполнение и приведение типов int
- Типы byte и rune
- Выбор int
- Система счисления
- iota
- Случайное целое число
- Тип float
- Случайное дробное число
- Тип complex
- Пакет math
- Тип bool
- Тип string
- Пакет strings
- Приведение в строку
- Приведение строки в число
- Пакет fmt
- Спецификаторы f-функций
- Тип rune
- Указатели
- nil и new
- Ввод данных от пользователя
- Тип any или interface{}
- Другие типы
- Операторы и операнды
- Математические операторы
- Операторы присваивания
- Конкатенация
- Сравнение
- Логические операторы
- Логические "И", "ИЛИ"
- Побитовые операторы
- Пример побитовых операторов
- Логические конструкции if-else
- Логическое if с присвоением значения
- Конструкция switch
- Область видимости
- Практика - Определение времени суток
- Практика - Калькулятор ИМТ
- Практика - Поиск по названию товара
- Создание функций
- Параметры
- Возвращение значений
- Именованный return
- Применение return
- Вариативный параметр
- Указатели и функции
- defer
- Нюансы defer
- Стек вызовов - callstack
- Паника!!!
- Ошибки
- Оборачивание ошибок
- Замыкания
- Пользовательские типы
- Инициализация с init
- Рекурсия
- Практикуемся с рекурсией - факториал
- Стиль функций
- Одна функция - одна задача
- if, else и return
- Затенение переменных
- Имена функций
- Практика - Система оценок
- Практика - Декораторы
- Пакеты в golang
- Внешние пакеты и их подключение
- Советы по пакетам
- Цикл for
- Итерация по строкам
- break, continue и return
- Вложенные циклы и лейблы
- Практика - Игра "Угадай число"
- Практика - Анализ текста
- Создание массивов
- Доступ к значениям массивов
- Итерация по массиву
- Массивы и функции
- Сравнение массивов
- Практика - Секретный код
- Создание слайсов
- Итерация по слайсу
- Просто про добавление значений - append()
- Вариативные параметры функции
- Пустой слайс - nil
- Вложенные массивы и слайсы
- Копирование - copy
- Подслайсы
- Указатель на элемент
- Вставка значений - append()
- Удаление значений
- Нюансы работы со слайсами
- Сортировка
- Пакет slices
- Практика - шифр Цезаря
- Практика - Отслайси его!
- Создание map
- Итерация по map
- Изменение map во время итерации
- Ключи
- Значения
- Скорость работы
- Пример использования map
- Сравнение map
- Копирование и клонирование
- Удаление значений с maps.DeleteFunc()
- Практика - рекомендации фильмов
- Практика - анализ друзей
- Проблема хранения данных
- Структуры
- Вложенные структуры
- Передача по значению
- Методы
- Изменение структуры в методах
- Экспортируемость полей и методов
- Функция-конструктор
- Теги
- Композиция
- Встраивание
- Композиция vs встраивание
- Пустая структура
- Практика - система управления тегами
- Практика - система управления проектами
- Создание интерфейсов
- Пример использования
- Тип any или пустой интерфейс
- nil
- Вызов метода у nil
- Пользовательские типы
- Пример использования пользовательских типов
- Сложнее пример с интерфейсами
- Встраивание интерфейсов
- Практика - Симуляция жизни в деревне
- Вспоминаем про ошибки
- Оборачивание ошибок
- Пользовательские ошибки
- Функции errors.Is() и errors.As()
- Как устроены errors.Is() и errors.As()
- Оборачивание пользовательских ошибок
- Другой подход к работе с ошибками
- Советы по работе с ошибками
- Практика - Обработка ошибок платежа
- Знакомство
- О курсе
- Обзор систем контроля версий
- Установка и настройка Git
- Первый репозиторий
- Первый коммит
- Индекс
- Подробнее о коммита
- Откат изменений
- Удаление файлов
- Переименование/перемещение файлов
- Просмотр изменений
- История коммитов
- Машина времени (изменение истории)
- Игнорирование файлов
- Домашнее задание
- Создание удаленного репозитория
- Клонирование репозитория
- SSH аутентификация
- Копирование чужого репозитория (fork)
- GitHub Copilot
- Файл Readme.md и разметка Markdown
- Альтернативы GitHub
- Домашнее задание
- Введение в ветки
- Переключение между ветками
- Создание, просмотр, удаление веток
- Слияние веток
- Конфликты при слиянии
- Экстренное переключение между задачами
- Безопасное обновление репозитория
- Поиск автора кода
- Запросы на слияние (Pull Request)
- Большая шпаргалка
- О курсе
- Установка Linux Ubuntu как виртуальной машины
- Разворачивание Linux "в облаках"
- Настройка SSH-сервера
- Резюме модуля `Введение`. Контрольные вопросы
- Трюки и лайфхаки в терминале
- Список горячих клавиш в терминале Linux
- Основные команды для навигации по папкам
- Создание файлов и папок
- Основные операции с файлами
- Просмотр файлов
- Резюме модуля. Контрольные вопросы
- Nano. Дружественный к пользователю текстовый редактор
- Vim. Редактор по умолчанию
- Vimtutor. Обучалка по редактору Vim.
- Резюме модуля. Контрольные вопросы.
- Шпаргалка по редактору Nano
- Шпаргалка по горячим клавишам Vim
- Тест по пройденному материалу
- Домашнее задание
- Поиск файлов, команда find
- Важные директории, утилиты, архивирование
- Резюме модуля. Контрольные вопросы
- Вывод информации о пользователях
- Создание пользователей
- Изменение пользователей
- Права root, удаление пользователей
- Управление группами
- Резюме модуля. Контрольные вопросы
- Домашнее задание
- Вывод информации + команда chmod
- Смена владельцев и групп
- Специальные биты, права по умолчанию
- Резюме модуля. Контрольные вопросы
- Домашнее задание
- Ссылки, iNodes
- Потоки ввода-вывода
- Конвейер обработки команд
- Резюме модуля. Контрольные вопросы
- Домашнее задание
- Утилита top (диспетчер задач)
- Утилиты htop, ps, kill, systemctl
- Резюме модуля. Контрольные вопросы
- Утилита apt / apt-get
- Утилиты dpkg, snap
- Добавление репозитория
- Резюме модуля. Контрольные вопросы
- Служба cron, утилита crontab
- Настройка логов, задачи других пользователей
- Резюме модуля. Контрольные вопросы
- Просмотр, добавление, удаление правил
- Политики по умолчанию, сохранение правил
- Резюме модуля. Контрольные вопросы
- История создания, запуск скриптов, оболочка
- Синтаксис Bash: условия, ветвления
- Синтаксис Bash: циклы, функции
- Резюме модуля. Контрольные вопросы
- Чтение информации
- Монтирование диска
- Общее файловое хранилище
- Дополнительные диски "в облаках"
- LVM (logical volume management)
- Домашнее задание
- Дисклеймер
- Введение, установка
- Список команд, первый контейнер
- Контейнер с документацией
- Веб-сервер Nginx в Docker
- Dockerfile
- Docker Compose
- Удаление ресурсов
- Домашнее задание
- Введение
- Структура слайса
- Как работает append()
- Нюансы append()
- Подслайсы
- Неожиданные мутации
- Сложность операций: Big O
- Как данные хранятся в памяти?
- Практика: Угадай сложность
- Проблема поиска
- Придумываем хеш-таблицу
- Коллизии
- Создаем свою хеш-таблицу
- Заключение
- Введение
- Идея swiss tables
- hash
- Каталог и расширяемое хеширование
- Таблицы (Swiss tables)
- Группы
- Поиск элемента и пробирование
- CRUD в map
- Нюансы map
- Заключение
- Устройство интерфейсов
- Таблицы методов (itab)
- Интерфейсы, nil и производительность
- Использование интерфейсов
- Основы времени
- Арифметика времени
- Форматирование и парсинг времени
- Временные зоны
- Monotonic и Wall Time
- Таймеры и задержки
- DST, високосные секунды и другие подводные камни
- Введение в работу с файлами
- Ручное управление файлом
- Операции с *os.File
- Пример: чтение конфигурации
- Работа с большими файлами
- bufio
- Реализуем логику head
- Пути и работа с директориями
- Directory (Path) Traversal
- Рекурсивный обход файловой системы
- Права доступа, метаданные и временные файлы
- Атомарная запись
- Практика: реализуем tail
- Стандартные операции над файлами
- Что такое JSON
- Основы JSON
- omitempty и omitzero
- MarshalJSON и UnmarshalJSON
- Вложенные структуры, слайсы, мапы
- Динамический JSON
- Валидация в UnmarshalJSON
- Streaming и работа с большими данными
- Циклические ссылки
- encoding/json/v2
- stepik
- Горутины и GMP
- Как устроен GMP
- Горутины
- Каналы
- Нюансы каналов
- Практика с каналами
- select
- Таймеры и таймауты
- Введение в контекст
- Отмена контекста
- Передача контекста вниз по стеку
- Причина - context.Cause
- Пример: длинные вычисления с проверкой контекста
- Работа с сигналами
- Graceful shutdown
- Введение в пакет sync
- sync.Mutex
- sync.RWMutex
- sync.WaitGroup
- sync.Once
- sync.Cond
- sync.Map
- sync.Pool
- errgroup
- Что выбрать?
- Атомарные операции
- Пример: Флаг отмены для воркеров
- Атомарное обновление структуры - atomic.Pointer
- Когда нельзя использовать атомарные операции
- Заключение
- Graceful shutdown
- Pipeline
- Worker Pool
- Fan-Out/Fan-In
- Resource Pool
- Circuit Breaker
- Rate Limiting
- Pub/Sub
- Prioritized Select
- Семафор
- Идемпотентный закрыватель каналов
- Паттерны And и Or
- Неблокирующая передача данных
- Window Buffer
- Паттерн Мост (Bridge)
- Динамический Fan-In
- Паттерн First-Of
- Singleflight
- Собственный errgroup
- Паттерн Барьер
- Мини-оркестратор с откатом
- Worker Pool с динамическим масштабированием
- Диспетчер нетраннера
- Введение в CLI-приложения
- Цветной вывод и индикаторы прогресса
- Стандартный пакет flag
- Пакет pflag
- Библиотека urfave/cli
- Библиотека Cobra и Viper
- Интерактивные режимы (REPL)
- Введение в HTTP как протокол
- Уровни сетевого взаимодействия: OSI
- Эволюция HTTP
- Stateless-природа HTTP
- Основы HTTP-сервера
- Регистрация обработчиков
- Запуск сервера
- Заполнение обработчиков
- Добавляем log/slog
- Роутер
- Роутинг в http.ServeMux
- Убираем глобальный логгер
- Middleware
- Context и цепочки middleware
- Настройка HTTP-сервера
- Чтение данных из HTTP-запроса
- Раздача статических файлов
- Загрузка файлов
- Множественная загрузка файлов
- Заключение
- Простые запросы HTTP
- http.Client
- http.Transport
- Диагностика сетевых ошибок
- http.Request
- О курсе
- Установка MySQL сервера
- Работа в терминале
- Графические IDE (Workbench, DBeaver)
- Взаимодействие с сервером
- Контрольные вопросы
- Решаем задачи. Пишем SQL код
- Первичные ключи
- Особенности типов данных и именование объектов
- Руководство по стилю SQL · SQL Style Guide
- Индексы
- Внешние ключи
- Подробнее про ALTER TABLE
- Особенности синтаксиса MySQL
- Виды связей между таблицами (1х1, 1хМ, МхМ)
- Таблицы-справочники
- ER-диаграмма
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
- Команда INSERT
- Команда SELECT
- Команда UPDATE
- Команда DELETE
- Бонус: Сервисы для генерации данных
- Импорт-экспорт данных
- Контрольные вопросы
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
- Фильтрация (WHERE + LIKE)
- Сортировка (ORDER BY)
- Агрегирующие функции (COUNT, MIN, MAX, AVG, SUM)
- Группировка (GROUP BY)
- Фильтрация (HAVING)
- Отсутствие значения (NULL)
- Пейджинг (LIMIT + OFFSET)
- Условия, ветвления (IF, CASE)
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Контрольные вопросы. Часть 3
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
- Вложенные запросы (подзапросы)
- Объединения (JOIN) - Теория
- Объединения (CROSS JOIN, INNER JOIN)
- Объединения (LEFT JOIN, RIGHT JOIN)
- Объединения (FULL OUTER JOIN)
- Вложенные запросы VS объединения
- Соединения (UNION)
- Оконные функции
- Общие табличные выражения (CTE)
- Рекурсивные табличные выражения
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
- Решаем задачи. Пишем SQL код. Часть 3
- Решаем задачи. Пишем SQL код. Часть 4
- Полнотекстовый поиск
- Представления (View)
- Хранимые процедуры
- Пользовательские функции
- Переменные
- Триггеры
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Контрольные вопросы. Часть 3
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
- Введение в транзакции
- Обработка исключений (ошибок)
- Уровни изоляции транзакций
- Блокировки таблиц
- Взаимная блокировка (deadlock)
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Решаем задачи. Пишем SQL код
- Пользователи
- Роли
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Решаем задачи. Пишем SQL код
- Лишний JOIN
- Денормализация
- Настройки сервера
- Анализ запросов (EXPLAIN)
- Графический план исполнения запроса
- Исправление проблемных мест
- Графический план: показательные примеры
- Контрольные вопросы
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
- Работа с логами
- Циклы
- Курсоры
- SQL инъекции
- Контрольные вопросы
- Решаем задачи. Пишем SQL код
- Подведение итогов
01Go [1.1] Введение
- О курсе
- Что нужно сделать
- Про Golang
- Установка Golang
- Установка редактора кода
- Первая программа
- Запуск и компиляция
- Отладка
02Go [1.2] Базовые типы
- Переменные
- Названия переменных
- Типы
- Тип int
- Переполнение и приведение типов int
- Типы byte и rune
- Выбор int
- Система счисления
- iota
- Случайное целое число
- Тип float
- Случайное дробное число
- Тип complex
- Пакет math
- Тип bool
- Тип string
- Пакет strings
- Приведение в строку
- Приведение строки в число
- Пакет fmt
- Спецификаторы f-функций
- Тип rune
- Указатели
- nil и new
- Ввод данных от пользователя
- Тип any или interface{}
- Другие типы
03Go [1.3] Операторы
- Операторы и операнды
- Математические операторы
- Операторы присваивания
- Конкатенация
- Сравнение
- Логические операторы
- Логические "И", "ИЛИ"
- Побитовые операторы
- Пример побитовых операторов
04Go [1.4] Ветвления
- Логические конструкции if-else
- Логическое if с присвоением значения
- Конструкция switch
- Область видимости
- Практика - Определение времени суток
- Практика - Калькулятор ИМТ
- Практика - Поиск по названию товара
05Go [1.5] Функции
- Создание функций
- Параметры
- Возвращение значений
- Именованный return
- Применение return
- Вариативный параметр
- Указатели и функции
- defer
- Нюансы defer
- Стек вызовов - callstack
- Паника!!!
- Ошибки
- Оборачивание ошибок
- Замыкания
- Пользовательские типы
- Инициализация с init
- Рекурсия
- Практикуемся с рекурсией - факториал
- Стиль функций
- Одна функция - одна задача
- if, else и return
- Затенение переменных
- Имена функций
- Практика - Система оценок
- Практика - Декораторы
06Go [1.6] Пакеты
- Пакеты в golang
- Внешние пакеты и их подключение
- Советы по пакетам
07Go [1.7] Циклы
- Цикл for
- Итерация по строкам
- break, continue и return
- Вложенные циклы и лейблы
- Практика - Игра "Угадай число"
- Практика - Анализ текста
08Go [1.8] Массивы
- Создание массивов
- Доступ к значениям массивов
- Итерация по массиву
- Массивы и функции
- Сравнение массивов
- Практика - Секретный код
09Go [1.9] Слайсы
- Создание слайсов
- Итерация по слайсу
- Просто про добавление значений - append()
- Вариативные параметры функции
- Пустой слайс - nil
- Вложенные массивы и слайсы
- Копирование - copy
- Подслайсы
- Указатель на элемент
- Вставка значений - append()
- Удаление значений
- Нюансы работы со слайсами
- Сортировка
- Пакет slices
- Практика - шифр Цезаря
- Практика - Отслайси его!
10Go [1.10] Структура map
- Создание map
- Итерация по map
- Изменение map во время итерации
- Ключи
- Значения
- Скорость работы
- Пример использования map
- Сравнение map
- Копирование и клонирование
- Удаление значений с maps.DeleteFunc()
- Практика - рекомендации фильмов
- Практика - анализ друзей
11Go [1.11] Структуры
- Проблема хранения данных
- Структуры
- Вложенные структуры
- Передача по значению
- Методы
- Изменение структуры в методах
- Экспортируемость полей и методов
- Функция-конструктор
- Теги
- Композиция
- Встраивание
- Композиция vs встраивание
- Пустая структура
- Практика - система управления тегами
- Практика - система управления проектами
12Go [1.12] Интерфейсы
- Создание интерфейсов
- Пример использования
- Тип any или пустой интерфейс
- nil
- Вызов метода у nil
- Пользовательские типы
- Пример использования пользовательских типов
- Сложнее пример с интерфейсами
- Встраивание интерфейсов
- Практика - Симуляция жизни в деревне
13Go [1.13] Ошибки
- Вспоминаем про ошибки
- Оборачивание ошибок
- Пользовательские ошибки
- Функции errors.Is() и errors.As()
- Как устроены errors.Is() и errors.As()
- Оборачивание пользовательских ошибок
- Другой подход к работе с ошибками
- Советы по работе с ошибками
- Практика - Обработка ошибок платежа
14Git [1] Основы Git
- Знакомство
- О курсе
- Обзор систем контроля версий
- Установка и настройка Git
- Первый репозиторий
- Первый коммит
- Индекс
- Подробнее о коммита
- Откат изменений
- Удаление файлов
- Переименование/перемещение файлов
- Просмотр изменений
- История коммитов
- Машина времени (изменение истории)
- Игнорирование файлов
- Домашнее задание
15Git [2] GitHub
- Создание удаленного репозитория
- Клонирование репозитория
- SSH аутентификация
- Копирование чужого репозитория (fork)
- GitHub Copilot
- Файл Readme.md и разметка Markdown
- Альтернативы GitHub
- Домашнее задание
16Git [3] Ветвление и командная работа
- Введение в ветки
- Переключение между ветками
- Создание, просмотр, удаление веток
- Слияние веток
- Конфликты при слиянии
- Экстренное переключение между задачами
- Безопасное обновление репозитория
- Поиск автора кода
- Запросы на слияние (Pull Request)
- Большая шпаргалка
17Linux [1] Вступление
- О курсе
- Установка Linux Ubuntu как виртуальной машины
- Разворачивание Linux "в облаках"
- Настройка SSH-сервера
- Резюме модуля `Введение`. Контрольные вопросы
18Linux [2] Знакомство с терминалом
- Трюки и лайфхаки в терминале
- Список горячих клавиш в терминале Linux
- Основные команды для навигации по папкам
- Создание файлов и папок
- Основные операции с файлами
- Просмотр файлов
- Резюме модуля. Контрольные вопросы
19Linux [3] Редактирование файлов
- Nano. Дружественный к пользователю текстовый редактор
- Vim. Редактор по умолчанию
- Vimtutor. Обучалка по редактору Vim.
- Резюме модуля. Контрольные вопросы.
20Linux [4] Промежуточные итоги
- Шпаргалка по редактору Nano
- Шпаргалка по горячим клавишам Vim
- Тест по пройденному материалу
- Домашнее задание
21Linux [5] Файловая структура
- Поиск файлов, команда find
- Важные директории, утилиты, архивирование
- Резюме модуля. Контрольные вопросы
22Linux [6] Управление пользователями и группами
- Вывод информации о пользователях
- Создание пользователей
- Изменение пользователей
- Права root, удаление пользователей
- Управление группами
- Резюме модуля. Контрольные вопросы
- Домашнее задание
23Linux [7] Права доступа (rwx)
- Вывод информации + команда chmod
- Смена владельцев и групп
- Специальные биты, права по умолчанию
- Резюме модуля. Контрольные вопросы
- Домашнее задание
24Linux [8] Важные инструменты терминала Linux
- Ссылки, iNodes
- Потоки ввода-вывода
- Конвейер обработки команд
- Резюме модуля. Контрольные вопросы
- Домашнее задание
25Linux [9] Инструменты для мониторинга
- Утилита top (диспетчер задач)
- Утилиты htop, ps, kill, systemctl
- Резюме модуля. Контрольные вопросы
26Linux [10] Управление программным обеспечением
- Утилита apt / apt-get
- Утилиты dpkg, snap
- Добавление репозитория
- Резюме модуля. Контрольные вопросы
27Linux [11] Планировщик задач
- Служба cron, утилита crontab
- Настройка логов, задачи других пользователей
- Резюме модуля. Контрольные вопросы
28Linux [12] Работа с фаерволом (утилита iptables)
- Просмотр, добавление, удаление правил
- Политики по умолчанию, сохранение правил
- Резюме модуля. Контрольные вопросы
29Linux [13] Bash
- История создания, запуск скриптов, оболочка
- Синтаксис Bash: условия, ветвления
- Синтаксис Bash: циклы, функции
- Резюме модуля. Контрольные вопросы
30Linux [14] Работа с дисками
- Чтение информации
- Монтирование диска
- Общее файловое хранилище
- Дополнительные диски "в облаках"
- LVM (logical volume management)
- Домашнее задание
31Linux [15] Docker
- Дисклеймер
- Введение, установка
- Список команд, первый контейнер
- Контейнер с документацией
- Веб-сервер Nginx в Docker
- Dockerfile
- Docker Compose
- Удаление ресурсов
- Домашнее задание
32Go [2.1] Слайсы
- Введение
- Структура слайса
- Как работает append()
- Нюансы append()
- Подслайсы
- Неожиданные мутации
33Go [2.2] Big O
- Сложность операций: Big O
- Как данные хранятся в памяти?
- Практика: Угадай сложность
34Go [2.3] Хеш-таблица
- Проблема поиска
- Придумываем хеш-таблицу
- Коллизии
- Создаем свою хеш-таблицу
- Заключение
35Go [2.4] Map
- Введение
- Идея swiss tables
- hash
- Каталог и расширяемое хеширование
- Таблицы (Swiss tables)
- Группы
- Поиск элемента и пробирование
- CRUD в map
- Нюансы map
- Заключение
36Go [2.5] Интерфейсы
- Устройство интерфейсов
- Таблицы методов (itab)
- Интерфейсы, nil и производительность
- Использование интерфейсов
37Go [2.6] Время - time
- Основы времени
- Арифметика времени
- Форматирование и парсинг времени
- Временные зоны
- Monotonic и Wall Time
- Таймеры и задержки
- DST, високосные секунды и другие подводные камни
38Go [2.7] Работа с файловой системой
- Введение в работу с файлами
- Ручное управление файлом
- Операции с *os.File
- Пример: чтение конфигурации
- Работа с большими файлами
- bufio
- Реализуем логику head
- Пути и работа с директориями
- Directory (Path) Traversal
- Рекурсивный обход файловой системы
- Права доступа, метаданные и временные файлы
- Атомарная запись
- Практика: реализуем tail
- Стандартные операции над файлами
39Go [2.8] JSON
- Что такое JSON
- Основы JSON
- omitempty и omitzero
- MarshalJSON и UnmarshalJSON
- Вложенные структуры, слайсы, мапы
- Динамический JSON
- Валидация в UnmarshalJSON
- Streaming и работа с большими данными
- Циклические ссылки
- encoding/json/v2
- stepik
40Go [2.9] Конкурентность
- Горутины и GMP
- Как устроен GMP
- Горутины
- Каналы
- Нюансы каналов
- Практика с каналами
- select
- Таймеры и таймауты
41Go [2.10] Контекст
- Введение в контекст
- Отмена контекста
- Передача контекста вниз по стеку
- Причина - context.Cause
- Пример: длинные вычисления с проверкой контекста
42Go [2.11] Сигналы
- Работа с сигналами
- Graceful shutdown
43Go [2.12] Пакет sync
- Введение в пакет sync
- sync.Mutex
- sync.RWMutex
- sync.WaitGroup
- sync.Once
- sync.Cond
- sync.Map
- sync.Pool
- errgroup
- Что выбрать?
44Go [2.13] Пакет atomic
- Атомарные операции
- Пример: Флаг отмены для воркеров
- Атомарное обновление структуры - atomic.Pointer
- Когда нельзя использовать атомарные операции
- Заключение
45Go [2.14] Паттерны конкурентности
- Graceful shutdown
- Pipeline
- Worker Pool
- Fan-Out/Fan-In
- Resource Pool
- Circuit Breaker
- Rate Limiting
- Pub/Sub
- Prioritized Select
46Go [2.15] Задачи по конкурентности
- Семафор
- Идемпотентный закрыватель каналов
- Паттерны And и Or
- Неблокирующая передача данных
- Window Buffer
- Паттерн Мост (Bridge)
- Динамический Fan-In
- Паттерн First-Of
- Singleflight
- Собственный errgroup
- Паттерн Барьер
- Мини-оркестратор с откатом
- Worker Pool с динамическим масштабированием
- Диспетчер нетраннера
47Go [2.16] CLI
- Введение в CLI-приложения
- Цветной вывод и индикаторы прогресса
- Стандартный пакет flag
- Пакет pflag
- Библиотека urfave/cli
- Библиотека Cobra и Viper
- Интерактивные режимы (REPL)
48Go [2.17] Теория HTTP
- Введение в HTTP как протокол
- Уровни сетевого взаимодействия: OSI
- Эволюция HTTP
- Stateless-природа HTTP
49Go [2.18] HTTP-сервер
- Основы HTTP-сервера
- Регистрация обработчиков
- Запуск сервера
- Заполнение обработчиков
- Добавляем log/slog
- Роутер
- Роутинг в http.ServeMux
- Убираем глобальный логгер
- Middleware
- Context и цепочки middleware
- Настройка HTTP-сервера
- Чтение данных из HTTP-запроса
- Раздача статических файлов
- Загрузка файлов
- Множественная загрузка файлов
- Заключение
50Go [2.19] HTTP-клиент
- Простые запросы HTTP
- http.Client
- http.Transport
- Диагностика сетевых ошибок
- http.Request
51SQL [1] Установка рабочего окружения.
- О курсе
- Установка MySQL сервера
- Работа в терминале
- Графические IDE (Workbench, DBeaver)
- Взаимодействие с сервером
- Контрольные вопросы
- Решаем задачи. Пишем SQL код
52SQL [2] Проектирование БД (команды DDL)
- Первичные ключи
- Особенности типов данных и именование объектов
- Руководство по стилю SQL · SQL Style Guide
- Индексы
- Внешние ключи
- Подробнее про ALTER TABLE
- Особенности синтаксиса MySQL
- Виды связей между таблицами (1х1, 1хМ, МхМ)
- Таблицы-справочники
- ER-диаграмма
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
53SQL [3] Работа с данными (команды DML, CRUD)
- Команда INSERT
- Команда SELECT
- Команда UPDATE
- Команда DELETE
- Бонус: Сервисы для генерации данных
- Импорт-экспорт данных
- Контрольные вопросы
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
54SQL [4] Основы SELECT запросов
- Фильтрация (WHERE + LIKE)
- Сортировка (ORDER BY)
- Агрегирующие функции (COUNT, MIN, MAX, AVG, SUM)
- Группировка (GROUP BY)
- Фильтрация (HAVING)
- Отсутствие значения (NULL)
- Пейджинг (LIMIT + OFFSET)
- Условия, ветвления (IF, CASE)
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Контрольные вопросы. Часть 3
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
55SQL [5] Сложные SELECT запросы
- Вложенные запросы (подзапросы)
- Объединения (JOIN) - Теория
- Объединения (CROSS JOIN, INNER JOIN)
- Объединения (LEFT JOIN, RIGHT JOIN)
- Объединения (FULL OUTER JOIN)
- Вложенные запросы VS объединения
- Соединения (UNION)
- Оконные функции
- Общие табличные выражения (CTE)
- Рекурсивные табличные выражения
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
- Решаем задачи. Пишем SQL код. Часть 3
- Решаем задачи. Пишем SQL код. Часть 4
56SQL [6] Продвинутые фичи SQL
- Полнотекстовый поиск
- Представления (View)
- Хранимые процедуры
- Пользовательские функции
- Переменные
- Триггеры
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Контрольные вопросы. Часть 3
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
57SQL [7] Транзакции
- Введение в транзакции
- Обработка исключений (ошибок)
- Уровни изоляции транзакций
- Блокировки таблиц
- Взаимная блокировка (deadlock)
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Решаем задачи. Пишем SQL код
58SQL [8] Права доступа
- Пользователи
- Роли
- Контрольные вопросы. Часть 1
- Контрольные вопросы. Часть 2
- Решаем задачи. Пишем SQL код
59SQL [9] Вопросы оптимизации
- Лишний JOIN
- Денормализация
- Настройки сервера
- Анализ запросов (EXPLAIN)
- Графический план исполнения запроса
- Исправление проблемных мест
- Графический план: показательные примеры
- Контрольные вопросы
- Решаем задачи. Пишем SQL код. Часть 1
- Решаем задачи. Пишем SQL код. Часть 2
60SQL [10] Дополнительные темы
- Работа с логами
- Циклы
- Курсоры
- SQL инъекции
- Контрольные вопросы
- Решаем задачи. Пишем SQL код
61Завершение учебной программы
- Подведение итогов
Отзывы о курсе
Оставьте отзыв
Расскажите о качестве обучения, поддержке и результате. Это поможет другим выбрать организацию осознанно.
Оставьте заявку
Консультант ответит на вопросы о курсе «Программа: Go-разработчик [ Go + SQL + Git + Linux ]» и поможет разобраться в деталях обучения.
Нажимая кнопку, вы даете согласие на обработку персональных данных
Информация обновлена 7 сентября 2026 г.

Stepik 



















