سوالات و پاسخهای تمرینی مصاحبه کاتلینجامعترین منبعی است که من برای توسعهدهندگانی ساختهام که میخواهند از سینتکس پایه فراتر رفته و برای مصاحبههای فنی سطح بالا، بر این زبان مسلط شوند. چه هدف شما جایگاه میانرده باشد و چه یک پوزیشن ارشد، این تستهای تمرینی را بهگونهای طراحی کردهام که درک شما از null safety، برنامهنویسی تابعی و دنیای پیچیده همروندی با Coroutines و Flow را به چالش بکشد. به جای حفظ کردن مطالب، شما با مسائل سناریومحور مواجه میشوید که بازتابدهنده چالشهای واقعی معماری و بهینهسازی عملکرد JVM است. با بررسی توضیحات دقیق، تضمین میکنم که نه تنها پاسخ درست را پیدا کنید، بلکه دلیل «چرایی» هر خط کد را درک کنید و به عنوان کاندیدایی که کاتلین اصیل، ایمن و بهینه مینویسد، متمایز شوید.
دامنه آزمون و موضوعات نمونه
مبانی زبان:ایمنی نال (Null safety)، توابع توسعه (extension functions) و توابع دامنه (apply, let, run).
برنامهنویسی تابعی:توابع مرتبه بالا (Higher-order functions)، کلاسهای inline و ارزیابی تنبل با Sequences.
همروندی و کوروتینها:همروندی ساختاریافته، سلسلهمراتب Job، StateFlow و SharedFlow.
داخلیات JVM و Interop:بهینهسازی بایتکد، @JvmStatic، تایپهای reified و مدیریت حافظه.
معماری و تست:کتابخانه MockK، JUnit 5، تزریق وابستگی (Koin/Hilt) و ادغام با Ktor.
نمونه سوالات تمرینی
سوال ۱: کدام مورد رفتار crossinline را در یک تابع مرتبه بالا به بهترین شکل توصیف میکند؟
A) به لامبدا اجازه میدهد تا یک return غیرمحلی (non-local) به تابع فراخواننده انجام دهد.
B) از inline شدن لامبدا در محل فراخوانی برای صرفهجویی در حافظه جلوگیری میکند.
C) به لامبدا اجازه میدهد در محیط دیگری اجرا شود در حالی که returnهای غیرمحلی را ممنوع میکند.
D) به طور خودکار باعث میشود لامبدا روی یک dispatcher رشته پسزمینه اجرا شود.
E) برای نشان دادن این است که یک تابع فقط میتواند از کدهای جاوا فراخوانی شود.
F) کامپایلر را مجبور میکند تا یک فایل کلاس جداگانه برای لامبدا ایجاد کند.
پاسخ صحیح: C
توضیحات کلی:در کاتلین، توابع inline معمولاً اجازه «returnهای غیرمحلی» را میدهند. اما اگر لامبدا به محیط اجرای دیگری (مانند یک شیء محلی یا تابع تودرتو) پاس داده شود، return غیرمحلی غیرقانونی است. اصلاحکننده crossinline به کامپایلر میگوید که لامبدا به گونهای فراخوانی خواهد شد که این returnهای غیرمحلی ممنوع باشند، در حالی که بقیه تابع همچنان inline شود.
گزینه A نادرست:این توصیف مربوط به یک لامبدا inline استاندارد بدون crossinline است.
گزینه B نادرست:کلمه inline (حتی با crossinline) همچنان کد را inline میکند و مانع آن نمیشود.
گزینه D نادرست:عبارت crossinline یک ابزار بهینهسازی/محدودیت کامپایلر است، نه یک ابزار مدیریت رشتهها (Threading).
گزینه E نادرست:این مورد با انوتیشنهای همکاری با جاوا مانند @JvmStatic مرتبط نیست.
گزینه F نادرست:هدف از inlining دقیقاً جلوگیریاز ایجاد فایلهای کلاس جداگانه برای لامبداها است.
سوال ۲: در کوروتینهای کاتلین، اگر هنگام استفاده از SupervisorJob یک Job فرزند شکست بخورد، چه اتفاقی میافتد؟
A) تمام سایر خواهر-برادرها و Job والد فوراً لغو میشوند.
B) فقط فرزند شکستخورده لغو میشود؛ خواهر-برادرها و والد به اجرای خود ادامه میدهند.
C) Job والد لغو میشود، اما خواهر-برادرها تا تکمیل شدن به اجرا ادامه میدهند.
D) اپلیکیشن فوراً کرش میکند مگر اینکه CoroutineExceptionHandler وجود داشته باشد.
E) SupervisorJob به طور خودکار فرزند شکستخورده را سه بار تلاش مجدد (Retry) میکند.
F) شکست نادیده گرفته میشود و فرزند در حالت «Active» باقی میماند.
پاسخ صحیح: B
توضیحات کلی:به طور معمول، لغو کوروتین دوطرفه است؛ اگر یک فرزند شکست بخورد، والد و تمام فرزندان دیگر شکست میخورند. یک SupervisorJob این «دامنه» را تغییر میدهد تا شکست یک فرزند فقط روی همان فرزند اثر بگذارد. این برای کارهای UI یا سرور حیاتی است، جایی که شکست یک زیر-وظیفه نباید کل عملیات را متوقف کند.
گزینه A نادرست:این توصیف مربوط به یک Job استاندارد است، نه SupervisorJob.
گزینه C نادرست:اگر والد لغو شود، فرزندان همیشه لغو میشوند؛ این برعکس منطق نظارت (supervision) است.
گزینه D نادرست:با وجود اینکه شکست محلی شده است، استثنا (exception) همچنان باید مدیریت شود، اما باعث «کرش» کردن خودِ Job والد نمیشود.
گزینه E نادرست:کوروتینهای کاتلین منطق داخلی «تلاش مجدد خودکار» بر اساس نوع Job ندارند.
گزینه F نادرست:یک Job شکستخورده نمیتواند در حالت «Active» باقی بماند؛ بلکه به حالت «Cancelled» یا «Completed» میرود.
سوال ۳: از کدام کلمه کلیدی برای دسترسی به ویژگی زیربنایی یک delegate از داخل کلاس استفاده میشود؟
A) thisRef
B) delegate
C) field
D) getValue
E) by
F) هیچ کلمه کلیدی مستقیمی وجود ندارد؛ باید مستقیماً از نام ویژگی استفاده کنید.
پاسخ صحیح: F
توضیحات کلی:برخلاف ویژگیهای استاندارد که میتوانید از شناسه field در getter یا setter سفارشی استفاده کنید، ویژگیهای delegated (با استفاده از کلمه کلیدی by) کلمه کلیدی داخلی برای دسترسی به خودِ «نمونه delegate» از داخل کلاس مالک ندارند. شما صرفاً با نام ویژگی تعامل دارید.
گزینه A نادرست:عبارت thisRef پارامتری است که داخلتعریف کلاس delegate استفاده میشود، نه در کلاس فراخواننده.
گزینه B نادرست:کلمه delegate یک کلمه کلیدی رزرو شده برای دسترسی به ویژگی نیست.
گزینه C نادرست:کلمه field فقط در اکسسورهای سفارشی برای ویژگیهای غیر-delegated در دسترس است.
گزینه D نادرست:عبارت getValue نام تابعی است که delegate باید پیادهسازی کند، نه یک کلمه کلیدی.
گزینه E نادرست:کلمه by سینتکسی است که برای تعیینdelegate استفاده میشود، نه برای دسترسی به آن در مراحل بعدی.
به بهترین آزمونهای تمرینی برای آمادگی در مصاحبههای کاتلینخوش آمدید.
شما میتوانید هر تعداد بار که بخواهید در آزمونها شرکت کنید
این یک بانک سوالات گسترده و اورجینال است
در صورت داشتن هرگونه سوال، از پشتیبانی مدرسان بهرهمند شوید
هر سوال دارای یک توضیح دقیق و جامع است
سازگار با موبایل از طریق اپلیکیشن Udemy
ضمانت بازگشت وجه ۳۰ روزه در صورت عدم رضایت
امیدوارم تا این لحظه متقاعد شده باشید! سوالات بسیار بیشتری در داخل دوره وجود دارد. همین امروز ثبتنام کنید و آخرین قدم را برای دریافت گواهینامه و موفقیت در مصاحبه بردارید!
Interview Questions Tests
مربی در Udemy
نمایش نظرات