سلام دوست عزیز😃👋
به مسابقه «مسابقه کشتیبان جاوا» خوش آمدی!
هرگونه ارتباط با سایر شرکتکنندگان و یا استفاده از ابزارهای تولید کد، مثل chatGPT
و... در مسابقات کوئرا ممنوع است و بعد از شناسایی از لیست شرکتکنندگان مسابقه حذف میشوید.
لینکهای مفید برای شرکت در مسابقه:
سوالات و مشکلات خودتان را میتوانید از طریق قسمت «سوال بپرسید» با ما در میان بگذارید.
موفق باشید و بهتون خوش بگذره 😉✌
برای این سوال، نسخهی جاوای شما باید ۱۷ باشد.
شما به زودی قصد دارید که با یکی از بزرگترین شرکتها در حوزه ساخت تراشه و پردازندههای کامپیوتری همکاری کنید. آنها برای ارزیابی شما تسکی را میدهند. اگر در این تسک موفق شوید، در این شرکت استخدام خواهید شد. آنها از شما میخواهند تا سیستم ابتدایی پردازندههای آنها را طراحی کنید. جزئیات این تسک در ادامه آمده است.
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای پروژه بهصورت زیر است:
همانطور که در ساختار فایلهای اولیه مشاهده میکنید، شما با چندین کلاس مرتبط با پردازنده سر و کار دارید. کلاس 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) یک هسته را انتخاب و برمیگرداند. در این استراتژی تسکها برای اجرا، به صورت چرخشی به هستههای پردازنده داده میشود.
دقت کنید که هر هسته فقط میتواند انواع خاصی از تسکها را پردازش کند.
مثالهایی به صورت تست نمونه در اختیار شما قرار داده شده است که میتوانید از آنها کمک بگیرید. به عنوان مثال به مورد زیر دقت کنید:
در این نمونه تسک با آیدی 1
به اولین هسته یعنی هسته با آیدی 1
داده میشود.
Core
و Processor
به همراه سه کلاسی که باید ایجاد کنید، هستید.SelectStrategy
استفاده کنید.پس از پیادهسازی موارد خواستهشده، فقط فایل همه این کلاسها را زیپ کرده و آپلود کنید.