أسئلة مقابلات Android Native مع الإجابات
100 سؤال من أسئلة مقابلات العمل في Android Native، مقسمة على 14 موضوعات: Kotlin Fundamentals وAndroid Fundamentals وUI & Layouts وJetpack Compose وArchitecture Components وCoroutines & Concurrency وDependency Injection وNetworking وLocal Storage وBackground Processing وPerformance & Memory وSecurity & Obfuscation وTesting وBuild & Gradle. تغطي الأسئلة المستويات مبتدئ ومتوسط ومتقدم، ولكل سؤال إجابة مختصرة تقولها في الانترفيو، وشرح أعمق، وأخطاء شائعة، وروابط للمصادر الرسمية مع تاريخ آخر مراجعة.
الموضوعات
Kotlin Fundamentals
12 سؤال
Android Fundamentals
10 سؤال
UI & Layouts
6 سؤال
Jetpack Compose
10 سؤال
Architecture Components
10 سؤال
Coroutines & Concurrency
10 سؤال
Dependency Injection
6 سؤال
Networking
6 سؤال
Local Storage
6 سؤال
Background Processing
5 سؤال
Performance & Memory
6 سؤال
Security & Obfuscation
4 سؤال
Testing
5 سؤال
Build & Gradle
4 سؤال
أسئلة مقابلات Kotlin Fundamentals في Android Native
- ما الفرق بين val و var في لغة Kotlin؟
- ما الفرق بين const val و val في Kotlin؟
- كيف يحمي نظام Null Safety في Kotlin من NullPointerException؟
- ما هي الـ Data Class في Kotlin وما الميثودات التي تولدها تلقائيًا؟
- كيف يعمل الـ Smart Cast في Kotlin؟
- ما الفرق بين Sealed Class و Enum في Kotlin ومتى نستخدم كل منهما؟
- كيف تعمل الـ Extension Functions داخليًا في Kotlin؟
- ما الفروق الأساسية بين دوال النطاق (Scope Functions) في Kotlin؟
- ما هي الدالة ذات الرتبة العليا (Higher-Order Function) في Kotlin؟
- كيف تعمل الـ Delegated Properties وما فائدة by lazy في Kotlin؟
- ما الفرق بين inline و noinline و crossinline في Kotlin؟
- ما فائدة الكلمة المفتاحية reified في Kotlin وكيف تتجاوز Type Erasure؟
أسئلة مقابلات Android Fundamentals في Android Native
- ما هي المراحل الأساسية لدورة حياة الـ Activity في أندرويد وكيف تنتقل بينها؟
- ما الفرق بين دورة حياة الـ Fragment ودورة حياة الـ Activity ولماذا نستخدم viewLifecycleOwner؟
- ما الفرق بين Application Context و Activity Context ومتى تستخدم كلاً منهما؟
- ما الفرق بين الـ Explicit Intent والـ Implicit Intent في أندرويد؟
- ما هي أنماط الإطلاق (Launch Modes) للـ Activity وما تأثيرها على الـ Backstack؟
- ماذا يحدث عند حدوث Configuration Change (كدوران الشاشة) وكيف نحافظ على البيانات؟
- ما هو دور الـ ContentProvider في معمارية أندرويد ومتى تحتاجه؟
- ما الفرق بين BroadcastReceiver المسجل استاتيكيًا والمسجل ديناميكيًا؟
- ما الفرق بين موت العملية الكامل (Process Death) وإغلاق الـ Activity بواسطة المستخدم؟
- كيف تطبق نموذج الصلاحيات الديناميكية (Runtime Permissions) في أندرويد الحديث؟
أسئلة مقابلات UI & Layouts في Android Native
- ما هي المراحل الثلاث الأساسية لرسم أي View على الشاشة في أندرويد؟
- ما الفرق بين ViewBinding و DataBinding في تطوير أندرويد؟
- كيف يعمل نمط ViewHolder داخل الـ RecyclerView ولماذا يعتبر فعالاً؟
- ما فائدة DiffUtil و ListAdapter مقارنة باستدعاء notifyDataSetChanged()؟
- كيف يساهم ConstraintLayout في تحسين أداء واجهة المستخدم مقارنة بـ LinearLayouts المتداخلة؟
- كيف تدير أحداث اللمس المتعدد والاعتراض (Touch Interception) في Custom ViewGroup؟
أسئلة مقابلات Jetpack Compose في Android Native
- ما هو Jetpack Compose وما الفرق بين الواجهات التصريحية والإجرائية؟
- ما هي الـ Recomposition في Jetpack Compose وكيف تعمل بكفاءة؟
- ما هو مبدأ رفع الحالة (State Hoisting) في Jetpack Compose؟
- ما الفرق بين remember و rememberSaveable في Jetpack Compose؟
- ما هي الآثار الجانبية (Side Effects) في Compose وما الفرق بين LaunchedEffect و DisposableEffect؟
- ما هو دور CompositionLocal في Jetpack Compose ومتى يجب استخدامه؟
- متى نستخدم derivedStateOf في Compose ولماذا تختلف عن remember(keys)؟
- لماذا يعد ترتيب استدعاء الـ Modifiers جوهريًا في Jetpack Compose؟
- كيف تضمن أعلى أداء وسلاسة للقوائم الكبيرة في LazyColumn؟
- كيف يحدد Compose استقرار البيانات (Stability) لتخطي الـ Recomposition (Smart Skipping)؟
أسئلة مقابلات Architecture Components في Android Native
- ما هو دور الـ ViewModel في بنية تطبيقات أندرويد وكيف تختلف دورة حياته عن الـ Activity؟
- ما الفرق بين LiveData و StateFlow ولماذا يُفضل StateFlow في تطبيقات Kotlin الحديثة؟
- ما هو نمط تدفق البيانات أحادي الاتجاه (Unidirectional Data Flow - UDF)؟
- ما هي فائدة SavedStateHandle وكيف تحمي التطبيق من موت العملية (Process Death)؟
- ما الفرق المعماري بين نمط MVVM ونمط MVI في أندرويد؟
- ما هي طبقات Clean Architecture الموصى بها في أندرويد وما اتجاه التبعيات بينها؟
- كيف يحقق نمط المستودع (Repository Pattern) مبدأ المصدر الوحيد للحقيقة (Single Source of Truth)؟
- لماذا ينصح باستخدام repeatOnLifecycle بدلاً من إطلاق lifecycleScope.launch المباشر عند جمع تدفقات الـ Flow في الـ UI؟
- كيف يدير Jetpack Navigation الـ Backstack والـ Deep Links المعقدة؟
- ما هي المكونات المعمارية لمكتبة Paging 3 وكيف تدير التخزين المؤقت المتقدم؟
أسئلة مقابلات Coroutines & Concurrency في Android Native
- ما هي الـ Coroutines في Kotlin وكيف تختلف عن الـ Threads التقليدية لنظام التشغيل؟
- كيف تعمل الـ Suspend Function في Kotlin تحت الغطاء (Under the hood)؟
- ما الفرق بين الموزعات المختلفة (Dispatchers: Main, IO, Default, Unconfined) في أندرويد؟
- ما الفرق بين باني الكوروتين launch وباني async ومتى نستخدم كل منهما؟
- ما هو مبدأ التزامن الهيكلي (Structured Concurrency) في Kotlin Coroutines؟
- لماذا يقال إن إلغاء الـ Coroutine عملية تعاونية (Cooperative Cancellation) وكيف تتأكد من استجابتها؟
- كيف تتم معالجة الأخطاء غير الملتقطة في الكوروتين باستخدام CoroutineExceptionHandler؟
- ما الفرق الجوهري بين Job عادية و SupervisorJob في انتشار الاستثناءات؟
- ما الفرق المعماري بين التدفق البارد (Cold Flow) والتدفق الساخن (Hot Flow) في Kotlin؟
- متى تستخدم Channel ومتى تفضل استخدام Flow في معمارية تطبيقات أندرويد؟
أسئلة مقابلات Dependency Injection في Android Native
- ما هو حقن التبعيات (Dependency Injection) وما الفوائد الأساسية لتطبيقه في أندرويد؟
- ما هو Hilt وما المزايا التي يقدمها فوق مكتبة Dagger 2 لتطبيقات أندرويد؟
- ما دور الوسوم الأساسية في Hilt: @HiltAndroidApp و @AndroidEntryPoint و @Inject؟
- ما الفرق بين @Provides و @Binds داخل كلاسات الـ Module في Hilt؟
- كيف تعمل هرمية المكونات ونطاقات دورة الحياة (Scopes) في Hilt؟
- كيف تحل تعارض توفير نسختين مختلفتين من نفس النوع باستخدام الـ Qualifiers في Hilt؟
أسئلة مقابلات Networking في Android Native
- كيف تعمل مكتبة Retrofit وما دور Converter.Factory و CallAdapter.Factory؟
- ما الفرق بين Application Interceptor و Network Interceptor في مكتبة OkHttp؟
- لماذا يفضل استخدام Moshi أو Kotlinx Serialization بدلاً من Gson في كود Kotlin الحديث؟
- كيف تطبق نمط Result لتغليف استجابات الشبكة وأخطائها بأمان؟
- ما هو الـ SSL/Certificate Pinning وكيف يتم تنفيذه لحماية التطبيق من هجمات MITM؟
- كيف تدير التخزين المؤقت للشبكة (HTTP Caching) ودعم ETag في أندرويد؟
أسئلة مقابلات Local Storage في Android Native
- ما هي المكونات الثلاثة الأساسية لمكتبة Room وما دور كل منها؟
- لماذا ينصح بالانتقال من SharedPreferences إلى Jetpack DataStore؟
- كيف تخزن أنواع بيانات مخصصة (كالتاريخ أو القوائم) في Room باستخدام TypeConverters؟
- كيف تتعامل مع ترقية مخطط قاعدة البيانات (Room Database Migrations) دون فقد بيانات المستخدم؟
- كيف تصمم العلاقات بين الجداول (One-to-Many و Many-to-Many) في Room؟
- ما الفرق بين Preferences DataStore و Proto DataStore ومتى تختار Proto DataStore؟
أسئلة مقابلات Background Processing في Android Native
- ما هي أنواع الـ Services في أندرويد وما الفرق الجوهري بينها؟
- ما هي معمارية WorkManager ولماذا تعتبر الحل الموصى به للمهام المضمونة والمؤجلة؟
- ما الفرق بين OneTimeWorkRequest و PeriodicWorkRequest وما هو الحد الأدنى للفاصل الزمني؟
- ما هي المتطلبات الصارمة لتشغيل Foreground Service في إصدارات أندرويد الحديثة (Android 14+)؟
- كيف يدير نظام أندرويد استهلاك الطاقة عبر Doze Mode و App Standby وما تأثيرهما على المهام الخلفية؟
أسئلة مقابلات Performance & Memory في Android Native
- ما هو خطأ ANR (Application Not Responding) وما أسبابه الرئيسية وكيفية تتبعه؟
- ما هو تسريب الذاكرة (Memory Leak) في أندرويد وكيف تساعد أداة LeakCanary في اكتشافه؟
- ما الفرق بين أنواع إقلاع التطبيق (Cold, Warm, Hot Start) وكيف تحسن وقت الإقلاع البارد؟
- كيف تدير ذاكرة الصور والـ Bitmaps في أندرويد لتجنب أخطاء OutOfMemoryError (OOM)؟
- كيف تكتشف تقطيع الإطارات (Jank) وأسباب هبوط معدل الـ 60/120 FPS باستخدام أداة Perfetto؟
- ما هي الـ Baseline Profiles وكيف تسرع إقلاع التطبيق وسلاسة التمرير بنسبة تصل إلى 30%؟
أسئلة مقابلات Security & Obfuscation في Android Native
- ما هو نظام Android Keystore وما الميزة الأمنية التي يقدمها مقارنة بالتخزين العادي للمفاتيح؟
- ما دور أداة R8 في حماية التطبيق وتقليص حجمه وما الفرق بين Shrinking و Obfuscation؟
- كيف تطبق المصادقة الحيوية باستخدام مكتبة BiometricPrompt الموحدة؟
- كيف تحمي التطبيقات الحساسة (كالتطبيقات المصرفية) من التلاعب وبيئات الـ Root باستخدام Play Integrity API؟
أسئلة مقابلات Testing في Android Native
- ما هو هرم الاختبارات (Testing Pyramid) في أندرويد وما النسبة المقترحة لكل نوع؟
- كيف تختبر منطق الـ ViewModel باستخدام مكتبة MockK ومجسمات المحاكاة (Mocks)؟
- كيف تختبر كود يعتمد على الكوروتينات باستخدام runTest وموزعات الاختبار (TestDispatchers)؟
- ما الفرق بين اختبارات Robolectric واختبارات الأجهزة الحقيقية (Instrumentation Tests)؟
- كيف تعمل اختبارات واجهة المستخدم في Jetpack Compose بالاعتماد على شجرة الـ Semantics؟
أسئلة مقابلات Build & Gradle في Android Native
- ما هي المراحل الثلاث الأساسية لدورة حياة بناء المشروع في Gradle؟
- كيف يتم إنشاء الـ Build Variants بدمج Product Flavors و Build Types في Gradle؟
- ما هي ميزة استخدام Gradle Version Catalogs (ملف libs.versions.toml) لإدارة التبعيات؟
- ما هي أفضل ممارسات تقسيم تطبيق أندرويد إلى وحدات متعددة (Multi-module Architecture) وما أثرها على سرعة البناء؟