سوالهای رایج در مصاحبههای کاری Node.js
۱۷ شهریور ۱۳۹۹
یکی از فناوریهایی که در چند سال گذشته بسیار مورد توجه قرار گرفته است را میتوان Node.js دانست. اما افرادی که این تکنولوژی را یاد میگیرند، هم توسعهدهنده فرانتاند هستند و هم بکاند، پس رسیدن به یک شغل رویایی آسان نخواهد بود. اگر میخواهید خود را برای مصاحبه شغلی Node.js آماده کنید، این مقاله میتواند به شما کمک کند.
درصد زیادی از موفقیت در مصاحبه کاری Node.js به پتانسیل توسعهدهندگان برمیگردد و بسیاری از مصاحبه کنندگان به دنبال افرادی با پتانسیل بالا در بلند مدت هستند. در ادامه مقاله برخی از زمینههای تخصصی را بررسی خواهیم کرد. سوالهایی نیز در مصاحبه وجود خواهند داشت که در ادامه مقاله به آنها خواهیم پرداخت اما یادتان باشد که سوالها و پاسخهایشان به تنهایی موفقیت شما در مصاحبه شغلی را به ارمغان نخواهند آورد. شما نمیتوانید تمام سوالهایی که از شما پرسیده میشوند را پیشبینی کنید. اگر از این موارد بگذریم، مهارت اصلی دیگری وجود دارد که اکثر شرکتها به آن اهمیت میدهند و آن هم چیزی نیست جز مهارتهای فردی که نیاز به تمرین دارد. توانایی و تجربههای خود را افزایش دهید و بر روی بهبود آنها تمرکز داشته باشید.
سوالهای JavaScript و TypeScript
اگر شما میخواهید یک توسعهدهنده Node.js باشید، داشتن دانش بالا در زبان JavaScript، یک ضرورت مطلق است. یادگیری موارد اصولی مانند انواع Scopeها، Closureها، تفاوتهای میان انواع متغیر و ایجاد انواع مختلف تابع، شما را متمایز میکنند و تاثیر زیادی بر کیفیت کدهایتان خواهند داشت.
همچنین باید یادگیری TypeScript را شروع کنید. امروزه بیشتر توسعهدهندگان Node.js از TypeScript استفاده میکنند.
سوالهایی که ممکن است در رابطه با TypeScript از شما بپرسند:
- چرا و چه زمانی از TypeScript بهجای JavaScript استفاده میکنید؟
- آیا TypeScript از همه اصول برنامهنویسی شیءگرا پشتیبانی میکند؟
- چرا code validator به بخشهای خاصی از کدهای TypeScript اخطار میدهد؟
فریمورکهای Node.js
داشتن دانشی از اصول اولیه Node.js بسیار مهم است. Event loop چگونه کار میکند؟ چرا باید از متدهای synchronous استفاده نکنید؟ کار با Node.js را میتوان بیشتر در رابطه با رسیدگی به APIها دانست و فریمورکی که باید با آن آشنا باشید Express.js است. به همین دلیل شما باید چگونگی رفع خطاهای بهوجود آمده در Express و مکانیسم MiddleWareها را بدانید.
سوالهای رایج در این بخش عبارتند از:
- چگونه میتوان مقیاس یک برنامه Node.js را افزایش داد؟
- Express middleware چگونه کار میکند؟
- چه زمانی باید از متدهای asynchronous و synchronous استفاده کرد؟
سوالهای مربوط به REST/GraphQL/WebSocket
بسیاری از برنامههای Node.js با انواع مختلف API سروکار دارند بنابراین دانش شما در این زمینه بسیار مهم خواهد بود. تاچندی قبل، تجربه کار با REST APIها، انواع مختلف متدهای اعتبارسنجی و اتصال متدهای HTTP به endpointها کافی بود. اما درحال حاضر شما باید چیزهای زیادی درمورد WebSocketها و GraphQL بدانید. میتوانید انتظار داشته باشید که درباره اینکه کدام مورد در چه شرایطی بهتر است، از شما سوال کنند. مقیاسپذیری و بهینهسازی تعداد عملیاتها هم میتواند جزئی از سوالهای مصاحبه شما باشد.
سوالهایی که ممکن است از شما پرسیده شوند:
- درباره مفاهیم کلیدی GraphQL مانند product-centric، hierarchical یا client-specified queries توضیح دهید.
- بهترین روشهای اعتبارسنجی API را توصیف کنید.
- چگونه تصمیم میگیرید از کدام نوع API در پروژه خود استفاده کنید؟
معماری
هر برنامه دارای نوعی معماری است که در نحوه کارکرد آن و چگونگی پیشبرد برنامه به بهترین وجه ممکن، تاثیرگذار است. این ایده خوبی است که به یادگیری انواع معماری برنامه مانند monolithic و میکروسرویسها بپردازید.
حیطه سوالهایی که ممکن است پرسیده شود:
- روشهای برقراری ارتباط در میان برنامهها (مستقیم یا غیرمستقیم بودن ارتباط مد نظر است).
- آیا از Event/queues استفاده میشود؟
برخی از سوالها عبارتند از:
- با تغییر معماری یک برنامه از monolithic به میکروسرویس میتوانید به چه دستاوردهای عملکردی دست پیدا کنید؟ این دستاوردها چگونه بهدست میآیند؟
- پیچیدهترین معماری که با آن کارکردهاید چیست؟ میتوانید آن را توصیف کنید؟
- CQRS چگونه کار میکند و چه زمانی توسعه آن ارزشمند است؟
دیتابیس
این روزها به سختی برنامهای پیدا میشود که نیاز به ذخیره دادهها نداشته باشد. به همین دلیل در مصاحبه کاری شما سوالهایی مانند اینکه با چه دیتابیسی کار کردهاید، آیا تجربه شما محدود به دیتابیسهای رابطهای (PostgreSQL، MySQL) است یا از دیتابیسهای NoSQL (MongoDB, Elasticsearch) هم استفاده کردهاید؟ چگونه میتوان آنها را بهینهسازی کرد؟ وجود خواهند داشت.
سوالهای رایجی که ممکن است درباره دیتابیسها از شما پرسیده شود بهصورت زیر است:
- تفاوتهای میان optimistic locking و pessimistic locking.
- چه عواملی در انتخاب یک دیتابیس مناسب دخیل هستند؟
- جوانب مثبت و منفی دیتابیسهای غیر رابطهای.
تست
هیچ برنامه خوب اما تست نشدهای وجود ندارد. به همین دلیل داشتن دانش کافی از unit testing، integration testing، ene-to-end testing بسیار ضروری است. برخی از سوالهای زمینه تست برنامه که ممکن است در مصاحبه شما وجود داشته باشند در رابطه با mocking، injections یا test pyramid خواهند بود.
برخی سوالها عبارتند از:
- در کدام مرحله از فرایند توسعه باید برنامهتان را تست کنید؟
- چه مواردی در انتخاب نوع تست دخیل هستند؟
- چالشهای خاص موجود در توسعه مداوم تستهای integration چیست؟
الگوهای طراحی
این روزها، شرکتها نیازمند توسعهدهندگانی هستند که اهمیت الگوهای طراحی را درک کنند. در بسیاری از موارد میتوانید فقط با استفاده از الگوی طراحی مناسب، کد نامناسب و غیرقابل تغییر خود را به یک ماژول آسان برای نگهداری و مقیاسپذیری تبدیل کنید. در بعضی موارد ممکن است درباره اینکه چگونه وابستگیهای پروژهتان را به برنامه اضاف میکنید (dependency injection)، از شما سوال شود.
سوالهای مربوط به الگوی طراحی در مصاحبه Node.js به شرح زیر هستند:
- مزایا و معایت استفاده از تزریق وابستگی چیست؟
- تفاوتهای observer و pub/sub در چیست؟
- چه زمانی الگوی طراحی API Gateway به کار میآید؟ چه زمانی میتوان از این الگو استفاده کرد؟
DevOps
توسعهدهندگان خوب Node.js فقط به کدنویسی محدود نمیشوند بلکه میتوانند یک محیط توسعه را برای یکپارچهسازی مداوم (CI) برنامهشان آماده کنند. اگر متقاضی کار در شرکتی باشید که مباحث DevOps مانند CI مورد حائز اهمیتی برایش باشد باید منتظر سوالهایی در رابطه با containerization و ابزارهایی برای خودکار کردن فرایند CI، باشید.
سوالهای رایج در این حیطه عبارتند از:
- با کدام ابزارهای CI کار کردهاید؟
- تجربه کاری شما با Docker به چه صورت است؟
- آیا تجربه کار با AWS/GCP داشتهاید؟
مهارتهای فردی
تعداد زیادی از برنامهنویسان با مهارتهای فنی بالا وجود دارند که به مهارتهای فردی اهمیت نمیدهند. اما این مهارتهای فردی است که توسعهدهندگان ارشد واقعی را از توسعهدهندگان متوسط و یا خوب جدا میکند. سخت است که این روزها یک توسعهدهنده بتواند به تنهایی کار کند. بیشتر آنها به عنوان بخشی از تیم کار میکنند و امکان برقراری ارتباط خوب در چنین محیطی تفاوتهای بزرگی ایجاد میکند. سوالهایی که ممکن است در بخش مهارتهای فردی از شما پرسیده شوند:
- آیا تابهحال مربیگری برای توسعهدهندگان تازهکار را تجربه کردهاید؟
- آیا مستقیما با کاربران در تماس بودهاید؟
- زبان انگلیسی شما چقدر قوی است؟
چکیده
توجه داشته باشید که روند مصاحبه بسته به نیازهای هر شرکت و قابلیتهایی که در Node.js به آن نیاز دارند، متفاوت است. سعی کنید خودتان را برای مصاحبه شرکتی که متقاضی کار در آن هستید، آماده کنید.