آموزش طراحی سطح پایین سیستم [از منظر مصاحبه] - آخرین آپدیت

دانلود Low Level System Design [An interview perspective]

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

تسلط بر مصاحبه طراحی سطح پایین (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)؟

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

هر مسئله به طور جامع تجزیه و تحلیل و مورد بحث قرار می‌گیرد:

  1. روشن‌سازی ابهامات در صورت مسئله. توضیح اصطلاحات مرتبط با مسئله و تعیین انتظارات.
  2. ایجاد نمودار کلاس به عنوان نقشه راه برای کدنویسی مسئله.
  3. کدنویسی به زیباترین شکل ممکن، به طوری که فراگیران رویکرد بال به پایین (top-down) به مسئله را بیاموزند. این امر مهم است زیرا حتی با وجود نمودار کلاس، دانستن توالی ساخت کلاس‌ها در برنامه برای تجربه روان ضروری است.
  4. در صورت لزوم، کد بیشتر بهینه‌سازی می‌شود. موازنه (Trade-offs) مربوط به بهینه‌سازی نیز مورد بحث قرار می‌گیرد.
  5. در نهایت، ساخت موارد تست نشان داده می‌شود تا فراگیران با نوشتن موارد تست خوب و تأثیر آن‌ها بر برنامه آشنا شوند.

تمام این مراحل با رعایت بهترین شیوه‌های صنعتی انجام می‌شود. همچنین به مدیریت زمان در مصاحبه و راه‌های مقابله با شرایطی که فراگیر در حل مسئله‌ای دچار مشکل می‌شود، پرداخته می‌شود. کدنویسی به زبان C++ انجام می‌شود، اما کد تا حد زیادی مستقل از زبان (language agnostic) است.

این دوره همچنین دارای زیرنویس بسته (English Subtitles) برای تمامی ویدئوها است. این زیرنویس‌ها به صورت دستی تهیه شده‌اند و نه به صورت خودکار. این ویژگی زمانی مفید است که دانشجو با لهجه مشکل دارد، نویز پس‌زمینه زیاد است، یا زمانی که می‌خواهید یادداشت‌های دقیقی از توضیحات بردارید.

آنچه پس از گذراندن این دوره خواهید آموخت

  1. آمادگی بهتر برای مواجهه با مصاحبه‌های LLD.
  2. توانایی شرکت در بحث‌های طراحی مربوط به این مسائل.
  3. نوشتن کدی بهتر از قبل.
  4. داشتن رویکردی مناسب برای تجزیه مسئله به بخش‌های کوچک‌تر و پرداختن به آن‌ها به صورت مستقل.

دستاوردهای تضمین شده

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


سرفصل ها و درس ها

مقدمه Introduction

  • معرفی Introduction

معرفی Introduction

  • مقدمه Introduction

اپلیکیشن اشتراک‌گذاری سواری پایه Basic ride sharing application

  • تعریف مشکل Problem Definition

  • کلاس را برای رزرو سواری طراحی کنید Design the class for booking a ride

  • کلاس Rider را که کاربر را به تصویر می کشد طراحی کنید Design the Rider class depicting the user

  • تست کد برای برآوردن الزامات Testing the code for meeting requirements

  • #فرض 1: کاربر تکی که چندین سفر را در یک زمان رزرو می کند #Assumption 1: Single user booking multiple rides at a time

  • راه حل: یک رابط برای تعامل با کاربر طراحی کنید Solution: Design an interface for user interaction

برنامه اشتراک گذاری سواری اولیه Basic ride sharing application

  • تعریف مسئله Problem Definition

  • بهترین الگوی برنامه نویسی Best Programming Paradigm

  • بهترین پارادایم برنامه‌نویسی Best Programming Paradigm

  • طراحی کلاس برای رزرو سواری Design the class for booking a ride

  • طراحی کلاس Rider برای نمایش کاربر Design the Rider class depicting the user

  • تست کد برای برآورده کردن نیازمندی‌ها Testing the code for meeting requirements

  • #فرض ۱: رزرو چندین سواری توسط یک کاربر به طور همزمان #Assumption 1: Single user booking multiple rides at a time

  • تمرین: یک رابط برای تعامل با کاربر طراحی کنید Exercise: Design an interface for user interaction

  • تمرین: طراحی یک رابط کاربری برای تعامل با کاربر Exercise: Design an interface for user interaction

  • راه حل: طراحی یک رابط کاربری برای تعامل با کاربر Solution: Design an interface for user interaction

برنامه‌ریز جلسه Meeting Scheduler

  • تعریف مشکل Problem Definition

  • برنامه زمانبندی کلاس را طراحی کنید Design the class Scheduler

  • منطق اصلی برای برنامه ریزی یک جلسه Core logic for scheduling a meeting

  • تست کد برای الزامات داده شده Testing the code for the given requirements

  • تمرین: برنامه را برای رزرو جلسات در طول روز گسترش دهید Exercise: Extend the application to book meetings across days

  • راه حل: برنامه را برای رزرو جلسات در طول روز گسترش دهید Solution: Extend the application to book meetings across days

برنامه‌ریز جلسه Meeting Scheduler

  • تعریف مسئله Problem Definition

  • طراحی کلاس Room، که میزبان جلسه است Design the Room class, which hosts a meeting

  • کلاس اتاق را طراحی کنید که میزبان یک جلسه است Design the Room class, which hosts a meeting

  • طراحی کلاس Meeting، که حاوی جزئیات جلسه است Design the class Meeting, which contains meeting details

  • جلسه کلاس را طراحی کنید که حاوی جزئیات جلسه است Design the class Meeting, which contains meeting details

  • طراحی کلاس Scheduler Design the class Scheduler

  • منطق اصلی برای زمان‌بندی جلسه Core logic for scheduling a meeting

  • تست کد برای نیازمندی‌های داده شده Testing the code for the given requirements

  • تمرین: گسترش اپلیکیشن برای رزرو جلسات در روزهای مختلف Exercise: Extend the application to book meetings across days

  • راه حل: گسترش اپلیکیشن برای رزرو جلسات در روزهای مختلف Solution: Extend the application to book meetings across days

برنامه‌ریز وظایف Task Planner

  • تعریف مشکل Problem Definition

  • کلاس طراحی اسپرینت Design Sprint class

  • تست کد برای الزامات داده شده Testing the code for the given requirements

Task Planner Task Planner

  • تعریف مسئله Problem Definition

  • طراحی کلاس Sprint Design Sprint class

  • کلاس وظایف طراحی Design Task class

  • طراحی کلاس Task Design Task class

  • طراحی کلاس کاربر [1/3] Design the User class [1/3]

  • طراحی کلاس User [۱/۳] Design the User class [1/3]

  • طراحی کلاس User [۲/۳] Design the User class [2/3]

  • طراحی کلاس کاربر [2/3] Design the User class [2/3]

  • طراحی کلاس کاربر [3/3] Design the User class [3/3]

  • طراحی کلاس User [۳/۳] Design the User class [3/3]

  • تست کد برای نیازمندی‌های داده شده Testing the code for the given requirements

سیستم بازی بولینگ Bowling Game System

  • تعریف مشکل Problem Definition

  • کلاس Player را طراحی کنید [2/2] Design the Player class [2/2]

  • تست کد برای الزامات داده شده Testing the code for the given requirements

سیستم بازی بولینگ Bowling Game System

  • تعریف مسئله Problem Definition

  • یک جلسه بازی برای نمایش طراحی کنید Design a game session for the play

  • طراحی جلسه بازی برای اجرا Design a game session for the play

  • کلاس Game را طراحی کنید Design the Game class

  • طراحی کلاس Game Design the Game class

  • طراحی کلاس Player [۱/۲] Design the Player class [1/2]

  • کلاس Player را طراحی کنید [1/2] Design the Player class [1/2]

  • طراحی کلاس Player [۲/۲] Design the Player class [2/2]

  • تست کد برای نیازمندی‌های داده شده Testing the code for the given requirements

مار و پله Snakes And Ladders

  • تعریف مشکل Problem Definition

  • کلاس های پایه بازی را طراحی کنید Design the base classes for the game

  • کلاس Game مسئله را طراحی کنید Design the Game class of the problem

  • تست کد برای الزامات داده شده Testing the code for the given requirements

مار و پله Snakes And Ladders

  • تعریف مسئله Problem Definition

  • طراحی کلاس‌های پایه برای بازی Design the base classes for the game

  • طراحی کلاس Game مسئله Design the Game class of the problem

  • تست کد برای نیازمندی‌های داده شده Testing the code for the given requirements

اپلیکیشن اشتراک‌گذاری/ انتقال پول شبیه Splitwise Money share/transfer application like Splitwise

  • کلاس User را طراحی کنید Design the User class

  • کلاس Expense را طراحی کنید Design the Expense class

  • طراحی کلاس Splitwise [1/3] Designing the class Splitwise [1/3]

  • طراحی کلاس Splitwise [2/3] Designing the class Splitwise [2/3]

  • تست کد برای الزامات داده شده Testing the code for the given requirements

  • پیچیدگی زمانی unordered_map در C++ Time Complexity of unordered_map in C++

  • تمرین: هزینه ها را ساده کنید Exercise: Simplify Expenses

برنامه اشتراک پول/انتقال پول مانند Splitwise Money share/transfer application like Splitwise

  • تعریف مسئله Problem Definition

  • طراحی کلاس User Design the User class

  • طراحی کلاس Expense Design the Expense class

  • طراحی کلاس Splitwise [۱/۳] Designing the class Splitwise [1/3]

  • طراحی کلاس Splitwise [۲/۳] Designing the class Splitwise [2/3]

  • طراحی کلاس Splitwise [3/3] Designing the class Splitwise [3/3]

  • طراحی کلاس Splitwise [۳/۳] Designing the class Splitwise [3/3]

  • تست کد برای نیازمندی‌های داده شده Testing the code for the given requirements

  • بهینه سازی کد Optimizing the code

  • بهینه‌سازی کد Optimizing the code

  • پیچیدگی زمانی unordered_map در C++ Time Complexity of unordered_map in C++

  • تمرین: ساده‌سازی هزینه‌ها Exercise: Simplify Expenses

  • راه حل: هزینه ها را ساده کنید Solution: Simplify Expenses

  • راه حل: ساده‌سازی هزینه‌ها Solution: Simplify Expenses

سیستم کامنت فیسبوک Facebook Comment System

  • تعریف مشکل Problem Definition

  • تست کد برای الزامات داده شده Testing the code for the given requirements

سیستم نظرات فیس بوک Facebook Comment System

  • تعریف مسئله Problem Definition

  • کلاس Comment را طراحی کنید Design the Comment class

  • طراحی کلاس Comment Design the Comment class

  • طراحی کلاس Post Design the Post class

  • کلاس Post را طراحی کنید Design the Post class

  • کلاس User را طراحی کنید Design the User class

  • طراحی کلاس User Design the User class

  • تست کد برای نیازمندی‌های داده شده Testing the code for the given requirements

سیستم مدیریت فروش Sales Management System

  • تعریف مشکل Problem Definition

  • کلاس State را طراحی کنید Design the State class

  • تست کد برای الزامات داده شده Testing the code for the given requirements

سیستم مدیریت فروش Sales Management System

  • تعریف مسئله Problem Definition

  • طراحی کلاس Store Design the Store class

  • کلاس فروشگاه را طراحی کنید Design the Store class

  • طراحی کلاس City Design the City class

  • کلاس شهر را طراحی کنید Design the City class

  • طراحی کلاس State Design the State class

  • طراحی کلاس System Design the System class

  • تست کد برای نیازمندی‌های داده شده Testing the code for the given requirements

اپلیکیشن ویرایشگر متن Text Editor application

  • تعریف مشکل Problem Definition

  • طراحی کلاس Notepad [2/2] Designing the Notepad class [2/2]

  • تست کد برای الزامات داده شده Testing the code for the given requirements

برنامه ویرایشگر متن Text Editor application

  • تعریف مسئله Problem Definition

  • طراحی کلاس Notepad [1/2] Designing the Notepad class [1/2]

  • طراحی کلاس Notepad [۱/۲] Designing the Notepad class [1/2]

  • طراحی کلاس Notepad [۲/۲] Designing the Notepad class [2/2]

  • تست کد برای نیازمندی‌های داده شده Testing the code for the given requirements

سیستم مدیریت کارکنان Employee Management System

  • تعریف مشکل Problem Definition

  • کلاس Employee را طراحی کنید Design the Employee class

  • کلاس System را طراحی کنید Design the System class

  • تست کد برای الزامات داده شده Testing the code for the given requirements

سیستم مدیریت کارکنان Employee Management System

  • تعریف مسئله Problem Definition

  • طراحی کلاس Employee Design the Employee class

  • کلاس System را طراحی کنید Design the System class

  • طراحی کلاس System Design the System class

  • تست کد برای نیازمندی‌های داده شده Testing the code for the given requirements

سیستم کاتالوگ کتاب Book Catalog System

  • تعریف مشکل Problem Definition

  • کلاس کاتالوگ را طراحی کنید Design the Catalog class

  • تست کد برای الزامات داده شده Testing the code for the given requirements

سیستم فهرست کتاب Book Catalog System

  • تعریف مسئله Problem Definition

  • طراحی کلاس Book Design the Book class

  • کلاس کتاب را طراحی کنید Design the Book class

  • طراحی کلاس Catalog Design the Catalog class

  • تست کد برای نیازمندی‌های داده شده Testing the code for the given requirements

زمان‌بند کار Job Scheduler

  • تعریف مشکل Problem Definition

  • کلاس Job را طراحی کنید Design the Job class

  • طراحی کلاس Scheduler [1/2] Design the Scheduler class [1/2]

  • طراحی کلاس Scheduler [2/2] Design the Scheduler class [2/2]

  • تست کد برای الزامات داده شده Testing the code for the given requirements

زمانبندی کار Job Scheduler

  • تعریف مسئله Problem Definition

  • تعریف مشکل Problem Definition

  • طراحی کلاس Job Design the Job class

  • طراحی کلاس Scheduler [۱/۲] Design the Scheduler class [1/2]

  • طراحی کلاس Scheduler [۲/۲] Design the Scheduler class [2/2]

  • موارد تست را درک کنید Understand the Test Cases

  • درک موارد آزمایشی Understand the Test Cases

  • تست کد برای الزامات داده شده Testing the code for the given requirements

  • تست کد برای نیازمندی‌های داده شده Testing the code for the given requirements

ضمیمه Addendum

الحاقیه Addendum

  • نکات اضافی برای مبتدیان Extra tips for beginners

  • نکات اضافی برای مبتدیان Extra tips for beginners

نمایش نظرات

آموزش طراحی سطح پایین سیستم [از منظر مصاحبه]
جزییات دوره
6.5 hours
73
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
5,205
4 از 5
دارد
دارد
دارد
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Abhishek Ghosh Abhishek Ghosh

مهندس نرم افزار، برنامه نویس و علاقمند به طراحی

Abhishek Ghosh Abhishek Ghosh

مهندس نرم افزار، برنامه نویس و علاقمند به طراحی