Node.js Recipes
3.23K subscribers
173 photos
7 videos
1 file
610 links
Download Telegram
Які npm пакети варто встановити глобально?
#list #package

Сьогодні розповім, які пакети в мене встановлені глобально. Я їх використовую як CLI утиліти.
- ngrok/localtunnel робить вашу програму доступною в Internet
- jscpd знаходить дублікати коду. Автор Андрій Кучеренко веде @mathrandomcommunity
- cost-of-modules показує розмір пакетів, що використовуються. Дозволяє швидко пояснити, чому в Dockerfile після npm run build необхідно робити npm prune --production.
- sort-package-json сортує package.json до канонічного вигляду
- depcheck знаходить не використовувані або не оголошені в package.json залежності
- browser-run/bcat виводить результат роботу іншої CLI команди у браузер
- license-checker показує які open source ліцензії у пакетів в ваших залежностях

Перевірити ваш список: npm list -g. А що і навіщо використовуєте ви?
👍462😱1💩1
Які питання поставити потенційному тех. ліду?
#list
Сьогодні поділюсь питаннями для інтерв'ю, щоб перевірити вміння пояснювати технічні теми. Ця навичка особливо важлива тех.лідам та архітекторам.

1. Чим SDK відрізняється від API?
2. Де проходить межа між CI та CD?
3. Яку головну проблему вирішують Promise у порівнянні з callback?
4. У чому відмінність HTTP від ​​WebSockets?
5. Як правильно писати міграцію бази даних?
6. Розкажіть, як працюють AWS lambda?
7. Які проблеми вирішують мікросервіси?
8. У якому разі виправдано використовувати мікрофронтенди?
9. Розкажіть, як би виглядала ідеальна піраміда тестування на вашому попередньому проєкту в ідеальних умовах?
10. Що таке semver та як його використовувати?

У ході інтерв'ю важливо перевірити, що кандидат вміє дати як коротку та просту відповідь (але не втративши важливе), так і оперує необхідною технічною глибинною. Для цього я змінюю контекст питання: "поясніть замовнику/Product Owner, а тепер колезі-інженеру".
👍26🔥6💩1
Cписок освітніх платформ
#list

Розв'язання алгоритмічних завдань:
🔗 leetcode.com – безумовний лідер
🔗 geeksforgeeks.org – якщо ви гуглите алгоритм, то швидше за все потрапите на цей сайт.
🔗 hackerrank.com – крім алгоритмічних завдань, є ще й з тести з фреймворків.

Для вивчення мови
🔗 freecodecamp.org – відмінно підходить для тих, хто тільки починає вчити JavaScript
🔗 exercism.org – підійде і новачкові, який освоює нову мову, і інженеру, який хоче покращити навички код ревью.

Для вивчення Cloud Providers
☁️ aws
☁️ google
☁️ azure
👍362
Як перевірити локальне середовище?
#list #cli

Сьогодні розповім як провести troubleshooting локального середовища.

1️⃣ Контролюйте змінні оточення за допомогою команди env. Нагадаю, що dotenv за замовчуванням має override false. Змінна PATH визначає, у яких папках OS буде шукати виконувані файли.
2️⃣ Використовуйте команду which, щоб перевірити що використовується правильний виконуваний файл. Приклад: which yarn
Якщо ви використовуєте nvm, то результат буде таким:
/Users/{{username}}/.nvm/versions/node/v18.12.1/bin/yarn
3️⃣ Перевіряйте версії використовуючи --version. Приклад: npm --version. Пам'ятаємо про Dev/prod parity. До речі версію npm краще використовувати яка йде у Node.js.
4️⃣ Використовуйте npm doctor, щоб перевірити права.
5️⃣ Перевіряйте конфігурацію:
git config --list --global
npm config list
👍201🔥1
Як уникнути помилок під час створення email шаблону?
#list

Баги в емейлах дуже важко відтворити. Який емейл клієнт використовувався web/mobile/desktop? Цей сам лист чи його перенаправили? Проблема у шаблоні чи змінних?... Замість того, щоб вирішувати ці проблеми, я рекомендую робити правильно з самого початку:
1️⃣ За основу беремо шаблон з популярного сервісу, наприклад sendgrid
2️⃣ Всі рішення щодо верстки звіряємо з caniemail.com. Це аналог caniuse.com
3️⃣ Якщо шаблони зберігаються не в коді, а на сервісі для розсилки листів, то визначаємо, як будемо їх синхронізувати. Приклад AWS SES templates. Немає стандартних рішень, таких як міграція бази даних.
4️⃣ Перевіряємо не тільки html, але text версію листа.
👍32
Що перевірити при розгортанні API?
#list #devops #cloud

1️⃣ Чи є Load Balancer?
Без нього масштабування не можливо.
2️⃣ Чи включений редирект з http на https?
Ваше API має працювати тільки по https.
3️⃣ Чи включений HTTP/3?
74% користувачів мають браузер з підтримкою HTTP/3.
4️⃣ Чи налаштовано стискання (compression)? Які методи підтримуються?
Load Balancer має цю відповідальність, а не Node.js
5️⃣ Чи має публічне API кешування?
Поділ публічного та приватного API (яке вимагає авторизації) відповідальність розробників, а ось налаштувати Load Balancer-а – DevOps інженер.
👍334🔥2
Як завдання не варто вирішувати за допомогою Node.js?
#nodejs_api #list

👉 CPU Intensive Tasks, тобто завдання, що навантажують процесор. Типова відповідь на інтерв'ю включає лише цей варіант. Якщо таке завдання необхідно вирішити, то тут варто використовувати передкалькуляцію з кешуванням або Worker threads/Child process.
👉 Aggregation, окремий випадок CPU Intensive завдання, у якому требо разрахувати якісь метрики. Наприклад, мінімальна/максимальна ціна за торговий день. Тут краще використовувати функції DB.
👉 Compression. Ми перекладаємо це завдання на інфраструктуру, щоб зайвий раз не навантажувати процесор.
👉 Rate Limiting. Ще одне типове завдання для інфраструктури, інакше легко заблокувати масштабування.
👉 Serve Static. За це має відповідати CDN, у якому Node.js може бути лише джерелом статики.
👉 File Uploads. Не варто використовувати Node.js як проксі для завантаження файлу в S3. Для цього є signed url.
👍37🔥3
Переліку питань для інтерв'ю про масивах
#list

1. Розкажіть, як працюють Array.concat і Array.push. У яких випадках краще використовувати кожен метод?
2. Напишіть поліфіл для Array.group. На момент написання цього списку метод знаходиться вже на stage 3, але ще не підтримується Node.js
3. Наведіть приклад 3 методів, які існують в Array, але не в ReadonlyArray в TypeScript.
4. Розкажіть про різницю в використанні Array.at(i) та arr[i].
5. Наведіть приклад поганого коду, використовуючи Array. Поясніть, чому погано писати такий код.
6. Напишіть функцію, яка приймає масив чисел і повертає новий масив з усіма числами, які зустрічаються в вихідному масиві більше одного разу.
7. Напишіть функцію, яка приймає два масиви чисел і повертає новий масив, що містить лише ті елементи, які є спільними для обох масивів.
8. Напишіть функцію, яка приймає масив і повертає, чи містить він прогалини. Приклад f([1,2,,4]) === true
9. Напишіть функцію, яка приймає масив arr, число concurrency, асинхронну функцію processing і повертає результат обробки масиву функцією processing з вказаним рівнем concurrency.
10. Напишіть функцію, яка приймає масив чисел arr, число target і повертає два елементи масиву, сума яких дорівнює target.

PS Інші переліки питань для інтерв'ю ви можете знайти за тегом #list.
👍354🔥1
Які сервіси треба вміти інтегрувати?
#list

У стартапах одним з ключових факторів прийняття рішень є швидкість виходу на ринок (time-to-market). Тому широко використовуються інтеграції зі сторонніми API замість створення власних сервісів. У цьому випадку, Node.js виконує роль оркестратора, тобто викликає SDK/API та/або створює webhook. З мого особистого досвіду створення PoC за допомогою інтеграції займає 1 день, а розробка production-ready функціоналу зазвичай займає 1-2 тижні. Створення ж in-house рішення відбувається у кілька разів довше і має слабший функціонал.

Ось список завдань і приклади сервісів:
1) Відправка push-сповіщень: Amazon SNS, Firebase Cloud Messaging
2) Аутентифікація та управління користувачами: Auth0, Okta, Firebase Authentication, Amazon Cognito.
3) Підтримка користувачів: Intercom.
4) Прийом платежів: Stripe, Braintree.
5) Відправка електронних листів: Amazon SES, SendGrid, Mailgun.
6) Створення чатів: getstream.
7) Управління підписками: App Store Server API, Google Play API, Stripe.
8) Відправка SMS: Twilio.
9) Створення чат-ботів: Telegram, WhatsApp, Discord.
10) Аналітика: Google Analytics, Mixpanel.
👍57🔥11
Як зрозуміти, чи є технічний лід на проекті?
#list
Протягом останніх 3 років я провів architecture review понад 20 Node.js проектів. Завдання цього огляду — оцінити стан проекту, тобто майбутній беклог, кодову базу та команду. Третина з них залучала українські команди. Співвідношення між in-house та outsource було 50% на 50%. Зазвичай, на проекті була відсутня посада архітектора/технічного ліда. Найпопулярнішим запитом від бізнесу: "Кого з поточної команди слід призначити технічним лідером? або його потрібно найняти ззовні?". При сильній внутрішній експертизі не залучають консультантів. На внутрішню експертизу погано вплинули COVID-19, війна та рецесія.

Ось підбірка питань з коментарями, які команди почули від мене:
1. Давайте відкриємо package.json. У залежностях є пакет "...". Яку функцію він виконує? На одному індійському проекті мені пояснювали, чому вони використовують пакет process, але не могли пояснити, чому після npm uninstall process, додаток продовжує працювати.
2. Який середній час збирання в CI/CD-пайплайні? Як і чому він змінювався протягом останнього кварталу?
Сумно, що на всіх проектах в CD не було GitHub Action concurrency або його аналогів.
3. Як організовано версіювання на проекті? Яка версія зараз працює на якому середовищі?
Один канадський проект порадував наявністю одного середовища з canary releases та feature flags. Лідером був QA, який виконував також обов'язки DevOps.
4. Давайте я через Postman або фронтенд надішлю запит. Покажіть мені, як знайти відповідні логі? На жодному продуктовому проекті я не зміг отримати демонстрацію, хоча продуктовим компаніям важливі troubleshooting skills у інженерів.
5. Я бачу, що ви використовуєте TypeScript (так само було у 90%). Але ви не використовуєте генерацію коду на клієнті або з вашої DSL. Чому? Найпростіша рекомендація але, вона вимагає змін у всьому процесі розробки. У одному аутсорс-проекті до списку питань для співбесіди додали AST (абстрактне синтаксичне дерево), але не задачі на найближчий місяць.
6. Яка у вас стратегія тестування? На всіх проектах була стратегія тестування, але всі скаржилися, що немає часу на тести, на погашення технічного боргу. Доповнюючі стратегії для rollback, promote и hotfix були лише на трьох аутсорс-проектах.
7. Як ви організовуєте код у вашому проекті? Розподіл був таким: проекти з Nest (40%), моноліт (20%) та мікросервіси (40%). Найгірше було з проектами на мікросервісах – їх запроваджували надто рано. Винятком був лише один проект, де використовувався Python для AI/ML та Node.js для API.
8. Покажіть мені метрики вашого Node.js? А інфраструктури? Чи є алерти? 80% проектів переадресовують ці питання до DevOps-ів.
9. Які плани на наступний спринт? Чи є технічний беклог? Як він наповнюється? До рев'ю бізнес вірить, що у нього FullStack розробники, а після відповіді на це запитання починає здогадуватися, що є поділ на FE/BE.
10. Що мені варто вас запитати, щоб відобразити важливе для вас у моєму звіті? всі попередні питання по суті є прелюдією, щоб техлід почав довіряти та виявив себе. На цей момент вже очевидно, чи є технічний лід на проекті, і якщо він є, то він говорить про проблеми, які необхідно продати бізнесу.
👍75❤‍🔥9🔥72