چگونه می توان مصاحبه های کدگذاری آس را گرفت – مشاوره ای از آمازون Dev

سابق

 عکس پروفایل نویسنده

/ h3>

مهندس نرم افزار: قبلا در آمازون و اکنون در eBay. مجوز حرفه ای ابر ابر.

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

استخدام در یک شرکت FAANG (فیس بوک ، آمازون ، اپل ، نتفلیکس ، گوگل) می تواند شما را فراهم کند ، از جمله موارد دیگر ، مزایای زیر است:

  • جبران خسارت بزرگ
  • محیط کار فوق العاده
  • کار چالش برانگیز
  • همکاران باهوش
  • یک CV چشمگیر

من این کار را کردم و می توانم به شما بگویم که کاملاً ارزشش را دارد.

این یک راهنمای دیگر برای “نحوه شکستن مصاحبه Google” نیست ، و تکرار همان نکات عمومی: یک روز قبل از مصاحبه سخت بخوانید ، تمرین کنید ، آرام باشید و خوب بخوابید. این بر اساس سالها تجربه ، هم به عنوان یک کاندیدا و هم به عنوان مصاحبه کننده است.

اگر احساس می کنید مصاحبه های برنامه نویسی کاملاً بی عیب نیستند ، تنها نیستید – من در کنار شما هستم – اما اگر بازی می خواهید باید بازی کنید. من چندین بار طرد شده ام و همچنین فقط در مدت دو ماه تحصیل مصاحبه آمازون را شکست داده ام ، در حالی که من یک کار تمام وقت داشتم. من در این فرآیند چیزهای زیادی آموخته ام.

من لیسانس علوم کامپیوتر ندارم. من باید از ابتدا شروع می کردم. این راهنمایی است که آرزو می کنم هنگام شروع سفر به عنوان یک توسعه دهنده ، آن را داشته باشم.

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

رئوس مطالب

این آنچه در این مقاله پوشش خواهم داد:

  • طرز فکر صحیح قبل ، حین و بعد از مصاحبه
  • نحوه تمرین حل چالش های کدگذاری
  • دانش فنی مورد نیاز
  • کتابها و وب سایتهایی که از آنها استفاده کردم
  • اشتباهاتی که باید قبل و در طول مصاحبه از آنها جلوگیری شود
  • مثالها

نحوه تهیه

ذهنیت

توسعه دهندگان شرکت های FAANG خدا نیستند آنها انسانهای منظمی هستند که با مشکلات و ناامنی های خاص خود ، همان روند شما را پشت سر می گذارند. آنها همچنین از سندرم جعل رنج می بردند – احتمالاً هنوز هم این کار را انجام می دهند. آنها را روی پایه قرار ندهید. این را همیشه بخاطر داشته باشید ، مخصوصاً وقتی شغل پیدا می کنید.

من مصاحبه گرانی را ملاقات کردم که از شکنجه نامزدها لذت می بردند. برخی از مصاحبه کنندگان که برخی از هم تیمی های خود را استخدام نمی کنند. خوشبختانه آنها اقلیت هستند ، اما ممکن است در طول مصاحبه های خود با یکی از آنها روبرو شوید. تنها کار هوشمندانه این است که بر آنچه می توانید کنترل کنید تمرکز کنید: آمادگی خود را. روی روند کار تمرکز کنید. اگر خوب آماده شوید و پشتکار داشته باشید ، قبل از اینکه به شغل مورد نظر خود برسید ، مسئله زمان است. در صورت تمایل ، رفتن به یک شرکت دیگر آسان خواهد بود.
در صورت عدم موفقیت در یکی از مشکلات – یا یافتن یکی از آنها ، 4 ، 5 یا 6 دور مشکل برای کمک به شما وجود دارد. مصاحبه کنندگان روان که قبلاً در مورد آنها صحبت کردم شما می توانید در یکی از دورها عملکرد کمتری داشته باشید و همچنان شغل خود را بدست آورید.

بازتاب خود یک معلم عالی است. بعد از هر مشکلی که حل می کنید و هر مصاحبه ای برای شرکت در آن ، از خود بپرسید:

  • چه چیزی خوب گذشت؟
  • کجا باید پیشرفت کنم؟

    این از موضوعات مرتبط با علوم کامپیوتر و زبان برنامه نویسی تا میزان ارتباط شما با مصاحبه کننده شما متفاوت است.

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

    مردم در نهایت این شرکت ها را ترک می کنند ، بعد از 1 ، 2 ، 3 یا 5 سال باشد. این بهشت ​​نیست ، فقط یک کار دیگر است ، اما این چیزی است که من نمی توانم به شما یاد بدهم. خودتان باید آن را ببینید.

    نحوه تمرین

    تنظیم مصاحبه را الگوبرداری کنید

    سعی کنید جلسات تمرینی خود را مشابه جلسه واقعی کنید مصاحبه تا حد امکان این شامل موارد زیر است:

    خودتان وقت بگذارید

    بسته به شرکت ، حدود یک ساعت وقت خواهید داشت تا مشکلی را حل کنید. به عنوان مثال ، در آمازون ، این ساعت شامل سوالات مربوط به اصل رهبری است که زمان س forال فنی را به حدود 40 تا 45 دقیقه کاهش می دهد.

    هنگامی که شروع به حل مشکل می کنید چالش ها ، خودتان را آموزش دهید تا خیلی سریعتر حرکت کند – 30 دقیقه برتر. به این ترتیب ، روز مصاحبه ، حتی اگر عصبی شوید ، واقعاً به خوبی آموزش خواهید دید. زمان در یک مصاحبه می گذرد. ​​

    بدون حواس پرتی

    تلفن خود را بی صدا کنید. بدون موسیقی بدون اینترنت. شما می خواهید جلسات تمرینی خود تا حد ممکن واقع بینانه باشند.

    اگر گیر افتادید ، به تلاش خود ادامه دهید. تسلیم نشو

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

    با صدای بلند فکر کنید

    مصاحبه کنندگان باید بدانند که به چه چیزی فکر می کنید. مهارت های حل مسئله شما در حال ارزیابی است ، اما مهارت های ارتباطی شما نیز مورد ارزیابی قرار می گیرند. بعلاوه ، مصاحبه کنندگان می توانند شما را به مسیر درست هدایت کنند و اگر دیدند که رویکرد شما به جایی نمی رسد ، در دقیقه شما صرفه جویی می کنند.

    اگر می توانید ، یک دوست پیدا کنید (عموم افراد هم کار می کنند) تمرین کنید و به یکدیگر بازخورد سازنده بدهید.

    جعبه ابزار خود را گسترش دهید

    هر چیز جدیدی را که نمی دانید بنویسید. کارکردهایی که تا به حال ندیده اید ، ترفندهای جالب ، مفاهیم جدید و غیره این لیست را مرتباً مرور کنید تا زمانی که آنها بخشی از زرادخانه شما شوند و وقتی خودتان مشکلات را حل می کنید به طور طبیعی به وجود می آیند.

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

    ساختار بردار < بردار < int >> dirs = {{ 1 ، 0 } ، { -1 ، 0 } ، { 0 ، 1 } ، { 0 ، -1 }} ؛
    برای ( ساختار خودکار & d: dirs) {{ ساختار nextRow = row + d [ 0 ساختار nextCol = col + d [ 1

    حتی اگر C ++ زبان اصلی شما نباشد ، فقط ایده را بفهمید و سعی کنید آن را به زبان مورد علاقه خود ترجمه کنید. اگر می خواهید از C ++ در مصاحبه های خود استفاده کنید ، مطمئن شوید که همه سطرهای آن کد کوتاه را می فهمید.

    < strong> ثبت اشتباهات رایجی که مرتکب می شوید

    این یکی از مواردی است که تفاوت زیادی در عملکرد من ایجاد کرده است. باید بدانید که معمولاً در کجا کم کاری می کنید تا بتوانید آن را برطرف کنید. این می تواند هر چیزی باشد: بزرگ (O) ، مشکلات برنامه نویسی پویا ، توابع بازگشتی ، مشکلات مربوط به درخت ، و غیره.

    این لیست را مرتباً مرور کنید. آنها را مرور کرده و تمرین کنید تا مطمئن شوید که آنها را در طول مصاحبه خود نساخته اید.

    تکرارها

    همانطور که می بینم ، دو مرحله در طول آماده سازی شما وجود دارد.

    مرحله اول. شما باید تمام مفاهیم نظری را درک کنید و بدانید:

    • چه زمانی ، چگونه و چرا آنها را اعمال کنید.
    • چه زمانی ، و چرا آنها را اعمال نکنید
    • نحوه اتصال آنها برای حل مسئله.

    مرحله دوم . شما باید بتوانید آنها را پیاده سازی کنید و ایده های خود را به کد تبدیل کنید. این همان چیزی است که برای آن پول می گیرید.

    مرحله اول

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

    • کدام الگوریتم و / یا ساختار داده برای این نوع مشکلات مناسب است؟
    • چرا؟
    • چرا این رویکرد دیگر بدتر یا غلط است؟
    • پیچیدگی زمانی و مکانی این رویکرد چقدر است؟
    • آیا می توانم زمان را برای مکان عوض کنم؟

    این مربوط به به خاطر سپردن راه حل ها نیست. تکرار می کنم. راه حل ها را حفظ نکنید . بی فایده و بدتر از اتلاف وقت است. اعتماد به آن خرید بلیط برای ارائه راه حل کامل برای مسئله اشتباه است. ایده در اینجا این است که یاد بگیرید همه ساختارهای داده و الگوریتم هایی را که مطالعه کرده اید به کار بگیرید. عملی کردن نظریه.

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

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

      در طول مصاحبه های خود ، اگر نمی توانید این مرحله را پشت سر بگذارید ، مهم نیست که چقدر در پایتون مهارت دارید. شما بیرون هستید.

      مرحله مرحله

      اکنون ، می توانید برای نوشتن کد مشکلاتی که قبلاً حل کرده اید تمرکز کنید. برخی از نکات:

      • از IDE خود استفاده نکنید . در طول مصاحبه ها ، آن را نخواهید داشت. این یک تخته سفید یا یک سند مشترک آنلاین خواهد بود. مطمئن شوید که قالب مصاحبه را می فهمید تا بتوانید تمرکز کنید
      • اگر می خواهید روی تخته سفید کد بنویسید ، توصیه می کنم با نزدیک شدن به مصاحبه برخی از مشکلات را در کاغذ برطرف کنید. نوشتن روی تخته سفید با تایپ کردن روی صفحه کلید متفاوت است . این مهارتی است که می خواهید آن را تمرین کنید.
      • اگر مشکلی خیلی سخت است ، آن را برای بعد ذخیره کنید. روی پیشرفت متمرکز شوید . این حرکت مثبت ایجاد خواهد کرد که به شما کمک می کند بعداً مشکلات سختتری را برطرف کنید.
      • شما نمی توانید 5 دقیقه وقت صرف کنید و یک حلقه مکث بنویسید. شما باید از فرم کدگذاری خوبی برخوردار باشید . در زبان برنامه نویسی مورد نظر خود بسیار راحت باشید (معمولاً می توانید آن را انتخاب کنید). هرچه زبان و مهارت شما بهتر باشد ، زمان بیشتری در طول مصاحبه برای تمرکز بر روی مسئله واقعی که برای حل آن نیاز دارید و انتقال افکار خود به مصاحبه کننده خواهید داشت.
        < / ul>

        دانش فنی

        آنچه باید بدانید

        < p class = "paragraf"> مباحث اصلی را که باید با آنها آشنا باشید را بر می شمارم. اگر هدف شما شرکتهای FAANG باشد باید آنها را سرد بدانید.

        ساختار داده ها >

        از نظر تئوری و نحوه استفاده از آنها در کد

        • آرایه ها
        • رشته ها
        • لیست ها
        • پشته ها و صف ها
        • درختان (و امتحانات)
        • درختان جستجوی دودویی (متعادل)
        • جداول هش
        • مجموعه ها (مجموعه های جداگانه نیز اگر می توانید)
        • نمودارها

        الگوریتم ها

        • جستجوی دودویی
        • مرتب سازی
        • بازگشت
        • تقسیم و پیروزی
        • برنامه نویسی پویا
        • حریص
        • الگوریتم های فعال رشته ها

        در نمودارها (بسیار مهم)

        • DFS
        • BFS
        • حداقل پوشاندن درختان: Kruskal و Prim
        • کوتاهترین مسیر: Dijkstra و Floyd-Warshall

        برخی از ریاضیات گسسته نیز می توانند به شما کمک کنند.

        زبانهای برنامه نویسی

        من همیشه از C ++ استفاده می کردم ، اما موارد زیر برای مصاحبه ها نیز مناسب است:

        • پایتون
        • جاوا اسکریپت
        • جاوا

        از آنجا که بیشتر مصاحبه کنندگان آنها را می شناسند. بیشتر نامزدها تمایل دارند که به پایتون بروند. هرکدام را که انتخاب کردید ، مطمئن شوید که آن را به خوبی می دانید.

        منابع بیشتر

        دوره های MIT در الگوریتم ها

        این دوره مقدمه ای عالی برای بسیاری از مفاهیمی است که شما در یک مصاحبه به آن نیاز خواهید داشت.

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

        مقدمه ای بر الگوریتم ها

        نیازی نیست که کل کتاب را مرور کنید ، اما این یک مکمل خوب برای دوره قبلی است. این همه چیزهایی را که شما ممکن است نیاز داشته باشید – و موارد دیگر. روی موضوعاتی که قبلاً فهرست کرده ام تمرکز کنید. دانستن همه موارد دیگر خوب است اما احتمال بروز آن در مصاحبه بسیار ناچیز است.

        شکستن مصاحبه برنامه نویسی.

        من اینجا را شروع نکردم. بعد از اتمام کتاب بعدی ، من فقط مشکلات موجود در 2 بخش گذشته (متوسط ​​و سخت) را تکمیل کردم.

        < strong> عناصر مصاحبه برنامه نویسی

        این یک کتاب عالی است. من مدام قبل از هر مصاحبه به آن برمی گردم. س Theالات سخت است ، بنابراین شما بسیار خوب آماده خواهید شد. نسخه های C ++ ، Python و Java وجود دارد.

        برای مشکلات بیشتر ، من فقط از https://www.leetcode.com استفاده کردم. با مشکلات رایگان بیش از اندازه کافی خواهید داشت.

        خطاهایی که باید از آنها اجتناب کنید

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

        1. آماده نیست

        بله. مردم آماده نمی شوند. من در طول مصاحبه افراد زیادی را خالی دیده ام. من مجبور شدم مصاحبه ها را بعد از 20 دقیقه قطع کنم. این اتفاق بیش از آنچه فکر کنید می افتد.

        فقط به عنوان یک یادآوری ، شما باید در موارد زیر مهارت داشته باشید:

        • الگوریتم ها < li> ساختارهای داده
        • زبان (های) مورد نظر شما
        • مبانی CS

        من قبلا منابع را برای الگوریتم ها ، ساختار داده ها و زبان های برنامه نویسی (از طریق حل مشکلات ، روش یادگیری بهتر از خواندن یا تماشای آموزش). شما باید بتوانید ارزیابی کنید که چه حوزه هایی از علوم رایانه را باید مسواک بزنید.

        2. عدم برقراری ارتباط با آنچه فکر می کنید

        ما مصاحبه کنندگان نمی توانیم ذهن شما را بخوانیم. اطمینان حاصل کنید که با صدای بلند فکر می کنید. ما می توانیم شما را در مسیر درست هم بزنیم قبل از اینکه وقت زیادی را روی یک روش اشتباه تلف کنید. ما مهارت های حل مسئله شما را ارزیابی می کنیم ، اما برای این کار باید بدانیم که به چه فکر می کنید. زندگی مصاحبه گر خود را آسان کنید و شانس بیشتری برای دستیابی به آن شغل خواهید داشت.

        3. س askingالهای روشن نکردن

        عمداً س questionsالات مبهم خواهند بود. اطمینان حاصل کنید که تمام فرضیات خود را قبل از شروع حل مشکل بیان کنید. به عنوان مثال:

        • آیا ورودی مرتب شده است؟
        • آیا عناصر تکراری وجود دارد؟
        • اگر راه حلی وجود ندارد ، چه چیزی را باید برگردانم؟
        • آیا لازم است ورودی های نامعتبر را بررسی کنم؟
        • انتظار چند کاربر را داریم؟
        • معاملات: سرعت فضا را بیشتر کنید؟

          4. حل مسئله اشتباه

          قبل از شروع ، همه نیازها را جمع آوری کنید. یک تغییر کوچک می تواند مسئله را کاملاً متفاوت کند. با استفاده از کلمات خود مسئله را تکرار کنید ، کمی وقت بگذارید تا به راه حل بیندیشید و مطمئن شوید که مسئله را درست حل کرده اید.

          5. اتلاف وقت

          اگر API را به خاطر نمی آورید ، فقط بگویید: “بیایید فرض کنیم عملکرد اینگونه است” و ادامه دهید. شما می توانید عملکرد مورد نیاز خود را فرض کنید و سپس به آن برگردید و آن را با جزئیات یادداشت کنید. راه حل “ناقص” از هیچ چیز بهتر است.

          6. کد شما را آزمایش نمی

          این یک پرچم قرمز بزرگ است ، بنابراین مطمئن شوید که در اینجا شکست نخورید. چند مورد آزمایشی ارائه دهید (نیازی به نوشتن کد واقعی نیست):

          • “راه مبارک”
          • موارد لبه
          • خالی / null input
          • عناصر تکرار شده

          7. اشکال زدایی نیست

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

          8 . تحلیل زمان و مکان ضعیف

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

          9. در حال جستجو برای راه حل بهینه

          ابتدا با راه حل brute force بیایید. مهم نیست که چقدر آهسته یا واضح به نظر برسد. داشتن آن از قبل یک نکته مثبت است. در این مرحله نیازی به نوشتن کد ندارید ، اما راه حل خود را با جزئیات توضیح دهید. اگر نمی توانید روش بهینه تری برای حل مسئله پیدا کنید ، می توانید کد نویسی این راه حل را شروع کنید.

          از آنجا ، سعی کنید گلوگاه ها را پیدا کنید و به یک راه حل کارآمد برسید (معمولاً با استفاده از یک ساختار داده متفاوت یا پس از مرتب سازی ورودی). بهتر است که در پایان مصاحبه چیزی نداشته باشید زیرا سعی کردید راه حل O (1) را پیدا کنید.

          < قوی> 10 تسلط کافی به زبان انتخابی خود ندارید

          معمولاً می توانید زبان برنامه نویسی مورد نظر خود را برای مصاحبه انتخاب کنید. اگر می گویید می توانید در پایتون ، جاوا اسکریپت یا جاوا کد بزنید ، مطمئن شوید که برای نوشتن حلقه for به 3 دقیقه زمان نیاز ندارید (من این را بارها دیده ام). پایان جهان نیست اگر جزئیات API یا نقطه ویرگول را فراموش کنید.

          11. موارد لبه

          آزمایش موارد لبه را فراموش نکنید. لازم به تاکید بیشتر نیست – بیشترازاین سفارش نمی کنم. اکثر مشکلاتی که به شما ارائه می شود مبهم و دارای موارد لبه ای است فقط برای دیدن اینکه آیا هنگام مواجه شدن با یک مشکل جدید به آنها فکر می کنید.

          12 کد کم کیفیت

          کد تمیز بنویسید. نه فقط برای مصاحبه ها. نامگذاری خوب ، عملکردهای کوتاه که یک کار را انجام می دهند ، و غیره “کد کامل” توسط استیو مک کانل را بخوانید. این باعث افزایش کیفیت کد شما می شود.

          13. اشتباهات “هک کردن”

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

          14. پرش مستقیم به کد

          مستقیماً نروید و به نوشتن کد بپردازید.

        • مشکل را “با دست” حل کنید < / li>
        • راه حل خود را توضیح دهید
        • آن را تجزیه و تحلیل کنید (در Big O)
        • تنگناها را پیدا کنید و سعی کنید به دنبال کارآمدتر باشید

          بعد از همه اینها ، می توانید کدگذاری را شروع کنید.

          15. عدم مدیریت کافی فضا

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

          16 درخواست بازخورد در پایان

          در پایان مصاحبه درخواست بازخورد نکنید. مصاحبه کنندگان نمی توانند به شما بازخورد بدهند (معمولاً سیاست های شرکت برای جلوگیری از این امر وجود دارد) و این تأثیر بسیار بدی ایجاد می کند: عدم امنیت و عدم توانایی در ارزیابی عملکرد شما.

          مثال ها

          سعی کنید مشکلات زیر را خودتان حل کنید. در اینجا ، من یک راه حل کامل نخواهم نوشت اما روند فکر خود را به شما نشان خواهم داد. با کمی تمرین ، تبدیل ایده های شما به کد نسبتاً آسان خواهد بود.

          مثال 1

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

          این یک مسئله بسیار آسان است ، اما برای تمرکز روی فرآیند کافی است. مواردی که به ذهن خطور می کند:

          ورودی آرایه ای از اعداد صحیح است

          • آیا مرتب شده است؟
          • اگر حاوی عناصر مکرر باشد چه می کنید؟
          • اگر حاوی عناصر منفی باشد چه می کنید؟
          • اگر همه عناصر منفی / مثبت باشند چطور؟
          • اگر آرایه خالی باشد چه؟
          • اندازه آن چقدر است؟

          شاخص های بازگشت

          • اگر راه حلی وجود نداشته باشد چه؟
          • اگر چندین راه حل وجود داشته باشد چه می کنید؟

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

            در مورد خروجی ، شما باید روشن کنید که اگر هیچ راه حلی وجود نداشته باشد و بیش از یک مورد وجود داشته باشد ، چه اتفاقی می افتد.

            رویکردهای مختلفی برای این مسئله وجود دارد ، با پیچیدگی های زمانی متفاوت. اگر گیر کردید ، سعی کنید الگوریتم ها و ساختارهای داده را از نظر ذهنی بررسی کنید و ببینید آیا آنها می توانند به شما کمک کنند.

            معمولاً مرتب سازی و جداول هش می تواند بسیاری از مشکلات را ساده کند. این یکی از آنهاست.

            می توانید راه حل را در اینجا پیدا کنید.

            مثال 2

            با توجه به یک نقشه شبکه 2d از ‘ 1 (زمین) و ‘0 (آب) ، تعداد جزایر را بشمارید. یک جزیره توسط آب احاطه شده و با اتصال زمینهای مجاور به صورت افقی یا عمودی تشکیل می شود. ممکن است فرض کنید هر چهار لبه شبکه همه با آب احاطه شده باشد.

            افکار:

            تعداد جزایر را بشمارید. من به پیشخوان (واضح)

            نقشه شبکه 2d نیاز دارم:

            • آیا می توانم این را به عنوان نمودار مدلسازی کنم؟ من می دانم که BFS و DFS
            • جزایر به صورت افقی (همان ردیف) یا عمودی (همان ستون) متصل هستند ، نه به صورت مورب
            • من فقط یک بار می توانم از یک جزیره بازدید کنم ، بنابراین به مکانیزمی برای از شمارش دو جزیره یکسان پرهیز کنید. به عنوان مثال ، “1 ها” را به “0 ها” تغییر دهید (چه در ماتریسی که دریافت می کنیم و چه در کپی ای که ایجاد می کنیم اگر نتوانیم ورودی را تغییر دهیم) یا یک مجموعه هش که در آن یک جفت شاخص برای ذخیره سلول های بازدید شده ذخیره می کنید. من به سراغ گزینه اول می روم ، اما گزینه دوم خوب است بدانید زیرا می تواند در سایر مشکلات نیز مورد استفاده قرار گیرد.

            بعد از داشتن این دو اطلاعات ، فقط تبدیل آن به کد است. انتخاب بین DFS یا BFS بسته به محدودیت های مسئله ، موضوعی است که می خواهید با مصاحبه کننده خود در میان بگذارید. اگر می توانید انتخاب کنید ، DFS کوتاهتر است.

            مطمئن شوید که مورد یک ماتریس خالی را در نظر بگیرید ، یک ماتریس پر از “0” – جزایر صفر – پر از “1” – فقط 1 مورد جزیره و سایر موارد آزمایشی. اگر هنگام اسکن ماتریس “2” ببینید ، چه اتفاقی می افتد؟ این نیز موضوعی است که می توانید با مصاحبه کننده خود بحث کنید ، مانند هر فرض دیگر. در صورت شک ، بهتر است افکار خود را بیش از حد ارتباط برقرار کنید.

            می توانید راه حل را در اینجا پیدا کنید.

            نتیجه گیری

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

            آماده ، منظم و صبور باشید. آماده شدن برای این مصاحبه ها کار زیادی است ، اما در زندگی هر چیزی که ارزش آن را داشته باشد نیاز به تلاش دارد.

            PS: امیدوارم این مطلب برای شما مفید باشد. اگر چنین است ، این مقاله را پسندیده و به اشتراک بگذارید ، به وبلاگ من www.yourdevopsguy.com مراجعه کنید ، و اجازه دهید در توییتر متصل شویم. -to-ace-coding-مصاحبه ها-the-ultimate-راهنمای /