لینکهای مفید برای شرکت در مسابقه:
در طول مسابقه، میتوانید سوالهای خود را از قسمت «سؤال بپرسید» مطرح کنید.
چند ماهی است که احمد یک وبسرویس پرداخت با نام بپرداز پیادهسازی کرده است. این وبسرویس اخیراً شاهد ترافیک سنگین درخواستها بوده است. احمد برای رفع این مشکل، تصمیم گرفت تا از چند سرور مختلف برای پردازش درخواستها استفاده کند. این سرورها با یکدیگر sync هستند؛ اما هماکنون برخی از آنها همچنان به دلیل ترافیک بالای درخواستها کند شدهاند. از آنجایی که احمد هنوز راهحل درستی برای این مسئله پیدا نکرده، میخواهد یک تغییر موقتی روی SDK ای که در اختیار توسعهدهندگان قرار داده است اعمال کند.
احمد میخواهد SDK جاوای وبسرویسش را طوری پیادهسازی کند که درخواست تأیید یک تراکنش بهصورت همزمان به همهی سرورهای موجود ارسال شود و به محض اولین پاسخی که از یکی از سرورها دریافت میشود، این پاسخ برگردانده شود. همچنین، او میخواهد قابلیت ست کردن timeout وجود داشته باشد تا اگر پس از واحد زمانی هیچ پاسخی دریافت نشد، برنامه یک Exception
پرتاب کند.
پروژهی اولیه را از این لینک دانلود کنید.
TransactionVerifier
🔗این کلاس در کانستراکتور خود لیستی از URL
های مربوط به درخواست تأیید تراکنش را دریافت میکند.
URL
ها خالی بود، یک IllegalArgumentException
پرتاب شود.setTimeout
را طوری پیادهسازی کنید که با دریافت یک واحد زمانی از نوع Duration
، حداکثر زمان انتظار برای دریافت پاسخ را مشخص کند. همچنین، مقدار پیشفرض timeout را برابر با ۳ ثانیه قرار دهید.verify
را طوری پیادهسازی کنید که با دریافت شناسهی یک تراکنش (که از نوع String
است)، درخواست تأیید تراکنش را بهصورت همروند به همهی آدرسها ارسال کند و به محض دریافت اولین پاسخ، آن را در قالب یک رشته برگرداند. این متد باید حداکثر به اندازهی timeout ست شده منتظر پاسخ بماند. اگر timeout رخ دهد، این متد باید یک TimeoutException
پرتاب کند. درخواستها باید از نوع POST
باشند و مقدار پارامتر transaction_id
باید برابر با شناسهی تراکنش قرار داده شود. بدنهی درخواست باید از نوع JSON باشد.getFastestServer
را طوری پیادهسازی کنید که URL
سروری که تاکنون بیشترین پاسخها از آن دریافت شده است را برگرداند. اگر تعداد دفعات دریافت زودترین پاسخ از چند سرور یکسان بود، URL
یکی از آنها را به دلخواه برگردانید.با اجرای متد main
، یکی از سه خروجی زیر مورد انتظار است:
توجه: برنامهی شما نباید resource leak داشته باشد.
پس از پیادهسازی کلاس TransactionVerifier
، فایل TransactionVerifier.java
را آپلود کنید.