118 статей для Middle Fullstack-разработчика: большая подборка
Материалы для самостоятельной разработки продукта: типизация, клиентские фреймворки, API, транзакции, очереди, тесты, производительность, безопасность и CI/CD.
JavaScript и TypeScript
- Грамматика и типы
Чтобы находить ошибки типов до запуска.
- Порядок выполнения и обработка ошибок
Чтобы находить ошибки типов до запуска.
- Циклы и итерации
Чтобы находить ошибки типов до запуска.
- Функции
Чтобы разбивать логику на повторяемые действия.
- Выражения и операторы
Чтобы находить ошибки типов до запуска.
- Числа и даты
Чтобы находить ошибки типов до запуска.
- Упорядоченные наборы данных
Чтобы находить ошибки типов до запуска.
- Продвинутый TypeScript
Чтобы находить ошибки типов до запуска.
- Дженерики в TypeScript
Чтобы находить ошибки типов до запуска.
- TypeScript тип any против всех
Чтобы находить ошибки типов до запуска.
- Учимся писать сложные Typescript типы на примере роутинга в React
Чтобы собирать интерфейс из переиспользуемых компонентов.
- TypeScript и все что тебе нужно в разработке
Чтобы находить ошибки типов до запуска.
- Копаемся в TypeScript: пишем свои Utility Types. Ключевое слово infer
Чтобы находить ошибки типов до запуска.
Клиентские фреймворки
- Автоматизируем переход на React Hooks
Чтобы собирать интерфейс из переиспользуемых компонентов.
- Запрос к API c React Hooks, HOC или Render Prop
Чтобы собирать интерфейс из переиспользуемых компонентов.
- Redux store vs React state
Чтобы собирать интерфейс из переиспользуемых компонентов.
- В чем разница между useLayoutEffect, componentDidMount, useEffect
Чтобы выбрать основу и структуру интерфейса.
- React: Zustand State Manager
Чтобы собирать интерфейс из переиспользуемых компонентов.
- Сравнение синтаксисов Vue JS
Чтобы выбрать основу и структуру интерфейса.
- Миграция с vue-class-component на vuejs/composition-api
Чтобы выбрать основу и структуру интерфейса.
- Миграция на Vue 2.7
Чтобы выбрать основу и структуру интерфейса.
- defineExpose() в Vue 3
Чтобы выбрать основу и структуру интерфейса.
- Angular: создание кастомного элемента формы и передача в него состояния формы
Чтобы выбрать основу и структуру интерфейса.
- Как управлять состоянием в Angular по мере роста приложения
Чтобы выбрать основу и структуру интерфейса.
- Angular — API композиции директив
Чтобы выбрать основу и структуру интерфейса.
- Прощай, Zone.js: ускоряем Angular с Signal API и Zoneless-подходом
Чтобы выбрать основу и структуру интерфейса.
Проектирование API
- REST vs gRPC. Межсервисная интеграция для начинающих
Чтобы проектировать понятные и стабильные API.
- От REST к gRPC и GraphQL: современный подход к API
Чтобы проектировать понятные и стабильные API.
- REST API vs GraphQL: в чём между ними разница
Чтобы проектировать понятные и стабильные API.
- GraphQL или REST: Какой API выбрать, чтобы не прогадать?
Чтобы проектировать понятные и стабильные API.
- Документирование ASP .Net Core Web API с помощью OpenAPI/Swagger. Библиотека Swashbuckle
Чтобы использовать возможности браузера из кода.
- Реализация REST API-метода с пагинацией на примере JSON-Schema и OpenAPI
Чтобы передавать структурированные данные между системами.
- RESTForms — REST API для ваших классов InterSystems Caché
Чтобы проектировать понятные и стабильные API.
- GraphQL-gRPC API Gateway на Java
Чтобы проектировать понятные и стабильные API.
- Rest шлюз для gRPC сервисов на го — gRPC-gateway
Чтобы проектировать понятные и стабильные API.
- Миграция API с REST на gRPC в WePay
Чтобы проектировать понятные и стабильные API.
- Мифы про REST API. Часть 3
Чтобы проектировать понятные и стабильные API.
- Разрабатываем REST API с помощью TypeScript, NestJS, Prisma, AdminJS и Swagger
Чтобы находить ошибки типов до запуска.
- Как мы превратили Swagger из документации в двигатель API-автотестов
Чтобы проектировать понятные и стабильные API.
Базы данных и транзакции
- Уровни изоляции транзакций: практическая механика и сравнение PostgreSQL, MySQL, Oracle, SQL Server и DB2
Чтобы ускорять запросы и сохранять целостность данных.
- Топ полезных SQL-запросов для PostgreSQL
Чтобы ускорять запросы и сохранять целостность данных.
- DevConf: переход Uber с PostgreSQL на MySQL
Чтобы ускорять запросы и сохранять целостность данных.
- Что нового в PostgreSQL 11: INCLUDE-индексы
Чтобы ускорять запросы и сохранять целостность данных.
- Оптимизация SQL запросов
Чтобы ускорять запросы и сохранять целостность данных.
- Уровни изоляции транзакций в PostgreSQL, MySQL, MSQL, Oracle с примерами на Go
Чтобы ускорять запросы и сохранять целостность данных.
- PostgreSQL 16. Изоляция транзакций. Часть 2
Чтобы ускорять запросы и сохранять целостность данных.
- Шардированный не значит распределённый: что важно знать, когда PostgreSQL становится мало
Чтобы ускорять запросы и сохранять целостность данных.
- BRIN, GIN, B‑Tree: полный гайд по индексам PostgreSQL для highload
Чтобы ускорять запросы и сохранять целостность данных.
- Перекрестная репликация между PostgreSQL и MySQL
Чтобы ускорять запросы и сохранять целостность данных.
- Транзакция, ACID, CAP теорема и уровни изоляций транзакций простыми словами
Чтобы ускорять запросы и сохранять целостность данных.
- Сравнение транзакционных систем Oracle и PostgreSQL
Чтобы ускорять запросы и сохранять целостность данных.
- Гетерогенная распределенная система как способ миграции больших и не очень баз данных с MSSQL Server на PostgreSQL
Чтобы ускорять запросы и сохранять целостность данных.
Асинхронность, очереди и кэширование
- Часть 2: Как я реализовал взаимодействие микросервисов — Kafka и gRpc
Чтобы выполнять асинхронные операции без блокировок.
- Изучаем Kafka — Уровень 1
Чтобы выполнять асинхронные операции без блокировок.
- Асинхронность vs. многопоточность: что выживет в эпоху No GIL?
Чтобы выполнять долгие операции без зависания.
- Выбор между RabbitMQ и Apache Kafka
Чтобы выполнять асинхронные операции без блокировок.
- Соседняя очередь всегда движется быстрее
Чтобы выполнять асинхронные операции без блокировок.
- Kafka, go и параллельные очереди
Чтобы выполнять асинхронные операции без блокировок.
- Архитектура сервиса распределённых очередей сообщений в Яндекс.Облаке
Чтобы выполнять асинхронные операции без блокировок.
- Как подружить Spring Boot и Redis для эффективного кэширования
Чтобы выполнять асинхронные операции без блокировок.
- Кэширование и трекинг. Как YOLO экономит время и нервы
Чтобы выполнять асинхронные операции без блокировок.
- Проектирование высокопроизводительных кэширующих решений с использованием Redis и Memcached
Чтобы выполнять асинхронные операции без блокировок.
- Разработка высокопроизводительного кеш-слоя на основе Redis в телеграм-боте
Чтобы выполнять асинхронные операции без блокировок.
- Redis больше не нужен?! Реализуем реактивный кэш на чистом PostgreSQL и Go
Чтобы выполнять асинхронные операции без блокировок.
- Мифы и легенды о производительности Python
Чтобы выполнять асинхронные операции без блокировок.
Тестирование и качество
- Реализация функции обнаружения
Чтобы разбивать логику на повторяемые действия.
- Эффективное тестирование верстки
Чтобы находить ошибки до выпуска продукта.
- Тестирование с Ava.js
Чтобы находить ошибки до выпуска продукта.
- Анализируем виды тестов для Frontend
Чтобы находить ошибки до выпуска продукта.
- Тестирование Frontend
Чтобы находить ошибки до выпуска продукта.
- Playwright: веб-тестирование без драмы
Чтобы находить ошибки до выпуска продукта.
- Тестирование Node.js-проектов. Часть 1. Анатомия тестов и типы тестов
Чтобы находить ошибки до выпуска продукта.
- Контрактные тесты с Pact: гарантия стабильности микросервисов
Чтобы находить ошибки до выпуска продукта.
- Автоматизация тестирования микросервисов: плюсы и минусы тестов на Go
Чтобы находить ошибки до выпуска продукта.
- Мобильное тестирование, автоматизация и тестирование API: С чем нужно уметь работать тестировщику в 2021 году
Чтобы находить ошибки до выпуска продукта.
- Еще раз про интеграционное тестирование ASP.NET Core c testserver и testcontainers
Чтобы находить ошибки до выпуска продукта.
- [обновлено] Как нагрузочное тестирование процессинга обошлось нам в €157 000 и почему никого не уволили
Чтобы находить ошибки до выпуска продукта.
- Контрактное тестирование без единой строки кода: наш инструмент, наши грабли и честный разбор альтернатив
Чтобы находить ошибки до выпуска продукта.
Сборка и производительность
- Webpack 5 — Asset Modules
Чтобы находить узкие места и ускорять систему.
- TypeScript для конфигурации WebPack (FE and BE)
Чтобы находить ошибки типов до запуска.
- Миграция с Webpack и react-scripts на Vite: Путь к Быстрому и Легковесному React
Чтобы собирать интерфейс из переиспользуемых компонентов.
- Переход с Vue-CLI и Webpack на Vite: ускоряем разработку Vue 3
Чтобы находить узкие места и ускорять систему.
- Пишем свой плагин для Webpack
Чтобы находить узкие места и ускорять систему.
- Сборщики Frontend и когда их применять
Чтобы находить узкие места и ускорять систему.
- Не спешите выкидывать Webpack: разбор альтернатив и реальных сценариев миграции
Чтобы находить узкие места и ускорять систему.
- Улучшаем производительность: виртуальный рендеринг для больших объемов данных
Чтобы находить узкие места и ускорять систему.
- Улучшаем производительность сайта с помощью CSS
Чтобы находить узкие места и ускорять систему.
- Как на практике работать над перфомансом веб-приложения: опыт Авто.ру
Чтобы находить узкие места и ускорять систему.
- Не JavaScript’ом единым: как фронтенд-разработчику затащить на собесе
Чтобы находить узкие места и ускорять систему.
- Коллекции
Чтобы находить узкие места и ускорять систему.
- Работа с объектами
Чтобы находить узкие места и ускорять систему.
Безопасность и управление доступом
- Вайбкод и безопасность: как не задеплоить уязвимости вместе с фичами
Чтобы ограничивать доступ и защищать учётные записи.
- Разработчики всё ещё путают JWT, JWKS, OAuth2 и OpenID Connect — разбираем на примерах. Часть 2
Чтобы ограничивать доступ и защищать учётные записи.
- Локальное хранилище или куки? Безопасное хранение JWT на клиенте
Чтобы ограничивать доступ и защищать учётные записи.
- OAuth 2.0 -> OAuth 2.1. Что дальше?
Чтобы ограничивать доступ и защищать учётные записи.
- RBACX — универсальный RBAC/ABAC-движок авторизации для Python
Чтобы ограничивать доступ и защищать учётные записи.
- Токены доступа и API Gateway: как обеспечить безопасность запросов
Чтобы ограничивать доступ и защищать учётные записи.
- OAuth 2.0
Чтобы ограничивать доступ и защищать учётные записи.
- Реализация сервиса сканирования на основе OWASP ZAP
Чтобы ограничивать доступ и защищать учётные записи.
- «РБПО для бедных»: сказ о том, как стартап безопасность прикручивал
Чтобы ограничивать доступ и защищать учётные записи.
- Безопасность приложений на Typescript от А до Я: гайд по защите от очевидных и не очень уязвимостей
Чтобы находить ошибки типов до запуска.
- Шпаргалки по безопасности: JWT
Чтобы ограничивать доступ и защищать учётные записи.
- CI/CD Kubernetes платформа Gitorion. Реестр Docker-образов Harbor c аутентификацией в Keycloak и доступом по ролям RBAC
Чтобы одинаково запускать приложение в любой среде.
- OWASP API Security Top 10 RC
Чтобы ограничивать доступ и защищать учётные записи.
CI/CD и наблюдаемость
- Как я уменьшил Docker-образ Go-приложения с 1.92 GB до 9 MB
Чтобы одинаково запускать приложение в любой среде.
- Как запустить контейнер Docker внутри конвейера GitLab CI
Чтобы одинаково запускать приложение в любой среде.
- Настройка GitLab CI/CD: понимаем принципы работы и запускаем первый pipeline
Чтобы быстро находить причины сбоев.
- Запуск werf в GitLab CI/CD без Docker-сервера
Чтобы одинаково запускать приложение в любой среде.
- Сборка и деплой однотипных микросервисов с werf и GitLab CI
Чтобы быстро находить причины сбоев.
- Почему ваш Docker-контейнер взломают завтра (и как этого избежать)
Чтобы одинаково запускать приложение в любой среде.
- «База» по метрикам в Prometheus
Чтобы быстро находить причины сбоев.
- Мониторинг и логирование DWH, часть 2: Prometheus, Grafana, Zabbix, ELK, OpenSearch, Loki — как выбрать рабочий стек
Чтобы быстро находить причины сбоев.
- Как мы наблюдаем за метриками в дата-центре и развиваем наш мониторинг
Чтобы быстро находить причины сбоев.
- Как внедрить наблюдаемость в микросервисное приложение с помощью OpenTelemetry, Jaeger и Prometheus
Чтобы быстро находить причины сбоев.
- Наблюдаемость SRE: пространства имен и структура метрик
Чтобы быстро находить причины сбоев.
- Распределенное логирование и трассировка для микросервисов
Чтобы быстро находить причины сбоев.
- Одна платформа, чтобы мониторить всех: как мы осуществляем трассировку, работаем с логами и метриками во всей экосистеме
Чтобы быстро находить причины сбоев.
Планирование разработки
- Планирование проекта
Чтобы выбрать приоритеты и согласовать действия.