لینکهای مفید برای شرکت در مسابقه:
در طول مسابقه، میتوانید سؤالات خود را از قسمت «سؤال بپرسید» مطرح کنید.
طبق آماری که گوگل در سال ۲۰۱۶ منتشر کرد، ٪۵۳ از بازدیدکنندگان، یک وبسایت را در صورتی که لود آن بیش از ۳ ثانیه طول بکشد رها میکنند! این آمار، ابوالفضل را به این فکر فرو برده که سرعت لود یک وبسایت به چه اندازه روی حس رضایت کاربران آن وبسایت تأثیر دارد. او که حالا هشتگ #SpeedMatters
را در شبکههای اجتماعی ترند کرده، به این فکر افتاده که سرعت لود برنامهاش را با استفاده از cache بالا ببرد. او برای این کار نیاز به یک دولوپر دیگر دارد و از شما کمک خواسته است.
پروژهی اولیه را از این لینک دانلود کنید. ساختار فایلهای پروژه بهصورت زیر است:
شما باید کلاس Cache
را طوری کامل کنید تا خواستههایی را که در ادامه مطرح میشود را برآورده کند.
ساختار اولیهی این کلاس بهصورت زیر است:
همانطور که مشخص است، cache ما قرار است آیتمهای مختلفی را توسط کلاس CacheItem
درون خود نگه دارد. این آیتمها فعلاً شامل دو کلاس Photo
و Comment
میشوند. همچنین این آیتمها زمان مجازی دارند که توسط پراپرتی TTL
(واحد روز) مشخص میشود. در اولین گام باید کلاس CacheItem
را کامل کنید.
CacheData
🔗این اینترفیس، بیانگر دادههای موجود در cache است. متد زیر در این اینترفیس تعریف شده است:
کلاسهای Comment
و Photo
این اینترفیس را پیادهسازی میکنند.
CacheItem
🔗این کلاس بهصورت generic بوده و مشخصکنندهی آیتمهایی است که درون cache نگه داشته میشوند. این کلاس باید شامل دو پراپرتی data
از نوع T
(بهصورت generic) و createdAt
از نوع LocalDateTime
باشد.
از پراپرتی createdAt
برای بررسی مجاز بودن یک آیتم cache استفاده میشود. زمان مجاز زنده بودن یک آیتم درون cache طبق مقدار پراپرتی TTL
در کلاس Cache
برابر با ۲ روز است.
Cache
🔗همانطور که گفته شد، مهمترین بخش برنامه، این کلاس است. شما باید متدهایی را که در ادامه ذکر میشود را در این کلاس پیادهسازی کنید:
add
: این متد که ورودی آن CacheItem
است، باید بتواند یک آیتم را به cache اضافه کند. دقت کنید که آیتمی با دیتای تکراری نباید در cache وجود داشته باشد. در اینصورت، آیتم قبلی باید از لیست آیتمها حذف شده و آیتم جدید درج شود.remove
: این متد که ورودی آن CacheItem
است، باید بتواند یک آیتم را از cache حذف کند.دو متد بالا را باید بتوان به روش method chaining صدا زد. مثال:
clear
: این متد تمام آیتمهای درون cache را حذف میکند.getAll
: این متد تمام آیتمهای مجاز درون cache را در قالب لیستی از CacheItem
ها برمیگرداند.findByID
: این متد یک پارامتر ورودی از نوع long
دارد و باید لیستی از CacheItem
های مجاز را در صورتی که پراپرتی ID
آیتم درون cache با پارامتر ورودی برابر بود برگرداند.filter
: این متد دو امضا بهصورت زیر دارد:String
است. دومین پارامتر، یک عبارت باقاعده (Regex) بهصورت String
است. در این حالت، تضمین میشود که پراپرتیای با نام ذکرشده در همهی دادههای موجود در cache تعریف شده است.کاری که این متد انجام میدهد آن است که باید در پراپرتی گفتهشده، عبارت باقاعده را جستوجو کند و لیستی از CacheItem
های مجاز را برگرداند. به عنوان مثال فرض کنید دو آیتم زیر درون cache وجود دارند:
حال متد filter
را بهصورت زیر صدا میزنیم و میخواهیم عکسهای با فرمت png
را فیلتر کنیم:
خروجی باید بهصورت زیر باشد:
export
: از این متد نیز قرار است برای بهدست آوردن آماری در رابطه با آیتمهای درون cache استفاده کنیم. خروجی این متد لیستی از ExportCacheDTO
ها است. مثالی از خروجی این متد:این خروجی به این معنی است که ۲ آیتم از نوع Photo
و ۳ آیتم از نوع Comment
درون cache وجود دارد.
services/Cache.java
و services/CacheItem.java
هستید.CacheSampleTest
موجود هستند. میتوانید آنها را پس از افزودن JUnit به classpath در سیستم خود اجرا کنید.پس از پیادهسازی موارد خواستهشده، پوشهی services
را زیپ کرده و آپلود کنید (خود پوشه نیز در فایل زیپ موجود باشد).