Skip to content

Instantly share code, notes, and snippets.

@zolotyh
Last active June 11, 2025 11:41
Show Gist options
  • Save zolotyh/b132db51a427eecd90bdde496f6e6e80 to your computer and use it in GitHub Desktop.
Save zolotyh/b132db51a427eecd90bdde496f6e6e80 to your computer and use it in GitHub Desktop.
Примерный список вопросов на собеседование

NodeJS

  1. Сколько потоков в NodeJS.
  2. Чем параллелизм отличается от асинхронности?
  3. Можно ли получить рейс кондишн при ассинхронности? Напиши пример кода.
  4. Что такое стримы, зачем они нужны? Какие бывают?
  5. Что такое back pressure?
  6. Для чего нужен модуль cluster, какую проблему он решает
  7. Каую проблему решают async hooks
  8. Как бороться с блокировками event loop?
  9. Как работает сборщик мусора? О чем говорит слабая гипотеза о поколениях?
  10. Что скажешь об middleware паттернах в express, какие есть достоинства и недостатки

Фреймворки

Что такое DI, за счет чего он реализован в фреймворках типа NestJS

Задачи на код

import fs from 'fs';

const stream = fs.createReadStream('./sample.txt');
stream.on('data', () => console.log(1));

setTimeout(() => console.log(2));

for (let i = 0; i < 1000000; i++) { // 10s
    /*code*/
}

console.log(3);

// What order of messages are expected to be printed to the console? Why?
const fs = require('fs').promises;

function write(){
    return fs.mkdir('./tmp').then(function(){
        fs.writeFile('./tmp/foo.txt', 'Hello World');
    }).catch((err) => {
        /// handle error
        console.log(err);
    });
}

write();
function x() {
  queueMicrotask(x);
}

x();
Promise.reject("a")
  .catch((p) => p + "b")
  .catch((p) => p + "c")
  .then((p) => p + "d")
  .finally((p) => p + "e")
  .then((p) => console.log(p));

Безопасность

Как защищаться от SQL injection Что такое XSS? Как защищаться? Что такое CSRF? Как можно защищаться?

Нефункциональные требования

  1. Кто должен определять нефункциональные требования?
  2. Что такое аттрибут качества, с какими из них ты сталкивался в реальной жизни?
  3. Что такое внешние и внутренние нефункциональные требования?
  4. Что если продукт менеджер просит оптимизировать все аттрибуты качества

Observability

  1. Столпы обсервабилити
  2. Что такое OpenTelemetry, зачем нужен, из чего состоит

Высокие нагрузки

Представьте, что у вас есть высоконагруженное приложение, которое начинает тормозить при увеличении числа пользователей. Как вы будете диагностировать проблему? Примерный ответ: Сначала я соберу метрики с помощью системы мониторинга, например, Prometheus, чтобы проверить использование CPU, памяти и дисков, а также время отклика API. Затем проанализирую логи через ELK Stack, чтобы найти ошибки или узкие места. Далее использую APM-инструмент, например, New Relic, для профилирования запросов и выявления медленных эндпоинтов. Если проблема в базе данных, проверю планы выполнения запросов (EXPLAIN в PostgreSQL) и наличие индексов. Например, в одном случае я обнаружил, что N+1 запросы к базе тормозили API, и решил проблему с помощью eager loading. Если нагрузка растет из-за пикового трафика, рассмотрю кэширование (Redis) или масштабирование (Kubernetes). Нагрузочное тестирование с Gatling поможет подтвердить гипотезы. После внедрения изменений я отслеживаю метрики, чтобы убедиться в решении проблемы.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment