الممارسة أم النظرية؟ ما هو أكثر أهمية؟ سيقول الكثيرون أن الممارسة أكثر أهمية بالطبع. مثلًا، تدرب بأقصى ما تستطيع وستكون سعيدًا. أجرؤ على عدم الاتفاق مع هذا. تحليل الأسئلة والأجوبة من المقابلات لمطور جافا.  الجزء 8 - 1خلال المقابلات، لن يعرف أحد مدى براعتك في الممارسة. سيتم سؤالك بالتفصيل وفقًا للنظرية. وعندها فقط، عندما تجتاز جميع جولات المقابلات وتبدأ في المشروع، ستستخدم مهاراتك العملية. قد تعترض: في بعض الأحيان يعطونك مهمة اختبارية ولا تزال هناك حاجة إلى التدريب. أنا لا أجادل، يتم تقديمها في بعض الأحيان، ولكن حقيقة الأمر هي أنه في بعض الأحيان، ولكن يتم إجراء مقابلة نظرية دائمًا. هل تشعر بالفرق؟ لذلك، يجب أن يكون لديك أساس نظري متين تحت قدميك، والذي سنواصل تعزيزه اليوم. وهي أننا سنستمر في تحليل الأسئلة التي يتم طرحها غالبًا أثناء المقابلات.

71. ماذا يحدث إذا لم نقم بتجاوز طريقة toString() الخاصة بـ Enum؟

لنفترض أن لدينا التعداد التالي :
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD;
}
لنعرض الطالب في وحدة التحكم عن طريق استدعاء toString() عليه :
System.out.println(Role.STUDENT.toString());
النتيجة في وحدة التحكم:
طالب
أي أن toString() ‎ للتعداد الافتراضي هو اسم الثابت نفسه.

72. هل من الممكن تحديد مُنشئ داخل التعداد؟

نعم بالتأكيد. من خلال المنشئ يتم تعيين قيم متغيرات التعداد الداخلي. على سبيل المثال، دعونا نضيف حقلين إلى التعداد السابق - ageFrom و ageTo - للإشارة إلى الفئة العمرية لكل دور:
public enum Role {
   STUDENT(5,18),
   TEACHER(20,60),
   DIRECTOR(40,70),
   SECURITY_GUARD(18,50);

   int ageFrom;
   int ageTo;

   Role(int ageFrom, int ageTo) {
       this.ageFrom = ageFrom;
       this.ageTo = ageTo;
   }
}

73. ما الفرق بين == و يساوي ()؟

هذا أحد الأسئلة الأكثر شيوعًا لمقابلة مطوري Java. لنبدأ بحقيقة أننا عندما نقارن قيمًا بسيطة ( int , char , double ...) فإننا نفعل ذلك باستخدام == ، نظرًا لأن المتغيرات تحتوي على قيم محددة ويمكننا مقارنتها. والمتغيرات البدائية ليست كائنات كاملة - فهي لا ترث من الكائن وليس لديها طريقة يساوي () . عندما نتحدث عن مقارنة المتغيرات التي تشير إلى كائنات، فإن == ستقارن فقط قيمة المراجع - سواء كانت تشير إلى نفس الكائن أم لا. وحتى لو كان أحد الكائنات مطابقًا لكائن آخر، فإن المقارنة عبر == ستعطي نتيجة سلبية ( خطأ )، لأن هذا كائن مختلف. كما تفهم، يتم استخدام طريقة يساوي () لمقارنة المتغيرات المرجعية . هذه إحدى الطرق القياسية لفئة الكائن ، وهي ضرورية لإجراء مقارنة كاملة للكائنات. لكن الأمر يستحق التوضيح على الفور: لكي تعمل هذه الطريقة بشكل صحيح، يجب إعادة تعريفها من خلال الكتابة بالضبط عن كيفية مقارنة كائنات هذه الفئة. ما لم تقم بتجاوز الطريقة، فستقوم افتراضيًا بمقارنة الكائنات حسب == . في IntelliJ IDEA ، يمكنك تجاوزه تلقائيًا (باستخدام أدوات IDEA) -> alt + Insert ، في النافذة التي تظهر، حدد equal() و hashCode() -> حدد حقول الفصل التي يجب أن تشارك -> وفويلا، التنفيذ التلقائي لـ تم الانتهاء من الأساليب. فيما يلي مثال على الشكل الذي ستبدو عليه طريقة التساوي التي تم إنشاؤها تلقائيًا لفئة Cat البسيطة التي تحتوي على حقلين - int age و String name :
@Override
public boolean equals(final Object o) {
   if (this == o) return true;
   if (o == null || this.getClass() != o.getClass()) return false;
   final Cat cat = (Cat) o;
   return this.age == cat.age &&
           Objects.equals(this.name, cat.name);
}
إذا تحدثنا عن الفرق بين == و يساوي بالنسبة للتعدادات ، فلا يوجد الكثير منه. تحليل الأسئلة والأجوبة من المقابلات لمطور جافا.  الجزء 8 - 2بعد كل شيء، يقوم التعداد بتخزين الثوابت، وحتى عند مقارنة القيم المتشابهة باستخدام == ، سنحصل على true ، نظرًا لأن المراجع ستكون دائمًا لنفس الكائنات. حسنًا، عند استخدام يساوي، سنعمل أيضًا على حل الوظيفة بشكل صحيح، خاصة إذا ذهبت إلى نص طريقة يساوي للتعداد ، سترى أنه في فئة التعداد يكون تنفيذ الطريقة كما يلي : في الداخل - المقارنة القديمة الجيدة بالرجوع إليها! لتلخيص: بالنسبة للتعداد ، المقارنة بين == و يساوي صحيحة.تحليل الأسئلة والأجوبة من المقابلات لمطور جافا.  الجزء 8 - 3تحليل الأسئلة والأجوبة من المقابلات لمطور جافا.  الجزء 8 - 4

74. ماذا تفعل الطريقة الترتيبية () في التعداد؟

عند استدعاء التابع int ordinal() ‎ على عنصر التعداد ، سنحصل على الرقم الترتيبي من الصفر لهذه القيمة في سلسلة التعدادات العامة. لنستخدم هذه الطريقة على عنصر واحد من التعداد السابق الذي تمت مناقشته - الدور :
System.out.println(Role.DIRECTOR.ordinal());
وفقًا لذلك، ستعرض وحدة التحكم ما يلي:
2

75. هل من الممكن استخدام Enum مع TreeSet أو TreeMap في Java؟

يعد استخدام أنواع التعداد في TreeSet و TreeMap أمرًا مقبولًا. ويمكننا أن نكتب:
TreeSet<Role> treeSet = new TreeSet<>();
treeSet.add(Role.SECURITY_GUARD);
treeSet.add(Role.DIRECTOR);
treeSet.add(Role.TEACHER);
treeSet.add(Role.STUDENT);
treeSet.forEach(System.out::println);
وستعرض وحدة التحكم:
مدير أمن الطلاب والمعلمين_GUARD
لقد تلقينا الإخراج ليس بالترتيب الأبجدي. النقطة المهمة هي أنه إذا استخدمنا عناصر التعداد لقيم TreeSet أو كمفاتيح لـ TreeMap ، فسيتم فرز العناصر بترتيبها الطبيعي (الترتيب الذي تم تحديدها به في التعداد ). يساعدنا فهم هذه الميزات في كتابة تعليمات برمجية أفضل.تحليل الأسئلة والأجوبة من المقابلات لمطور جافا.  الجزء 8 - 5

76. كيف ترتبط الأساليب الترتيبية () والمقارنة مع () في التعداد؟

كما ذكرنا سابقًا، تقوم الدالة ordinal() ‎ بإرجاع الرقم الترتيبي لقيمة ما في قائمة التعداد العامة. أيضًا، في تحليل السؤال السابق، رأيت أن عناصر التعدادات، مرة واحدة، على سبيل المثال، في TreeSet (مجموعة مرتبة) تأخذ الترتيب الذي تم الإعلان عنه في enum . وكما نعلم، تقوم TreeSet و TreeMap بفرز العناصر عن طريق استدعاء طريقة CompareTo() الخاصة بالواجهة القابلة للمقارنة . من هذا يمكننا أن نفترض أن فئة Enum تطبق الواجهة القابلة للمقارنة ، ويتم تنفيذها في طريقة CompareTo() ، والتي يتم من خلالها استخدام ordinal() لتعيين ترتيب الفرز. بعد الدخول إلى فئة Enum ، نرى تأكيدًا لذلك: تحليل الأسئلة والأجوبة من المقابلات لمطور جافا.  الجزء 8 - 6ونص الطريقة نفسها: لا يتم استدعاء تحليل الأسئلة والأجوبة من المقابلات لمطور جافا.  الجزء 8 - 7الطريقة الترتيبية () هنا. بدلا من ذلك، يتم استخدام المتغير الترتيبي - الرقم الترتيبي للعنصر في التعداد. الطريقة الترتيبية () نفسها ليست تحليل الأسئلة والأجوبة من المقابلات لمطور جافا.  الجزء 8 - 8أكثر من مجرد مُحضر للمتغير الترتيبي .

77. اكتب مثالاً EnumM

في الأسئلة التي تمت مناقشتها أعلاه، قدمت بالفعل أمثلة على التعدادات ولا أرى فائدة من تكرار الكود (على سبيل المثال، السؤال رقم 72 حول المُنشئ في التعداد).

78. هل من الممكن استخدام التعداد في حالة التبديل؟

إنه ممكن وضروري! بالنظر إلى ممارستي السابقة، لاحظت أن أحد أكثر الأماكن شيوعًا لاستخدام التعداد هو البناء المنطقي مثل Switch . في هذه الحالة، يمكنك توفير جميع الأشكال الممكنة للحالة ، وبعد كتابة المنطق لجميع قيم التعداد - وقد لا يكون استخدام العامل الافتراضي ضروريًا! بعد كل شيء، إذا كنت تستخدم سلسلة أو قيمة رقمية، على سبيل المثال، من النوع int ، فقد تتلقى قيمة غير متوقعة، وهذا بدوره مستحيل باستخدام التعداد . كيف سيبدو المفتاح بالنسبة للمثال الذي تمت مناقشته سابقًا:
public void doSomething(Role role) {
   switch (role) {
       case STUDENT:
           // некая логика для STUDENT
           break;
       case TEACHER:
           // некая логика для TEACHER
           break;
       case DIRECTOR:
           // некая логика для DIRECTOR
           break;
       case SECURITY_GUARD:
           // некая логика для SECURITY_GUARD
           break;
   }
}

79. كيفية الحصول على جميع القيم المتاحة في مثيل التعداد؟

إذا كنت بحاجة إلى الحصول على جميع مثيلات التعداد، فهناك طريقة values() ‎ التي تُرجع مصفوفة من جميع القيم المتاحة لتعداد معين بالترتيب الطبيعي (بالترتيب الذي تم تحديدها به في التعداد ). مثال:
Role[] roles = Role.values();
for (Role role : roles) {
   System.out.println(role);
}
ستعرض وحدة التحكم الإخراج التالي:
مدير أمن الطلاب والمعلمين_GUARD

دفق API

80.ما هو الدفق في جافا؟

تعد Java Stream طريقة جديدة نسبيًا للتفاعل مع تدفق البيانات، والتي بدورها تسمح لك بمعالجة البيانات الكبيرة بشكل أكثر سهولة وإحكامًا، بالإضافة إلى موازنة معالجة البيانات بين عدد معين من سلاسل العمليات، مما يمكن أن يوفر تعزيزًا للأداء في الاستخدام. وظائف. لا يمكن مناقشة هذا الموضوع بشكل أعمق باختصار، لذلك سأترك هنا رابطًا لمقال يمكن أن يساعدك في الغوص في هذا الموضوع.تحليل الأسئلة والأجوبة من المقابلات لمطور جافا.  الجزء 8 - 9

81. ما هي الخصائص الرئيسية للمعاملات؟

الموضوع يسمى Stream API، لكن السؤال يتعلق بالمعاملة. حسنًا... أولاً، دعونا نتعرف على ماهية المعاملة. المعاملة عبارة عن مجموعة من عمليات قاعدة البيانات المتسلسلة التي تمثل وحدة منطقية للعمل مع البيانات. يمكن إكمال المعاملة إما بشكل كامل وبنجاح، مع الحفاظ على سلامة البيانات وبشكل مستقل عن المعاملات الأخرى التي تجري بالتوازي، أو لا يمكن إكمالها على الإطلاق، وفي هذه الحالة ليس لها أي تأثير. لذلك، المعاملات لها أربع خصائص رئيسية، والتي تسمى ACID للاختصار . دعونا نلقي نظرة على كيفية تمثيل كل حرف من هذا الاختصار: أ - الذرية - الذرية - تضمن هذه الخاصية عدم تسجيل أي معاملة جزئيًا في النظام. إما سيتم تنفيذ كافة العمليات الفرعية، أو لن يتم تنفيذ أي منها ( الكل أو لا شيء ). ج - الاتساق - الاتساق هو خاصية تضمن أن كل معاملة ناجحة تسجل النتائج الصحيحة فقط. أي أن هذا ضمان أنه في حالة نجاح المعاملة سيتم استيفاء كافة القواعد والقيود التي يفرضها النظام على بيانات محددة، وإلا فلن تتم المعاملة وتعود البيانات الموجودة في النظام إلى سابق عهدها ولاية. I - العزلة - العزلة هي خاصية تنص على أنه أثناء تنفيذ المعاملة، يجب ألا تؤثر المعاملات الموازية على نتيجتها. هذه الخاصية كثيفة الاستخدام للموارد، لذلك يتم تنفيذها عادةً جزئيًا من خلال السماح بمستويات معينة من العزل التي تحل مشكلات عزل معينة. سنناقش هذا بمزيد من التفصيل في السؤال التالي. تحليل الأسئلة والأجوبة من المقابلات لمطور جافا.  الجزء 8 - 10د - المتانة - تضمن هذه الخاصية أنه إذا تلقى المستخدم تأكيدًا من النظام بإتمام المعاملة، فيمكنه التأكد من أن التغييرات التي أجراها لن يتم إلغاؤها بسبب بعض الفشل. أي أنه يمكنك التأكد من أن أي فشل في نظام التشغيل لن يفعل أي شيء لبياناتك إذا كنت قد تلقيت بالفعل تأكيدًا بإتمام معاملتك بنجاح.

82. ما هي مستويات عزل المعاملة؟

كما قلت سابقًا، يعد توفير عزل ACID عملية كثيفة الاستخدام للموارد. لذلك، هذه الخاصية راضية جزئيا. هناك مستويات مختلفة من العزلة، وكلما ارتفع المستوى، زاد التأثير على الإنتاجية. قبل الانتقال إلى مستويات عزل المعاملات، نحتاج إلى إلقاء نظرة على المشاكل المختلفة المتعلقة بعزل المعاملات غير الكافي :
  • القراءة الوهمية - عندما يتم استدعاء نفس العينة (نفس الاستعلام) بشكل متكرر داخل نفس المعاملة، تختلف البيانات المستلمة، والذي يحدث بسبب إدراج البيانات بواسطة معاملة أخرى؛

  • القراءة غير المتكررة - عندما يتم استدعاء نفس العينة (نفس الاستعلام) بشكل متكرر داخل نفس المعاملة، تختلف البيانات المستلمة، والذي يحدث بسبب التغييرات (التحديث) وحذف البيانات من خلال معاملة أخرى؛

  • القراءة القذرة - عملية قراءة البيانات المضافة أو المتغيرة بواسطة معاملة لم يتم تأكيدها (تراجعها) لاحقًا، أي. قراءة البيانات غير الصالحة؛

  • التحديث المفقود - عندما تقوم معاملات مختلفة بتغيير نفس البيانات في نفس الوقت، يتم فقدان جميع التغييرات باستثناء التغييرات الأخيرة (تذكرنا بمشكلة "حالة السباق" في بيئة متعددة الخيوط).

تتميز مستويات عزل المعاملات بمشكلات العزل التي تحمي منها. دعونا نفكر في شكل جدول بمستويات العزل وما هي المشاكل التي تحمي منها:
مستوى العزلة القراءة الوهمية قراءة غير متكررة القراءة القذرة التحديث المفقود
قابل للتسلسل + + + +
قراءة متكررة - + + +
قراءة ملتزمة - - + +
قراءة غير ملتزم بها - - - +
لا أحد - - - -
ولا تنس الجانب الآخر من العملة: كلما ارتفع مستوى العزل، كلما استغرقت معالجة المعاملات وقتًا أطول (إذا تم تنفيذ العديد من المعاملات بالتوازي). إذا كنت تريد التعمق في هذا الموضوع، فإليك مقالة رائعة لتبدأ بها.

83. ما هو الفرق بين البيان والبيان المعد؟

وهنا لا يوجد انتقال سلس للغاية إلى ميزات تقنية JDBC . لذا، أولاً، دعونا نتعرف على ماهية البيان في الواقع . هذا هو الكائن الذي يتم استخدامه لإنشاء استعلامات SQL. يستخدم JDBC ثلاثة أنواع - البيان ، و PreparedStatement ، و CallableStatement . لن ننظر إلى CallableStatement اليوم: فلنتحدث عن الفرق بين البيان و PreparedStatement .
  1. يتم استخدام العبارة لتنفيذ استعلامات SQL بسيطة بدون معلمات واردة ومدرجة ديناميكيًا. يتم استخدام PreviewStatement مع القدرة على إدراج معلمات الإدخال ديناميكيًا.

  2. لتعيين المعلمات في PreparationStatement، تتم كتابة معلمات الإدخال في الطلب كعلامات استفهام، بحيث يمكن بعد ذلك إدراج قيمة بدلاً من ذلك باستخدام أدوات ضبط مختلفة، مثل setDouble() و setFloat() و setInt() و setTime() ... . ونتيجة لذلك، لن تتمكن من إدراج نوع خاطئ من البيانات في استعلامك.

  3. يتم " ترجمة PreadStatement " ويستخدم التخزين المؤقت، لذلك يمكن أن يكون تنفيذه أسرع قليلاً من الاستعلام من كائنات البيان . ونتيجة لذلك، تتم كتابة استعلامات SQL التي يتم تنفيذها بشكل متكرر ككائنات PreparationStatement لتحسين الأداء .

  4. البيان عرضة لحقن SQL، بينما يمنعها PreviewdStatement . اقرأ المزيد حول التخلص من عمليات حقن SQL وأفضل الممارسات الأخرى في أمان Java في هذه المقالة .

إذا كنت تبدأ في دراسة تقنية ربط تطبيق Java بقاعدة البيانات - JDBC، أنصحك بالبدء بهذه المقالة . حسنًا، عند هذه النقطة سنتوقف اليوم.تحليل الأسئلة والأجوبة من المقابلات لمطور جافا.  الجزء 8 - 11
مواد أخرى في السلسلة: