برای این سوال، نسخهی جاوای شما باید ۱۷ باشد.
شما به زودی قصد دارید که با یکی از بزرگترین شرکتها در حوزه ساخت تراشه و پردازندههای کامپیوتری همکاری کنید. آنها برای ارزیابی شما تسکی را میدهند. اگر در این تسک موفق شوید، در این شرکت استخدام خواهید شد. آنها از شما میخواهند تا سیستم ابتدایی پردازندههای آنها را طراحی کنید. جزئیات این تسک در ادامه آمده است.
جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای پروژه بهصورت زیر است:
index
├── Core.java
├── Processor.java
├── SelectStrategy.java
├── Task.java
└── Type.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));
در این نمونه تسک با آیدی 1
به اولین هسته یعنی هسته با آیدی 1
داده میشود.
نکات
- شما فقط مجاز به اعمال تغییرات در کلاسهای
Core
وProcessor
به همراه سه کلاسی که باید ایجاد کنید، هستید. - حتما باید برای پیادهسازی استراتژیهای انتخاب از اینترفیس
SelectStrategy
استفاده کنید. - دقت کنید که ساختار ابتدایی کلاسها را تغییر ندهید.
آنچه باید آپلود کنید
پس از پیادهسازی موارد خواستهشده، فقط فایل همه این کلاسها را زیپ کرده و آپلود کنید.
ارسال پاسخ برای این سؤال