asghar tigerpanah
asghar tigerpanah
خواندن ۷ دقیقه·۵ سال پیش

تجربه مصاحبه در شرکت کافه بازار

اواخر اسفند ۹۷ بود که برای کافه بازار رزومه فرستادم تحت عنوان مهندس ارشد نرم افزار یا Senior Software Engineer. با خودم میگفتم که من الان پنج سال هست که دارم تو این زمینه فعالیت می کنم و امکان نداره که رد بشم.

خلاصه بعد از سه چهار روز باهام تماس گرفتن و قرار مصاحبه ی تلفنی رو گذاشتن برای فروردین ۹۸ و گفتن که ۳ مرحله مصاحبه داریم که تو هر مرحله قبول بشی به مرحله ی بعد راه پیدا میکنی و بعد از سه تا هم جلسه ی offer رو برات میزاریم.

مصاحبه ی اول که خیلی خوب بود و در مورد سابقه ام پرسیدن و کارهایی که انجام داده بودم و همچنین تکنولوژی هایی که کار کردم. در ادامه یکسری سوال های رفتاری پرسیدن که مثلا تا حالا با کسی مشکل داشتم یا نه؟ و اگر مشکل داشتم چی بوده قضیه و چه جوری هندل کردم مشکل رو؟

معمولا به این سوالات Behavioral میگن و هدفش اینه که شما رو از لحاظ فرهنگی و رفتاری مورد ارزیابی قرار بده. حالا اگه شما باهوش ترین و کاربلد ترین برنامه نویس دنیا هم که باشید اگه در این مورد قابل قبول نباشید شما رو رد میکنند. دلیلش هم اینه که اگه همچین آدمی که اخلاق نداره تو شرکت بیاد باعث نارضایتی بقیه میشه و حاشیه درست میکنه و باعث میشه که بقیه ی کارکنان که اصطلاحا با شعور هستن شرکت رو ترک کنن.

حالا برای اینکه در این سوال ها موفق بشین معمولا باید یه شرایطی در گذشته رو بیان کنین که با یکی مشکل داشتین. مثلا توی محیط کار قبلیتون یا با یکی از همگروهی های زمان دانشگاه و شما کاری کردین که مشکل حل شده.

معمولا هم روند تعریف کردن قضیه اینجوریه :

تعریف شرایط دشوار -> کاری که شما برای حل مشکل کردین -> نتیجه ی کار شما.

مثال: تو زمان دانشگاه با دو تا از دوستام قرار بود یه پروژه رو مشترکا انجام بدین. یکی از اونها مدام بهانه میاورد و مواقعی که دور هم جمع میشدیم نبودش و از زیر کار در میرفت(تعریف مشکل) خوب من رفتم باهاش صحبت کردم که ببینم دلیل این قضیه چی بوده؟ آیا آدم تنبلی هست یا نه یه مشکل دیگه وجود داره که جلوی فعالیت اون رو میگیره ؟ بعد از یه مدت فهمیدم که اون ترس داره که نتونه مثل بقیه ی ما عملکرد خوبی داشته باشه و چون از لحاظ فنی ضعیف تر از ما بود می ترسید که توسط ما مورد قضاوت قرار بگیره خب من و دوستم کمکش کردیم که به سطح ما برسه و بهش اطمینان دادیم که مشکلی پیش نمیاد.(راه حل برای حل مشکل). و بعد از یکی دو هفته تقریبا عملکردمون به سطح همدیگه رسیده بود و پروژه رو هم به خوبی و خوشی تحویل دادیم (نتیجه ی کار شما).

آخر کار هم یک سوال الگوریتمی پرسیدن که باید توی گوگل داک براشون می نوشتم. سوال پیدا کردن عددی در ماتریس بود که توی سطر خودش Max باشه و توی ستون خودش Min و اصطلاحا به این عدد، نقطه ی زین اسبی میگن که خیلی راحت میشه حلش کرد و شما میای کل Max ها سطر ها رو حساب میکنی و بعد کل Min های ستون ها رو حساب می کنی و اون هایی که یکی هست رو تو خروجی چاپ میکنی که پیچیدگی زمانیش در بهترین حالت N*N هست و پیچیدگی فضاش هم N هست.

یک هفته بعد از این مصاحبه باهام تماس گرفتن و قرار مصاحبه ی دوم رو گذاشتن. تو این مصاحبه یخورده سوالات فنی پرسیدن مثل اینکه SOLID چی هست و در مورد مواردی هم که تو رزومه ام نوشته بودم سوال پرسیدن در مورد ابزار هایی که کار کرده بودم از قبل که همه رو خیلی راحت جواب دادم.

در ادامه سوالی مطرح شد به این صورت: در سطح شهر یکسری موتوری پخش شده اند و یکسری رستوران هم داریم که مردم از این رستوران ها غذا سفارش میدن. حالا الگوریتمی ارایه بدین که موتور ها رو جوری به این رستوران ها اختصاص بده که مجموع زمانی که طول میکشه کل موتور ها غذا رو از رستوران تحویل بگیرین و به منزل مشتری تحویل بدن Min بشه.

راه حل

این یک مساله ی بهینه سازی هست که قصد داره ضرر ما رو به کمترین حالت ممکنه برسونه (ضرر ما اینجا میشه صرف زمان و مصرف سوخت موتور ها) حالا همین اول کار شما باید بگید که خانه ها رو از مساله حذف میکنم چون در روند حل مساله اهمیتی ندارن و در هر صورت فاصله ی رستوران تا خونه ی مشتری رو باید طی کنیم و چیزی که تعیین کننده میشه فاصله ی پیک موتوری تا رستوران هست.

حالا ما چه جوری میتونیم به بهینه ترین الگوریتم ممکن برسیم؟ چاره ای نداریم که تمام حالت های ممکن رو حساب کنیم و اون حالتی رو انتخاب کنیم که مجموع زمان رسیدن همه ی غذا ها از رستوران به صاحب خونه از همه کمتره.

خب الگوریتمی که ارایه دادیم خیلی سادس و همیشه هم بهترین حالت رو به ما میده. اما یه مشکلی وجود داره. اگه گفتین ؟

مشکل این جاست که اگر تعداد موتور ها m تا باشه تعداد کل حالت های موجود که ما باید ازش انتخاب کنیم میشه !m چون برای اختصاص موتور به رستوران اول m تا انتخاب داریم و برای اختصاص موتور به رستوران دوم m -1 تا انتخاب داریم و ... که در نهایت تعداد حالت ها میشود !m. و اینجاست که بر میخوریم به یک مساله ی NP که هیچ کامپیوتری تو دنیا وجود نداره که بتونه همچین مساله ی رو حل کنه.

با این قسمت از مساله که میرسید ازتون میخواد راه حل هایی ارایه بدین که این مساله ی غیر قابل حل رو بشه باهاش حل کرد.خب یکی از راه حل ها اینه که فضای حالت مساله رو کوچیک کنیم. چه جوری اینکار رو انجام بدیم؟

باید بیام یکسری شرط بزاریم و بگیم اگر فاصله ی موتور تا رستوران خیلی زیاد بود اون موتور رو به رستوران اختصاص نده.

تنها راه حلی که اونجا به ذهن من رسید برای کوچک کردن فضای حالت مساله همین بودش. و کلی هم زور زدم که راه حل بدم اما فقط همین به ذهنم رسید.


تهش هم گفتن که باهاتون تماس میگیریم تا هفته ی آینده و نتیجه رو بهتون میگیم.

که بعد از یک هفته تماس گرفتن و متاسفانه گفتن که خوب بودی ولی گزینه های بهتری داریم(که من ناراحت نشم!).

چند تا نکته بگم برای آمادگی بیشتر کسی که میخواد به مصاحبه بره:

  • کلا اگر الگوریتم بلد نیستین نفرستین چون رد میشین. بهتره قبلش بشینین الگوریتم رو حسابی بخونید مخصوصا مبحث Big O.
  • سعی کنید رزومتون انگلیسی باشه و کوتاه نگه دارین که افرادی که مسول این کار هستن با یه نگاه مختصری سابقه ی شما دستشون بیاد.
  • توی کافه بازار اصلا سوالات فنی مثل OOP, سوالات sql، سوالات مربوط به میکروسرویس و pattern های معروفی که توی کار بیشترین نقش رو بازی میکنه، پرسیده نخواهد شد و پس بهتره که تمرکز اصلیتون رو بزارید رو طراحی الگوریتم و کتابی مثل CLRS میتونه براتون خیلی مفید باشه.

نکته ی آخر:

فرایند جذب کافه بازار از بیخ و بن کپی فرایندی هست که گوگل داره چه از سوال های فنی گرفته تا سوال های behavioral و HR. اگر کتاب Work rules یا اسرار کار (عنوان کتاب به اشتباه ترجمه شده) نوشته ی لزلو باک مدیر منابع انسانی گوگل رو مطالعه کرده باشین متوجه این قضیه میشین. خود گوگل چند سالی هست که استفاده از این جور سوال های الگوریتیمی رو ممنوع اعلام کرده و به این نتیجه رسیده که این سوال ها معیار خوبی برای فهمیدن هوش طرف، قدرت رهبری شخص و تعیین رفتاریات و اخلاقیات (مهم ترین معیار های کار از نظر گوگل) نیستند. یه مشکلی که تو ماها هست اینه که فکر میکنیم یه روشی که برای جای دیگه و یک شرکت دیگه جواب میده برای ما هم جواب میده. خب گوگل از لحاظ تنوع محصولات و تعداد کاربران و اندازه ی شرکت اصلا قابل قیاس نیست با یه شرکتی مثل کافه بازار. گوگل حدود ۶۰ هزار تا کارمند داره تعداد کاربران مجموع product هایی که داره بیشتر از یک میلیارد تا هست و اونوقت شما بدون دقت به این نکته اومدین فرآیند مصاحبه تون رو از اونها کپی کردین. حالا از کسی که قبل از ورود به گوگل همچین سوالی پرسیده میشه، بعد وقتی پذیرفته میشه قراره بره کد search engine گوگل رو توسعه بده و بهتر کنه. و شما میان یه مصاحبه در حد گوگل می پرسید و طرف هم تهش قرار بیاد چار تا http call انجام بده و بیاد با چار تا ابزار مثل Rabbitmq, mongodb, elasticsearch کار کنه.

دوستان عزیزی که تو کافه بازار حضور دارید

  • بد نیست که یه بازنگری توی روند مصاحبه ی فنی تون بکنید. شاید همینجوری این همه برنامه نویس خوب رو از دست ندید.
  • انصافا همین سوال هایی که از مصاحبه شونده ها میپرسید رو وقتی خودتون برای اولین بار دیدین تونستین تو ۲۰ دقیقه حلش کنید؟ اونم تحت شرایط فشار و استرس ناشی از مصاحبه.
  • آیا در مصاحبه ها عدالت رو بین همه رعایت میکنید؟ یا اینکه اگه طرف دوستتون بود یا اینکه صرفا خانم بود سریع قبولش میکنید؟(این مورد رو هوا نمیگم و خیلی کیس های مختلف رو دیدم و توسط دیگران دیده شده.)


مصاحبهبرنامه نویسیمصاحبه کافه بازارکافه بازارsoftware engineer
شاید از این پست‌ها خوشتان بیاید