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

خوب من بیش از 4 سال تجربه کار به عنوان توسعه یافته فول-استک در شرکت های استارتاپی با توجه به کوچکترین علاقه و علاقه مندی ها به مهاجرت به شرکت های بزرگ نداشتم زیرا معتقد بودم در شرکت های استارتاپی فضای خوب و مناسب برای پیشرفت خودم و شرکت وجود دارد. چه چیزهایی برای ورود به شرکتهای بزرگ رو هم بی تاثیر نبودند:) ). بعد از تصمیمی که وارد شرکت‌های با بزرگ‌تر و ساختار یافته‌ها می‌شود، می‌شود که به مشتری‌های بیشتر سرویس می‌دهند. ورود به همچین شرکت‌هایی به شرکت‌های استارتاپی نبود که بعداً روی آن توضیح می‌داد.

لازم بود مدتی وقت بزارم و دانشم رو هم بروز کنم و هم تثبیت کنم و بعد از اصلاحیه‌های زیادی که روی رزومه‌ام انجام دادم، برای شرکت‌های مختلف رزومه ارسال کردم. تضمین تونستم تقریباً برای همه شغل‌های درخواستیم تایید رو بگیرم (مواردی که به خاطر “عدم امکان دورکاری” بود). دیجیکالا، علی‌بابا، سنجاق، اسنپ‌فود، اسنپ‌مارکت، اسنپ‌تریپ، پونیشا و ابرآروان چند تا از شرکت‌های بزرگی بودند که روزمه‌م رو تایید کردند و به مرحله مصاحبه (فنی یا منابع انسانی) رفتند. مصاحبه‌هاشون رو رد و بعضی‌ها رو قبول کردم ولی در نهایت شرکتی که از همه بیشتر دوست داشتم و مدتی بود که هدف قرار دادن رو انتخاب کردم.


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

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

  • معماری‌های نرم‌افزار مثل معماری مونولیثیک، میکروسرویس، معماری پایپلایینی
  • پارادایم‌های نرم‌افزاری مثل شی‌گرایی
  • ساخت‌ارداده‌ها، الگوریتم‌ها، الگوهای طراحی و قواعد نرم‌افزار (اصول نرم‌افزار)
  • مدیریت حافظه

این موارد هم نمونه‌ای از سوالات فناوری محور هستند:

  • انواع نتوورک ها در داکر
  • نحوه عملکرد منابع ingress در کوبرنتیز
  • انواع ساختارها در گولنگ

همونطور که گفتم این سوالات رو احتمالا با یه سرچ ساده تو گوگل متوجه میشید. البته از هر دو نوع سوالات در همه نوع شرکتی پرسیده می شود و از شما انتظار می رود که در هر دو مورد خوبی داشته باشید ولی درجه به هر نوع متفاوت باشد. مثلا ممکنه شرکتی بر روی معماری میکروسرویس کار کنه و شما رو به خاطر اینکه RabbitMQ رو نمیدونید رد نکنه ولی چون پروتوکل AMQP رو نمیدونید رد کنه!! (فقط یه مثال).

گودال ماریانا
گودال ماریانا

موضوعات دیگر که خیلی نظرمو جلب کرد این بود که توی شرکت‌های بزرگ‌تر، سوالات به شدت عمیق بیان میشن و معمولا گستردگی خیلی زیاد نیست (نسبت به عمق). ولی در شرکت‌های کوچیک‌تر اینکه شما چقدر مهم یک مسئله را درک کرده‌اید شاید خیلی مهم نباشید ولی براشون مهمه که شما گستردگی دانش خوبی داشته باشید. به همین دلیل است که معمولاً توسعه‌دهنده‌های فول-استک می‌خواهند در بین شرکت‌های استارتاپی بیشتر شوند که دلیل آن میتونه باشد که می‌تواند همچین فردی کم هزینه برای استفاده از یک توسعه دهنده فرانت و یک بک‌اند کار باشد. البته از مهندس خوب انتظار میره که گستردگی دانش خوبی داشته باشد و در عین حال در برخی موارد با عمق کافی تخصص رو مدیریت کنه.

سوالاتی که در مصاحبه‌ها ازم بپرسید، به طرز مسخره‌ای شبیه و حتی یکسان هستند. که البته این خودش یه اصله: بنا به اصل محلی بودن سوالات، احتمالا خیلی زیاد سوالی که ازتون پرسیده میشه بعدا هم باهاش ​​روبرو میشید (زمانی) یا اینکه سوالات مشابه ازتون پرسیده میشه(مکانی). پیشنهاد من اینه که هر سوالی که ازتون میشه رو یادداشت کنید، و بعد از مصاحبه در موردش یه تحقیقی کنید، حالا چه جوابش رو می‌دونید چه نه.

برای مثال این چند تا سوال در توییتر همه مصاحبه‌ها ازم پرسیده شد:

  • ایندکس‌ها (شاخص‌ها) در پایگاه‌داده‌ها چی هستند و چه نوع‌هایی دارند؟
  • تفاوت git merge با git rebase ؟
  • در گولنگ Goroutines و Channels چی هستند؟
  • پترن‌های SAGA و Event Sourcing در معماری میکروسرویس چی هستند؟
  • چند الگوی طراحی نرمافزار که باهاش ​​آشنایی هستی رو نام ببر.

شغل‌های حرفه‌ای‌تر معمولاً بیشتر به حل مسئله شما اهمیت می‌دهند. اگر چطوری می‌تونید یک راه حل نزدیک به بهینه با استفاده از ابزار درست ارائه بدید. که البته برای برنامه ریزی نرم افزارهای معمول سوالاتی از نوع ارائه الگوریتم بهینه برای حل یک موضوع با توجه به یک ساختار مشخص می شود. یا اینکه برای یک سناریوی مشخص کنید چه معماری نرم‌افزاری با چه الگوهایی ارائه می‌شود که هزینه‌های توسعه پیدا کند.


تا اینجا کلیاتی از مصاحبه هام رو توضیح دادم. تو این بخش می‌خواهم در مورد هر شرکت فرآیند مصاحبه‌اش به چه شکلی توضیح بدم. عنوان آگهی‌های شغلی که براشون درخواست دادم متفاوت بود و شامل نرم‌افزار، توسعه‌دهنده بک‌اند (“سنیور” یا مشخص نشده)، توسعه‌دهنده گولنگ (بازرم ‌”سنیور” یا مشخص نشده است). مواردی که توضیح میدم فقط برداشت منه و ممکنه برای شما تجربه متفاوت باشن.

خب با علی‌بابا مستقیم وارد مصاحبه فنی شدم و با دو تا از مهندس کار درستشون شدم. سوالات ابتدایی ابزار اصلی بود و هرچه جلوتر می‌رفت مفهومی‌تر میشد. مدتی بعد از مصاحبه این مخزن گیت‌هاب رو پیدا کردم که بسیاری از سوالاتم از همین مخزن بودند. مطمئناً نباید فقط با خوندن این سؤالات را تأیید کنید که فنی رو به عنوان هدف علی‌بابا با مصاحبه صرفاً این نیست که شما مفهومابزار x رو میدونید یا نه. با جرات میتونم بگم مصاحبه‌م با علی‌بابا جزو حرفه‌ای‌ترین و با کیفیت‌ترین مصاحبه‌های بود که با هر شرکت دیگه‌ای داشتم.

یکی از موارد جالب برام این بود که در بخش سوالات مفهومی یک لیست از کلمات بهم می گفت که باید یادداشت می کردم و بهشون می گفتم که بلد هستم یا نه. بعد از انتخاب خودم ۴ تا از اونهای رو که بلد هستم رو توضیح می‌دادم. چند تا از مواردی که ازم پرسیدن رو پایین لیست کردم:

  • الگوهای SAGA, Event Sourcing و Service Discovery در معماری میکروسرویس
  • تئوری CAP
  • الگوی Circuit breaker

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

تو اسنپ فود ابتدا یک مصاحبه یک ساعتی با تیم منابع انسانی که بعدش برای مصاحبه فنی تایید شد. توی مصاحبه فنی با رهبر تکنیکال تیم حدود ۱ ساعت مصاحبه داشتم. ابتدا با سوالات مفهومی مواجه شدم که مثلا Dynamic Programming چی هست و در چه شرایطی مفید واقع میشه و اینکه الگوریتم merge sort چه پیشچیدگی زمانی داره. بعد از سوالات ابزاری شدن که تعدادشون نسبت به مفهومی‌ها بیشتر بود. سوالات ابزاری تا بیشتر از زبان های برنامه نویسی و پایگاه داده ها را شامل می شود. برای مثال:

  • نحوه حل مشکل Race Condition با گولنگ و اینکه چه ابزاری برای این کار مناسبه
  • استخر کارگری الگوری در گولنگ
  • ابزارهای primitive پکیج sync در گولنگ مثل Mutex و Map
  • همچنین تفاوت ها و ویژگی های ابزارهای خاص SQL و NOSQL

خب تو ابرآروان فرآیند مصاحبه نسبتا متفاوت با تجربه‌های قبلیم بود. ابتدا یک مصاحبه فنی با تیم لید و توسعه‌دهی تیم زیرساختشان و سوالاتی در تجربه‌های کاری خودم بود. که با چه چالشهایی در دوران کاریم روبرو شدم، چه راه‌حلهایی برای هر چالشی که داشتم و … . در ادامه هم با سوالات مفهومی و ابزارهای مختلف مواجه شدم و تا حدودی سوالاتی را که خودم مطرح می کنم و خودم هم جواب میدادم. مثلا اینکه با چه الگوهایی در concurrency زبان گولنگ آشنایی دارم و دو تاشون رو به اختیار توضیح بدم که من Race Condition و Synchronization رو توضیح دادم.

بعد از مصاحبه یک مستند از یک پروژه برام ارسال کردند که باید توی یک هفته انجام میدادم. پروژه‌ای که بهم سخت‌ترین پروژه را می‌دهد، برنامه‌نویسی بود که توی هر مصاحبه‌ای تابحال انجام دادم. برای همین با شدت زیاد براش وقت گذاشتم و توی ۳ روز کار رو انجام دادم. پروژه لازم بود روی معماری میکروسرویس با زبان گولنگ انجام میشد و از فریموورک دلخواه میتونستم استفاده کنم. بعد از یک جلسه دفاعی از پروژه‌م دفاع می‌کردم که به نظرم جالب بود و در مصاحبه‌های دیگه همچین تجربه‌ای نداشتم. به همه جزئیات پروژه دقت کنید و ازم سوال می‌پرسید. تو جلسه دفاعی هم گاها سناریوی بخشی از پروژه رو تغییر میدادن و باید برای اون سناریو راه حل ارائه ‌میدادم و حتی کدش رو مینوشتم.

بعد از قبولی تو مصاحبه فنی، دو مصاحبه با تیم منابع انسانی (فرهنگ) داشتم. تو اخرین مصاحبه جلسه‌ای با دو تا از تیم‌لیدهای دو تیم مختلف داشتم که هر کدوم رو در تیمشون با من صحبت کردم و باید به این نتیجه رسیدم که کدوم تیم برای من مناسب تره و در نهایت شرکتی که دوست داشتم وارد می‌شد :).

چون مقاله‌ی یکم طولانی شده سعی می‌کنم چند شرکت باقیمانده رو کوتاه توضیح بدم. مصاحبه‌‌م با پونیشا به عنوان توسعه‌دهنده لاراول با تک‌لید جدیدشان که با همکاری قبلی خودم، مصاحبه‌ای هم باهاش ​​داشتم. سولات از ابزارهای مختلف مانند داکر، الستیک سرچ، لینوکس، لاراول، MySql و ردیس بود. با اسنپ تریپ هم یک مصاحبه معمولی داشتم که بعد از جواب دادم به سوالات با یک برنامه نویسی زنده همراه بود. سوال هم به این شکل بود که کدی بنویسم که در یک لیست لینک شده سومین خانه از اخر لیست رو حذف کنم و سوال بیشتر با هدف شناسایی حل مسئله مطرح شده بود.

مصاحبه‌م با اسنپ‌مارکت هم با دو تا از مهندس‌های نرم‌افزارشون بود که یکیشون سوالای نسبتا ساده (مفهومی و ابزاری) می‌پرسید و سوالات بعدی فوق‌العاده مهم می‌کرد که اصلاً تعدادشون کم نبود! چون استک اسنپ‌مارکت روی لاراول و گولنگ بود، از هر دو ابزاری که باید پرسیده شود. تغییرات هم مشکلی در نمایش داده ها به وجود نیاد.

امیدوارم که مقاله‌ی براتون مفید بوده باشه :)).

اگر دوست داشتی امتیاز دادن یادت نره!