منذ 5 ساعات
أهلا بك عزيزي المتابع لموقع (journey for learn) نقدم دورات بكوبونات متاحة لاول 1000 تسجيل مجاني فقط وكوبونات اخري لفترة محدودة فاذا كنت تريد ان تحصل علي كل الكورسات علي موقعنا وان تكون اول المسجلين في الكورسات المجانية قم بتسجيل الدخول أوقم بالدخول علي وسائل التواصل الاجتماعي وخصوصا التليجرام نوضح الوصف المختصر والطويل للدورات لكي تعرف الدروس التي سوف تتعلمها بسهولة ويسر :
التغطية التفصيلية لمجال الاختبار يتم تعيين بنك أسئلة التدريب الشامل هذا بشكل منهجي عبر المجالات الهندسية الفعلية التي تم اختبارها أثناء المقابلات الفنية رفيعة المستوى وتقييمات بنية الهاتف المحمول:- مفاهيم Android الأساسية (20%)
- الموضوعات التي يتم تناولها: أجهزة حالة دورة حياة النشاط والجزء، ومعالجة الارتباط العميق عبر النوايا، والخدمات الأمامية والخلفية، وتسجيل BroadcastReceiver، وعملية التقديم وضع الحماية.
- Kotlin والبرمجة (15%)
- المواضيع التي تمت تناولها: بنيات بناء جملة Kotlin المتقدمة، ونطاقات coroutine، والتزامن المنظم، وإدارة التدفق غير المتزامن، والرسوم البيانية المخصصة لحقن التبعية باستخدام Dagger/Hilt، وأنماط هيكلية MVVM الصارمة.
- تصميم النظام وبنيته (25%)
- المواضيع التي تمت تناولها: قابلية التوسع في التطبيقات متعددة الوحدات، ونماذج تقليل استهلاك البطارية المحلية، وتصميم مكتبة الشبكات دون الاتصال بالإنترنت لأول مرة، وأداء مجموعة أدوات واجهة المستخدم المخصصة، وإنفاذ البنية النظيفة القوية.
- تخزين البيانات وإدارتها (10%)
- الموضوعات التي تمت تناولها: تحسين مكتبة استمرارية الغرفة، وتصميم مخطط علائقي SQLite المعقد، وتشفير بيانات المعاملات أثناء الراحة، والنسخ الاحتياطي التلقائي التكوينات.
- الموضوعات التي تمت تناولها: أشجار تخطيط Jetpack Compose، وتحسين إعادة التركيب، وإدارة الحالة التفاعلية باستخدام LiveData/StateFlow، وأنماط تصميم ViewModel، ومكونات التنقل الآمنة من النوع.
- المواضيع التي تمت تناولها: استراتيجيات التعاون المباشر بين فريق الهندسة، والتواصل الفني الواضح، وحل المشكلات متعددة الوظائف، وإدارة حلقات مراجعة التعليمات البرمجية القابلة للتطوير.
- الخيارات:
- أ) يستمر الكوروتين في العمل منفصلاً في الخلفية لأن lifecycleScope يتحول تلقائيًا إلى سياق دورة الحياة على مستوى التطبيق أثناء تعديلات الأجهزة.
- ب) يتم إلغاء الكوروتين تلقائيًا لأن lifecycleScope مرتبط بشكل صارم بدورة حياة الجزء، مما يعني أن عملية الخلفية النشطة تنتهي في منتصف التنفيذ عند العرض تم تدمير التسلسل الهرمي.
- ج) يوقف الكوروتين التنفيذ مؤقتًا في منتصف النقل ويستأنف العمل تلقائيًا بمجرد إنشاء مثيل Fragment الجديد تمامًا بعد انتهاء تكوين التدوير.
- د) يلقي الكوروتين ConcurrentModificationException غير معالج لأن مؤشر ترابط الخلفية يحاول الوصول إلى عناصر التخطيط التي لم تعد تشغل مساحة إحداثيات الشاشة الحالية.
- هـ) ينجو الكوروتين من تغييرات التكوين ولكنه يتسبب في تسرب شديد للذاكرة لأنه يحتفظ مرجع جذر مجموعة البيانات المهملة الصلبة إلى عناصر العرض المدمرة.
- F) يتم تنفيذ coroutine بأمان دون انقطاع إذا قام المطور بنقل كتلة نطاق التنفيذ إلى GlobalScope مع الاحتفاظ بتكوين مرسل مؤشر الترابط الرئيسي الفوري.
- الإجابة الصحيحة:
- ب
- الشرح:
- لماذا التصحيح (ب): ترتبط دورة حياة الجزء مباشرة بنطاقه. حالة دورة حياة محددة. عند حدوث تغيير في التكوين، يتم تدمير الجزء بالكامل وإعادة إنشائه. ونتيجة لذلك، تنتقل دورة حياتها إلى الحالة المدمرة، مما يؤدي تلقائيًا إلى إلغاء جميع الكورتينات الفرعية التي تعمل ضمن هذا النطاق. يؤدي هذا إلى منع تسرب الذاكرة ولكنه ينهي عمدًا تنفيذ عملية المزامنة قيد التشغيل في الخلفية.
- لماذا غير صحيح (أ): لا يهاجر lifecycleScope نفسه أبدًا إلى سياق التطبيق. ويظل مقترنًا بمالك دورة الحياة الذي تم إنشاؤه فيه، مما يضمن تنظيف الموارد فورًا عند انتهاء المكون المضيف.
- لماذا غير صحيح (C): لا يمتلك إطار عمل coroutine لنظام Android آلية تخزين مؤقت أو إيقاف مؤقت تلقائي عبر دورات حياة الأجزاء المميزة؛ يفرض التدمير إلغاء الوظيفة بالكامل بدلاً من الإيقاف المؤقت.
- لماذا غير صحيح (D): آلية الإلغاء تعاونية ويتم التحكم فيها من خلال CancellationException داخل إطار عمل coroutine، والذي لا يعطل التطبيق مع استثناء تعديل متزامن متعلق بالتخطيط.
- لماذا غير صحيح (E): نظرًا لأن lifecycleScope يلغي نفسه بشكل صحيح، فإن المهمة لا تنجو من مرحلة التدمير، مما يعني أنها لا تحتفظ بجذر مجموعة البيانات المهملة أو تسرب عناصر العرض المدمرة.
- لماذا غير صحيح (F): أثناء استخدام GlobalScope يمنع المهمة من التوقف أثناء التدوير، فإنه يقدم نمطًا معماريًا خطيرًا مضادًا. إذا كانت المهمة تشير إلى أي متغيرات أو مكونات محلية، فقد تتسبب في حدوث تسرب للذاكرة لأن GlobalScope يعمل عالميًا خارج حدود التزامن المنظم.
- الخيارات:
- أ) استبدل مكون LazyColumn الحديث ببنية عمود تقليدية ملفوفة داخل معدّل تمرير رأسي لفرض التخصيص المسبق لشجرة عرض التخطيط بالكامل.
- ب) أضف تعليقًا توضيحيًا لنموذج غلاف حالة واجهة المستخدم المخصص باستخدام @Stable أو @Immutable، وقم بتعيين معلمة مفتاح هيكلية فريدة لكل تخطيط عنصر داخل حلقة LazyColumn البنية.
- ج) زيادة الحد الأقصى لحجم كومة وقت تشغيل JVM المتاحة ديناميكيًا داخل ملف بيان جذر التطبيق باستخدام علامة خاصية LargeHeap.
- د) تحويل عمليات استعلام قاعدة البيانات من إطار عمل استمرارية الغرفة مرة أخرى إلى أغلفة مساعد SQLite الخام باستخدام أوامر المعاملات غير المُدارة.
- هـ) لف بنية التخطيط الكاملة لـ LazyColumn داخل كتلة LaunchedEffect لتحريك تمرير تكوين واجهة المستخدم إلى تجمع مؤشرات ترابط خلفية IO المنفذ.
- F) انقل بنية إدارة الحالة المباشرة إلى مكون خدمة Android في الخلفية المستمرة لفصل انبعاث مجموعة البيانات الأولية عن الطبقة المعمارية الرئيسية.
- الإجابة الصحيحة:
- ب
- الشرح:
- لماذا الصحيح (ب): يعتمد الإنشاء على ثبات المدخلات لتخطي إعادة التركيب. عندما تحتوي فئة ما على أنواع غير مستقرة مثل المجموعات القياسية، يقوم برنامج التحويل البرمجي Compose بوضع علامة على الكائن على أنه غير مستقر، مما يجبر عناصر القائمة على إعادة التركيب أثناء كل حدث تمرير حتى إذا لم تتغير البيانات. إن إضافة تعليق توضيحي للنموذج باستخدام @Stable أو @Immutable يُعلم المترجم أن الخصائص لن تتغير بشكل غير متوقع. بالإضافة إلى ذلك، فإن إضافة مفتاح فريد إلى العناصر الموجودة داخل LazyColumn يمنع إعادة التركيب الموضعي، مما يسمح للكتابة بإعادة استخدام العناصر غير المتغيرة بكفاءة والتخلص من اضطراب GC.
- لماذا غير صحيح (أ): يؤدي التبديل إلى عمود قياسي باستخدام معدّل التمرير إلى فرض إنشاء مثيل فوري لكل عنصر قائمة على حدة في وقت واحد، مما يؤدي إلى تدمير كفاءة الذاكرة تمامًا ويزيد من تفاقم قطرات الإطار.
- لماذا غير صحيح (ج): يؤدي تمكين سمة LargeHeap إلى إخفاء البنية الهيكلية. أوجه القصور بدلاً من حلها. يظل السبب الجذري هو إعادة التركيب غير المحسنة، مما سيستمر في إهدار موارد النظام.
- لماذا غير صحيح (د): ينبع عنق الزجاجة في العرض بالكامل من ديناميكيات إعادة تكوين طبقة واجهة المستخدم، وليس من آلية الاستعلام الداخلية لإطار عمل الغرفة. لا يؤدي تغيير طبقات قاعدة البيانات إلى إصلاح أخطاء إعادة التركيب.
- لماذا غير صحيح (E): يجب تنفيذ تمرير التكوين في Jetpack Compose بشكل صارم على واجهة مؤشر الترابط الرئيسية. ستؤدي محاولة فرض أشجار التخطيط إلى آثار جانبية في الخلفية إلى حدوث استثناءات في وقت التشغيل.
- لماذا غير صحيح (F): يؤدي نقل انبعاث بيانات الحالة إلى خدمة خلفية إلى إضافة تعقيدات غير ضرورية لـ IPC ويفشل في معالجة المشكلة الأساسية المتعلقة بكيفية معالجة طبقة واجهة المستخدم وعرض نماذج البيانات أثناء أحداث التمرير.
- الخيارات:
- أ) تخزين الرموز المميزة داخل نظام ملفات التفضيلات المشتركة الافتراضي باستخدام أدوات تشفير سلسلة Base64 الأساسية.
- ب) حفظ سلاسل الرموز المميزة المتسلسلة مباشرة في ملف نصي خام مخفي موجود في دليل قسم ذاكرة التخزين المؤقت للتخزين الخارجي للتطبيق.
- ج) استخدام مكتبة EncryptedSharedPreferences المدعومة من نظام Android Keystore مع برنامج رئيسي مدعوم بالأجهزة موفر المفاتيح.
- د) تشفير سلاسل الرموز المميزة للتشفير مباشرة في الطبقات الثنائية المجمعة للتطبيق عبر Android Native Development Kit (NDK).
- هـ) الاحتفاظ بالمفاتيح الحساسة داخل مثيل قاعدة بيانات Room مخصصة غير مشفرة تم تكوينها للعمل فقط داخل مساحات التخزين في الذاكرة.
- و) تشفير السلاسل باستخدام مفتاح AES مشفر مباشرة داخل مُنشئ فئة التطبيق أثناء تهيئة وقت التشغيل الكتل.
- الإجابة الصحيحة:
- C
- الشرح:
- لماذا التصحيح (C): توفر مكتبة Jetpack Security تفضيلات EncryptedSharedPreferences، التي تقوم تلقائيًا بتشفير المفاتيح والقيم باستخدام نظام تشفير ثنائي المستوى. يتم تخزين المفتاح الرئيسي بشكل آمن داخل نظام Android Keystore، الذي يستفيد من البيئات المدعومة بالأجهزة مثل بيئة التنفيذ الموثوقة (TEE) أو StrongBox كلما كان ذلك متاحًا. يضمن هذا التكوين عدم إمكانية استخراج مفاتيح التشفير بسهولة من نظام ملفات الجهاز، حتى على الأجهزة الجذر.
- لماذا غير صحيح (أ): Base64 هو مجرد آلية تشفير، وليس طريقة تشفير. يمكن لأي شخص لديه حق الوصول إلى الجذر أو الوصول الفعلي إلى نسخة احتياطية للجهاز فك تشفير سلسلة Base64 على الفور.
- لماذا غير صحيح (ب): يؤدي حفظ الملفات إلى أدلة التخزين الخارجية إلى كشف البيانات الحساسة للتطبيقات الأخرى التي تمتلك أذونات الوصول إلى التخزين، مما يؤدي إلى إنشاء ثغرة أمنية عالية الخطورة.
- لماذا غير صحيح (د): يعد إلغاء ترجمة ثنائي تطبيق Android أو استخراج السلاسل من كائنات المكتبة المشتركة باستخدام أدوات الهندسة العكسية القياسية مثل APKTool أو JADX أمرًا تافهًا، ويكشف المفاتيح المشفرة.
- لماذا غير صحيح (E): يتم تخزين قواعد البيانات في الذاكرة بشكل غير مشفر في ذاكرة الوصول العشوائي (RAM). على الرغم من أنها تختفي عند انتهاء عملية التطبيق، إلا أنها تظل عرضة لتقنيات تفريغ الذاكرة أثناء تنشيط التطبيق.
- لماذا غير صحيح (F): وضع مفتاح تشفير مضمن داخل مُنشئ فئة التطبيق يعاني من نفس الثغرة الأمنية مثل نهج NDK. يمكن لأدوات الهندسة العكسية استخراج المفتاح الثابت من رمز DEX الثانوي.
- مرحبًا بك في اختبارات أسئلة المقابلة لمساعدتك في الاستعداد لأسئلة المقابلة على Android.
- يمكنك إعادة إجراء الاختبارات عدة مرات كما تريد
- هذا بنك أسئلة أصلي ضخم
- يمكنك الحصول على الدعم من المدرسين إذا كانت لديك أسئلة
- يحتوي كل سؤال على تفاصيل الشرح
- متوافق مع الجوال مع تطبيق Udemy
ما هي المتطلبات الأساسية لدخول الدورة والتسجيل فيها على موقعنا؟ رحلة التعلم:
(احصل على الدورة للدخول إلى الموقع والتسجيل)
يجب أن يكون لديك بريد إلكتروني (حساب بريد) تتذكره لنفسك وأيضًا يجب أن تتذكر كلمة مرور البريد الإلكتروني الذي ستسجل به ، وإذا لم يكن لديك حساب بريد إلكتروني ، فمن الأفضل إنشاء حساب (Gmail)
0 تعليقات
تسجيل دخول
دورات مشابهة