Node.JS (FullStack) разработчик [TeachMeSkills]
Курс «Node.js разработчик» позволяет c головой окунуться в мир серверной разработки для реализации сложной бизнес-логики приложений. К тому же, на данном курсе ты еще получишь и уверенные знания языка программирования JavaScript, чтобы создавать современные и полноценные приложения.
В ходе курса мы напишем несколько приложений - от простых монолитов до сервисов, использующих микросервисную архитектуру. Ты получишь опыт работы с разными типами баз данных - как реляционных, так и не реляционных, научишься запускать их в docker-контейнерах и многое другое, связанное с серверной разработкой. Пройдя этот курс, ты сможешь смело претендовать на позицию Junior Backend Developer.
256 академических часов
Составлена практикующими IT специалистами для новичков в разработке. Это лучший курс по Node.JS для начинающих.
Составлена практикующими IT специалистами для новичков в разработке. Это лучший курс по Node.JS для начинающих.
1. Введение в веб-разработку
- Знакомство с HTML/XML/XHTML
- Структура HTML-документа
- Работа с текстом и HTML-тегами
- Работа со шрифтами и фоном
- Списки
- Формы
- Таблицы
- Знакомство с CSS: способы подключения, виды селекторов
- Понятие блочной и строчной модели
- Float, inline-block
- CSS-свойстваadding и margin
- Позиционирование блочных элементов, свойство position
- Flex-модель
- Семантическая верстка
- Адаптивная и резиновая верстка
- Сетка сайта
- Работа с графическими редакторами (Photoshop, Figma)
- Выдача задания на верстку макета
- Grid-модель
- Псевдоклассы и псевдоэлементы
- Анимация элементов
- Значение форм в enterprise-приложениях
- Bootstrap
- Основы препроцессоров LESS, SASS/SCSS, Stylus
- Локальная разработка на GULP-SASS
- BEM и какие проблемы он решает
- Консультация по вопросам сдачи индивидуального задания
- Что такое системы контроля версий и зачем они нужны
- Классификация систем контроля версий
- Git как система контроля версий
- Основные команды Git
- Введение в программирование
- Классификация языков программирования
- Что такое JavaScript и для чего он нужен
- История языка
- Типы данных
- Переменные
- Базовые операторы
- Как устроен JavaScript
- Системы счисления (двоичная, восьмеричная, десятичная, шестнадцатеричная)
- Компиляция и интерпретация исходного кода
- Как работает JIT-компиляция
- Приведение типов: явное и неявное
- Условия (if, switch, тернарный оператор)
- Циклы (while, for, for ... in, for … of)
- Что такое функции и зачем они нужны
- Способы объявления функций
- Аргументы функции
- Возвращаемое значение
- Ключевое слово arguments и его роль
- Оператор расширения в стрелочных функциях и его роль
- Область видимости. Локальные и глобальные переменные
- Всплытие значений
- Стек вызовов функции
- Рекурсия и ее роль
- Замыкание и его роль
- Функции обратного вызова
- HOC функции
(Часть 1)
- Объекты как составной тип данных
- Доступ к свойствам объектов
- Массивы как частный случай объектов
- Доступ к элементам массивов
- Копирование объектов и массивов
- Деструктуризация
(Часть 2)
- Перебор объектов и перебор массивов
- Методы по работе с массивами
- Преобразование объекта в массив и массива в объект
- Введение в ООП. Понятие класса и объекта
- Основные понятия ООП: инкапсуляция, наследование, полиморфизм, абстракция
- Функции-конструкторы и их роль в создании объектов. Выделение памяти при создании объекта и ключевое слово new
- Ключевое слово this и понятие контекста
- Способы привязки контекста выполнения
- Прототипы и их роль
- Отличие prototype и proto
- Прототипное наследование в JavaScript
- Появление классов в JavaScript
- Статические свойства
- Наследование с использованием классов
- Свойства get и set
- Приватные свойства классов
- Что такое DOM
- Навигация по элементам
- Типы элементов и поиск элементов
- Атрибуты элементов, добавление/изменение стилей и классов
- Введение в браузерные события
- Всплытие и погружение
- События по умолчанию
- События мыши и клавиатуры
- Обработка событий формы
(Часть 1)
- Что такое асинхронность
- Отличие синхронного и асинхронного кода
- Потоки и процессы
- Отличие асинхронности от многопоточности
- Событийный цикл
- Таймеры setTimeout и setInterval
- Выдача индивидуального задания на разработку собственного клиентского приложения
- Еще раз о функциях обратного вызова
- Введение в promise
- Цепочка промисов
- Продолжаем promise и обработка ошибок
- Промисификация
- Микро- и макро-задачи
- Генераторы
- Работа с promise через async/await
- Введение в клиент-серверную архитектуру
- Как взаимодействует клиент и сервер
- Протокол HTTP
- HTTP запросы. Методы и статус-коды
- Запросы через XMLHttpRequest, fetch и axios
- Обработка ошибок в запросах
- Объектная модель браузера
- Куки-файлы
- localStorage и sessionStorage
- Что такое npm
- Что такое Webpack и отличия от Gulp
- Устанавливаем Webpack
- Настройка окружения
- Разбиение исходного кода проекта на файлы и запуск через Webpack
- Работа с зависимостями
- Плагины и лоадеры
- Что такое паттерны их роль
- Классификация паттернов
- Порождающие паттерны. Примеры
- Поведенческие паттерны. Примеры
- Структурные паттерны. Примеры
- Семейство паттернов MVC
- MVC/MVVM
- Концепция одностраничных приложений
- Что такое алгоритм
- Способы оценки сложности алгоритма
- Алгоритмы поиска
- Алгоритмы сортировки
- Хэш-таблица, стек, очередь, куча
- Коллекции Map/Set
- Деревья
- Практическое занятие
- Подробные индивидуальные консультации с преподавателем
- Что такое сервер и зачем он нужен
- Установка Node.js, обзор документации
- Выполнение первого скрипта на Node
- Работа Javascript на сервере
- Архитектура Node.js, V8, libuv, c++ и node-gyp
- Паттерн reactor и Event loop
- Модули. Способы декомпозиции структуры проекта: common.js, es6 modules(.mjs и babel)
- Встроенные модули: path, fs, os
- Глобальный объект global в node.js и константы __dirname, __filename
- Почему window и document не существует в node.js
- Дебаггер
- Объект process
- Переменные окружения и dotenv, process.argv
- Почему переменные окружения не должны попадать в репозиторий
- Buffer API
- Таймауты, интервалы
- Модуль events. EventEmitter в действии
- Объект Stream (потоки readable, writable, duplex). Pipe
- Использование Promise и async/await со Stream API
- Концептуальная роль Stream в node.js (stdin, stdout, fs, http)
- Понятие "Интернет" и "WEB"
- Введение в компьютерные сети
- Топологии компьютерных сетей
- Стандарты и организация компьютерных сетей
- 7 уровней модели OSI
- 4 уровня в модели TCP/IP
- Главное отличия TCP и UDP
- Протокол HTTP (заголовки, тело запроса, статус коды). Модуль http
- Айпи адреса, мак-адрес и порты. 127.0.0.1
- Базовый веб сервер на node.js
- Объекты request и response
- Выполнение HTTP запроса на стороне node.js
- HTTP/HTTPS, SSL/TLS
- Статический веб-сервер
- Углубление в клиент-серверную модель взаимодействия
- Создание REST API сервера
- Роутинг запросов
- Методы GET, POST, PUT, DELETE, PATCH и их смысл в REST
- Http-клиенты Postman и Insomnia
- Выдача индивидуального задания на разработку REST API сервис
- Разновидности тестов
- Unit-тестирование (assert)
- Chai, mocha, sinon
- Jest
- Разница в понятиях "аутентификация", "авторизация" и "идентификация"
- Методы аутентификации: сессионная, двухфакторная, беспарольная, SSO
- Пишем первую авторизацию на Node.JS
- Json Web Token
- Модуль crypto
- Имплементация JWT
- Passport.js
- Модуль child_process
- Модуль worker_threads
- Менеджер процессов pm2
- Основы unix-команд
- Пользователи в unix
- Права в unix
- Система директорий в unix
- Настраиваем VPS-сервер
- Устанавливаем зависимости и базовая настройка
- Практическое занятие
- Подробные индивидуальные консультации с преподавателем
- Контроль качества кода с помощью ESLint/Prettier/JSHint
- Процесс code/review
- Подход Git Flow
- Гит хуки и husky.js
- Аннотации
- Зачем писать на фреймворке
- Обзор Node.JS фреймворков
- Фреймворк express.js и почему он популярный
- Настройка express.js. Роутинг, отправка статических файлов, концепция middleware, парсинг Content-type: application/json, обработка ошибок
- MVC и шаблонизация данных на сервере
- Контроллеры, модели, представления, сервисы
- Выдача индивидуального задания на разработку собственного сервиса
- Проблемы без валидации
- Инструменты для валидации данных. Joi, ajv.
- Проблемы односторонней коммуникации межу клиентом и сервером
- Polling, long polling
- Понятие о web-sockets
- ws/wss
- Библиотека socket.io
- Server sent event
- Установка и настройка Docker
- Запаковываем наше приложение в docker-compose
- Запускаем базу данных в docker-compose
- Подключаем базу данных в наше express-приложение
- Настраиваем GUI-приложение для базы данных
- Выдача задания на контейнеризацию своего приложения
- Классификация БД
- Реляционные базы данных
- Язык запросов SQL
- Драйвер для БД(pg)
- Проектирование баз данных
- SQL-injection
- Агрегатные функции
- Транзакции
- Нормальные формы данных
- PostgreSQL, JSON, JSONB
- ORM: knex.js, sequilize
- Миграция
- Фикстуры
- Переносим данные своего приложения в БД
- Установка MongoDB
- Синтаксис MongoDB
- Драйвер mongodb
- Mongoose: Модели, миграции, запросы
- Агрегация
- Что такое key-value хранилища и для чего они нужны
- Запуск Redis с помощью docker-compose
- Подключение к редис с помощью драйвера
- Сравнение скорости запросов в PostgreSQL и Redis
- Node.js http2-модуль и openssl
- Nginx: какие решает задачи
- Nginx: Сборка, раздача статики, реверс проксирование
- Nginx: Запуск и настройка
- Nginx: Балансировка запросов, алгоритмы балансировки
- Для чего нужно следить за логами приложений
- Простой логгер своими руками
- Анализ логов Nginx с помощью утилиты goaccess
- Инструменты логирования в Node.JS - Loggly/Winston/Morgan
- Сервисы для логирования catchJS и Sentry.io
- Преимущества и недостатки микросервисной архитектуры
- Коммуникация между микросервисами
- Первые микросервисы на http
- Проблемы с http и понятие брокера сообщений
- Виды брокеров NATS/Kafka/RabbitMQ/Redis as MQ
- Выдача задания для разбиения приложения на микросервисы
- Документируем наше бэкенд-приложение для фронтенд разработчиков
- OpenApi 3.0 / Swagger
- Swagger: Настройка и запуск
- Домашнее задание на подключения модуля swagger к проекту
- Проблема микросервисов на примере Socket.io
- Решение проблемы с Socket.io-redis
- Выдача задания на AB тестирование
- Какие задачи решает Moleculer.js / Nanoservices
- Добавляем Moleculer в свой проект
- Решаем задачу с распределением работы между инстансами
- CRON jobs
- Настраиваем балансировщик для Docker
- Запускаем приложение на VPS-сервере
- Настройка домена
- Задание на деплоймент своего приложения
- Практическое занятие по настройке приложения на VPS-сервере
- Консультации с преподавателями по вопросам деплоя
- Проблемы БД при работе с большим количеством данных
- Инструменты Elasticsearch и Sphinx
- Запуск и настройка Elastic Search
- Elasticsearch: запросы, индексы, фильтры
- Инструменты для стресс-тестов: artillery / loadtest / autocannon
- Тестируем наше приложение на отказоустойчивость на VPS-сервере
- Финальное домашнее задание
- Повторение изученного материала
- Выбор дипломного проекта
- Составление резюме (теория + практика)
- Составление профиля на LinkedIn (теория + практика)
- Прохождение интервью
- Soft skills, которые важны в рамках интервью
- Проведение пробного интервью
https://teachmeskills.by/kursy-programmirovaniya/node-js-developer-online