سلام دوست عزیز😃👋

به مسابقه «مسابقه کشتی‌بان جاوا» خوش آمدی!

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

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

سوالات و مشکلات خودتان را می‌توانید از طریق قسمت «سوال بپرسید» با ما در میان بگذارید.

موفق باشید و بهتون خوش بگذره 😉✌

پردازنده


برای این سوال، نسخه‌ی جاوای شما باید ۱۷ باشد.


پردازنده

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

جزئیات پروژه🔗

پروژه‌ی اولیه را از این لینک دانلود کنید. ساختار فایل‌های پروژه به‌صورت زیر است:

index
├── Core.java
├── Processor.java
├── SelectStrategy.java
├── Task.java
└── Type.java
Java

همان‌طور که در ساختار فایل‌های اولیه مشاهده می‌کنید، شما با چندین کلاس مرتبط با پردازنده سر و کار دارید. کلاس Task دقیقا تسک‌هایی است که به پردازنده شما وارد می‌شود و شما باید آن‌ها را مدیریت کنید. هر تسک نوعی دارد که توسط enum با نام Type مشخص می‌شود. از سوی دیگر، کلاس Core، هر هسته از پردازنده شما را مشخص می‌کند که می‌تواند فقط انواع خاصی از تسک‌ها را هندل کند که با ویژگی(property) types مشخص می‌شود. مقدار لود یا همان تعداد تسکی که هر هسته در حال پردازش دارد نیز با currentLoad مشخص می‌شود.

در این ساختار، رابط (Interface) SelectStrategy نیز به چشم می‌خورد که استراتژی‌های مختلف انتخاب هسته پردازنده برای انجام تسک را مشخص می‌کند.

شما باید کلاس Processor را به همراه سه کلاس دیگر، مطابق با جزئیاتی که در ادامه ذکر می‌شود، کامل و ارسال کنید.

کلاس Processor🔗

اولین کلاسی که باید تکمیل کنید کلاس Processor است. این کلاس اطلاعات هسته‌ها را نگه می‌دارد و وظیفه مدیریت تسک‌ها را برعهده دارد. در اولین گام شما باید سه ویژگی زیر را ایجاد کنید:

نام نوع
cores List<Core>
tasks Queue<Task>
selectStrategy SelectStrategy

همه ویژگی‌های این کلاس باید دارای متد‌های getter و setter با نام پیش‌فرض در جاوا باشد. علاوه بر این متد‌ها، شما باید متد‌های زیر را نیز در این کلاس ایجاد کنید:

متد addCore: این متد، هسته ورودی را به لیست هسته‌های این پردازنده اضافه می‌کند.

متد addTask: این متد، تسک ورودی را به صف تسک‌ها اضافه می‌کند.

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

فرایند انتخاب یک هسته از پردازنده🔗

همان‌طور که گفته شد، کلاس Processor دارای ویژگی با نام selectStrategy است که نگهدارنده استراتژی انتخاب یک هسته است. شما باید سه استراتژی را که در ادامه ذکر می‌شود را پیاده‌سازی کنید:

استراتژی RandomStrategy: این استراتژی، یک هسته را به صورت رندوم انتخاب و برمی‌گرداند.

استراتژی LeastLoadStrategy: در این استراتژی، هسته‌ای که کمترین لود را دارد انتخاب و برگردانده می‌شود.

استراتژی RoundRobinStrategy: این استراتژی، با استفاده از الگوریتم روند رابین (Round Robin) یک هسته را انتخاب و برمی‌گرداند. در این استراتژی تسک‌ها برای اجرا، به صورت چرخشی به هسته‌های پردازنده داده می‌شود.

دقت کنید که هر هسته فقط می‌تواند انواع خاصی از تسک‌ها را پردازش کند.

مثال🔗

مثال‌هایی به صورت تست نمونه در اختیار شما قرار داده شده است که می‌توانید از آن‌ها کمک بگیرید. به عنوان مثال به مورد زیر دقت کنید:

Processor processor = new Processor();
processor.addCore(new Core(1, List.of(Type.IO, Type.NETWORK)));
processor.addCore(new Core(2, List.of(Type.IO)));
processor.addCore(new Core(3, List.of(Type.STORAGE)));
processor.setSelectStrategy(new LeastLoadStrategy());
processor.addTask(new Task(1, Type.IO));
Java

در این نمونه تسک با آی‌دی 1 به اولین هسته یعنی هسته با آی‌دی 1داده می‌شود.

نکات🔗

  • شما فقط مجاز به اعمال تغییرات در کلاس‌های Core و Processor به همراه سه کلاسی که باید ایجاد کنید، هستید.
  • حتما باید برای پیاده‌سازی استراتژی‌های انتخاب از اینترفیس SelectStrategy استفاده کنید.
  • دقت کنید که ساختار ابتدایی کلاس‌ها را تغییر ندهید.

آن‌چه باید آپلود کنید🔗

پس از پیاده‌سازی موارد خواسته‌شده، فقط فایل همه این کلاس‌ها را زیپ کرده و آپلود کنید.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.