На этой странице я попытался осветить возможные вопросы интервью полного стека для NodeJS, MongoDB, Angular, NextJS.

В чем преимущество внедрения зависимостей?

  • Высокая сплоченность и низкая связанность
  • Более чистый код
  • Легко проверить
  • Предотвращает создание нескольких экземпляров одного и того же класса, хотя его можно использовать в одноэлементном дизайне. Если вы внедрите службу в класс, класс будет зависеть от службы, и экземпляр одной и той же службы может использоваться во внедренном классе много раз.

В чем разница между горизонтальным масштабом и вертикальным масштабом?

  • Горизонтальное масштабирование означает, что масштаб распределенной системы может быть расширен за счет добавления новых экземпляров приложений или служб.
  • Вертикальный масштаб означает, что масштаб системы увеличивается за счет добавления в приложение новых ресурсов (мощность ЦП, хранилище и т. д.).

В чем преимущество проверок кода?

  • Обнаруживать ошибки проще: поиск ошибок с другими членами команды может сэкономить время для более поздних этапов.
  • Добавление еще одного глаза в кодовую базу
  • Обеспечение согласованности между проектированием и реализацией
  • Оптимизация кода для повышения производительности
  • Улучшить качество кода
  • Обучение и обмен знаниями (например, библиотеки с открытым исходным кодом, новые подходы к проектированию)
  • Сплоченность команды: обзорные обсуждения спасают членов команды от изоляции и сближают их.

В чем разница между MongoDB и Redis?

Обе они являются современными базами данных NoSQL, но у них есть различия.

  • MongoDB по умолчанию использует дисковое хранилище. Redis использует хранилище в памяти с сохранением на диске.
  • MongoDB использует двоичные документы JSON. Redis использует пары ключ-значение.
  • MongoDB имеет возможность проще расширять индексы, но в Redis это сделать сложно.

Что означает высокая связность и низкая связанность?

Связность относится к степени, в которой элементы модуля/класса связаны друг с другом. Предполагается, что связанный код должен быть близок друг к другу, поэтому мы должны стремиться к высокой связности и связывать весь связанный код. вместе как можно ближе. Это связано с элементами внутри модуля/класса.

Связь относится к степени, в которой различные модули/классы зависят друг от друга. Предполагается, что все модули должны быть максимально независимыми, поэтому связь низкая. Это связано с элементами среди различных модулей/классов.

Что такое микросервисная архитектура?

Микросервисная архитектура, в отличие от монолитной архитектуры (единая развертываемая единица), структурирует приложение как набор небольших, слабо связанных сервисов, которые работают вместе для достижения общей цели. Микросервисная архитектура имеет множество преимуществ и несколько недостатков. Во-первых, позвольте мне рассказать вам о преимуществах шаблона Microservices:

  • Каждая служба является независимой развертываемой единицей. Вы можете легко увеличить масштабируемость по горизонтали в случае спроса.
  • Слабосвязанная и высокая сплоченность
  • Простота тестирования и повышение ремонтопригодности
  • В случае ошибки это не влияет на производительность или надежность всей системы.
  • Более простое развертывание и гибкая архитектура, позволяющая использовать разные языки и методы.

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

Каковы факторы успеха последовательной интеграции?

  • Автоматизированные сборки
  • Создание сборок, которые тестируются автоматически
  • Каждый мерж-реквест к базовым средам должен быть протестирован.
  • Тестирование должно проводиться в тестовых средах, таких как разработка, постановка и т. д.
  • Автоматизируйте развертывание

В чем разница между «Git Pull» и «Git Fetch»?

Git pull выполняет git fetch и git merge по порядку. Если вы используете git fetch, вы можете просмотреть изменения и затем выполнить git merge.

Что такое ад обратного вызова?

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

Что такое КОРС?

CORS — это сокращение от Cross Origin Resource Share. С помощью механизма CORS устройства в одном домене могут получать доступ к ресурсам в других доменах.

По умолчанию многие браузеры запрещают доступ к различным доменам, чтобы предотвратить злонамеренные действия. Браузеры используют SOP (Same Origin Protocol) для повышения безопасности приложения. SOP позволяет совместно использовать ресурсы (обмен данными) между двумя объектами с одинаковым происхождением.

Это означает, что происхождение двух веб-сайтов должно быть одинаковым, если они хотят использовать общие ресурсы. Чтобы два веб-сайта имели одинаковое происхождение, они должны иметь один и тот же домен, номер порта и тип протокола. Если какое-либо из этих трех свойств оказывается другим, то источники считаются разного происхождения.

CORS реализован на стороне сервера; его нельзя перенастроить на стороне клиента. Заголовки HTTP используются для настройки CORS.

Подробнее: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

С типом HTTP-методов «OPTION» браузеры могут отправлять предварительный запрос, чтобы спросить сервер, можно ли безопасно отправить фактический запрос.

Типичные http-заголовки, которые используются для протокола CORS:

Запрос клиента:

GET /resources/public-data/ HTTP/1.1
Host: bar.other
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:71.0) Gecko/20100101 Firefox/71.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Connection: keep-alive
Origin: <https://foo.example>

Сервер отвечает:

HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 00:23:53 GMT
Server: Apache/2
Access-Control-Allow-Origin: *
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/xml
[…XML Data…]

Что такое многопоточность?

Многопоточность — это термин для одновременного выполнения процессором нескольких процессов. Существует множество способов сделать это, в основном, в операционной системе.

Что такое CI/CD и как вы его использовали?

Непрерывная интеграция автоматизирует сборку и тестирование приложения каждый раз, когда разработчик вносит изменения в кодовую базу. Continus Deployment — это расширение непрерывной интеграции, которое автоматически развертывает приложение в тестовой или производственной среде.

В зависимости от выбранной вами среды в современном мире разработки существуют различные инструменты CI/CD. У меня есть опыт работы с инструментами GITLAB CI/CD, которые используют несколько команд NPM для создания и тестирования разрабатываемых нами микросервисов. И я думаю, что самые успешные команды разработчиков часто развертывают свое программное обеспечение.

Что такое литералы в Typescript?

Литералы представляют значения в JavaScript. Это фиксированные значения, а не переменные, которые вы буквально указываете в своем скрипте.

В JavaScript есть три очень часто используемых примитива: string, number и boolean. У каждого есть соответствующий тип в TypeScript. Как и следовало ожидать, это те же самые имена, которые вы увидели бы, если бы использовали оператор JavaScript typeof для значений этих типов:

  • string представляет строковые значения, такие как "Hello, world"
  • number для таких чисел, как 42. В JavaScript нет специального значения времени выполнения для целых чисел, поэтому нет эквивалента int или float — все просто number
  • boolean для двух значений true и false

Почему мы используем «строгое использование»?

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

Преимущество этого состояло в том, что он никогда не ломал существующий код. Но недостатком было то, что любая ошибка или несовершенное решение создателей JavaScript застревали в языке навсегда.

Так было до 2009 года, когда появился ECMAScript 5 (ES5). Он добавил в язык новые функции и изменил некоторые из существующих. Чтобы старый код работал, большинство таких модификаций отключено по умолчанию. Вам нужно явно включить их с помощью специальной директивы: "use strict".

  1. Запрещает глобальные переменные. (Отлавливает отсутствующие объявления var и опечатки в именах переменных)
  2. Тихие неудачные назначения вызовут ошибку в строгом режиме (назначение NaN = 5;)
  3. Попытки удалить неудаляемые свойства приведут к ошибке (delete Object.prototype)
  4. Требует, чтобы все имена свойств в литерале объекта были уникальными (var x = {x1: "1", x1: "2"})
  5. Имена параметров функций должны быть уникальными (function sum (x, x) {...})
  6. Запрещает восьмеричный синтаксис (var x = 023; некоторые разработчики ошибочно предполагают, что предшествующий ноль не влияет на изменение числа).
  7. Запрещает ключевое слово with
  8. eval в строгом режиме не вводит новые переменные
  9. Запрещает удаление простых имен (delete x;)
  10. Запрещает связывание или присвоение имен eval и arguments в любой форме.
  11. Строгий режим не связывает свойства объекта arguments с формальными параметрами. (например, в function sum (a,b) { return arguments[0] + b;} это работает, потому что arguments[0] связано с a и т. д.) (см. раздел examples ниже, чтобы понять разницу)
  12. arguments.callee не поддерживается

Объяснить ObjectPrototype и наследование прототипов в JavaScript?

С введением ECMA6 javascript охватывает как функциональное программирование, так и парадигму ООП. Функциональное программирование — это парадигма программирования, в которой мы связываем все в стиле чистой функции. Чистые функции не изменяют состояние каких-либо переменных, кроме их аргументов. Они всегда возвращают одни и те же результаты, если одни и те же входные данные предоставляются в качестве аргументов.

MATLAB, R — хорошо известные примеры функционального программирования. Кроме того, Python и Javascript могут быть реализованы в рамках функционального программирования.

Вернемся к нашей основной теме. В JS у каждого объекта есть прототип, и объекты наследуются через свои прототипы. Прототипы управляются ключевым словом Object.create() или new. Прототипы похожи на родительские объекты с атрибутами и поведением.

Чтобы узнать больше о свойстве __proto__ объектов JS, прочитайте:

Объектно-ориентированное программирование на JavaScript — объяснение с примерами

Кроме того, JS — это не ООП, основанный на классах, это ООП, основанный на объектах.

В чем разница между стрелочными функциями и обычными функциями в JS?

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

Что такое парное программирование и как?

Парное программирование — это метод гибкой разработки программного обеспечения, берущий начало от экстремального программирования (XP), в котором два разработчика работают вместе на одном компьютере. Один разработчик берет на себя инициативу по написанию кода (драйвер), а другой просматривает код под названием (навигатор).

Что такое долгий опрос?

Длинный опрос — это шаблон в веб-разработке, который используется для улучшения передачи данных с сервера клиенту. Используя шаблон длительного опроса, клиент запрашивает информацию с сервера.

Что такое замыкания в Javascript?

Замыкание — это комбинация функции, связанной (вложенной) со ссылками на ее окружающее состояние (лексическое окружение). Другими словами, замыкание дает вам доступ к области действия внешней функции из внутренней функции. В JavaScript замыкания создаются каждый раз, когда создается функция, во время создания функции.

ДОКЕР

Docker — это платформа с открытым исходным кодом, которая позволяет разработчикам создавать, развертывать, запускать, обновлять и управлять контейнерами — стандартизированными исполняемыми компонентами, сочетающими исходный код приложения с библиотеками операционной системы (ОС) и зависимостями, необходимыми для запуска. этот код в любой среде.

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

Что такое цикл событий в JS?

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

Стек: здесь весь ваш код javascript помещается и выполняется один за другим, когда интерпретатор читает вашу программу, и выталкивается после завершения выполнения.

Куча: здесь происходит выделение всей памяти для ваших переменных, которые вы определили в своей программе.

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

Цикл событий: затем следует цикл событий, который продолжает работать непрерывно и проверяет основной стек, если в нем есть какие-либо кадры для выполнения, если нет, то он проверяет очередь обратного вызова, если в очереди обратного вызова есть коды для выполнения, то он выталкивает сообщение из него в основной стек для выполнения.

Очередь заданий. Помимо очереди обратного вызова, браузеры представили еще одну очередь — «Очередь заданий», зарезервированную только для new Promise() функций. Поэтому, когда вы используете промисы в своем коде, вы добавляете метод .then(), который является методом обратного вызова.

Относительно приоритета: Stack › Job Queue (Web API) › CallbackQueue

1. console.log('Message no. 1: Sync');
2. setTimeout(function() {
   console.log('Message no. 2: setTimeout');
}, 0);
3. var promise = new Promise(function(resolve, reject) {
   resolve();
});
promise.then(function(resolve) {
   console.log('Message no. 3: 1st Promise');
}).then(function(resolve) {
   console.log('Message no. 4: 2nd Promise');
});
4. console.log('Message no. 5: Sync');

В стеке: 1, 2, 3, 4 строки обрабатываются по порядку. 1 и 4 регистрирует сообщения. 2 добавить обратный вызов в очередь обратного вызова, 3 добавить задания в очередь заданий. Сначала обрабатываются задания в очереди заданий. Затем, когда она пуста, обрабатывается очередь обратного вызова. Вывод должен быть таким:

// Message no. 1: Sync
// Message no. 5: Sync
// Message no. 3: 1st Promise
// Message no. 4: 2nd Promise
// Message no. 2: setTimeout

Что такое цикл событий в NodeJS?

NodeJS запускает код JavaScript в одном потоке, что означает, что ваш код может выполнять только одну задачу за раз. Однако сам Node.js является многопоточным и предоставляет скрытые потоки через библиотеку [libu](<https://libuv.org/>), которая обрабатывает операции ввода-вывода, такие как чтение файлов с диска или сетевые запросы. Благодаря использованию скрытых потоков Node.js предоставляет асинхронные методы, которые позволяют вашему коду выполнять запросы ввода-вывода, не блокируя основной поток.

Что такое RESTful API?

API REST (репрезентативная передача состояния) (также известный как RESTful API) — это интерфейс прикладного программирования (API или веб-API), который соответствует ограничениям архитектурного стиля REST и позволяет взаимодействовать с веб-службами RESTful.

API (Application Programming Interface) — это набор правил и протоколов обмена информацией через сервисы. REST использует HTTP-запросы, такие как GET, PUT, POST и DELETE, для управления операциями CRUD (создание, чтение, обновление и удаление). В то время как REST — это набор ограничений, RESTful — это API, придерживающийся этих ограничений.

Что такое шаблон Наблюдатель?

Шаблон наблюдателя используется, когда между объектами существует отношение «один ко многим», например, если один объект изменен, его зависимые методы должны быть уведомлены автоматически.

В Typescript библиотека RxJS предоставляет шаблон наблюдателя, и его вариант использования очень широк, когда мы работаем с асинхронными событиями. RxJS — это библиотека для создания асинхронных и событийных программ с использованием наблюдаемых последовательностей.

Основные концепции RxJS, которые решают асинхронное управление событиями:

  • Observable: представляет собой вызываемую коллекцию будущих значений или событий.
  • Observer: – это набор обратных вызовов, который знает, как прослушивать значения, предоставленные Observable.
  • Подписка представляет собой выполнение Observable, в первую очередь полезно для отмены выполнения.
  • Операторы – это чистые функции, которые обеспечивают стиль функционального программирования для работы с коллекциями с помощью таких операций, как [map](<https://rxjs.dev/api/index/function/map>), [filter](<https://rxjs.dev/api/index/function/filter>), [concat](<https://rxjs.dev/api/index/function/concat>), [reduce](<https://rxjs.dev/api/index/function/reduce>) и т. д.
  • Subject: эквивалентен EventEmitter и является единственным способом многоадресной передачи значения или события нескольким наблюдателям.
  • Планировщики — это централизованные диспетчеры для управления параллелизмом, что позволяет нам координировать выполнение вычислений, например, для setTimeout или requestAnimationFrame или другие.

Какие существуют типы шаблонов проектирования?

Шаблоны проектирования — это не алгоритмы или конкретные реализации. Они больше похожи на идеи, мнения и абстракции, которые могут быть полезны в определенных ситуациях для решения определенного типа проблем. Существует три основных категории: творческие, структурные и поведенческие модели.

Шаблоны создания — это одноэлементный шаблон, шаблон-прототип.

Структурные шаблоны — это шаблон прокси с next(), шаблон адаптера.

Поведенческие шаблоны — это шаблон цепочки ответственности с цепочкой запроса к различным обработчикам, шаблон цепочки ответственности с использованием (for, forEach, for...of, for...in, map, reduce, filter и т. д.)

Чем GraphQL отличается от REST?

Сходства:

  • Обе они являются стандартными спецификациями для разработки и потребительских API.
  • Они оба используют Http, протокол.
  • Оба обмениваются данными JSON
  • Любые серверные языки или любой интерфейсный фреймворк отлично работают с обоими. Например, вы можете использовать node, PHP, Python, Springboot и т. д. для написания своих веб-сервисов, и этот сервис может использоваться любым внешним мобильным приложением или веб-приложением, независимо от того, на каком языке или фреймворке построено это приложение.
  • REST и GraphQL поддерживают безгражданство.

Отличия:

  • GraphQL поддерживает только метод POST, в то время как REST поддерживает GET, POST, DELETE, PATCH и т. д.
  • В отличие от REST, GraphQL возвращает результат только в формате JSON.
  • В случае получения данных с сервера: в отличие от GraphQL, REST API может в конечном итоге отправлять запросы к нескольким конечным точкам, тогда как GraphQL имеет только одну конечную точку, с которой нужно получить доступ к данным в момент времени. получение на сервере.

Пример в REST

  • /students/:id, может быть одним форматом API **** для получения учащегося /student/:id/siblings, может быть другой конечной точкой API для получения братьев и сестер данного студента

Пример в GraphQL

Вам просто нужно сделать один вызов к одной конечной точке GraphQL, которая будет похожа на /graphql со следующим запросом:

{
      student {
        name: string
        siblings {
          name: string
          class: string
        }
      }
    }

CDN-серверы

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

Как масштабировать MongoDB?

Существует два способа масштабирования базы данных:

Вертикальное масштабирование за счет увеличения ЦП или ОЗУ существующих компьютеров с базами данных.

Горизонтальное масштабирование путем добавления дополнительных компьютеров в кластер базы данных, каждый из которых обрабатывает подмножество общих данных.

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

Преимущества баз данных NoSQL?

Базы данных NoSQL можно масштабировать горизонтально, а базу данных SQL — нет. Но в базе данных SQL вы можете выполнять более сложные запросы. С другой стороны, база данных NoSQL более гибкая, вы можете изменить схему документа в дороге. Вы можете добавлять и удалять новые поля.

Что такое SOLID Pronciples?

ТВЕРДЫЙ означает:

Что такое полифиллы и зачем они нужны?

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

Каковы преимущества и недостатки Agile Environment?

KANBAN и SCRUM — одни из наиболее часто используемых agile-стратегий в нашей современной культуре разработки программного обеспечения.

Преимущества:

  • Вы можете быстрее развертывать программное обеспечение, чтобы ваш клиент мог получить выгоду раньше, чем позже.
  • Вы тратите меньше ресурсов, потому что всегда работаете над актуальными задачами
  • Вы можете лучше адаптироваться к изменениям и быстрее реагировать
  • Более быстрое время оборота
  • Вы можете быстрее обнаруживать и устранять проблемы и дефекты
  • Существует большое сообщество практиков Agile, с которыми вы можете поделиться знаниями.
  • Вы можете получить немедленную обратную связь (что также улучшит командный дух)
  • Разработчики могут улучшить свои навыки на основе отзывов QA

Недостатки:

  • Требуется больше ресурсов (мастер Scrum)
  • Фаза планирования важна, а документация требует времени
  • Измерить прогресс сложнее, чем в Waterfall, потому что прогресс происходит в течение нескольких циклов.
  • Agile требует от всех больше времени и энергии, потому что разработчики и заказчики должны постоянно взаимодействовать друг с другом.
  • Когда у разработчиков заканчивается работа, они не могут работать над другим проектом, так как они скоро понадобятся.

Вы проводили код-ревью? Как вы подходите к проверке кода и за каким процессом вы следуете?

Проверка кода — это методическая оценка кода, предназначенная для выявления ошибок, повышения качества кода и помощи разработчикам в изучении исходного кода.

  • Обмен знаниями. Когда разработчики программного обеспечения просматривают код, как только член команды вносит изменения, они могут изучать новые методы и решения. Обзоры кода помогают младшим разработчикам учиться у более старших членов команды, подобно тому, как парное программирование эффективно помогает разработчикам обмениваться навыками и идеями. Распространяя знания по организации, проверки кода гарантируют, что ни один человек не станет единой точкой отказа. Каждый имеет возможность просмотреть и оставить отзыв. Общие знания также помогают членам команды взять отпуск, потому что у каждого в команде есть базовые знания по теме.
  • Обнаружение ошибок раньше: вместо того, чтобы обнаруживать ошибки после того, как функция была выпущена, и пытаться выпустить исправление, разработчики могут немедленно найти и исправить проблемы до того, как клиенты их увидят. Перенос процесса проверки на более ранний этап жизненного цикла разработки программного обеспечения с помощью модульных тестов помогает разработчикам работать над исправлениями, используя свежие знания. Ожидая окончания жизненного цикла, чтобы сделать обзор, разработчики часто пытаются запомнить код, решения и аргументацию. Статический анализ — это дешевый, эффективный способ достижения ценности для бизнеса и клиентов.
  • Поддерживайте соответствие. Разработчики имеют различный опыт и подготовку, которые влияют на их стиль написания кода. Если команды хотят иметь стандартный стиль кодирования, проверки кода помогают всем придерживаться одних и тех же стандартов. Это особенно важно для проектов с открытым исходным кодом, код которых вносят несколько человек. Экспертные проверки привлекают сопровождающих для оценки кода перед внесением изменений.
  • Повышение безопасности. Проверка кода обеспечивает высокий уровень безопасности, особенно когда специалисты по безопасности проводят целенаправленную проверку. Безопасность приложений является неотъемлемой частью разработки программного обеспечения, а проверки кода помогают обеспечить соответствие требованиям. Члены группы безопасности могут проверять код на наличие уязвимостей и предупреждать разработчиков об угрозе.
  • Расширение сотрудничества. Когда члены команды работают вместе над поиском решения, они чувствуют большую ответственность за свою работу и более сильное чувство сопричастности. Авторы и рецензенты могут работать вместе, чтобы найти наиболее эффективные решения для удовлетворения потребностей клиентов. Важно укреплять совместную работу на протяжении всего жизненного цикла разработки программного обеспечения, чтобы предотвратить разрозненность информации и обеспечить бесперебойный рабочий процесс между командами. Для успешного проведения проверки кода важно, чтобы разработчики сформировали менталитет проверки кода, основанный на совместной разработке.

Некоторые рекомендации по обзору кода:

  • Ограничьте сеансы проверки кода, чтобы они оставались продуктивными. Выясните, что работает для вашей команды — скажем, не более одного часа или 200 строк кода — и предложите им придерживаться этого ограничения.
  • ** Включите в процесс всех, включая новых и старших членов команды. ** Обзоры кода — отличный способ помочь новым членам команды быстро освоиться с кодовой базой — как путем просмотра кода, так и получения их отзывов. код проверяется более старшими разработчиками в команде. Включение всех в процесс проверки кода также облегчит корректировку, когда люди уходят в отпуск или больше не работают в команде.
  • Распределите запросы на проверку кода среди команды. Нескольким разработчикам может быть легко получить большую часть запросов на проверку кода, и это не будет хорошо ни для них, ни для остальной части команды, ни для кодовая база — долгосрочная. Вы можете создать список экспертов в предметной области или рулетку рецензентов, чтобы избежать этого.
  • Задавайте вопросы и предоставляйте полезный контекст. Когда вы просматриваете чей-то код, делайте все возможное, чтобы помочь вам обоим учиться в процессе. Не знаете, почему они поступили иначе, чем вы? Просить. Есть предложение, как улучшить их код? Не забудьте рассказать им, почему вы предлагаете это в своем комментарии. Это не только поможет вам обоим учиться, но, вероятно, сэкономит время.

Как вы используете дженерики в Typescript?

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

function identity<T>(arg:T):T {
    return arg;
}

После имени функции мы включили переменную типа, T, в угловых скобках <>.T теперь является заполнителем для типа, который мы хотим передать в identity, и назначается arg вместо его тип: вместо number теперь в качестве типа действует T.