سوالهای رایج در مصاحبههای کاری زبان PHP
۳ شهریور ۱۳۹۹
آیا برای مصاحبه شغلی زبان PHP آماده میشوید؟ احتمالا بهدنبال مقالههایی درباره سوالهای رایجی هستید که ممکن است از یک توسعهدهنده PHP در سال ۲۰۲۰ بپرسند. این کاملا طبیعی است. اما ممکن است بیشتر مقالههایی که در این زمینه میخوانید خیلی مفید نباشند، چرا؟ زیرا از آنچه بهنظر میرسد، پیچیدهتر است و مسائل بیشتر مربوط به توسعهدهندگان PHP است تا زبان PHP. بهترین شرکتهای توسعه نرمافزار این موضوع را میدانند و ما در این مقاله میخواهیم مواردی که در موفقیت شما دخیل هستند را مورد بررسی و گفتگو قرار دهیم.
متفاوتتر از آنچه که انتظار دارید
بیایید مسیر را با بیان مواردی که نمیخواهیم در این مقاله به آنها بپردازیم، شروع کنیم. شما در این مقاله، پاسخهای آماده به تعدادی سوال مصاحبه مربوط به زبان PHP را نمییابید. در حقیقت بیشتر مقالهها درمورد مصاحبههای کاری دقیقا به پرسشها و پاسخها میپردازند، اما دانستن زبان PHP بهتنهایی شما را به توسعهدهنده خوبی تبدیل میکند؟ فکر نمیکنم!
PHP یکی از زبانهای بسیار محبوب برای ساخت برنامههای وب است، اما برای ایجاد یک برنامه کارآمد، به مواردی بیشتر از تسلط به زبان PHP نیاز دارید. بهطور معمول میخواهید از نوعی سرور و دیتابیس نیز استفاده کنید. البته، پروژههایی وجود دارند که نیازی به مهارتهای اضافی ندارند، اما فکر میکنم عادلانه است که بگوییم انجام بسیاری از پروژهها در این روزها، نیاز به مهارتهای بیشتری دارند.
احتمالا همانطور که خودتان هم میدانید، یک توسعهدهنده PHP بهمقدار زیادی از مهارت در فناوریهای مختلف نیاز دارد. با دانستن این موضوعها، مصاحبهکنندگانی که در مقابل شما قرار میگیرند، موظف هستند درباره هرچیزی که به توسعه مربوط باشد، سوال کنند! درحالی که دنیای توسعه یافته امروز، بیشتر از قبل به تخصص نیاز دارد اما دانش عمومی قوی هنوز هم بسیار ارزشمند است و جزو مشخصههای خوب یک توسعهدهنده بهحساب میآید.
جزئیات مصاحبه شغلی تا حد زیادی به شرکتی بستگی دارد که میخواهید در آن مشغول به کار شوید. آشنایی با آنچه که آن شرکت انجام میدهد و فناوریهای مورد استفادهشان، بسیار ضروری است. بهبخش مهارتهایی که در پیشنهاد کاری نوشته شده، حتما دقت داشته باشید. دانستن مهارتهای ذکر شده در آنجا بسیار مفید خواهندبود. برخی از این موارد شاید بهنظر موارد مهمی بهنظر نرسند، اما درواقع میتوانند شما را از سایر افرادی که برای این شغل درخواست دادهاند، متمایز کنند.
بیاید بر روی مواردی که در بیشتر مصاحبههای شغلی زبان PHP به آنها پرداخته میشود، تمرکز کنیم:
- زبان PHP
- فریمورکها
- مشکلهای رایج در توسعه
- وب و REST API
- دیتابیسها
- مهندسی نرمافزاری
- DevOps
- مهارتهای فردی (soft skills)
- ابزارهای جانبی
این تخصص کاری، بهقدری گسترده است که شما قادر نخواهید بود، در چند روز برای مصاحبه آماده شوید. اما مواردی مانند نگرش، نحوه صحبت کردن و اعتماد بهنفستان را میتوانید در آن زمان بهبود ببخشید. بااینوجود، دانستن آنچه که ممکن است در طی مصاحبه رخ دهد و یا باید انتظار چهمواردی را داشته باشید، به تقویت اعتماد بهنفستان کمک میکنند. بههمین دلیل قصد داریم درمورد همه جوانب ذکر شده در بالا از منظر کسی که مصاحبه شغلی PHP را انجام میدهد، صحبت کنیم. سوالهای مصاحبه در زبان PHP را نمیتوان حدس زد ولی برای نمونه چند مثال از آنها را بیان میکنیم تا با آنها آشنایی پیدا کنید.
زبان PHP
قطعا سوالهای مربوط به زبان PHP در مصاحبه شما وجود خواهند داشت و موارد عمدهای که شاید بیشتر در آن زمینهها از شما سوال شوند، بهصورت زیر است:
- چه قابلیتهای تازهای در PHP ۷.۴ یا بهطور کلیتر PHP ۷.x، اضاف شدهاند؟
- تقاوتهای میان PHP ۵.۶ و PHP ۷.x چیست؟ چگونه میتوان پروژه را از نسخه ۵.۶ به نسخه ۷ زبان PHP انتقال داد؟ هنوز هم شرکتهای زیادی از PHP ۵.x استفاده میکنند و این سوالها طبیعی هستند و نیاز است که این تفاوتها و نحوه کارکردشان را بدانید.
- سوالهایی در زمینه شیگرایی (Object-Oriented Programming) زبان PHP.
- محدودیتها و چالشهای رایجی که در توسعه به زبان PHP وجود دارد.
- مدیریت وابستگیها در پروژههای PHP، به ویژه سوالهایی از Composer.
- سوالهای مربوط به تمیز کردن کدهای PHP و مختصرکردن آنها برای اعضای تیم و مقیاسپذیرتر کردن کدها (بالابردن قابلیت خواندن کدها).
با توجه به تجربههایی که در این سالها کسب کردهایم، استخدام کنندگان معمولا در رابطه با مسائلی (issues) سوال میپرسند که هر روز با آنها سروکله میزنند. از آن گذشته، مواردی پرسیده میشوند که نیاز است در آنها مهارت داشته باشید تا بتوانید به شرکتی که میخواهید در آن استخدام شوید، کمک کنید. این چیزی است که آمادگی برای مصاحبه را چالش برانگیز میکند.
فریمورکها
فریمورکهای PHP بسیاری از مشکلهای مربوط به برنامهنویسی سمت سرور را حل میکنند و پایهای اساسی برای اکثر پروژهها هستند. همچنین این توانایی را دارند که در وقت صرفهجویی کنند و در رفع مشکلهایی که ممکن است در آینده با آنها روبرو شویم، ما را یاری کنند. بسیاری از فریمورکهای PHP، متنباز هستند. زمانی که فریمورکی را یاد بگیرید که کارفرمایان آیندهتان از آن استفاده میکنند، سازگاری با محیط کاریتان بسیار سادهتر خواهد بود. حتی برخی از شرکتها در فریمورک خاصی تخصص دارند و کل تیم خود را در راستای آن فریمورک پرورش میدهند. پرسش و پاسخهایی که ممکن است در مصاحبه شما وجود داشته باشند، به تخصص و چالشهایی که شرکت با آن روبرو شدهاست، بستگی دارد. اما برخی از متداولترین آنها عبارتند از:
- چرخه زندگی یک درخواست، یعنی تمام مراحلی که برای رسیدگی به هر درخواست در یک فریمورک اتفاق میافتد،
- روشهای اعتبارسنجی دادهها،
- مسیریابی (routing)،
- ORM (روشی که فریمورکها برای پشتیبانی از لایههای دیتاها استفاده میکنند)،
- مدیریت وابستگیها،
- caching،
- دستورهای کنسول.
مشکلهای رایج در توسعه
یکی از متداولترین بخشهای مصاحبه شغلی ارائه مشکلهای رایج در توسعه با زبان PHP است و برای پیدا کردن توسعهدهندگانی با تجربه بیشتر استفاده میشود. این یک روش عالی برای دیدن نحوه برخورد توسعهدهنده با مشکلهای جدید و تواناییشان برای یافتن مهمترین جنبههای آن مشکل است. همچنین فرصتی برای دیدن چگونگی عملکرد افراد تحت فشار را در اختیار شما قرار میدهد، آیا آنها تسلیم میشوند یا سعی میکنند راهحلی را ارائه دهند؟
بهترین مورد در زمان آمادهسازی برای مصاحبهکاری، رسیدن به نگرش درست است. یک مصاحبهکاری، پایان جهان محسوب نمیشود. نیازی به عصبی شدن بیشازحد نیست. حتی اگر نتوانیم راهحلی برای آن موضوع پیدا کنیم، نگرش ما بهتنهایی میتواند باعث شود که ما واقعا خوب بهنظر برسیم. این یک عادت خوب است که سوال کنیم، بهخصوص از اینکه واقعا مشکل را درک کردهایم، اطمینان حاصل کنیم.
وب و REST API
برنامهنویسی سمت سرور فقط مربوط به زبان PHP نمیشود. اکثر برنامههای مدرن از طریق پروتکل HTTP و با به اشتراک گذاشتن یک API با دنیای خارج از خودشان ارتباط برقرار میکنند. بهگونهای که توسط بخش فرانتاند و برنامههای موبایلی و سایر برنامههای شخص ثالث، با سرویسهایمان یکپارچه میشوند. با توجه به تجربه، پروژه PHP ای نبوده که API مخصوص به خودش را لازم نداشته باشد. بهطور کلی، API مورد بسیار مهمی در توسعه سمت سرور با زبان PHP است، بنابراین در طی یک مصاحبه شغلی میتوانیم این مورد را انتظار داشته باشیم، سوالهای رایج موجود در این زمینه میتوانند به شکلهای زیر باشند:
- چگونگی نحوه ارتباط با HTTP را توضیح دهید،
- تفاوتهای میان HTTP 1.1 و HTTP 2 چیست؟
- REST API چیست و چگونه کار میکند؟
- CORS چیست و برای چه استفاده میشود؟
- تایید اعتبار و دسترسی کاربران از طریق API.
دیتابیسها
بسیاری از سیستمهای مدیریت دیتابیس مانند MySQL، متنباز هستند. دیتابیس یکی از بخشهای اساسی هر برنامه است. در توسعه برنامههای مدرن، از چند دیتابیس در یک برنامه استفاده میشود. دیتابیسهای NoSQL بهطور فزایندهای با دیتابیسهای رابطهای در کنار یکدیگر مورد استفاده قرار میگیرند. دلیل این امر، افزایش ویژه عملکرد برنامهها است که با انتخاب ابزارهای مناسب، محقق میشود. در نتیجه سوالهایی در رابطه با موارد فوق برای مصاحبههای کاری به زبان PHP، متداول است:
- تفاوت بین دیتابیسهای رابطهای و غیررابطهای چیست؟
- دیتابیس NoSQL چیست؟ از چه دیتابیس NoSQL استفاده کردهاید؟ برای چه مواردی میتوان از آنها استفاده کرد؟
- عملکرد و بهینهسازی دیتابیسها،
- سوالهای مربوط به سیستمهای مدیریت استاندارد مانند دیتابیس MySQL
مهندسی نرمافزاری
این بخش از مصاحبه، جالبترین بخش آن محسوب میشود زیرا بهطور واقعی تواناییهای توسعهدهندگان را نشان میدهد. این دانشی است که برنامهنویسان خوب را از کسانی که هنوز راهی طولانی برای طی کردن دارند، متمایز میکند. موضوعهای رایجی که ممکن است درمورد آنها از شما سوال شوند، میتوانند شامل موارد زیر باشند:
- تست برنامه، انواع تستها، موارد خاص، ابزارهایی برای تست برنامههایی که با PHP توسعه داده شدهاند،
- بهترین شیوههای توسعه مانند SOLID،
- الگوهای طراحی (design pattern)، چگونگی گروهبندی آنها، چه مشکلهایی با این الگوها رفع میشود و موارد اینچنینی …،
- الگوهای معماری،
- CI/CD.
DevOps
درنهایت بیشتر پروژهها منجر به تولید محصولی میشوند (حداقل ایده این است). توسعهدهندگان باید پیامدهای پیش رو را درک کنند. بیشتر برنامههای مدرن در سرویسهای ابری مانند لیارا کار میکنند و مقیاسپذیر هستند و نیاز است هر توسعهدهنده با چالشهای مقیاسپذیری رایج و راهحلهای آنها آشنا باشد.
- فضای ذخیرهسازی فایلها و sessionهای مشترک،
- پیکربندی برنامه برای محیطهای مختلف،
- مشکلهای رایج در مقیاسپذیری برنامههای PHP،
- virtualization و containerization،
- روشهای استقرار برنامه.
مهارتهای فردی
مهارتهای فردی یکی از موضوعهایی است که توسعهدهندگان آن را کمارزش میدانند و معمولا این مورد را به حاشیه میرانند. این بسیار مهم است، زیرا معمولا ما بهتنهایی کار نمیکنیم و در تیمهایی متشکل از برنامهنویسان، تستکنندههای برنامه، مدیران پروژه و صاحبان محصول درحال انجام فعایت هستیم. توانایی همکاری با همه آنها موردی بسیار ضروری است. سوالهای رایج مربوط به مهارتهای توسعهدهندگان، عبارتند از:
- روشهای حل اختلاف در یک تیم،
- رویکردهای مقابله با مهلتهای غیر منطقی،
- نحوه رویارویی با ناتوانیها برای تحویل پروژه به کمک روش sprint به صاحبان محصول،
- نحوه استدلال کدها هنگام بررسیشان.
ابزارهای جانبی
جدا از دیتابیسها و موارد دیگری که قبلتر دربارهشان صحبت کردیم، ابزارهای بیشتری وجود دارند که برای ساخت برنامههای وب مورد استفاده قرار میگیرند. برای مثال، ارتباط بین میکروسرویسها ممکن است بر اساس Message brokerها (RabbitMQ یا Apache Kafka) باشد. این یک روش برای افزایش عملکرد و بهبود تجربه کاربری است. البته این امر باعث میشود برنامه ما بهدلیل Loose coupling برای توسعهدهندگان انعطافپذیرتر شود.
headless CMSها یکی دیگر از ابزارهایی هستند که در ساخت برنامههای مدرن از آنها استفاده میشود. همچنین باعث میشوند تا ویراستاران برنامه بهراحتی محتوا را در برنامههای SPA (Single Page Application) + API مدیریت کنند. همچنین ابزارهایی مانند Crowdin, PoEdit و BabelSheet که برای پشتیبانی از چندین زبان مورد استفاده قرار میگیرند، وجود دارند. قطعا ابزارهای بیشتری وجود دارند که میتوانید در توسعه برنامههای وبتان از آنها استفاده کنید. اما به نیازهای تجاری شما وابسته هستند.
اگر بخواهیم صادقانه بگوییم، نمیتوان سوالهای مربوط به این بخش را پیشبینی کرد زیرا تعداد زیادی ابزار وجود دارد. اما باید استفاده از این ابزار را تجربه کنید. اگر با هر ابزار دیگری که ارزش ذکر کردن داشته باشد، کار میکنید از ذکر آنها دریغ نکنید. بهخصوص اگر میتواند برای پروژه مورد نظر مفید باشد که چه بهتر.
فرایند توسعه
توسعه نرمافزار فقط مربوط به دانش فنی قوی نیست. بهگونه میتوان گفت که توسعه نرمافزار برای ارزشسازی در تجارت نیز بهمیان آمده است. زمانی که مستندات مورد نیاز برای انجام یک پروژه در کنار هم جمع میشوند و مستندسازی پروژه تمام میشود، نیاز است افراد تیم تواناییهایشان را با یکدیگر ادغام کنند و هر فرد، بخشی از پروژه را بهدست گیرد. بنابراین افرادی با دانش معقول برای انجام پروژه مورد نیاز هستند. ممکن است درباره تجربهکاریتان با روش Scrum سوالهایی پرسیده شود، برای مثال: Scrum چیست؟ جلسههای خاص کاری با چه هدفی برگذار میشوند؟
Kanban یک روش دیگر است که در توسعه مدرن استفاده میشود و ممکن است در مصاحبه کاری شما، از این روش سوالهایی وجود داشته باشد. همانطور که قبلا اشاره کردیم، بیشتر موارد به نحوه کار شرکتی که میخواهید در آن استخدام شوید، بستگی دارند.
خلاصه یافتههای کلیدی موجود در این مقاله
سعی کردیم در این مقاله شما را با کلیت موضوعهایی که ممکن است با آنها روبرو شوید، آشنا کنیم و در این بخش بهطور مختصر به مهمترین نکتههایی که درباره آنها صحبت شده، میپردازیم:
- در مصاحبه شغلی مرتبط با زبان PHP، ممکن است سوالهایی درباره اکوسیستم کلی برنامه وجود داشته باشد و فقط به زبان PHP پرداخته نمیشود. بهگونهای میتوان گفت که باید بدانید که واقعا یک پروژه PHP چگونه به برنامه کارآمدی تبدیل میشود.
- برای موفقیت در مصاحبهتان بهعنوان یک توسعهدهنده نرمافزار، نیاز است که دانش کلی از جنبههای مختلف توسعه یک برنامه به زبان PHP داشته باشید. حتی اگر شرکتها برای فریمورک یا مورد خاصی درخواست کار داده باشند، داشتن دانش کلی، راه شما را برای رسیدن به هدفتان آسانتر میکند.
- شرکتها سوالهای مربوط به زمینه کاریشان، تخصصهای مورد نیاز و محیطی که میخواهید در آن مشغول به کار شوید، میپرسند. این موارد طبیعی هستند، زیرا آنها سعی در پیدا کردن افرادی دارند که بهرهوری بیشتری برای شرکتشان داشته باشند. بههمین دلیل است که تحقیق درمورد شرکت و نوع فناوریهایی که ترجیحا از آنها استفاده میکنند، ضرروی است. این ممکن است شانس شما برای دستیابی به شغل مدنظرتان را بهبود ببخشد.
- خوب است درباره آنچه که نمیدانید، صادق باشید. شرکتها درک میکنند که روند آموزش، سادهتر از ساختن شخصیت و نگرشهای درست فردی در کار است.
- مهارتهای فردی، شما را به یک عضو کارآمد تیم، تبدیل میکند. در یک پروژه PHP، زمانی محصول به خوبی تحویل داده میشود که همکاری و ارتباط افراد در فرایند ساخت آن محصول، عالی باشد.
امیدواریم که این مقاله، در جستجوی شغل بعدیتان مفید واقع شود.