أسئلة مقابلة Java SE 8 وأجوبتها (الجزء الأول)

في هذه المقالة، سنناقش بعض الأسئلة المهمة لمقابلات Java SE 8 مع الإجابات. سأكتب مقالة أخرى للنقاش حول الأسئلة المتبقية لمقابلات Java SE 8.

Java 8 Interview Questions

  1. لماذا نحتاج إلى تغيير Java مرة أخرى؟
  2. ميزات Java SE 8 الجديدة؟
  3. مزايا ميزات Java SE 8 الجديدة؟
  4. ما هو تعبير Lambda؟
  5. ما هي الأجزاء الثلاثة لتعبير Lambda؟ ما هو نوع تعبير Lambda؟
  6. ما هو واجهة وظيفية؟ ما هو واجهة SAM؟
  7. هل من الممكن تحديد واجهة وظيفية خاصة بنا؟ ما هو @FunctionalInterface؟ ما هي القواعد لتحديد واجهة وظيفية؟
  8. هل تعتبر تعليمة @FunctionalInterface إلزامية لتحديد واجهة وظيفية؟ ما هو استخدام التعليمة @FunctionalInterface؟ لماذا نحتاج إلى واجهات وظيفية في Java؟
  9. متى نستخدم Java 8 Stream API؟ لماذا نحتاج إلى استخدام Java 8 Stream API في مشاريعنا؟
  10. شرح الفروق بين واجهة API Collection وواجهة API Stream؟
  11. ما هو Spliterator في Java SE 8؟ الاختلافات بين Iterator و Spliterator في Java SE 8؟
  12. ما هو Optional في Java 8؟ ما هو استخدام Optional؟ مزايا Optional في Java 8؟
  13. ما هو استنتاج النوع؟ هل استنتاج النوع متاح في الإصدارات القديمة مثل Java 7 وقبل 7 أم أنه متاح فقط في Java SE 8؟

أسئلة وأجوبة حول Java 8

في هذا القسم، سنأخذ كل سؤال من القسم السابق ونجيب عليه بوصف مفصل. إذا كنت بحاجة إلى مزيد من المعلومات والأمثلة، يرجى الاطلاع على مشاركات Java SE 8 السابقة المتاحة في JournalDEV.

لماذا نحتاج إلى تغيير في جافا مرة أخرى؟

قد قدمت شركة أوراكل مفاهيم جديدة كثيرة في Java SE 8 لإدخال الفوائد التالية:

  • للاستفادة من وحدات المعالجة المتعددة الحالية بكفاءة
    في الآونة الأخيرة، يمكننا ملاحظة تغيرات جذرية في الأجهزة. في الوقت الحاضر، جميع الأنظمة تستخدم وحدات معالجة متعددة النواة (2 نواة، 4 نواة، 8 نواة، 16 نواة، إلخ) لنشر وتشغيل تطبيقاتها. نحتاج إلى بناء بنيات برمجية جديدة في جافا لاستخدام هذه المعالجات متعددة النواة بكفاءة لتطوير تطبيقات عالية الوصول المتزامن وقابلة للتوسع بشكل كبير. – للاستفادة من ميزات البرمجة الوظيفية
    قامت شركة أوراكل بإدخال العديد من مفاهيم البرمجة الوظيفية كجزء من جافا SE 8 للاستفادة من مزايا البرمجة الوظيفية.

ما هي ميزات جافا SE 8؟

  • تعبيرات Lambda
  • واجهات وظيفية
  • واجهة برمجة التيارات
  • واجهة برمجة التاريخ والوقت
  • الطرق الافتراضية والطرق الثابتة في الواجهات
  • مفصل
  • إشارات الأساليب والبناء
  • تحسينات واجهة برمجة المجموعات
  • تحسينات في أدوات التزامن
  • تحسينات في الهيكل الشوكي/الانضمام
  • التكرار الداخلي
  • عملية مصفوفة موازية وعمليات مجموعة موازية
  • اختياري
  • تعليقات الأنواع والتعليقات القابلة للتكرار
  • استعراض معلمة الأساليب
  • ترميز وفك تشفير Base64
  • تحسينات IO و NIO2
  • محرك Nashorn JavaScript
  • تحسينات javac
  • تغييرات JVM
  • ملامح Java 8 Compact Profiles: compact1، compact2، compact3
  • JDBC 4.2
  • JAXP 1.6
  • Java DB 10.10
  • الشبكات
  • تغييرات الأمان

ما هي مزايا ميزات Java SE 8 الجديدة؟

يمكننا الحصول على الفوائد التالية من ميزات Java SE 8 الجديدة:

  • كود أكثر وضوحًا وقراءةً
  • كود أكثر قابلية لإعادة الاستخدام
  • كود أكثر قابلية للاختبار والصيانة
  • كود عالي التزامن ومقياسي بشكل كبير
  • كتابة كود متوازي
  • كتابة عمليات مثل قاعدة البيانات
  • تطبيقات أداء أفضل
  • كود أكثر إنتاجية

ما هو تعبير Lambda؟

تعبير لامبدا هو وظيفة مجهولة تقبل مجموعة من المعلمات وتعيد النتائج. تعبير لامبدا هو كتلة من الكود بدون أي اسم، بمعلمات أو بدونها وبنتائج أو بدونها. يتم تنفيذ هذه الكود عند الطلب.

ما هي الأجزاء الثلاثة لتعبير لامبدا؟ ما هو نوع تعبير لامبدا؟

A Lambda Expression contains 3 parts:

  • قائمة المعلمات
    تعبير لامبدا يمكن أن يحتوي على صفر أو واحد أو أكثر من المعلمات. اختياري.- مشغل السهم لامبدا
    “->” يعرف باسم مشغل السهم لامبدا. يفصل قائمة المعلمات والجسم.- جسم تعبير لامبدا

نوع “Journal Dev” هو java.lang.String. نوع “true” هو Boolean. بنفس الطريقة، ما هو نوع تعبير لامبدا؟ نوع تعبير لامبدا هو واجهة وظيفية. مثال:- ما هو نوع التعبير لامبدا التالي؟

   () -> System.out.println("Hello World");

هذا التعبير لامبدا ليس له معلمات ولا يعيد أي نتائج. لذلك، نوعه هو “java.lang.Runnable” واجهة وظيفية.

ما هي واجهة الدالة؟ ما هي واجهة SAM؟

A Functional Interface is an interface, which contains one and only one abstract method. Functional Interface is also known as SAM Interface because it contains only one abstract method. SAM Interface stands for Single Abstract Method Interface. Java SE 8 API has defined many Functional Interfaces.

هل من الممكن تحديد واجهة الدالة الخاصة بنا؟ ما هو@FunctionalInterface؟ ما هي القواعد لتحديد واجهة الدالة؟

نعم، من الممكن تحديد واجهات الدوال الخاصة بنا. نستخدم تعليق @FunctionalInterface في Java SE 8 لوسم واجهة كواجهة دالة. يجب علينا اتباع هذه القواعد لتحديد واجهة الدالة:

  • تعريف واجهة تحتوي على طريقة مجردة واحدة فقط.
  • لا يمكننا تحديد أكثر من طريقة مجردة واحدة.
  • استخدام تعليق @FunctionalInterface في تعريف الواجهة.
  • يمكننا تحديد أي عدد من الطرق الأخرى مثل الطرق الافتراضية، والطرق الثابتة.
  • إذا قمنا بتجاوز أسلوب فئة java.lang.Object كأسلوب مجرد، فذلك لا يعتبر كأسلوب مجرد. هل الإشارة

مطلوبة لتعريف واجهة وظيفية؟ ما هو استخدام الإشارة @FunctionalInterface؟ لماذا نحتاج إلى واجهات وظيفية في جافا؟

ليس من الضروري تعريف واجهة وظيفية بالإشارة @FunctionalInterface. إذا لم نرغب ، يمكننا تجاهل هذه الإشارة. ومع ذلك ، إذا استخدمناها في تعريف واجهة وظيفية ، يجبر مترجم جافا على استخدام طريقة واحدة فقط ضمن تلك الواجهة. لماذا نحتاج إلى واجهات وظيفية؟ نوع تعبير لامبدا في جافا SE 8 عبارة عن واجهة وظيفية. أينما نستخدم تعابير لامبدا يعني أننا نستخدم واجهات وظيفية.

متى ننتقل إلى Java 8 Stream API؟ لماذا نحتاج إلى استخدام Java 8 Stream API في مشاريعنا؟

عندما يرغب مشروعنا في Java في أداء العمليات التالية، فإنه من الأفضل استخدام Java 8 Stream API للحصول على العديد من الفوائد:

  • عندما نريد أداء عمليات مشابهة لعمليات قواعد البيانات. على سبيل المثال، عندما نريد أداء عملية التجميع (groupby)، أو عملية الترتيب (orderby)، وما إلى ذلك.
  • عندما نريد أداء العمليات بشكل كسلان.
  • عندما نريد كتابة برمجة بأسلوب وظيفي.
  • عندما نريد أداء العمليات بشكل متوازي.
  • عندما نريد استخدام التكرار الداخلي
  • عندما نريد أداء عمليات الأنابيب (Pipelining).
  • عندما نريد تحقيق أداء أفضل.

شرح الفروق بين Collection API و Stream API؟

S.No. Collection API Stream API
1. It’s available since Java 1.2 It is introduced in Java SE 8
2. It is used to store Data (A set of Objects). It is used to compute data (Computation on a set of Objects).
3. We can use both Spliterator and Iterator to iterate elements. We can use forEach to performs an action for each element of this stream. We can’t use Spliterator or Iterator to iterate elements.
4. It is used to store unlimited number of elements. Stream API is used to process on the elements of a Collection.
5. Typically, it uses External Iteration concept to iterate Elements such as Iterator. Stream API uses internal iteration to iterate Elements, using forEach methods.
6. Collection Object is constructed Eagerly. Stream Object is constructed Lazily.
7. We add elements to Collection object only after it is computed completely. We can add elements to Stream Object without any prior computation. That means Stream objects are computed on-demand.
8. We can iterate and consume elements from a Collection Object at any number of times. We can iterate and consume elements from a Stream Object only once.

ما هو Spliterator في جافا SE 8؟ الفروقات بين Iterator و Spliterator في جافا SE 8؟

Spliterator تعني مقسم المكرر. تم إدخاله حديثًا بواسطة Oracle Corporation كجزء من جافا SE 8. مثل Iterator و ListIterator ، فهو أيضًا واحد من واجهة المكرر.

S.No. Spliterator Iterator
1. It is introduced in Java SE 8. It is available since Java 1.2.
2. Splitable Iterator Non-Splitable Iterator
3. It is used in Stream API. It is used for Collection API.
4. It uses Internal Iteration concept to iterate Streams. It uses External Iteration concept to iterate Collections.
5. We can use Spliterator to iterate Streams in Parallel and Sequential order. We can use Iterator to iterate Collections only in Sequential order.
6. We can get Spliterator by calling spliterator() method on Stream Object. We can get Iterator by calling iterator() method on Collection Object.
7. Important Method: tryAdvance() Important Methods: next(), hasNext()

ما هو Optional في جافا 8؟ ما هو استخدام Optional؟ مزايا Java 8 Optional؟

Optional: Optional هو فئة نهائية تم تقديمها كجزء من جافا SE 8. يتم تعريفه في حزمة java.util. يُستخدم لتمثيل القيم الاختيارية التي إما أن تكون موجودة أو غير موجودة. يمكن أن يحتوي على قيمة واحدة أو قيمة صفر. إذا كان يحتوي على قيمة ، يمكننا الحصول عليها. وإلا ، لا شيء. إنه مجموعة محدودة ، أي يحتوي على عنصر واحد فقط. إنه بديل لقيمة “null”. المزايا الرئيسية لـ Optional هي:

  • يُستخدم لتجنب فحوصات القيمة الفارغة (null).
  • يُستخدم لتجنب “NullPointerException”.

ما هو استنتاج النوع؟ هل يتوفر استنتاج النوع في الإصدارات القديمة مثل جافا 7 وقبل الإصدار 7، أم أنه متاح فقط في جافا إس إي 8؟

يعني استنتاج النوع تحديد النوع بواسطة المترجم أثناء وقت الترجمة. ليس هو ميزة جديدة في جافا إس إي 8، بل هو متاح في جافا 7 وقبل جافا 7 أيضًا. قبل جافا 7:- لنستكشف مصفوفات جافا. قم بتعريف مصفوفة سلسلة بقيم كما هو موضح أدناه:

String str[] = { "Java 7", "Java 8", "Java 9" };

هنا قمنا بتعيين بعض القيم النصية عن الجهة اليمنى، ولكننا لم نحدد نوعها. يقوم مترجم جافا تلقائيًا بالاستنتاج وينشئ سلسلة نصية. جافا 7: قدمت شركة أوراكل “مشغل الماسي” كميزة جديدة في جافا إس إي 7 لتجنب تعريف النوع غير الضروري في التعميم.

Map<String,List<Customer>> customerInfoByCity = new HashMap<>();

هنا لم نحدد معلومات النوع عند الجهة اليمنى، ببساطة قمنا بتعريف مشغل الماسي في جافا إس إي 7. جافا إس إي 8: قدمت شركة أوراكل تحسينًا كبيرًا على مفهوم استنتاج النوع في جافا إس إي 8. نستخدم هذا المفهوم لتعريف تعبيرات لامبدا، وظائف، مراجع الأساليب، إلخ.

ToIntBiFunction<Integer,Integer> add = (a,b) -> a + b;

{
“error”: “Upstream error…”
}

Source:
https://www.digitalocean.com/community/tutorials/javase8-interview-questions-part1