در مصاحبههای فنی، حل مساله برنامهنویسی روی وایتبرد معمولا تاثیر زیادی در نتیجه مصاحبه داره. در این فرآیند یک سوال (معمولا الگوریتمی) از شما پرسیده میشه، و شما باید اون رو حل کنید و کدش رو روی وایتبرد بنویسید. بعد هم تا حدی زماناجراش رو تحلیل کنید. مثالی از این جور سوالات اینه: یک رشته از حروف به طول n به عنوان ورودی به شما داده شده. عناصرش رو به اندازه i واحد به سمت چپ شیفت بدید (آیتمهایی که از سمت چپ آرایه خارج میشن از سمت راست مجدد وارد میشن). زمان اجرا و حافظه مورد نیاز رو تا حد امکان بهینه کنید.
سوالات whiteboard coding interview در اکثر شرکتهای بزرگ پرسیده میشه، و بنابراین اگر جویای کار هستید توصیهم اینه که حتما روی این موضوع کار کنید. اما چند تا نکته برای موفقبودن توی حل اینجور سوالات:
۱. سوال رو تکرار کنید. حتما سوال رو یکبار به بیان خودتون تکرار کنید تا مطمئن بشید شروع به حل یک مساله اشتباه نمیکنید. نگران نباشید، مصاحبهکننده زیادی عجله نداره. (Repeat)
۲. قبل از حل مساله، سعی کنید با چند تا مثال، مساله رو دقیقتر بفهمید. این کار به شما زمان میده که بهتر هم در مورد راه حل فکر کنید. بعدا از همین مثالها به عنوان test case استفاده خواهید کرد. (Example)
۳. با سادهترین راهحلی که به ذهنتون میرسه، و مستقل از زمان اجرا یا حافظه میتونه مساله رو حل کنه، شروع کنید. درست حل کردن مساله اولویت اول هست، بعدش بهینه کردن راه حل. پیچیده فکر نکنید. سعی کنید با روشهایی سادهای مثل brute force، یا راهحلهایی از مرتبه زمانی بالا، یک راه حل درست برای مساله داشته باشید. (Approach)
۴. با بهینه کردن راهحل اولیه، شروع به زدن کد کنید. در کد زدن سعی کنید از توابع استفاده کنید (مثلا CopyNthFirstElementsOfArray) به جای اینکه همه چیز رو از اول به صورت دقیق پیادهسازی کنید. اینجوری سریعتر به راه حل کلی میرسید، خیلی از اوقات هم مصاحبهکننده میگه نیازی به نوشتن توابع بدیهی برای چک کردن ورودیها یا حالتهای خطا یا ... نیست. (Code)
۵. کدی که زدید رو با ورودیهای نمونه، تست کنید. سعی کنید ورودیهایی انتخاب کنید که زمان خیلی زیادی برای شبیهسازی اجراش وجود نداشته باشه (مثلا شامل ۱۰۰ تا آیتم نباشه)، اما ترجیح اینه که تا حد امکان حالتهای بیشتری رو پوشش بده (مثلا تکراری بودن مقادیر در آرایه). تستکردن ممکنه به اصلاح بعضی قسمتهای کدتون منجر بشه، پس کد اولیه رو ترجیحا یه مقدار باز باز بنویسید تا بشه بین خطهای کد، یه تغییر کوچیک ایجاد کرد (Test)
۶. راهحل تون رو بهینه کنید (از لحاظ زمان اجرا و حافظه). اگر گامهای قبلی رو خوب رفته باشید، اینجا با مصاحبه کننده دوست شدید و معمولا نیازی به بهینهسازی کد نیست (صرفا ایدهها مطرح میشه). معمولا یه راهحل بهینهتر برای مساله وجود داره، و بعضا حتی ایدهداشتن در مورد اینکه روی چه چیزی باید کار کرد هم نکته مثبتی هست (Optimize)
امیدوارم که مصاحبههای خوبی داشته باشید :)
پ.ن. ۱: اگر حروف اول گامها رو به هم بچسبونید، میشه REACTO. این رو به خاطر بسپرید.
پ.ن. ۲: اگر دوست داشتید با آدمهای قوی روی مسالههای واقعی جذاب کار کنید، رزومهتون رو برای ما در مایکت هم بفرستید (https://myket.ir/jobs).
پ.ن. ۳: اگر حوصله داشتید مساله نمونه (شیفت دادن آرایه به طول n به سمت چپ، به اندازه i واحد) رو در زمان اجرای O(n) و با استفاده از چند واحد ثابت حافظه اضافی حل کنید.