أسئلة مقابلات الجافا الأساسية تساعدك في التحضير لمقابلات الجافا القائمة على الجافا. سواء كنت مبتدئًا أو محترفًا ذو خبرة عالية، تلعب الجافا الأساسية دورًا حيويًا في أي مقابلة جافا / JEE.
الجافا الأساسية هي المجال المفضل في معظم المقابلات وتلعب دورًا حاسمًا في تحديد نتيجة مقابلتك.
يأتي هذا المنشور مباشرة من خبرتي التي تزيد عن 14 عامًا في برمجة الجافا والكثير من تجارب المقابلات. تم إصدار الجافا 16 مؤخرًا ولقد قمت بتحديث المنشور لتضمين بعض الأسئلة من أحدث الإصدارات.
أسئلة وأجوبة مقابلات الجافا الأساسية
I have already written a lot about java interview questions for specific topics such as String, Collections, and Multithreading.
- أسئلة مقابلات سلاسل الجافا
- أسئلة مقابلات المواضيع في الجافا
- أسئلة مقابلات مجموعات الجافا
- أسئلة مقابلات استثناءات الجافا
ها أنا أقدم بعض أهم أسئلة مقابلات جافا الأساسية مع الإجابات التي يجب أن تعرفها. يمكنك حفظ هذه المشاركة لتحسين معرفتك قبل الذهاب إلى مقابلة.
1. اسم بعض الميزات الهامة في إصدار جافا 14؟
تم إصدار جافا 14 في 17 مارس 2020. إنه إصدار غير طويل الأمد. بعض الميزات المهمة للمطورين في جافا 14 هي:
- تعبيرات الفرز – JEP 361
- تحسينات مطابقة الأنماط لعامل instanceof – ميزة معاينة، JEP 305
- رسائل NullPointerException المفيدة – JEP 358
- كتل النص – المعاينة الثانية، JEP 368
- سجلات – فئة بيانات، ميزة معاينة، JEP 359.
2. اسم بعض الميزات الهامة في إصدار جافا 13؟
تم إطلاق جافا 13 في 17 سبتمبر 2019. إنه إصدار غير طويل الأمد. بعض الميزات الهامة للمطورين في جافا 13 هي:
- كتل النص – ميزة معاينة، JEP 355
- تبديل التعبيرات – ميزة معاينة ، JEP 354
- إعادة تنفيذ واجهة برمجة تطبيقات جافا للمقابس – JEP 353
- أرشيف CDS الديناميكي – JEP 350
- طريقة FileSystems.newFileSystem()
- مصانع DOM و SAX مع دعم للمساحات الاسمية
- دعم الإصدار 12.1 من اليونيكود
- تحسينات ZGC لإرجاع الذاكرة غير المستخدمة – JEP 351
3. أذكر بعض الميزات الهامة لإصدار Java 12؟
تم إطلاق Java 12 في 19 مارس 2019. إنه إصدار غير LTS. بعض ميزات Java 12 هي:
- تغييرات في JVM – JEP 189 ، JEP 346 ، JEP 344 ، و JEP 230.
- تبديل التعبيرات
- طريقة mismatch() للملف
- تنسيق الأرقام المضغوطة
- مجمعات Teening في واجهة برمجة التيار
- طرق جديدة في فئة String
- JEP 334: واجهة برمجة ثوابت JVM
- JEP 305: مطابقة الأنماط لعملية instanceof
- تمت إزالة السلاسل النصية الخام من JDK 12.
4. ما هي الميزات الهامة في إصدار Java 11؟
Java 11 هو الإصدار الثاني طويل الأجل بعد Java 8. لقد قاموا بتغيير نموذج الترخيص والدعم مما يعني إذا قمت بتنزيل Java 11 Oracle JDK، فسيكون هناك رسوم للاستخدام التجاري. إذا كنت ترغب في استخدام النسخة المجانية، يمكنك تنزيلها من موقع OpenJDK.
بعض الميزات الهامة لـ Java 11 هي:
- يمكننا تشغيل برنامج Java مباشرة من خلال الأمر
java
. سيتم ترجمة الملف المصدر ضمنيًا وتنفيذه. إنه جزء من تنفيذ ميزة JEP 330. - تمت إضافة 6 أساليب جديدة في فئة السلسلة String – isBlank()، lines()، strip()، stripLeading()، stripTrailing()، و repeat(). يمكنك قراءة كل التفاصيل عنها في مقالنا حول فئة سلسلة Java.
- حصلت فئة Files على طريقتين جديدتين لقراءة/كتابة بيانات السلسلة – readString() و writeString().
- يمكننا استخدام “var” مع تعبيرات اللامبدا أيضًا. إنه جزء من تنفيذ ميزة JEP 323.
- Epsilon: جامع القمامة اللا مؤثر لبيئات الاختبار. إنه ميزة تجريبية وجزء من JEP 318.
- تمت إزالة وحدات Java EE و CORBA من البنية الأساسية القياسية لـ JDK. تم أيضًا إهمال محرك Nashorn JavaScript.
- العميل الجديد لبروتوكول HTTP (JEP 321) ومسجل الرحلات (JEP 328)
للحصول على نظرة شاملة، يرجى قراءة ميزات جافا 11.
5. ما هي الميزات المهمة في إصدار جافا 10؟
جافا 10 هو أول إصدار كل ستة أشهر من شركة أوراكل، لذا فهو ليس إصدارًا رئيسيًا مثل الإصدارات السابقة. ومع ذلك، بعض الميزات المهمة في جافا 10 هي:
- الاستنتاج المحلي لنوع المتغير
- تعزيز فئة java.util.Locale وواجهات برمجة التطبيقات المرتبطة لتنفيذ ملحقات يونيكود إضافية لوسوم اللغة BCP 47.
- تمكين HotSpot VM من تخصيص كرة الجافا على جهاز ذاكرة بديل، مثل NV-DIMM، المحددة من قبل المستخدم.
- توفير مجموعة افتراضية من شهادات السلطة الشهادة الجذرية (CA) في JDK.
جافا 10 هو في الغالب إصدار صيانة، ومع ذلك أعجبني حقًا ميزة استنتاج نوع المتغير المحلي. للحصول على نظرة مفصلة حول جافا 10، يرجى قراءة ميزات جافا 10.
6. ما هي الميزات المهمة لإصدار Java 9؟
كان Java 9 إصدارًا رئيسيًا وجلب العديد من الميزات. وبعض الميزات الهامة هي:
- Java 9 REPL (JShell)
- نظام الوحدات في Java 9
- طرق الصنع لقوائم غير قابلة للتغيير، ومجموعات، وخرائط، و Map.Entry
- الطرق الخاصة في الواجهات
- تيارات ردود الفعل
- تحسينات جمع القمامة (Garbage Collector)
ستجد مزيدًا من التفاصيل حولها في ميزات Java 9.
7. ما هي الميزات المهمة لإصدار Java 8؟
تم إصدار Java 8 في مارس 2014، لذا فهو أحد المواضيع الساخنة في أسئلة المقابلات الخاصة بجافا. إذا أجبت على هذا السؤال بوضوح، فسيظهر أنك تحب أن تبقى على اطلاع دائم بأحدث التقنيات.
كان Java 8 أحد أكبر الإصدارات بعد تعليمات الاستخدام والتعميم في Java 5. وبعض الميزات الهامة ل Java 8 هي:
- التغييرات في الواجهة مع الطرق الافتراضية والثابتة
- الواجهات الوظيفية وتعبيرات اللامبدا
- واجهة برمجة تطبيقات جافا لفئات الجمع
- واجهة برمجة تطبيقات جافا للتاريخ والوقت
I strongly recommend to go through above links to get proper understanding of each one of them, also read Java 8 Features.
8. اذكر بعض مفاهيم OOPS في جافا؟
جافا مبنية على مفاهيم البرمجة الموجهة نحو الكائنات، وفيما يلي بعض مفاهيم OOPS المطبقة في برمجة جافا.
- التجريد
- التغليف
- التعددية
- الوراثة
- الترابط
- التجميع
- التركيب
اقرأ المزيد عنها في مفاهيم OOPS في جافا.
ما المقصود بالاستقلالية عن المنصة في جافا؟
الاستقلالية عن المنصة تعني أنه يمكنك تشغيل نفس البرنامج في جافا على أي نظام تشغيل. على سبيل المثال، يمكنك كتابة برنامج جافا في نظام التشغيل ويندوز وتشغيله في نظام التشغيل macOS.
ما هو الآلة الافتراضية لجافا (JVM) وهل هي مستقلة عن المنصة؟
آلة الجافا الافتراضية (JVM) هي قلب لغة برمجة جافا. تتحمل آلة الجافا المسؤولية عن تحويل رمز البايت إلى رمز قابل للقراءة من قبل الجهاز. آلة الجافا غير مستقلة عن المنصة، ولهذا السبب توجد JVM مختلفة لأنظمة التشغيل المختلفة. يمكننا تخصيص JVM باستخدام خيارات جافا، مثل تخصيص الذاكرة الدنيا والقصوى لآلة الجافا. يُسمى الأمر افتراضيًا لأنه يوفر واجهة لا تعتمد على نظام التشغيل الأساسي.
ما الفرق بين JDK و JVM؟
مجموعة تطوير جافا (JDK) هي لأغراض التطوير وآلة الجافا الافتراضية هي جزء منها لتنفيذ برامج جافا.
يوفر JDK جميع الأدوات والبرامج القابلة للتنفيذ والثنائيات اللازمة لترجمة وتصحيح الأخطاء وتنفيذ برنامج Java. الجزء الخاص بالتنفيذ يتم التعامل معه بواسطة JVM لتوفير استقلالية الجهاز.
12. ما الفرق بين JVM و JRE؟
بيئة تشغيل Java (JRE) هي تنفيذ لـ JVM. تتكون JRE من JVM وثنائيات Java وفئات أخرى لتنفيذ أي برنامج بنجاح. لا تحتوي JRE على أي أدوات تطوير مثل مترجم Java أو مصحح الأخطاء وما إلى ذلك. إذا كنت ترغب في تنفيذ أي برنامج Java ، فيجب أن تكون JRE مثبتة.
13. ما هو الفئة الأبوية لجميع الفئات؟
java.lang.Object
هو الفئة الجذرية لجميع فئات Java ولا نحتاج إلى تمديدها.
14. لماذا لا تدعم Java التوريث المتعدد؟
لا يدعم جافا التوريث المتعدد في الفئات بسبب “مشكلة الماسة”. لمعرفة المزيد عن مشكلة الماسة مع مثال، اقرأ التوريث المتعدد في جافا.
ومع ذلك، يتم دعم التوريث المتعدد في واجهات. يمكن للواجهة أن تمتد إلى واجهات متعددة لأنها تعلن فقط الطرق وسيكون التنفيذ موجودًا في الفئة المنفذة. لذا لا يوجد مشكلة في مشكلة الماسة مع الواجهات.
15. لماذا لا تعتبر جافا لغة موجهة للكائنات النقية؟
ليست جافا معتبرة كلغة موجهة للكائنات النقية لأنها تدعم أنواع البيانات الأساسية مثل int و byte و short و long، إلخ. أعتقد أن ذلك يجلب بساطة للغة أثناء كتابة الشفرة الخاصة بنا. يمكن أن تحتوي جافا على كائنات محتويات لأنواع البيانات الأساسية ولكن فقط للتمثيل، ولن يتم توفير أي فائدة.
كما نعلم، لجميع أنواع البيانات الأساسية لدينا فئات محتويات مثل Integer، Long الخ التي توفر بعض الأساليب الإضافية.
16. ما الفرق بين متغيرات المسار والمسار الفئوي؟
PATH هو متغير البيئة المستخدم من قبل نظام التشغيل لتحديد مواقع الملفات التنفيذية. ولهذا السبب عند تثبيت Java أو عند رغبتنا في أن يتم العثور على أي ملف تنفيذي من قبل نظام التشغيل، نحتاج إلى إضافة موقع الدليل في متغير PATH. إذا كنت تعمل على نظام التشغيل Windows، اقرأ هذه المقالة لتتعلم كيفية تعيين متغير PATH على Windows.
الـ Classpath خاص بـ Java ويستخدمه ملفات تنفيذية جافا لتحديد ملفات الفئات. يمكننا توفير موقع Classpath أثناء تشغيل تطبيق جافا ويمكن أن يكون دليلًا أو ملفات ZIP أو ملفات JAR وما إلى ذلك.
ما هي أهمية الطريقة الرئيسية في جافا؟
الطريقة main() هي نقطة الدخول لأي تطبيق جافا مستقل. بناء طريقة main هو public static void main(String args[])
.
الطريقة الرئيسية في جافا هي عامة وثابتة بحيث يمكن لتشغيل جافا الوصول إليها دون تهيئة الفئة. المعامل الإدخالي هو مصفوفة من السلاسل التي يمكننا من خلالها تمرير الوسائط اللازمة لتشغيل البرنامج الجافا. تحقق من هذه المقالة لتتعلم كيفية تجميع وتشغيل برنامج جافا.
ما هو التحميل الزائد والتجاوز في لغة البرمجة جافا؟
عندما يكون لدينا أكثر من طريقة واحدة بنفس الاسم في صنف واحد ولكن تختلف الوسائط، فإنه يُطلق عليه التحميل الزائد.
مفهوم التجاوز يظهر مع التوريث عندما يكون لدينا طريقتان بنفس التوقيع، واحدة في الصنف الأب والأخرى في الصنف الابن. يمكننا استخدام التعليقة @Override في الطريقة المتجاوزة في الصنف الابن للتأكد من أنه إذا تغيرت طريقة الصنف الأب، فإن ذلك سينعكس على الصنف الابن أيضًا.
هل يمكننا التحميل الزائد على الطريقة main()؟
نعم، يمكننا أن نمتلك طرقًا متعددة بنفس الاسم “main” في صنف واحد. ومع ذلك، عند تشغيل الصنف، ستبحث بيئة تشغيل جافا عن الطريقة main بصيغة public static void main(String args[])
.
نعم. هل يمكننا أن نملك عدة فصول عامة في ملف مصدر Java؟
لا يمكننا أن نملك أكثر من فصل عام واحد في ملف مصدر Java واحد. يمكن لملف مصدر واحد أن يحتوي على عدة فصول ليست عامة.
ما هو حزمة Java وأي حزمة يتم استيرادها افتراضيًا؟
حزمة Java هي الآلية التي تنظم فئات Java من خلال تجميعها. يمكن أن تكون منطق التجميع مبنيًا على الوظيفة أو الوحدات. يحتوي اسم الفئة الكامل في Java على اسم الحزمة واسم الفئة. على سبيل المثال، java.lang.Object
هو الاسم الكامل المصنف لفئة Object
التي هي جزء من حزمة java.lang
.
يتم استيراد حزمة java.lang
افتراضيًا ولا نحتاج إلى استيراد أي فئة من هذه الحزمة بشكل صريح.
ما هي المحددات النصية في Java؟
الجافا توفر التحكم في الوصول من خلال كلمات مفتاحية المحددة public، private، و protected. عندما لا يتم استخدام أي من هذه، يُطلق عليها الوصول الافتراضي.
A java class can only have public or default access modifier. Read Java Access Modifiers to learn more about these in detail.
23. ما هي كلمة المفتاح النهائية؟
تُستخدم كلمة المفتاح النهائية مع الفئة للتأكد من عدم إمكانية تمديد أي فئة أخرى لها. على سبيل المثال، فئة السلسلة String هي نهائية ولا يمكننا تمديدها.
يمكننا استخدام كلمة المفتاح النهائية مع الأساليب للتأكد من عدم إمكانية استبدالها من قبل فئات الأولاد.
يمكن استخدام كلمة المفتاح النهائية في الجافا مع المتغيرات للتأكد من أنه يمكن تعيينها مرة واحدة فقط. ومع ذلك، يمكن تغيير حالة المتغير، على سبيل المثال، يمكننا تعيين متغير نهائي لكائن مرة واحدة فقط ولكن يمكن تغيير متغيرات الكائن لاحقًا.
متغيرات واجهة الجافا هي افتراضيًا نهائية وثابتة.
24. ما هي كلمة المفتاح الثابتة؟
يمكن استخدام كلمة المفتاح الثابتة مع المتغيرات على مستوى الفئة لجعلها عالمية، أي ستشترك جميع الكائنات في نفس المتغير.
يمكننا استخدام كلمة المفتاح الثابتة مع الأساليب أيضًا. فالأسلوب الثابت يمكنه الوصول فقط إلى المتغيرات الثابتة للفئة واستدعاء الأساليب الثابتة فقط للفئة.
اقرأ المزيد بالتفصيل في الكلمة الرئيسية لـ جافا الثابتة.
٢٥. ما هو finally و finalize في جافا؟
يُستخدم كتلة finally مع try-catch لوضع الكود الذي تريد تنفيذه دائمًا، حتى إذا تم طرح استثناء بواسطة كتلة try-catch. يتم استخدام كتلة finally بشكل أساسي لإطلاق الموارد التي تم إنشاؤها في كتلة try.
finalize() هو الطريقة الخاصة في فئة Object التي يمكننا استبدالها في فئاتنا. يتم استدعاء هذه الطريقة بواسطة مجمع القمامة عندما يتم جمع الكائن. يتم استبدال هذه الطريقة عادة لإطلاق موارد النظام عندما يتم جمع الكائن.
٢٦. هل يمكننا تعريف فئة كـ ثابتة؟
لا يمكننا تعريف فئة على مستوى الأعلى كـ ثابتة، ومع ذلك يمكن تعريف فئة داخلية كـ ثابتة. إذا تم تعريف الفئة الداخلية كـ ثابتة، فإنه يُطلق عليها اسم فئة مدمجة ثابتة.
الفئة المدمجة الثابتة هي نفسها كأي فئة على مستوى الأعلى وتكون مضمنة للراحة فقط في التعبئة.
اقرأ المزيد عن الفئات الداخلية في الفئة الداخلية جافا.
ما هي الاستيراد الثابت؟
إذا كان علينا استخدام أي متغير أو طريقة ثابتة من فئة أخرى، عادةً ما نقوم باستيراد الفئة ثم نستخدم الطريقة/المتغير باسم الفئة.
يمكننا فعل نفس الشيء عن طريق استيراد الطريقة أو المتغير الثابت فقط ومن ثم استخدامه في الفئة كما لو كان ينتمي إليها.
استخدام الاستيراد الثابت يمكن أن يسبب الارتباك، لذلك من الأفضل تجنبه. استخدام الاستيراد الثابت بشكل مفرط يمكن أن يجعل برنامجك غير قابل للقراءة وغير قابل للصيانة.
28. ما هو try-with-resources في جافا؟
أحد ميزات جافا 7 هو عبارة try-with-resources لإدارة الموارد تلقائيًا. قبل جافا 7، لم يكن هناك إدارة تلقائية للموارد وكان يجب علينا إغلاق المورد بشكل صريح. عادةً ما كان يتم ذلك في البلوك finally
من عبارة try-catch. كان هذا النهج يؤدي إلى تسريبات الذاكرة عندما ننسى إغلاق المورد.
من Java 7، يمكننا إنشاء موارد داخل كتلة try واستخدامها. تأخذ Java عناية بإغلاقها بمجرد انتهاء الكتلة try-catch. اقرأ المزيد على الرابط إدارة الموارد التلقائية في جافا.
29. ما هي كتلة الإمساك المتعددة في جافا؟
كانت إحدى تحسينات جافا 7 هي كتلة الإمساك المتعددة حيث يمكننا التقاط استثناءات متعددة في كتلة واحدة للإمساك. يجعل هذا كودنا أقصر وأنظف عندما تحتوي كل كتلة إمساك على كود مماثل.
إذا كانت كتلة الإمساك تتعامل مع استثناءات متعددة، يمكنك فصلها باستخدام خط الأنابيب (|) وفي هذه الحالة، المعلمة الاستثنائية (ex) هي نهائية، لذا لا يمكنك تغييرها.
اقرأ المزيد على الرابط كتلة الإمساك المتعددة في جافا.
30. ما هي الكتلة الثابتة؟
كتلة الجافا الثابتة هي مجموعة من البيانات التي تتم تنفيذها عند تحميل الفئة في الذاكرة عن طريق ClassLoader في جافا. يُستخدم لتهيئة المتغيرات الثابتة للفئة. غالبًا ما يُستخدم لإنشاء الموارد الثابتة عند تحميل الفئة.
31. ما هي واجهة؟
الواجهات هي مفاهيم أساسية في لغة برمجة جافا وتُستخدم كثيرًا ليس فقط في JDK ولكن أيضًا في أنماط التصميم جافا، معظم الأطر والأدوات. توفر الواجهات وسيلة لتحقيق التجريد في جافا وتُستخدم لتحديد العقدة التي يجب على الفئات الفرعية تنفيذها.
الواجهات مفيدة كنقطة بداية لتحديد النوع وإنشاء تسلسل أعلى مستوى في كودنا. نظرًا لأن فئة جافا يمكنها تنفيذ واجهات متعددة، فمن الأفضل استخدام الواجهات كفئة أساسية في معظم الحالات. اقرأ المزيد في واجهة جافا.
32. ما هي الفئة المجردة؟
تُستخدم الفئات المجردة في جافا لإنشاء فئة تحتوي على تنفيذ أساسي للأساليب للفئات الفرعية. يمكن للفئة المجردة أن تحتوي على طريقة مجردة بدون جسم ويمكن أن تحتوي على طرق بتنفيذ أيضًا.
الكلمة المفتاحية abstract تُستخدم لإنشاء فئة مجردة. الفئات المجردة لا يمكن إنشاؤها مباشرة وتستخدم بشكل أساسي لتوفير قاعدة للفئات الفرعية لتمديد وتنفيذ الطرق المجردة والتعديل عليها أو استخدام الطرق المنفذة في الفئة المجردة. اقرأ النقاط الهامة حول الفئات المجردة في فئة جافا المجردة.
33. ما الفرق بين فئة مجردة وواجهة؟
- تُستخدم الكلمة المفتاحية abstract لإنشاء فئة مجردة بينما interface هي الكلمة المفتاحية للواجهات.
- يمكن أن تحتوي الفئات المجردة على تنفيذات الطرق بينما الواجهات لا يمكن.
- A class can extend only one abstract class but it can implement multiple interfaces.
- يمكننا تشغيل فئة مجردة إذا كان لديها طريقة main() بينما لا يمكننا تشغيل واجهة.
بعض الفروقات الأخرى بالتفصيل متوفرة في الفرق بين الفئة المجردة والواجهة.
34. هل يمكن لواجهة تنفيذ أو تمديد واجهة أخرى؟
الواجهات لا تنفذ واجهة أخرى، بل تمتد منها. نظرًا لأن الواجهات لا يمكن أن تحتوي على تنفيذات للطرق، فلا يوجد مشكلة الماسة. ولهذا السبب لدينا التوريث المتعدد في الواجهات، أي يمكن لواجهة أن تمتد من واجهات متعددة.
ابتداءً من جافا 8 فصاعدًا، يمكن للواجهات أن تحتوي على تنفيذات الطرق الافتراضية. لذا، لمعالجة مشكلة الماسة عندما تكون طريقة افتراضية مشتركة موجودة في واجهات متعددة، من الضروري توفير تنفيذ للطريقة في الفئة التي تنفذها. لمزيد من التفاصيل مع الأمثلة، اقرأ تغييرات واجهة جافا 8.
35. ما هي واجهة العلامة؟
A marker interface is an empty interface without any method but used to force some functionality in implementing classes by Java. Some of the well known marker interfaces are Serializable and Cloneable.
36. ما هي فئات الكبسولة؟
فئات الكبسولة في جافا هي التمثيل الكائني لثمانية أنواع أساسية في جافا. جميع فئات الكبسولة في جافا لا يمكن تغييرها وهي نهائية. يسمح كبسولة جافا 5 وكبسولة الغيرة بسهولة التحويل بين الأنواع الأساسية وفئات الكبسولة المقابلة لها.
اقرأ المزيد على الرابط فئات الكبسولة في جافا.
37. ما هو Enum في جافا؟
تم إدخال Enum في جافا 1.5 كنوع جديد يتكون حقوله من مجموعة ثابتة من الثوابت. على سبيل المثال، في جافا، يمكننا إنشاء Direction كـ enum بحقول ثابتة مثل EAST، WEST، NORTH، SOUTH.
enum هو الكلمة المفتاحية لإنشاء نوع enum ومشابهة للفئة. ثوابت Enum يتم تعيينها ضمنياً كثوابت static و final. اقرأ المزيد بالتفصيل على تعريف جافا.
38. ما هي التعليقات في جافا؟
التعليقات في جافا توفر معلومات حول الكود وليس لها تأثير مباشر على الكود الذي تعلق عليه. تم تقديم التعليقات في جافا 5. التعليق هو بيانات عن البرنامج مضمنة في البرنامج نفسه. يمكن تحليلها باستخدام أداة تحليل التعليق أو المترجم. يمكننا أيضًا تحديد توافر التعليق إما أثناء وقت الترجمة فقط أو حتى وقت التشغيل. التعليقات المدمجة في جافا هي @Override ، @Deprecated و @SuppressWarnings. اقرأ المزيد على الرابط java annotations.
واجهة برمجة التطبيقات للانعكاس في جافا توفر القدرة على تفحص وتعديل سلوك تطبيق جافا أثناء التشغيل. يمكننا تفحص فئة جافا أو واجهة أو تعيين والحصول على تفاصيل طرقها وحقولها. واجهة برمجة التطبيقات للانعكاس هي موضوع متقدم ويجب تجنب استخدامه في البرمجة العادية. يمكن أن يؤدي استخدام واجهة برمجة التطبيقات للانعكاس إلى كسر نمط التصميم مثل نمط الفردي من خلال استدعاء المنشئ الخاص أي انتهاك قواعد محددات الوصول.
على الرغم من أننا لا نستخدم واجهة برمجة التطبيقات Reflection في البرمجة العادية، إلا أنها مهمة جدًا لدينا. لا يمكننا الاستغناء عن أي إطار عمل مثل Spring، Hibernate، أو خوادم مثل Tomcat، JBoss بدون واجهة برمجة التطبيقات Reflection. فهي تقوم باستدعاء الطرق المناسبة وإنشاء الفئات من خلال واجهة برمجة التطبيقات Reflection وتستخدمها كثيرًا للمعالجة الأخرى.
اقرأ دليل Java Reflection للحصول على معرفة معمقة حول واجهة برمجة التطبيقات Reflection.
ما هو التكوين في جافا؟
التكوين هو تقنية التصميم لتنفيذ العلاقة “لديه” في الفئات. يمكننا استخدام التكوين الكائني لإعادة استخدام الكود.
يتم تحقيق التكوين في جافا عن طريق استخدام متغيرات الفئة التي تشير إلى كائنات أخرى. الفائدة من استخدام التكوين هي أننا يمكننا التحكم في رؤية الكائنات الأخرى لفئات العميل وإعادة استخدام ما نحتاجه فقط. اقرأ المزيد مع مثال على ذلك في مثال التكوين في جافا.
ما هي فوائد التكوين مقارنة بالتوريث؟
واحدة من أفضل الممارسات في برمجة جافا هي “تفضيل التركيب على الوراثة”. بعض الأسباب المحتملة هي:
- أي تغيير في الفئة الأساسية قد يؤثر على الفئة الفرعية حتى لو لم نكن نستخدم أساليب الفئة الأساسية. على سبيل المثال، إذا كان لدينا طريقة test() في الفئة الفرعية وفجأة قام شخص ما بإدخال طريقة test() في الفئة الأساسية، فسنحصل على أخطاء تجميع في الفئة الفرعية. لن تواجه التركيب هذه المشكلة أبدًا لأننا نستخدم فقط الأساليب التي نحتاج إليها.
- الوراثة تعرض جميع أساليب ومتغيرات الفئة الأساسية للعميل وإذا لم يكن لدينا تحكم في تصميم الفئة الأساسية، فقد يؤدي ذلك إلى ثغرات أمنية. التركيب يسمح لنا بتوفير وصول محدود إلى الأساليب وبالتالي أكثر أمانًا.
- يمكننا الحصول على ربط في وقت التشغيل في التركيب حيث تقوم الوراثة بربط الفئات في وقت الترجمة. لذا يوفر التركيب مرونة في استدعاء الأساليب.
يمكنك قراءة المزيد عن فوائد التركيب مقابل الوراثة على الرابط java composition vs inheritance.
42. كيفية فرز مجموعة من الكائنات المخصصة في جافا؟
نحتاج إلى تنفيذ واجهة Comparable لدعم ترتيب الكائنات المخصصة في مجموعة. تحتوي واجهة Comparable على طريقة compareTo(T obj) التي تُستخدم من قبل طرق الترتيب ومن خلال توفير تنفيذ هذه الطريقة، يمكننا توفير طريقة افتراضية لترتيب مجموعة الكائنات المخصصة.
ومع ذلك، إذا كنت ترغب في الفرز بناءً على معايير مختلفة، مثل فرز مجموعة موظفين بناءً على الراتب أو العمر، يمكننا إنشاء مثيلات Comparator وتمريرها كطريقة فرز. لمزيد من التفاصيل اقرأ Java Comparable and Comparator.
43. ما هو الصنف الداخلي في جافا؟
يمكننا تعريف صنف داخلي داخل صنف ويُعرفون بالصنف المدمج. أي صنف مدمج غير ثابت يُعرف باسم صنف داخلي. ترتبط الصنوف الداخلية بكائن الصنف ويمكنها الوصول إلى جميع المتغيرات والطرق في الصنف الخارجي. نظرًا لأن الصنوف الداخلية مرتبطة بالحالة، لا يمكننا الحصول على أي متغيرات ثابتة فيها.
يمكننا الحصول على صنف داخلي محلي أو صنف داخلي مجهول داخل صنف. لمزيد من التفاصيل اقرأ java inner class.
44. ما هو الفصل الداخلي المجهول؟
A local inner class without a name is known as an anonymous inner class. An anonymous class is defined and instantiated in a single statement. Anonymous inner class always extend a class or implement an interface.
بما أن الفصل المجهول ليس له اسم، فمن غير الممكن تعريف بناء للفصل المجهول. يمكن الوصول إلى الفصل الداخلي المجهول فقط في النقطة التي يتم فيها تعريفه.
45. ما هو Classloader في جافا؟
Classloader في جافا هو البرنامج الذي يقوم بتحميل برنامج البايت الثنائي إلى الذاكرة عندما نريد الوصول إلى أي فئة. يمكننا إنشاء Classloader الخاص بنا عن طريق تمديد فئة ClassLoader وتجاوز طريقة loadClass(String name). تعلم المزيد على الرابط java classloader.
46. ما هي أنواع مختلفة من Classloaders؟
هناك ثلاثة أنواع من محملات الفئات المدمجة في جافا.
- Bootstrap ClassLoader – يقوم بتحميل فئات JDK الداخلية، وعادة ما يقوم بتحميل ملف rt.jar وغيره من الفئات الأساسية.
- محمّل صفائف التوسيعات – يقوم بتحميل الصفائف من دليل التوسيعات في JDK، الذي يكون عادة في دليل $JAVA_HOME/lib/ext.
- محمّل صف النظام – يقوم بتحميل الصفائف من مسار الصف الحالي الذي يمكن تعيينه أثناء استدعاء برنامج باستخدام خيارات سطر الأوامر -cp أو -classpath.
47. ما هو المُشغّل ثلاثي العناصر في جافا؟
المُشغّل ثلاثي العناصر في جافا هو المُشغّل الشرطي الوحيد الذي يأخذ ثلاثة عناصر. إنه بديل مكون من سطر واحد عن التعبير “if-then-else” ويُستخدم كثيرًا في برمجة جافا. يمكننا استخدام المُشغّل الثلاثي في شروط if-else أو حتى شروط التبديل باستخدام مُشغّلات ثلاثية متداخلة. يمكن العثور على مثال في مُشغّل ثلاثي جافا.
48. ماذا يفعل الكلمة الرئيسية super؟
يمكن استخدام الكلمة الرئيسية super للوصول إلى طريقة الفئة الأساسية عندما يتم تجاوز الطريقة في الفئة الابنة.
يمكننا استخدام الكلمة الرئيسية super لاستدعاء بناة الفئة الأساسية في بناء الفئة الابنة ولكن في هذه الحالة، يجب أن تكون البيانات الأولى في طريقة البناء.
يمكن رؤية استخدام الكلمة الرئيسية super في تنفيذ الفئة الابنة أدناه.
49. ما هي عبارة break وعبارة continue؟
يمكننا استخدام عبارة break لإنهاء حلقة for أو while أو do-while. يمكننا استخدام عبارة break في عبارة switch للخروج من حالة التبديل. يمكنك رؤية مثال على عبارة break في كسر الجافا . يمكننا استخدام break مع التسمية لإنهاء الحلقات المتداخلة.
تخطي عبارة continue التكرار الحالي للحلقة for أو while أو do-while. يمكننا استخدام عبارة continue مع التسمية لتخطي التكرار الحالي للحلقة الخارجية.
50. ما هو الكلمة الرئيسية this في جافا؟
توفر الكلمة الرئيسية this المرجع إلى الكائن الحالي وتُستخدم بشكل أساسي للتأكد من استخدام متغيرات الكائن ، وليس المتغيرات المحلية التي لها نفس الاسم.
يمكننا أيضًا استخدام هذه الكلمة الرئيسية لاستدعاء بناءات أخرى من بناء.
51. ما هو البناء الافتراضي؟
البناء الافتراضي الذي لا يحتوي على وسيطات في الفئة يُعرف بالبناء الافتراضي. عندما لا نقوم بتعريف أي بناء للفئة، يقوم مترجم جافا تلقائيًا بإنشاء بناء افتراضي خالي من الوسيطات للفئة. إذا كانت هناك بناءات أخرى معرفة، فإن المترجم لن ينشئ بناءً افتراضيًا لنا.
52. هل يمكننا استخدام try بدون كتلة catch؟
نعم، يمكننا استخدام بيان try-finally وبالتالي تجنب كتلة catch.
53. ما هو جمع القمامة؟
جمع القمامة هو عملية النظر في ذاكرة الطوب (الهيب)، وتحديد الكائنات التي تُستخدم والتي لا تُستخدم، وحذف الكائنات غير المستخدمة. في جافا، يتم التعامل تلقائيًا مع عملية تخصيص الذاكرة بواسطة جامع القمامة.
يمكننا تشغيل مجمع القمامة بالكود Runtime.getRuntime().gc()
أو استخدام الطريقة المساعدة System.gc()
. للحصول على تحليل مفصل لذاكرة الكومة وجمع القمامة، يرجى قراءة Java Garbage Collection.
54. ما هي التسلسل والفك تسلسل؟
يمكننا تحويل كائن Java إلى تيار يُسمى التسلسل. بمجرد تحويل الكائن إلى تيار، يمكن حفظه في ملف أو إرساله عبر الشبكة أو استخدامه في اتصالات الجواهر.
يجب أن ينفذ الكائن واجهة Serializable ويمكننا استخدام java.io.ObjectOutputStream لكتابة الكائنات إلى ملف أو إلى أي كائن OutputStream. اقرأ المزيد في Java Serialization.
عملية تحويل بيانات التيار التي تم إنشاؤها من خلال التسلسل إلى كائن تُسمى فك تسلسل. اقرأ المزيد في Java Deserialization.
كيفية تشغيل ملف JAR من خلال سطر الأوامر؟
يمكننا تشغيل ملف JAR باستخدام أمر java ولكن يتطلب وجود إدخال Main-Class في ملف تعريف جار. Main-Class هو نقطة الدخول إلى الجار والتي يستخدمها أمر java لتنفيذ الفئة. تعرف على المزيد على ملف جار جافا.
ما هو استخدام فئة System؟
فئة Java System هي واحدة من الفئات الأساسية. واحدة من أسهل الطرق لتسجيل المعلومات لأغراض تصحيح الأخطاء هي طريقة System.out.print().
فئة System هي نهائية بحيث لا يمكننا استخدام التوريث لتغيير سلوكها. فئة System لا توفر أي بنايات عامة، لذا لا يمكننا إنشاء مثيل لهذه الفئة ولهذا السبب جميع طرقها هي ثابتة.
بعض الطرق الخدمية لفئة System هي لنسخ الأرايه، الحصول على الوقت الحالي، قراءة المتغيرات البيئية. اقرأ المزيد على فئة System في جافا.
57. ما هي كلمة الرئيسة instanceof؟
يمكننا استخدام كلمة instanceof للتحقق مما إذا كان كائن ينتمي إلى فئة أم لا. يجب تجنب استخدامه قدر الإمكان. مثال على الاستخدام هو:
نظرًا لأن str من النوع String في وقت التشغيل، يقوم البيان الشرطي الأول بالتقييم إلى الصحيح والثاني بالتقييم إلى الخطأ.
58. هل يمكننا استخدام السلسلة مع حالة التبديل؟
كانت إحدى ميزات Java 7 تحسين حالة التبديل للسماح بالسلاسل. لذلك إذا كنت تستخدم Java 7 أو أحدث، يمكنك استخدام السلسلة في تصريحات switch-case. اقرأ المزيد في مثال Java switch-case String.
59. هل Java هي مرور حسب القيمة أم مرور حسب المرجع؟
هذا سؤال مربك جدًا، نعلم أن متغيرات الكائن تحتوي على الإشارة إلى الكائنات في مساحة الذاكرة الطردية. عند استدعاء أي طريقة، يتم تمرير نسخة من هذه المتغيرات وتخزينها في ذاكرة الأكتوب للطريقة. يمكننا اختبار أي لغة سواء كانت تمريرًا بالمرجع أم تمريرًا بالقيمة من خلال طريقة تبديل عامة بسيطة، لمعرفة المزيد اقرأJava is Pass by Value and Not Pass by Reference.
60. ما الفرق بين ذاكرة الكومة وذاكرة العنقود؟
الفارق الرئيسي بين ذاكرة الكومة وذاكرة العنقود هو كالتالي:
- يتم استخدام ذاكرة الكومة من جميع أجزاء التطبيق بينما تُستخدم ذاكرة العنقود فقط بواسطة خيط تنفيذ واحد.
- عند إنشاء كائن، يتم تخزينه دائمًا في مساحة الكومة وتحتوي ذاكرة العنقود فقط على المتغيرات الأساسية المحلية والمتغيرات المرجعية إلى الكائنات في مساحة الكومة.
- يتم إدارة الذاكرة في العنقود بطريقة LIFO بينما يتم ذلك بشكل أكثر تعقيدًا في ذاكرة الكومة لأنه يتم استخدامها على نطاق عالمي.
للحصول على شرح مفصل مع برنامج عيني، اقرأJava Heap vs Stack Memory.
61. هل مترجم جافا مخزن في JDK أو JRE أو JVM؟
مهمة مترجم جافا هي تحويل برنامج جافا إلى بايت كود، لدينا تنفيذية javac
لذلك. لذا يجب أن يكون مخزنًا في JDK، لا نحتاج إليه في JRE و JVM هي مجرد المواصفات.
62. ما سيكون الناتج من البرامج التالية؟
السياق: طريقة ثابتة في الصف
الإجابة: لن يتم تجميع الكود لأنه لا يمكننا أن نمتلك طريقة صف Object بكلمة static. لاحظ أن صف Object لديه طريقة toString(). ستحصل على خطأ في وقت التجميع يقول “لا يمكن لهذه الطريقة الثابتة إخفاء الطريقة المثيلية من Object”. السبب في ذلك هو أن الطريقة الثابتة تنتمي إلى الصف وبما أن كل قاعدة صف هي Object، فلا يمكننا أن نمتلك نفس الطريقة في النموذج بالإضافة إلى الصف. لن تحصل على هذا الخطأ إذا قمت بتغيير اسم الطريقة من toString() إلى شيء آخر غير موجود في الصف الأساسي Object
.
السياق: استدعاء طريقة ثابتة
الجواب: حسنًا، هذه حالة غريبة. لقد رأينا جميعًا استثناء الإشارة النائبة عندما نستدعي طريقة على الكائن الذي هو NULL. ولكن هنا سيعمل هذا البرنامج ويطبع “تم استدعاء اختبار فو”.
السبب في ذلك هو تحسين كود المترجم للجافا. عندما يتم ترجمة الكود الجافا لإنتاج الكود البايتي، يعرف أن foo() هو طريقة ثابتة ويجب استدعاؤها باستخدام الفئة. لذلك يغير استدعاء الطريقة obj.foo()
إلى Test.foo()
وبالتالي لا توجد NullPointerException
.
I must admit that it’s a very tricky question and if you are interviewing someone, this will blow his mind off. ?
هذا كل شيء بالنسبة لأسئلة وأجوبة مقابلات الجافا الأساسية. سأواصل إضافة المزيد من الأسئلة إلى القائمة، إذا كنت تعتقد أنني فاتني أي أسئلة مهمة، يرجى إعلامي من خلال التعليقات.
Source:
https://www.digitalocean.com/community/tutorials/core-java-interview-questions-and-answers