Node.js Backend | YeaHub – Telegram
Node.js Backend | YeaHub
499 subscribers
165 photos
15 videos
413 links
Теория, подготовка к интервью и курсы для Node.js разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#Собес #explain_analyze #indexing #query_rewrite
🤔 Что делать, если SQL-запрос выполняется слишком долго?

💬 Кратко:

Для начала проанализировать план через EXPLAIN ANALYZE: найти узкие места (Seq Scan, Nested Loop). Затем добавить или изменить индексы, переписать запрос (убрать подзапросы, использовать JOIN, WITH), уменьшить выборку (LIMIT, фильтры), обновить статистику (VACUUM ANALYZE) и, по необходимости, денормализовать данные или шардировать таблицу.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#tool #визуализатор
📚 Визуализатор выполнения JS-кода

Пишешь код в редакторе, двигаешь слайдер и смотришь, как движок выполняет каждую инструкцию

Перейти к материалу

👉 База вопросов 👉 Новости
#Собес #sigint #http #сервер
🤔 Как изящно остановить Node.js сервер?

💬 Кратко:

Изящно остановить сервер в Node.js можно с помощью server.close(), который завершает все активные соединения. 

Также следует обработать события SIGINT и SIGTERM для завершения процессов

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
⏱️ CRON при репликации сервиса: когда он внезапно запускается дважды

Когда у тебя один инстанс сервиса — cron-задачи живут спокойной жизнью: раз в минуту/час/день отработали — и всё
Но как только появляется горизонтальное масштабирование, начинается цирк: один и тот же cron внезапно запускается на всех репликах

Результат — задвоение задач, дубль-отправки в очередь, лишние запросы в БД, гонки, broken idempotency.
Разбираемся, как это контролировать

🙃 Способы синхронизации CRON между репликами

1) Distributed lock (рекомендуется)

Ты заранее пытаешься взять “маркер лидерства”
Кто взял — тот и выполняет cron. Остальные ждут

Варианты реализации:
— Redis + Redlock
Стандарт: быстрая блокировка с TTL → если под умер, блокировка сама освободится

— PostgreSQL advisory locks
SELECT pg_try_advisory_lock(12345)
Если вернул true, ты — лидер

— PostgreSQL row-level / table-level locks
Простой механизм: лочишь строку “task_name = cleanup_daily”


2) Leader election (лидер выбирается автоматически)

Идея: из всех реплик выбирается одна основная, она и запускает cron.

Варианты:
— Kubernetes leader election через Lease API
Удобно для Cron внутри подов

— Consul / Etcd лидер-электоры
Более enterprise-решение.

3) Cron вынести наружу (лучший вариант для сложных систем)

Перенести все периодические задачи в:
— Kubernetes CronJob
Самый распространённый вариант.
— Airflow / Temporal / BullMQ Scheduler
Если задач много и они взаимосвязаны.
— Dedicated scheduler service

Минус: иногда оверхед для небольших проектов

4) Idempotency + мягкая синхронизация

Если не можешь/не хочешь бороться с параллельностью —
просто проектируешь cron так, чтобы дубликат не ломал логику

Подходы:
— В БД держать processed_at, а cron проверяет “ещё не обработано?”.
— Все действия писать через UPSERT / ON CONFLICT DO NOTHING.
— Слать команды в очередь, где есть idempotency-key.


🚀 Пост Guru Node.js: @DemetraIT
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес #ts #microservices #nest.js

🤔 Middle Node.js Backend разработчик в компанию Uniteller

Техсобес. ЗП: от 220к. Август 2025. Проект: Uniteller. Опыт: 3 года. Стандартное собеседование на Node.js без глубоких вопросов, делали упор на вопросы, которые часто применяются на практике

💬 Вопросы:

- Принципы SOLID

- Монолит и микросервисы — плюсы, минусы, когда стоит использовать каждый подход

- Как выполнить глубокое копирование объекта?

- Как работает сборщик мусора (garbage collector) в JavaScript? Какие есть стратегии для управления памятью?

- В чем особенность хранения объектов?

👉 Все вопросы из этого собеседования (10)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
1
#Собес #git_push #git_pull
🤔 Почему мы делаем git pull, а затем git push?

💬 Кратко:

Мы делаем git pull, чтобы сначала синхронизировать наш локальный репозиторий с последними изменениями из удаленного. Затем выполняем git push, чтобы отправить свои изменения. Это помогает избежать конфликтов и сохранить согласованность данных между участниками команды.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
1
#course #задачи #тесты
📚 JavaScript. A3 Задачи

Задачи на программирования на языке JavaScript, формат ввода-вывода делает задачи похожими на задачи на других языка программирования. В курсе используется синтаксис современного стандарта ES6.

Перейти к материалу

👉 База вопросов 👉 Новости
#Собес #nestjs #typenoscript #module
🤔 Что такое NestJS, и почему он так популярен для создания приложений на Node.js?

💬 Кратко:

NestJS — это прогрессивный фреймворк для Node.js, построенный на TypeScript. Он предлагает модульную архитектуру, встроенную поддержку Dependency Injection (внедрение зависимостей) и удобную интеграцию с популярными библиотеками. Благодаря своей структуре и подходу к разработке он делает код легко масштабируемым, читаемым и поддерживаемым.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
😎 Транзакции в микросервисах: Saga vs 2PC

Когда система разбита на десятки сервисов — классические транзакции через BEGIN/COMMIT уже физически не сработают. Нужны механизмы, которые обеспечат целостность данных между разными сервисами, каждый из которых живёт в своей базе и своём технологическом стеке.

Используют два подхода: Saga и 2PC. Разберём, как они устроены, где применять и какие подводные камни есть у каждого

🌀 Saga Pattern

Saga — это цепочка локальных транзакций, каждая из которых коммитится сразу. Если одна из операций падает — запускаются компенсирующие действия, откатывающие уже выполненные шаги.

Как работает
1. Сервис A создаёт заказ
2. Сервис B списывает деньги
3. Сервис C резервирует товар
4. Сервис D создаёт доставку

Если на шаге 3 ошибка — запускаются компенсации:

— отменить доставку
— снять резерв товара
— вернуть деньги
— отменить заказ

Все шаги асинхронные, с ретраями и идемпотентностью.

Два подхода Saga
1) Orchestration
Есть “дирижёр” (Orchestrator), который знает порядок шагов
Чаще всего — отдельный сервис или компонент (советую почитать про Temporal)

2) Choreography
Сервисы сами реагируют на события друг друга

🔗 Two-Phase Commit (2PC)

2PC — классический дистрибутивный commit: все участники говорят “готов”, после чего координатор говорит “фиксируем”

Как работает
1) Phase 1: Prepare
Координатор опрашивает сервисы:
“Готовы закоммитить транзакцию?”

2) Phase 2: Commit
Если все ответили OK → отправляется COMMIT
Если хотя бы один ответил NO → ROLLBACK

Проблемы 2PC

— блокировки: участники держат транзакции в состоянии prepare
— долгая блокировка ресурсов → падение производительности
— сеть надежна и транзакции будут падать

По факту, 2PC в микросервисах почти не используют — слишком дорог и хрупок

🐗 Вывод юзаем сагу

Saga — это дефолтный способ транзакционности в микросервисах. Правда готовить сагу сложно и часто в компаниях встречаются свои реализации паттерна

🚀 Пост Guru Node.js: @DemetraIT
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#Собес #jit #optimization #компиляция
🤔 В чем заключается суть оптимизации методов типа Just-In-Time (JIT)?

💬 Кратко:

Just-In-Time (JIT) оптимизация — это метод, при котором JavaScript-код компилируется в машинный код во время выполнения, а не заранее. Это позволяет движку адаптироваться к реальным условиям работы приложения, оптимизируя часто вызываемые функции и код. JIT-компиляция сочетает преимущества интерпретации и компиляции, обеспечивая более быструю работу кода, особенно в высоконагруженных приложениях.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#Собес #relational #table #primary_key
🤔 Что такое реляционная база данных?

💬 Кратко:

Реляционная база данных (РБД) хранит данные в виде таблиц (отношений), где каждая строка — запись, а столбцы — атрибуты. Для связи таблиц используются ключи (первичные и внешние). Такая структура обеспечивает целостность данных и позволяет эффективно выполнять запросы с помощью SQL.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#book #начинающие
📚 Node.js: разработка приложений в микросервисной архитектуре с нуля

Особое внимание уделено распределенным транзакциям и разворачиванию микросервисов на удаленном сервере. Показано, как обеспечить расширяемость и отказоустойчивость приложений, как успешно бороться с усложнением клиентских интерфейсов, поддерживая высокую скорость загрузки страниц и приложений и не забывая о том, чтобы сайт оставался красивым и удобным в использовании.

Перейти к материалу

👉 База вопросов 👉 Новости
#Собес #interceptors #nestinterceptor #executioncontext
🤔 Как использовать интерсепторы?

💬 Кратко:

Interceptors в NestJS используются для выполнения логики до или после вызова метода. Они подходят для таких задач, как логирование, обработка ошибок, модификация ответов и кеширование. Перехватчики реализуются через интерфейс NestInterceptor и применяются через декоратор @UseInterceptors.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🔍 Инструменты чтения плана запроса: EXPLAIN и EXPLAIN ANALYZE

Когда запрос в базе работает медленно — не надо гадать на кофейной гуще. В PostgreSQL есть два супер-инструмента, которые позволяют увидеть, что именно делает оптимизатор и где запрос тратит время

Речь про EXPLAIN и EXPLAIN ANALYZE

🥰 EXPLAIN — прогноз плана

EXPLAIN показывает, как PostgreSQL собирается выполнить запрос:
— какие индексы может использовать
— какой тип сканирования выберет (Seq Scan, Index Scan, Bitmap Index Scan)
— предполагаемое количество строк
— стоимость выполнения (cost)

😁 Полезно, когда ты хочешь понять теоретический план без реального запуска запроса

Пример запроса
EXPLAIN SELECT * FROM users WHERE email = 'test@mail.com';



⚡️ EXPLAIN ANALYZE — фактические замеры

EXPLAIN ANALYZE выполняет запрос реально и показывает:
— сколько времени занял каждый шаг
— реальное количество строк
— время старта операции
— расхождение между прогнозами и фактами

Если EXPLAIN — теория, то EXPLAIN ANALYZE — практика

Пример запроса
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@mail.com';

📝 Тут внимательнее: запрос действительно выполнится, поэтому с UPDATE/DELETE используй на тестовых данных



😴 Что смотреть в плане?
1) Seq Scan — сигнал: возможно нет индекса
2) Row Estimate vs Actual Rows — если сильно расходится, оптимизатор ошибся → можно помочь статистикой
3) Filter / Recheck — где происходит фильтрация
4) Timing — какой узел съедает больше всего времени
5) Planning Time / Execution Time — понять, где узкое место

🚀 Пост Guru Node.js: @DemetraIT
Please open Telegram to view this post
VIEW IN TELEGRAM
4
#Собес #node.js #event_loop #promise

🤔 Middle Node.js Backend разработчик в компанию Гринатом

Техническое собеседование. ЗП: от 220к. Август 2025. Опыт: 4 года. Средний собес, спрашивали по опыту (про достижения из резюме), были блоки по Node.js, ts, бд и микросервсам

💬 Вопросы:

- Виды тестов и их различия

- Какие бывают транспорты между микросервисами (синхронный подход (REST, gRPC) и асинхронный (kafka, rabbitMQ, NATS))

- Плюсы и минусы микросервисов

- Блокирующие и неблокирующие операции в Node.js

- Расскажи про Event-loop. Когда выполняется SetImmediate

👉 Все вопросы из этого собеседования (22)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
1
#Собес #clustered #index #nonclustered
🤔 Как работают кластеризованные и некластеризованные индексы? Когда их стоит применять?

💬 Кратко:

Кластеризованный индекс хранит строки таблицы в порядке ключа — это сама таблица, упорядоченная по первичному ключу. Некластеризованный — отдельная структура (B-tree), которая хранит ключи и указатели на строки. Кластеризованный выгоден, если часто читают диапазоны по ключу, но таблица может упорядочиваться только одним способом. Некластеризованные подходят для дополнительных полей и точечного поиска.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
#podcast #микросервисы #новости
📚 RadioJS

«RadioJS» — это подкаст для разработчиков, фокусирующийся на JavaScript и смежных технологиях. Ведущие в формате живого диалога обсуждают актуальные темы индустрии: фреймворки, инструменты, архитектурные подходы, тренды и личный опыт.

Перейти к материалу

👉 База вопросов 👉 Новости
🔥2
#Собес #модуль #iife #область_видимости
🤔 Какие способы организации кода были до появления модулей?

💬 Кратко:

До появления модулей в JavaScript разработчики использовали различные методы для организации кода, такие как глобальные переменные, функциональные области видимости и объекты. Эти методы часто приводили к проблемам, связанным с конфликтами имен и сложностью управления зависимостями, так как все данные и функции находились в одной глобальной области видимости.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал
🔥1
📝 CAP-теорема простыми словами

Иногда на собесах или работе можно встретить вопрос про CAP теорему

В распределённых системах нельзя одновременно обеспечить три свойства:
1) C — Consistency: все узлы возвращают одинаковые данные
2) A — Availability: система всегда отвечает (не важно ошибки в бд или успех)
3) P — Partition tolerance: работает даже при проблемах сети при масштабировании

Причем в реальности выбираем P неизбежно, так как сеть ненадежна.
Поэтому реальный выбор — между C и A

☺️ CP — согласованность важнее доступности

Система лучше не ответит, чем вернёт разные данные из разных узлов
Примеры: Zookeeper, etcd, PostgreSQL в синхроне

💀 AP — доступность важнее согласованности

Система отвечает всегда, даже если данные временно расходятся. Это может быть удобно, например, при реализации лайков (не страшно, если будет расхождение)
Примеры: Cassandra, MongoDB, Dynamo-подобные

💡 Итог
CAP — это про компромисс: что для тебя важнее при аварии — доступность или корректность данных?

Есть еще так NewSQL, которые якобы могут и масштабироваться, советую почитать про такой вид бд

🚀 Пост Guru Node.js: @DemetraIT
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
#Собес #message_broker #js #nodejs

🤔 Middle/Middle+ Node.js Backend разработчик в компанию rolftech

Техсобес. ЗП: от 250к. Июнь 2025. Опыт: 4 года. Непростой собес, спрашивали по опыт и глубоко копали в техничку. Был лайвкодинг.

💬 Вопросы:

- JWT что такое? Из каких частей состоит токен?

- Что такое CORS

- Как принято работать с файлами с Node.js

- Pick, Omit, Partial в TS

- Что такое опциональная цепочка в JS?

👉 Все вопросы из этого собеседования (26)

📣 Хочешь больше собесов?
Подпишись на наш главный канал
2🔥1
#Собес #normalization #1nf #2nf
🤔 Что такое нормальные формы в базах данных? Зачем они нужны?

💬 Кратко:

Нормальные формы (1NF, 2NF, 3NF, BCNF и др.) — это набор правил для проектирования таблиц, которые минимизируют дублирование данных и предотвращают аномалии вставки, обновления и удаления. Приведение схемы к нормальным формам упрощает поддержку и обеспечивает целостность.

📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Хочешь получать больше таких разборов?
Подпишись на наш главный канал