پوشش دقیق حوزههای آزمون
این بانک سوالات، الگوهای معماری دقیق و چالشهای ساختاری را که در مراحل غربالگری مهندسی بکاند سازمانی و مدیریت دیتابیس رخ میدهد، ترسیم میکند.
مبانی Redis (۲۰%): ویژگیهای پیکربندی هسته، دستورات موتور عملیاتی، کلاینتهای استاندارد، مالتیپلکسینگ اتصالات و تنظیمات بنیادی پایداری دادهها.
ساختارهای داده و الگوریتمها (۱۵%): استفاده عملیاتی عمیق از Strings، Hashes، Lists، Sets، Sorted Sets (ZSETs) و مدیریت لاگها از طریق Streams.
بهینهسازی عملکرد (۱۸%): سیاستهای مدیریت فعال حافظه، پروتکلهای ابطال کش، استراتژیهای کارآمد TTL، الگوریتمهای حذف حافظه (LRU, LFU) و خط لولههای مقیاسپذیر برای Leaderboard.
طراحی سیستم و معماری (۱۲%): طراحی لایههای کش با توان عملیاتی بالا، تنظیمات معماری High-Availability (Sentinel)، مقیاسبندی افقی Partition و تحلیل Trade-offها در سیستمهای توزیع شده.
تراکنشها و پایداری در Redis (۱۰%): اجرای بلوکهای تراکنشی (MULTI/EXEC/WATCH)، مقایسه اسنپشاتهای RDB در مقابل لاگهای AOF، تنظیمات دوام دادهها و رفتارهای بازنویسی در پسزمینه.
مباحث پیشرفته Redis (۸%): گسترش قابلیتها از طریق ماژولهای Redis، مدیریت متنهای ساختاریافته با RedisJSON، کوئریهای مکانی با ایندکسهای Geospatial، شمارش احتمالی با HyperLogLogs و ردیابهای وضعیت Bitmap.
سناریوهای کاربردی و حل مسئله (۱۰%): عیبیابی قطعیهای محیط عملیاتی، کاهش اثرات Cache Stampede، مدیریت پیکهای اتصال و ارزیابی Trade-offهای سیستم تحت بار شدید.
کلاستر Redis و سیستمهای توزیع شده (۷%): مکانیسمهای Sharding اسلاتهای هش، اجرای Failover کلاستر، شبکههای پیامرسانی Pub/Sub در لحظه، الگوهای محدودسازی نرخ (Rate-limiting) توزیع شده و سازگاری بین دیتاسنترها.
درباره این دوره
موفقیت در مصاحبههای طراحی سیستم یا بکاند در مقیاس بالا، نیازمند درک عمیق از نحوه مدیریت وضعیت دادهها در دیتابیسهای In-memory تحت فشار شدید است. معماریهای سازمانی از Redis نه فقط به عنوان یک ذخیرهساز ساده کلید-مقدار، بلکه به عنوان یک زیرساخت حیاتی برای مدیریت کانالهای Pub/Sub، خط لولههای پیچیده استریمینگ و محاسبات در لحظه استفاده میکنند. مصاحبهکنندگان در شرکتهای برتر تکنولوژی به دنبال توسعهدهندگانی هستند که بتوانند از Cache Stampede جلوگیری کنند، سیاستهای حذف کش قابل پیشبینی طراحی کنند و Trade-offهای فیزیکی ساختارهای مختلف تکثیر را توضیح دهند.
من این موتور تمرینی جامع با ۵۵۰ سوال را طراحی کردم تا به شما کمک کنم از سطح استفاده ساده از دستورات به تسلط معماری عمیق برسید. هر آزمون شامل موارد خاص (Edge Cases)، مسائل کد-محور و شکستهای زیرساختی واقعی است. به جای حفظ کردن سینتکس ساده، شما با مسائل سناریو-محور مانند ناهنجاریهای Split-brain در کلاستر، بلوکهای اتمیک اسکریپت Lua، نشت حافظه و بنبستهای عملکردی داخلی مواجه خواهید شد. هر سوال شامل یک تحلیل فنی جامع (Post-mortem) است که مسیر اجرای گزینه صحیح و دلیل رد گزینههای دیگر در محیط عملیاتی را شرح میدهد. اگر هدف شما قبولی در جایگاه مهندس بکاند، مدیر دیتابیس یا معمار سیستم است، این مخزن سوالات دقیقاً همان الگوی مطالعهای است که برای عبور از مراحل غربالگری در اولین تلاش نیاز دارید.
نمونه سوالات تمرینی
برای ارزیابی عمق مهندسی و شفافیت ساختاری تحلیلهای موجود در این محتوا، لطفاً این سه نمونه با کیفیت بالا را بررسی کنید.
سوال ۱: دینامیکهای حذف حافظه تحت محدودیتهای Maxmemory
یک نمونه Redis در محیط عملیاتی در حالی که به عنوان یک لایه کش volatile-lru عمل میکند، به سقف حافظه پیکربندی شده خود نزدیک میشود. ناگهان نرخ Hit کاهش یافته و نرخ حذف کلیدها بالا میرود، در حالی که چندین کلید با عمر طولانی دارای مقادیر TTL صریح هستند. پس از تحلیل، متوجه میشوید حجم زیادی از کلیدهای بدون تنظیم انقضا در حال پر کردن حافظه هستند. کدام پیکربندی یا رفتار سیستمی این الگوی حذف غیرمنتظره را توضیح میدهد؟
الف) اینسنتنس در حال اجرای سیاست volatile-lru است که فقط کلیدهایی را که دارای زمان انقضا هستند جستجو و حذف میکند و کلیدهای بدون TTL را برای مصرف حافظه دستنخورده باقی میگذارد.
ب) تحت محدودیتهای volatile-lru، ردیس کلیدهای دارای TTL فعال را نادیده گرفته و ابتدا کلیدهای غیر-volatile را حذف میکند تا پایداری دادهها را اولویت دهد.
ج) دیتابیس به طور خودکار کلیدهای volatile را به المانهای رشتهای تبدیل میکند وقتی مصرف حافظه از ۸۵ درصد فراتر رود.
د) پیکربندی volatile-lru به هماهنگکننده حافظه دستور میدهد تا فرکانس دسترسی جهانی را در تمام اسلاتهای مجموعه داده، صرفنظر از نشانگرهای انقضا، محاسبه کند.
ه) ایندکس ردیابی برای نشانگرهای کمترین استفاده (LRU) افت کرده است زیرا مقدار maxmemory-samples کمتر از دو پیکربندی شده است.
و) زیرسیستم حافظه مجازی سیستمعامل، اشارهگرهای جدول هش فعال را Swap کرده و ردیس را مجبور به اجرای بلوکهای پاکسازی واکنشی فوری کرده است.
پاسخ صحیح و توضیح:
پاسخ صحیح: الف
دلیل صحت: پیشوند volatile- در سیاستهای حذف، به طور صریح استخر حذف را به کلیدهایی محدود میکند که دارای زمان انقضای فعال (TTL set) هستند. از آنجایی که دادههای ورودی فاقد TTL هستند، توسط الگوریتم حذف هدف قرار نمیگیرند. با پر شدن حافظه، کلیدهای volatile به شدت پاک میشوند تا فضا برای دادههای ورودی بدون انقضا باز شود، که باعث افت شدید نرخ Hit برای آیتمهای دارای انقضا میگردد در حالی که دادههای بدون TTL همچنان رشد میکنند.
دلیل عدم صحت گزینههای دیگر:
گزینه ب نادرست است: Volatile-lru نمیتواند کلیدهای فاقد TTL را لمس یا حذف کند.
گزینه ج نادرست است: ردیس در چرخههای کاهش حافظه، تبدیلهای پویا در نوع دادهها انجام نمیدهد.
گزینه د نادرست است: ارزیابی جهانی روی تمام کلیدها بدون توجه به انقضا، توصیفکننده سیاست allkeys-lru است، نه volatile-lru.
گزینه ه نادرست است: نمونههای با دقت پایین، دقت محاسبه را کاهش میدهند اما قوانین هدفگذاری دستهبندی دادههای سیاست انتخابی را تغییر نمیدهند.
گزینه و نادرست است: Swap کردن صفحات توسط OS باعث کندی سیستم و افزایش تأخیر میشود، اما مسیرهای منطقی اجرای زیرروالهای حذف ردیس را تغییر نمیدهد.
سوال ۲: شکستهای قفل توزیع شده با Redlock و تقسیم شبکه (Network Partitioning)
یک مهندس زیرساخت الگوریتم Redlock را روی پنج نود مستقل Redis برای مدیریت قفلهای اجرای جهانی پیاده میکند. در طول یک تقسیم شبکه، نود ۱ و ۲ از بقیه کلاستر ایزوله میشوند. یک کلاینت با نوشتن در نود ۳، ۴ و ۵ با موفقیت قفل را به دست میآورد. در حالی که تراکنش باز است، نود ۳ قبل از اینکه آپدیتهای لاگ AOF به صورت غیرهمزمان روی دیسک سینک شوند، کرش میکند. پس از ریبوت فوری، نود ۳ به کلاستر میپیوندد و کلاینت دوم تلاش میکند همان قفل منبع را تصاحب کند. در این معماری چه اتفاقی میافتد؟
الف) کلاینت دوم نمیتواند قفل را تصاحب کند زیرا نود ۴ و ۵ امضاهای قفل موجود را در تعادل شبکه حفظ کردهاند.
ب) نود ۳ به کلاینت دوم اجازه میدهد کلید قفل را بنویسد زیرا وضعیت پیش از کرش به طور فیزیکی روی دیسک Flush نشده بود؛ این امر میتواند منجر به ایجاد وضعیت رقابتی (Race Condition) دو-قفل شود اگر کلاینت دوم نود ۱ و ۲ را نیز به دست آورد.
ج) هماهنگکننده اصلی کلاستر به طور خودکار تمام توکنهای نوشتاری کلاینت را در هر نود باطل میکند اگر هر نود تکی دچار بازنشانی برق غیرمنتظره شود.
د) Redlock از پارامترهای اجماع مبتنی بر Raft استفاده میکند که نوشتن در نود ۴ و ۵ را در طول ریبوت تک-نود کاملاً متوقف میکند.
ه) نود ۳ اتصال کلاینت جدید را رد میکند تا زمانی که برچسب زمانی سیستم محلی آن از پنجره TTL قفل جهانی اصلی عبور کند.
و) نشست کلاینت اولیه فوراً قطع میشود زیرا ردیس یک بازگشت ساختاری (Roll-back) روی تمام اینسنتنسهای هدف بازمانده اجرا میکند.
پاسخ صحیح و توضیح:
پاسخ صحیح: ب
دلیل صحت: از آنجایی که تکثیر Redis و پردازش استاندارد AOF از الگوهای Flush غیرهمزمان برای حفظ عملکرد استفاده میکنند، یک چرخه کرش-ریبوت میتواند باعث شود نود رکورد مربوط به قفل اخیراً اعطا شده را از دست بدهد. وقتی نود ۳ با وضعیت خالی بازمیگردد، درخواست قفل کلاینت ۲ را میپذیرد. اگر کلاینت ۲ رایهای نود ۱ و ۲ (که ایزوله بودند) را نیز به دست آورد، هر دو کلاینت تصور میکنند دسترسی انحصاری دارند و وعده اصلی Mutual Exclusion در قفل توزیع شده میشکند.
دلیل عدم صحت گزینههای دیگر:
گزینه الف نادرست است: در حالی که نود ۴ و ۵ کلاینت ۲ را رد میکنند، کلاینت ۲ فقط به اکثریت (۳ از ۵ نود) برای بردن قفل نیاز دارد. اگر نود ۱، ۲ و نود ۳ پاک شده را به دست آورد، قفل اعطا میشود.
گزینه ج نادرست است: نودهای مستقلی که مدل Redlock را اجرا میکنند، لایه هماهنگکننده مرکزی برای مدیریت Roll-backهای اتمیک بین نودها ندارند.
گزینه د نادرست است: Redlock از موتور ماشین حالت اجماع یکپارچه مانند Raft استفاده نمیکند؛ بلکه کاملاً بر عملیات مستقل تک-اینسنتنس متکی است.
گزینه ه نادرست است: ردیس به طور بومی پردازش را به تأخیر نمیاندازد و در هنگام استارتآپ طول عمر تاریخی قفلها را بررسی نمیکند مگر اینکه ریستارتهای تأخیری به صورت دستی در لایه زیرساخت کدنویسی شده باشند.
گزینه و نادرست است: نشستهای کلاینت هنگام شکست یک نود هدف موازی، هشدارهای Roll-back خودکار از اینسنتنسهای بازمانده دریافت نمیکنند.
سوال ۳: پیچیدگی زمانی و مقیاسپذیری تعداد اعضا (Cardinality) با استفاده از HyperLogLog
یک اپلیکیشن ردیابی متریکها از ساختارهای HyperLogLog ردیس برای تخمین تعداد بازدیدکنندگان منحصربهفرد در نقاط تلهمتری با ترافیک بالا استفاده میکند. مدیر سیستم دستور PFADD را اجرا میکند تا روزانه میلیونها مقدار منحصربهفرد را در یک کلید واحد وارد کند. توسعهدهندگان در مورد مقیاسپذیری عملکرد در حالی که حجم بازدیدکنندگان از میلیونها به میلیاردها آیتم میرسد، ابراز نگرانی میکنند. رفتار اجرایی این جمعکننده متریک چیست؟
الف) مصرف حافظه به صورت خطی با تراکم دادهها پیش میرود و پس از عبور ورودیهای منحصربهفرد از یک آستانه مشخص، منابع RAM قابل توجهی را مصرف میکند.
ب) پیچیدگی زمانی PFADD به صورت خطی با مرتبه O(N) مقیاس مییابد که میتواند با گسترش استخر دادهها، رشته اجرایی اصلی را مسدود کند.
ج) این عملیات با یک ردپای حافظه ثابت تقریباً ۱۲ کیلوبایت مقیاس مییابد و هر اجرای واحد، پیچیدگی زمانی قابل پیشبینی O(1) را حفظ میکند.
د) ردیس ساختار زیرین را به یک ماتریس Sorted Set متراکم تبدیل میکند اگر هشهای ورودی باعث تداخل در تخمینهای داخلی شوند.
ه) دقت تخمین تعداد اعضا با مقیاس یافتن رکوردها به میلیاردها، به سمت خطای صفر درصد میل میکند.
و) عملیات PFADD به یک پروسه پسزمینه همراه نیاز دارد تا به طور منظم جداول توزیع ایندکس بیتها را محاسبه کند.
پاسخ صحیح و توضیح:
پاسخ صحیح: ج
دلیل صحت: HyperLogLog یک ساختار داده احتمالی است که تعداد اعضای منحصربهفرد را با استفاده از تخصیص حداکثری حافظه ثابت ۱۲ کیلوبایت تخمین میزند. از آنجایی که المانهای ورودی را هش میکند تا بیتهای ردیابی خاصی را در یک آرایه تغییر دهد (به جای ذخیره مقادیر واقعی)، زمان اجرا برای هر المان در O(1) ثابت میماند و آن را برای مجموعههای داده عظیم بدون افزودن سربار منابع، بسیار مقیاسپذیر میکند.
دلیل عدم صحت گزینههای دیگر:
گزینه الف نادرست است: مصرف حافظه HyperLogLog در ۱۲ کیلوبایت محدود شده است و به صورت خطی با اندازه دادهها رشد نمیکند.
گزینه ب نادرست است: پیچیدگی زمانی ثابت O(1) است؛ مقیاس خطی O(N) باعث توقف پردازش شده و هدف استفاده از ساختار احتمالی را از بین میبرد.
گزینه د نادرست است: HyperLogLog به فرمت Sorted Set تبدیل نمیشود؛ نمایش حافظه داخلی آن به صورت یک آرایه رجیستر سختگیرانه باقی میماند.
گزینه ه نادرست است: نرخ خطای استاندارد آماری در حدود ۰.۸۱ درصد ثابت میماند و به صفر نمیرسد.
گزینه و نادرست است: تمام محاسبات به صورت فوری و درونخطی (inline) در رشته واحد انجام میشوند و نیازی به رشتههای پسزمینه کمکی نیست.
چه انتظاراتی داشته باشید
به آزمونهای سوالات مصاحبه خوش آمدید تا شما را برای آزمون تمرینی سوالات Redis آماده کنیم.
شما میتوانید هر تعداد بار که بخواهید در آزمونها شرکت کنید.
این یک بانک سوالات عظیم و اورجینال است.
در صورت داشتن هرگونه سوال، از پشتیبانی مدرسان بهرهمند میشوید.
هر سوال دارای یک توضیح دقیق و جامع است.
سازگار با موبایل از طریق اپلیکیشن Udemy.
امیدوارم تا اینجا متقاعد شده باشید! سوالات بسیار بیشتری در داخل دوره وجود دارد.
Interview Questions Tests
مربی در Udemy
نمایش نظرات