تسلط بر مصاحبه طراحی سطح پایین (LLD) با حل مسائل طراحی سیستم
آمادگی برای مصاحبههای طراحی سیستم (طراحی سطح پایین - LLD)
یادگیری رویکردهای مختلف حل مسئله و نکات کلیدی
با مصاحبهکننده درباره موازنه (trade-offs) بحث کنید و نقاط قوت خود را به نمایش بگذارید.
بهینهسازی کد با استفاده از ساختارهای داده بهتر، متناسب با سناریو.
درک عمیق از قابلیت توسعهپذیری مسئله و شروع کدنویسی با این هدف.
مهارتهای کلیدی برای موفقیت در LLD
یادگیری حذف اطلاعات غیرضروری از تعریف مسئله، شناسایی نقاط کلیدی و ایجاد نمودار کلاس.
آموزش نوشتن موارد تست (test cases) برای مسئله در صورت نیاز.
آشنایی با تغییرات و اصلاحات لازم در API برای پایداری کد.
استفاده از کپسولهسازی (encapsulation) در صورت نیاز و تولید accessor و mutatorهای دلخواه.
کدنویسی کامل در زمان مصاحبه. کسب بینش در مورد برنامههای پشتیبان (fallback plans) در موارد اضطراری.
پیشنیازها
- آشنایی کامل با یک زبان برنامهنویسی.
- دانستن مبانی برنامهنویسی شیءگرا (Object Oriented Programming).
اهمیت طراحی سطح پایین (LLD) در مصاحبههای مهندسی نرمافزار
مصاحبههای مهندسی نرمافزار بر مهارتهای کدنویسی و طراحی نرمافزار تمرکز دارند. این بخشها که به طور خلاصه به عنوان بخشهای الگوریتم و طراحی شناخته میشوند، مهارتهای کدنویسی خام کاندیدا را با استفاده از ساختارهای داده و الگوریتمها میسنجند، در حالی که بخش طراحی، مهارتهای طراحی سیستم را که میتواند شامل طراحی سطح بالا (HLD) یا طراحی سطح پایین (LLD) باشد، آزمایش میکند.
طراحی سطح پایین که با نام طراحی شیءگرا (OOD) یا تحلیل و طراحی شیءگرا (OOAD) نیز شناخته میشود، نقش حیاتی در فرآیند مصاحبه شرکتهای برتر دارد. برای کاندیداهای با کمتر از 3 سال سابقه کار، LLD از اهمیت ویژهای برخوردار است، زیرا انتظار نمیرود تجربه زیادی در HLD داشته باشند. کاندیداهای با سابقه بیش از 3 سال، معمولاً با ترکیبی از HLD و LLD در مصاحبههای طراحی سیستم مواجه میشوند.
چرا این دوره طراحی سطح پایین (LLD)؟
این دوره بر جنبههای سطح پایین طراحی تمرکز دارد. بهترین راه برای بهبود در مصاحبهها، تمرین فراوان با مسائل مشابه است. در این دوره، بر اساس تحقیقات، لیستی از پرتکرارترین سوالات مصاحبه گردآوری شده است. این مطالب نه تنها برای مصاحبهها، بلکه برای حل مسائل عمومی و طراحی اپلیکیشن نیز مفید است.
هر مسئله به طور جامع تجزیه و تحلیل و مورد بحث قرار میگیرد:
- روشنسازی ابهامات در صورت مسئله. توضیح اصطلاحات مرتبط با مسئله و تعیین انتظارات.
- ایجاد نمودار کلاس به عنوان نقشه راه برای کدنویسی مسئله.
- کدنویسی به زیباترین شکل ممکن، به طوری که فراگیران رویکرد بال به پایین (top-down) به مسئله را بیاموزند. این امر مهم است زیرا حتی با وجود نمودار کلاس، دانستن توالی ساخت کلاسها در برنامه برای تجربه روان ضروری است.
- در صورت لزوم، کد بیشتر بهینهسازی میشود. موازنه (Trade-offs) مربوط به بهینهسازی نیز مورد بحث قرار میگیرد.
- در نهایت، ساخت موارد تست نشان داده میشود تا فراگیران با نوشتن موارد تست خوب و تأثیر آنها بر برنامه آشنا شوند.
تمام این مراحل با رعایت بهترین شیوههای صنعتی انجام میشود. همچنین به مدیریت زمان در مصاحبه و راههای مقابله با شرایطی که فراگیر در حل مسئلهای دچار مشکل میشود، پرداخته میشود. کدنویسی به زبان C++ انجام میشود، اما کد تا حد زیادی مستقل از زبان (language agnostic) است.
این دوره همچنین دارای زیرنویس بسته (English Subtitles) برای تمامی ویدئوها است. این زیرنویسها به صورت دستی تهیه شدهاند و نه به صورت خودکار. این ویژگی زمانی مفید است که دانشجو با لهجه مشکل دارد، نویز پسزمینه زیاد است، یا زمانی که میخواهید یادداشتهای دقیقی از توضیحات بردارید.
آنچه پس از گذراندن این دوره خواهید آموخت
- آمادگی بهتر برای مواجهه با مصاحبههای LLD.
- توانایی شرکت در بحثهای طراحی مربوط به این مسائل.
- نوشتن کدی بهتر از قبل.
- داشتن رویکردی مناسب برای تجزیه مسئله به بخشهای کوچکتر و پرداختن به آنها به صورت مستقل.
دستاوردهای تضمین شده
اگر تمام مسائل ارائه شده در این دوره را درک کنید، ترسی از حل سوالات LLD نخواهید داشت. شما سوالات درستی درباره مسئله خواهید پرسید و برای هر طراحی، اطمینان خاطر لازم را خواهید داشت.
Abhishek Ghosh
نمایش نظرات