راهنمای مصاحبه Node.js – انجمن DEV

1. Node.js چیست؟
Node.js یک است منبع باز، کراس پلتفرم، محیط اجرای جاوا اسکریپت که کد جاوا اسکریپت را خارج از مرورگر وب اجرا می کند. از آن استفاده می کند موتور جاوا اسکریپت V8، توسعه یافته توسط Google، که جاوا اسکریپت را مستقیماً در کد ماشین کامپایل می کند و به عملکرد و کارایی استثنایی آن کمک می کند. این به توسعه دهندگان اجازه می دهد تا جاوا اسکریپت را در سمت سرور اجرا کنند و امکان ایجاد برنامه های کاربردی مقیاس پذیر و کارآمد در سمت سرور را فراهم می کند.
ویژگی های کلیدی Node.js:
- معماری رویداد محور: مدیریت کارآمد عملیات I/O.
- مدل ورودی/خروجی غیر مسدود کننده: از عملیات مسدود کردن جلوگیری می کند و عملکرد را افزایش می دهد.
- حلقه رویداد تک رشته ای: چندین درخواست همزمان را به طور موثر مدیریت می کند.
- مدیریت بسته: مدیریت شده از طریق npm (مدیر بسته نود).
- سازگاری بین پلتفرم: قابل اجرا بر روی ویندوز، macOS و لینوکس.
مثال:
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello, World!\n');
}).listen(3000);
console.log('Server running at http://localhost:3000/');
2. حلقه رویداد در Node.js
این حلقه رویداد یک مفهوم اصلی در Node.js است که عملیات ناهمزمان را مدیریت می کند.
نکات کلیدی:
- منتظر وظایف میماند، آنها را اجرا میکند و تا رسیدن کارهای بیشتر میخوابد.
- وظایف را از صف رویداد زمانی که پشته تماس بگیرید خالی است
- به Node.js اجازه می دهد تا هزاران اتصال همزمان را به طور موثر مدیریت کند.
مراحل حلقه رویداد:
در زیر یک نمایش تصویری از مراحل حلقه رویداد برای افزایش وضوح ارائه شده است:
-
فاز تایمر: اجرا می کند
setTimeout
وsetInterval
پاسخ به تماس ها - فاز تماس های معلق: تماس های I/O را کنترل می کند.
- فاز بیکار/آماده سازی: عملیات داخلی
- مرحله نظرسنجی: رویدادهای ورودی/خروجی جدید را بازیابی می کند.
-
مرحله بررسی: اجرا می کند
setImmediate()
پاسخ به تماس ها -
بستن فاز پاسخ به تماس: دستگیره ها
close
رویدادها (به عنوان مثال، socket.on ('close')).
مثال:
console.log('Start');
setTimeout(() => console.log('Timeout'), 0);
process.nextTick(() => console.log('NextTick'));
console.log('End');
خروجی:
Start
End
NextTick
Timeout
3. چرا Node.js به جای سایر فریم ورک ها؟
- ناهمزمان و غیر مسدود کننده: کارآمد در انجام وظایف سنگین I/O.
- زبان برنامه نویسی واحد: جاوا اسکریپت هم برای فرانت اند و هم برای بک اند.
- سبک وزن: منابع سیستم کمتری مصرف می کند.
- مقیاس پذیری: مناسب برای برنامه های بلادرنگ
- انجمن فعال: کتابخانه های گسترده npm.
مقایسه با وب سرورهای سنتی:
- سرورهای سنتی: چند رشته ای، عملیات مسدود کردن.
- Node.js: ورودی/خروجی تک رشته ای و غیر مسدود کننده.
4. کلاسترها در Node.js
Node.js تک رشته ای است، اما خوشه ها به آن اجازه می دهد تا از چندین هسته CPU استفاده کند.
نکات کلیدی:
- هر خوشه یک فرآیند فرزند است.
- پورت های سرور را در بین فرآیندهای کارگر به اشتراک می گذارد.
- مقیاس پذیری برنامه را بهبود می بخشد.
مثال:
const cluster = require('cluster');
const http = require('http');
const os = require('os');
if (cluster.isMaster) {
os.cpus().forEach(() => cluster.fork());
cluster.on('exit', (worker) => {
console.log(`Worker ${worker.process.pid} exited`);
cluster.fork();
});
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end(`Hello from Worker ${process.pid}`);
}).listen(3000);
console.log(`Worker ${process.pid} started`);
}
5. احراز هویت در مقابل مجوز
- احراز هویت: تأیید هویت کاربر (به عنوان مثال، اعتبار ورود به سیستم).
- مجوز: تأیید حقوق دسترسی به منابع (مثلاً امتیازات مدیر در مقابل کاربر).
مثال:
- احراز هویت: اعتبار نام کاربری/رمز عبور.
- مجوز: بررسی اینکه آیا کاربر می تواند دسترسی داشته باشد یا خیر
/admin
مسیر
6. Middleware در Node.js
توابع میان افزار توابعی هستند که در طول چرخه درخواست-پاسخ اجرا می شوند.
توابع کلیدی:
- اصلاح کنید
req
وres
اشیاء - قبل از انتقال کنترل به میان افزار بعدی کد را اجرا کنید.
- چرخه درخواست-پاسخ را پایان دهید.
مثال:
app.use((req, res, next) => {
console.log('Middleware executed');
next();
});
7. الگوریتم های JWT
- JWT ها استفاده می کنند SHA-256 برای هش کردن
- RSA (رمزگذاری نامتقارن) برای امضا استفاده می شود.
8. ورودی خط فرمان (CLI)
برای تعامل با سیستم ها و ابزارهای بدون رابط کاربری گرافیکی استفاده می شود.
مثال:
node index.js --port=3000
9. NPM و فایل های بسته
- npm: مدیر بسته برای Node.js.
- package.json: فراداده پروژه
- package-lock.json: نسخه های وابستگی را قفل می کند.
10. Error Handling در Node.js
- Try-Catch: برای کدهای همزمان
- رویدادهای خطا: برای کارهای ناهمگام
- Promise.catch: برای وعده های رد شده
مثال:
try {
throw new Error('Something went wrong');
} catch (err) {
console.error(err.message);
}
11. کد همزمان در مقابل کد ناهمزمان
- همزمان: مسدود کردن.
- ناهمزمان: غیر مسدود کردن.
مثال:
fs.readFile('file.txt', (err, data) => console.log(data));
console.log('This runs first');
12. کنترل کننده استثنای جهانی
برای جلوگیری از خرابی برنامه، استثناهای کشف نشده را کنترل می کند.
مثال:
process.on('uncaughtException', (err) => {
console.error('Uncaught Exception:', err);
});
13. معماری MVC
- مدل: داده ها و منطق تجاری را مدیریت می کند.
- مشاهده: مسئول لایه ارائه (UI/UX).
- کنترل کننده: ورودی کاربر را کنترل می کند و با مدل و نمای تعامل دارد.
مزایای کلیدی:
- تفکیک نگرانی ها
- مقیاس پذیری و نگهداری بهتر.
- اشکال زدایی و تست آسان تر.
نمونه ساختار:
app/
├── models/
│ └── userModel.js
├── views/
│ └── userView.ejs
├── controllers/
│ └── userController.js
└── routes/
└── userRoutes.js
14. اصطلاح I/O را چگونه تعریف می کنید؟
I/O مخفف ورودی/خروجی و به هر عملیاتی اطلاق می شود که شامل خواندن داده ها یا نوشتن داده ها در یک منبع خارجی مانند یک فایل، پایگاه داده یا شبکه باشد.
در Node.js:
- ورودی: داده های دریافت شده از منابع خارجی (به عنوان مثال، درخواست های کاربر، سیستم فایل).
- خروجی: داده های ارسال شده به منابع خارجی (به عنوان مثال، پاسخ های API، نوشتن فایل).
مثال:
const fs = require('fs');
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
15. Callback را در Node.js توضیح دهید
الف پاسخ به تماس تابعی است که به عنوان آرگومان به تابع دیگری ارسال می شود، که پس از تکمیل کار ناهمزمان اجرا می شود.
نکات کلیدی:
- از عملیات مسدود کردن خودداری کنید.
- بهبود عملکرد.
- معمولا در API های ناهمزمان استفاده می شود.
مثال:
fs.readFile('file.txt', (err, data) => {
if (err) console.error(err);
else console.log(data.toString());
});
این راهنما یک نمای کلی حرفه ای از مفاهیم کلیدی Node.js ارائه می دهد که هم برای آماده سازی مصاحبه و هم برای برنامه های کاربردی در دنیای واقعی مفید است.
نویسنده: محین شیخ
برای اطلاعات بیشتر، من را در GitHub دنبال کنید!