Skip to content

Latest commit

 

History

History
108 lines (91 loc) · 11 KB

nodejs.md

File metadata and controls

108 lines (91 loc) · 11 KB

Вопросы для бэкендеров на NodeJS

Вопросы по soft skills Вопросы по алгоритмам

Junior

Общие вопросы

  1. Почему ты решил стать бэкенд-разработчиком, чем тебя привлекает профессия?
  2. Писал ли тесты? Как их писал? Какие есть типы тестов?
  3. Что использовал для валидации данных?
  4. Какие есть два подхода в создании телеграм ботов?
  5. Что такое Swagger?
  6. Что такое вебсокеты??
  7. Раскрой принципы SOLID?
  8. Что такое dependency injection?
  9. Что такое декораторы? Где они используются?
  10. Приходилось ли тебе самому писать нативные декораторы? Не NestJS декораторы, а свои. Расскажи про этот опыт.
  11. Что такое ООП? Раскрой понятия полиморфизм, наследование, инкапсуляция
  12. Какие ORM знаешь и какие использовал? Какие плюсы и минусы можешь выделить?

Javascript

  1. Отличия ES5 и ES6?
  2. Расскажи, что такое NodeJS? Из чего он состоит?
  3. Какие знаешь встроенные модули NodeJS?
  4. Можешь рассказать, что такое Event Loop? Какие есть фазы? Если в Event Loop ничего не останется после выполнения, то что произойдет? В какой последовательности вызываются микро и макро таски?
  5. Можешь рассказать, что такое замыкания в JS? Есть ли такое в других языках?
  6. Если мы в функцию передаем аргументы, как они передаются - по ссылке или по значению?
  7. Строки в JavaScript изменяемые? Или при добавлении символа в конец строки, это уже будет новая строка?
  8. Что происходит на сервере после написания кода на TS?
  9. Что происходит после того, как JavaScript передается в Node.js?
  10. Из каких компонентов состоит Node.js?
  11. Что внутри Node.js занимается оптимизацией? В какой момент происходит оптимизация? Что происходит с JS кодом чтобы он был “ближе к движку”? Во что разбирается JS код с помощью V8?
  12. Node.js однопоточна? Как реализуется многопоточность в Node.js в случае необходимости? Что такое трек пулл? Кто администрирует последовательности вызовов?
  13. Как можно оценить производительность приложения Node.js?
  14. Если поставить таймер на 10 секунд, то через сколько он сработает? Почему?
  15. Что такое package.json?
  16. Что такое package-lock.json? Зачем нужен? Зачем его коммитить? В чем разница npm i и npm ci?
  17. Когда-нибудь приходило к тебе понимание типа “а вот здесь я хочу использовать eventemitter”? Когда его лучше использовать?

Typescript

  1. Node.js может выполнять TypeScript?
  2. Отличия type и interface в TS?
  3. Отличия типа и абстрактного класса?
  4. Настраивал ли typeconfig?
  5. Какие есть встроенные типы Typescript?

Базы данных

  1. С какими СУБД работал?
  2. Фундаментальные различия между MongoDB и Postgress? В каких случаях что выберешь?
  3. Знаком с ACID? Можешь рассказать, что это такое?
  4. Какие виды JOIN знаешь? Чем они отличаются?
  5. Пользовался ли транзакциями? В каких случаях?
  6. Делал ли внешние ключи в базах данных? Зачем они нужны?
  7. Миграции/сиды писал?
  8. Если соединяем несколько таблиц БД с помощью INNER JOIN, есть ли разница в оптимизации, в каком порядке соединяем таблицы?

Сети

  1. В чем различие TCP и UDP?
  2. Расскажи про OSI. На каком уровне находится HTTP?
  3. Что из себя представляет HTTP запрос? Структура? Тело есть у всех HTTP запросов?
  4. На чем основан HTTP запрос? На каком протоколе? А еще глубже?
  5. Можешь рассказать, что такое REST? Использовал ли в работе REST?
  6. Какой HTTP метод используется для обновления небольшого кусочка по REST?

Middle

Общие вопросы

  1. Какие минусы у микросервисной архитектуры? Какие плюсы?
  2. Работал с микросервисами? Расскажи, какие могут быть минусы?
  3. Что такое репликация и шардирование? Когда что использовать?
  4. Масштабирование, горизонтальное, вертикальное. Можешь рассказать, что такое?
  5. Как можно оценить, что твое приложение начинает тормозить?
  6. Какие знаешь паттерны ООП? Какие использовал?
  7. Знаешь, как работает сборщик мусора в NodeJS? Если у нас есть переменная, например объект, который ссылается сам на себя, сборщик мусора его обработает?
  8. Работал ли с Docker? Kubernetes?
  9. Работал ли с Grafana?
  10. Достаточно ли валидации в ORM при реализации проверки на уникальность, например, email при регистрации? Раскройте
  11. Какие последствия возможны при отправке email прямо в контроллере? Как можно решить эти проблемы?
  12. Как бы вы реализовали смену email на сайте, так чтобы соблюсти баланс между сложностью и безопасностью?
  13. Можно ли доверять email, который мы получаем по oauth от соц сетей и мержить аккаунты автоматически? Приведите примеры
  14. Как ограничить отправку email пользователю, который добавил письмо нашего проекта в спам? И почему это стоит делать (или не стоит)?
  15. Предположим что вы реализуете редакцию журнала, где редактора могут в админке править статьи. Как предотвратить ситуацию, когда два редактора могут начать одновременно редактировать одну статью и перетирать изменения друг друга?
  16. Каких принципов разработки нужно придерживаться, для обеспечения механизма zero downtime deployment. Как это достигается?
  17. Что может произойти, если ваша cron задача, которая запускается раз в минуту, стала выполняться больше 1 минуты? Как это можно предотвратить?
  18. Если вы пишите тесты, то как вы обходите проблему того, что код который вы тестируете, делает внешние вызовы? Доп условие, говорим о том, что на CI внешние вызовы запрещены (почему так правильно?)
  19. Предположим что в вашей системе реализована смена емейла. При этом этот емейл хранится еще и во внешней системе, например эквайринге, который шлет пользователю свои письма (но пользователь им напрямую не пользуется). Как бы вы реализовали синхронизацию емейла с внешней системой?
  20. Как вы узнаете об ошибках, которые происходят на продакшене? От пользователей или это автоматизировано?
  21. Как обеспечивается изоляция тестов друг от друга если они ходят в базу и меняют ее? Если в вашем фреймворке этого нет, то как вы это делаете или сделали бы?

Базы данных

  1. Для чего нужны индексы в БД?
  2. В каких случаях первичный ключ может быть null?
  3. В каком случае первичный ключ может быть составным и может ли он быть составным? Можешь привести пример такой ситуации?
  4. Чем DELETE отличается от TRUNCATE? Какой запрос будет выполнен быстрее?
  5. Знаешь ли ты, что такое SELF JOIN?
  6. Решал ли ты какие-то задачи производительности в БД?
  7. Знаком, что такое PG Bouncer?
  8. Работал ли ты с Sequelize? Что тебе понравилось и не понравилось?
  9. Можешь рассказать про плюсы и минусы расположения БД в контейнере и без? В каких случаях стоит использовать базу в контейнере?
  10. Если соединяем несколько таблиц БД с помощью INNER JOIN, есть ли разница в оптимизации, в каком порядке соединяем таблицы?