مصاحبه‌های آنلاین کدینگ

شرکت‌های مختلف، مراحل مختلفی برای مصاحبه‌هاشون دارن. بعضی‌ها، قسمت چالش‌ فنی رو تو قالب یک به اصلاح Home assignment ارزیابی میکنن که شما به اندازه چند ساعت یا چند روز فرصت دارید تا تمرین مورد نظر رو انجام بدین و حالا یا به صورت فایل زیپ‌شده یا روی یک ریپازیتوری آنلاین براشون ارسال کنید. شما اینجا این فرصت رو دارید که بدون استرس و تو زمانی که احساس راحتی بیشتری می‌کنید، دانش و توانایی فنی خودتون رو به بهترین نحو نشون بدین. معماری پروژه، استایل کدنویسی، الگوریتم‌های مورد استفاده، رعایت استانداردهای زبانی که باهاش کار می‌کنید و حتی کامیت‌های روی پروژه مواردی هستند که بعدا توسط یک یا چند نفر از برنامه‌نویس‌های شرکت ریویو میشن و براساس یه چک لیست از قبل تعریف‌شده، امتیازدهی میشن. اگر امتیاز قابل قبول این مرحله رو به دست بیارید، دعوت به مرحله بعدی مصاحبه میشید که یک گپ و گفت تکنیکال در مورد پروژه‌ای که انجام دادین هست که با سوال‌هایی در مورد پروژه‌تون شروع میشه و کم‌کم به سوال‌های جنرال‌تر تو حوزه‌ای که براش اپلای کردین می‌رسه. مثلا ممکنه از شما سوال بپرسن چرا این روش یا این معماری یا این الگوریتم رو انتخاب کردین و انتظار دارن شما بتونید با مقایسه‌ای که بین راه‌حل‌های ممکن برای حل مساله وجود داره، دلایل قانع‌کننده‌ای برای راه‌حل‌تون ارائه بدین. این بهشون این امکان رو میده که بتونن سطح دانش شما رو بهتر ارزیابی کنن و پوزیشنی که به شرکت برای استخدام شما پیشنهاد می‌دن، دقیق‌تر باشه. این روش همچنان تو خیلی از شرکت‌ها تو روال استخدام استفاده می‌شه و روش متدوالی هست. اما در مقابل شرکت‌های دیگه‌ای هم هستند که بنا به دلایل مختلفی ترجیح می‌دن این مصاحبه رو به صورت آنلاین کدینگ انجام بدن. دلایلی مثل این که شما چطور با یک مساله برخورد می‌کنید. اگر چیزی گنگ و نامفهوم هست، آیا سوال‌های شفاف‌کننده می‌پرسید یا با فرضیات خودتون پیش می‌رید؟ چطور راه‌حل‌تون رو انتخاب می‌کنید. آیا به اندازه کافی به راه‌حل‌های مختلف تسلط دارید تا بر اساس شرایط مساله، بهترینش رو انتخاب کنید؟چطور کدتون رو بهبود می‌دید؟ چطور از درستی راه‌حل‌تون اطمینان حاصل می‌کنید. آیا به Edgecaseهایی که ممکنه پیش بیاد، توجه دارید؟ و چقدر در طول حل مساله با مصاحبه‌کننده‌هاتون تعامل می‌کنید. مصاحبه‌کننده‌ها در جریان هستند که این مرحله ممکنه برای شما استرس‌زا باشه. برای همین اگر آدم‌های حرفه‌ای باشند، سعی میکنن به شما کمک کنن. این مورد رو بهش توجه کنید. اگر جایی گیر کردین و چیزی رو به خاطر نمی‌آوردید، خودتون رو نبازید. سوال بپرسید. توضیح بدین و سعی کنید به راهنمایی‌هایی که بهتون میکنن، توجه کنید. مصاحبه‌های آنلاین باز هم در شرکت‌های مختلف متفاوت هستند. بعضی‌ها از شرکت‌ها این مصاحبه رو بر اساس کاری که براش اپلای کردین، تو IDE محبوبتون و احتمالا با زبانی که باهاش راحت‌تر هستید، انجام میدن. البته اگر این آپشن انتخاب زبان برای کاری که براش اپلای کردین، وجود داشته باشه. شما از قبل اعلام می‌کنید که با چه زبانی میخواید مصاحبه‌تون رو انجام بدین و احتمالا افرادی که مسلط به اون زبان هستند، تو مصاحبه‌تون حاضر میشن. بعضی وقت‌ها هم این آپشن در دسترس نیست و خب، شما با زبانی که ازتون می‌خوان یا در شرح وظایف شغل نوشته شده باید این مرحله رو انجام بدین.دسته دوم این مرحله رو به جای IDE، تو محیط‌های آنلاین کدنویسی انجام میدن. این محیط‌ها به اندازه IDE دست شما رو باز نمی‌ذارن و البته به خامی نت‌پد و تکست‌ادیتورهای معمولی نیستن. شما زبانتون رو انتخاب می‌کنید و تا یه حدی از اتوکامپلیت رو در اختیار خواهید داشت. البته این مساله همچنان به پلت‌فورمی که شرکت برای مصاحبه انتخاب می‌کنه بستگی داره. برای مثال Coderpad برای برخی‌ زبان‌ها، آپشن اتوکامپلیت رو داره.مصاحبه‌هایی که به این صورت برگزار می‌شن، معمولا دنبال محک زدن آشنایی شما با اصول برنامه‌نویسی مثل میزان آشنایی شما با ساختمان داده‌های مختلف برای مسائل مختلف هستند. صورت بعضی مساله‌ها مشخصا ساختمان داده رو تعیین میکنه و از شما میخواد مثلا توی یک درخت، نود یا نودهایی که یک شرایط خاصی رو دارند پیدا کنید. یا مثلا از شما می‌خوان سوالی در مورد لینکدلیست‌ها حل کنید. در مقابل، سوال‌هایی هم هستند که توشون اشاره‌ای به نوع ساختمان‌داده نمیشه. مثلا از شما میخوان همه صفرهای یک عبارت رشته‌ای رو به ابتدا یا انتهای اون منتقل کنید یا مثلا ازتون میخوان آرایه‌ای از بازه‌ها رو جوری مرج کنید که هیچ دو عضوی با هم، همپوشانی نداشته باشن یا سوال‌هایی شبیه این. توی این سوال‌ها شما باید بتونید از الگوریتم‌ها یا ساختمان داده‌هایی استفاده کنید که بتونه جواب در شرایط بهینه زمانی یا حافظه‌ای مشخص کنه. دونستن اینکه مثلا دسترسی به هر عنصر یک مجموعه یا دیکشنری، در زمان ثابت انجام میشه، شاید چیزی باشه که برای حل اون مساله، بهترین راه‌کار باشه.بعد از اینکه موفق شدین مساله رو حل کنید، از شما در مورد پیچیدگی‌های زمانی و حافظه ممکنه سوال‌هایی رو بپرسن. پیشنهاد من این هست که قبل از مصاحبه، نگاهی به داکیومنت‌های زبانی که باهاش مصاحبه می‌کنید بندازید و مثلا بدونید پیچیدگی زمانی الگوریتم مرتب‌سازی تو اون زبان چقدر هست. بهتون کمک میکنه که در نهایت جواب دقیق‌تری بدین.نکته‌ای که در مورد این مصاحبه‌ها وجود داره این هست که شما ممکنه همون اول، بهترین و بهینه‌ترین جواب به ذهنتون نرسه. شاید روشی که باهاش شروع می‌کنید حلقه‌های تودرتو داشته باشه ولی من پیشنهاد میکنم قبل از هر کاری، سوال رو یک بار دقیق بخونید. اگر چیزی واضح نیست، در موردش سوال بپرسید و بعد هر چیزی که توی ذهنتون می‌گذره رو به زبون بیارید. شاید بهتر باشه بگم بلند بلند فکر کنید. مصاحبه‌کننده‌ها اگر شما چیزی نگید، نمی‌تونن ذهن شما رو بخونن تا بفهمن کجا گیر کردین ولی اگر بدونن چه مسیری رو دارین طی می‌کنید، می‌تونن بهتون کمک کنن یا حداقل اشاره‌هایی بکنن تا شما به جواب نزدیک‌تر باشید.دومین نکته هم این هست که حتما بعد از اینکه کدتون رو نوشتید و گفتید که تموم شده، با چند مدل مختلف ورودی، الگوریتمون رو چک کنید. نه چیزی که فکر می‌کنید نوشتید رو! دقیقا خط به خط الگوریتم رو اجرا کنید تا ببینید واقعا درست کار می‌کنه یا نه. اینطوری می‌تونید باگ‌هاتون رو پیدا کنید. خیلی وقت‌ها چیزی که توی ذهنمون هست با کدی که نوشتیم، متفاوته. خیلی مهمه که چیزی که نوشتیم رو چک کنیم. ورودی‌هایی که باهاش کدمون رو چک می‌کنیم باید ورودی‌های جامعی باشن. مثلا حواسمون باشه با رشته خالی یا پوینتر نال هم کد رو چک کنیم. اینطوری می‌تونیم نشون بدیم که موقع کدنویسی، عملا حواسمون به Edgecaseها هم هست.چیزی که برای مصاحبه‌های آنلاین کدینگ اهمیت داره، تمرین هست. سایت‌های زیادی هستن که شما می‌تونید توشون عضو بشید و تمرین کنید. از سوال‌های آسون شروع کنید و ذهنتون رو تمرین بدین که درست بخونه و درست فکر کنه. خوبی این سایت‌ها این هست که وقتی کدتون رو سابمیت می‌کنید، نه تنها درستی کد رو بلکه بهینه بودنش رو هم تست می‌کنه. شما خیلی وقت‌ها سوالی رو درست حل می‌کنید ولی تست‌های پرفورمنس‌تون Fail میشن چون راهی که استفاده کردین، بهنیه نبوده. همه این موارد با تمرین کردن درست میشه. اگر وقت کافی برای اینکار بذارید، احتمال اینکه حین مصاحبه سوال‌هایی ببینید که قبلا بهشون برخوردین، خیلی بالا می‌ره. اگر نمی‌تونستید سوالی رو حل کنید، جوابش رو نگاه کنید و سعی کنید یاد بگیرید مساله‌های مشابه رو چطوری باید حل کنید. بعدا برای وقتی که برای این یاد گرفتن گذاشتید، حتما خیلی خوشحال خواهید شد.موفق باشید ?