JavaRush /مدونة جافا /Random-AR /تحليل الأسئلة والأجوبة من المقابلات لمطور جافا. الجزء 2

تحليل الأسئلة والأجوبة من المقابلات لمطور جافا. الجزء 2

نشرت في المجموعة
مرحبا مرة أخرى بالجميع! نواصل البحث عن إجابات لأكثر من 250 سؤالًا للمطورين المبتدئين والمتوسطين والكبار. الأسئلة مثيرة للاهتمام للغاية، وأنا شخصياً أحب تحليلها: في مثل هذه اللحظات، يمكنك اكتشاف فجوات في المعرفة النظرية، وفي أكثر الأماكن غير المتوقعة. تحليل أسئلة وأجوبة المقابلة.  الجزء 2 - 1الجزء السابق تجدونه في هذه المقالة . ولكن قبل أن نبدأ، أريد أن أذكرك بما يلي:
  1. سأتخطى الأسئلة التي تتقاطع مع هذه السلسلة من المقالات حتى لا أكرر المعلومات مرة أخرى. أوصي بقراءة هذه المواد، لأنها تحتوي على الأسئلة الأكثر شيوعًا (الشعبية) لمقابلة Java Core.
  2. يتم تقديم الأسئلة حول DOU باللغة الأوكرانية، ولكن سيكون لدي كل شيء هنا باللغة الروسية.
  3. يمكن وصف الإجابات بمزيد من التفصيل، لكنني لن أفعل ذلك، لأن الإجابة على كل سؤال قد تستغرق مقالًا كاملاً. ولن يطلبوا منك مثل هذه التفاصيل في أي مقابلة.
إذا لزم الأمر، سأترك الروابط لدراسة أعمق. لنطير!

11. قم بتسمية كافة أساليب فئة الكائن

تحتوي فئة الكائن على 11 طريقة:
  • Class<?> getClass() — الحصول على فئة الكائن الحالي؛
  • int hashCode() — الحصول على رمز التجزئة للكائن الحالي؛
  • قيمة منطقية (Object obj) - مقارنة الكائن الحالي بكائن آخر؛
  • استنساخ الكائن () - إنشاء وإرجاع نسخة من الكائن الحالي؛
  • String toString() — الحصول على تمثيل سلسلة لكائن ما؛
  • إعلام باطلة () - إيقاظ مؤشر ترابط واحد ينتظر شاشة هذا الكائن (اختيار الخيط عشوائي) ؛
  • void notifyAll() - يوقظ جميع المواضيع المنتظرة على شاشة هذا الكائن؛
  • انتظار باطلة () - يقوم بتبديل الخيط الحالي إلى وضع الاستعداد (تجميده) على الشاشة الحالية، ويعمل فقط في كتلة متزامنة حتى ينبه البعض أو ينبه الكل الخيط؛
  • انتظار باطلة (مهلة طويلة) - يقوم أيضًا بتجميد الخيط الحالي على الشاشة الحالية (على الشاشة المتزامنة الحالية)، ولكن مع مؤقت للخروج من هذه الحالة (أو مرة أخرى: حتى يستيقظ الإخطار أو إعلام الجميع)؛
  • الانتظار الفارغ (مهلة طويلة، int nanos) - طريقة مشابهة لتلك الموصوفة أعلاه، ولكن مع توقيتات أكثر دقة للخروج من التجميد؛
  • void Finalize() - قبل حذف هذا الكائن، يستدعي جامع البيانات المهملة هذه الطريقة (أخيرًا). يتم استخدامه لتنظيف الموارد المحتلة.
لاستخدام أساليب hashCode و equals و clone و toString وfinish بشكل صحيح، يجب إعادة تعريفها، مع مراعاة المهمة والظروف الحالية.

12. ما الفرق بين تجربة الموارد ومحاولة الالتقاط أخيرًا عند التعامل مع الموارد؟

عادةً، عند استخدام محاولة الالتقاط أخيرًا، يتم استخدام الكتلة النهائية لإغلاق الموارد. قدمت Java 7 نوعًا جديدًا من عامل التشغيل Try-with-resources ، وهو نظير لـ try-catch-أخيرًا لتحرير الموارد، ولكنه أكثر إحكاما وقابلية للقراءة. دعونا نتذكر كيف تبدو محاولة الالتقاط أخيرًا :
String text = "some text......";
BufferedWriter bufferedWriter = null;
try {
   bufferedWriter = new BufferedWriter(new FileWriter("someFileName"));
   bufferedWriter.write(text);
} catch (IOException e) {
   e.printStackTrace();
} finally {
   try {
       bufferedWriter.close();
   } catch (IOException e) {
       e.printStackTrace();
   }
}
لنعد الآن كتابة هذا الكود، لكن باستخدام Try-with-resources :
String text = "some text......";
try(BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("someFileName"))) {
   bufferedWriter.write(text);
} catch (IOException e) {
   e.printStackTrace();
}
لقد أصبح الأمر أسهل بطريقة أو بأخرى، ألا تعتقد ذلك؟ بالإضافة إلى التبسيط، هناك نقطتان:
  1. في Try-with-resources ، يجب على الموارد المعلنة بين قوسين (والتي سيتم إغلاقها) أن تقوم بتنفيذ الواجهة AutoCloseable وطريقتها الوحيدة، Close() .

    يتم تنفيذ طريقة الإغلاق في كتلة ضمنية أخيرًا ، وإلا كيف سيفهم البرنامج بالضبط كيفية إغلاق مورد معين؟

    ولكن، على الأرجح، نادرًا ما تكتب تطبيقاتك الخاصة للموارد وطريقة إغلاقها.

  2. تسلسل تنفيذ الكتلة:

    1. حاول منع .
    2. ضمنيا في نهاية المطاف .
    3. كتلة التقاط تلتقط الاستثناءات في الخطوات السابقة.
    4. صريحة في نهاية المطاف .

    كقاعدة عامة، الاستثناءات التي تظهر في أسفل القائمة تقاطع تلك التي تظهر في الأعلى.

تخيل موقفًا عند استخدام Try-catch-أخيرًا يحدث استثناء في Try . وفقًا لذلك، يبدأ تنفيذ كتلة التقاط معينة على الفور ، حيث تكتب استثناءً آخر (على سبيل المثال، مع رسالة تصف الخطأ بمزيد من التفاصيل)، وتريد أن تقوم الطريقة بطرح هذا الاستثناء بشكل أكبر. بعد ذلك يأتي تنفيذ الكتلة النهائية ، ويتم طرح استثناء فيها أيضًا. لكن هذا مختلف. أي من هذين الاستثناءين ستطرحه هذه الطريقة في النهاية؟ الاستثناء الذي تم طرحه بواسطة الكتلة النهائية ! ولكن هناك أيضًا نقطة واحدة تتعلق بالمحاولة باستخدام الموارد . الآن دعونا نلقي نظرة على سلوك تجربة الموارد في نفس الموقف. نحصل على استثناء في كتلة المحاولة عندما نحاول إغلاق الموارد في طريقة Close() ، أي في النهاية الضمنية . أي من هذه الاستثناءات سوف يمسك ؟ تلك التي تم إلقاؤها بواسطة كتلة المحاولة ! سيتم تجاهل الاستثناء من الطريقة الضمنية أخيرًا (من طريقة الإغلاق () ). يُسمى هذا التجاهل أيضًا بقمع الاستثناءات.

13. ما هي العمليات المتعلقة بالبت؟

عمليات البت هي عمليات على سلاسل البت التي تتضمن العمليات المنطقية وإزاحات البت. العمليات المنطقية:
  • bitwise AND - يقارن قيم البتات، وفي هذه العملية، أي بت تم ضبطه على 0 (خطأ) يعين البت المقابل في النتيجة على أنه 0. أي أنه إذا كانت القيمة التي تتم مقارنتها في كلتا القيمتين هي 1 (صحيح)، فإن وستكون النتيجة أيضا 1.

    يُشار إليه بـ - AND ، &

    مثال: 10111101 & 01100111 = 00100101

  • bitwise OR هي العملية العكسية للعملية السابقة. أي بت يتم ضبطه على 1 يحدد بتًا مشابهًا في النتيجة كـ 1. وبناءً على ذلك، إذا كانت البتة 0 في كلا القيمتين المقارنتين، فإن البت الناتج سيكون أيضًا 0.

    يُشار إليه بـ - OR ، |

    مثال: 10100101 | 01100011 = 11100111

  • bitwise NOT - يتم تطبيقه على قيمة واحدة، ويقلب (يعكس) البتات. وهذا يعني أن تلك البتات التي كانت 1 ستصبح 0؛ وتلك التي كانت 0 ستصبح 1.

    يُشار إليه بـ - NOT ، ~

    مثال: ~10100101 = 01011010

  • حصريًا للبت OR - يقارن قيم البتات، وإذا كان البت في كلتا القيمتين يساوي 1، فستكون النتيجة 0، وإذا كان البت في كلا القيمتين 0، فستكون النتيجة 0. أي، لكي تكون النتيجة تساوي 1، يجب أن تكون إحدى البتات فقط تساوي 1، والثانية تساوي 0.

    يُشار إليه بـ - XOR ، ^

    مثال: 10100101 ^ 01100011 = 11000110

إزاحة البت - >> أو << إزاحة بتات القيمة في الاتجاه المحدد، بالرقم المحدد. تمتلئ المناصب الشاغرة بالأصفار. على سبيل المثال:
  1. 01100011 >> 4 = 00000110
  2. 01100011 << 3 = 00011000
يوجد أيضًا استثناء عند تحويل رقم سالب إلى اليمين. كما تتذكر، فإن البت الأول هو المسؤول عن الإشارة، وإذا كان هذا البت يساوي 1، فإن الرقم يكون سالبًا. إذا قمت بتحريك رقم سالب، فلن يتم ملء المراكز الشاغرة بالأصفار، بل بالآحاد، لأنه من الضروري الحفاظ على بت الإشارة. على سبيل المثال: 10100010 >> 2 = 11101000 في الوقت نفسه، يوجد في Java عامل تشغيل إضافي غير موقع لليمين >>> هذا العامل هو نظير >>، عند النقل، يتم ملء المناصب الشاغرة بـ 0، بغض النظر عما إذا كان الرقم سالب أو موجب. على سبيل المثال: 10100010 >>> 2 = 00101000 اقرأ المزيد عن عمليات البت هنا . تحليل أسئلة وأجوبة المقابلة.  الجزء 2 - 2كأمثلة على استخدام تحولات البت في Java، يمكنك الاستشهاد بطريقة hash() الخاصة بـ HashMap، والتي تُستخدم لتحديد رمز تجزئة داخلي خاص لمفتاح: تحليل أسئلة وأجوبة المقابلة.  الجزء 2 - 3تتيح لك هذه الطريقة توزيع البيانات بالتساوي في HashMap لتقليل عدد الاصطدامات.

14. ما هي الفئات القياسية غير القابلة للتغيير التي تعتبر كائنات في Java؟

غير قابل للتغيير هو كائن لا يسمح بتغيير معلماته الأصلية. قد تحتوي على طرق تُرجع كائنات جديدة من نوع معين، مع المعلمات التي تريد تغييرها. بعض الكائنات القياسية غير القابلة للتغيير:
  • إلى حد بعيد، فإن الكائن الأكثر شهرة غير القابل للتغيير في Java هو String؛
  • مثيلات فئات المجمع التي تغلف الأنواع القياسية: Boolean، Character، Byte، Short، Integer، Long، Double، Float؛
  • الكائنات التي تُستخدم عادةً للأعداد الكبيرة بشكل خاص - BigInteger وBigDecimal؛
  • كائن يمثل وحدة في تتبع المكدس (على سبيل المثال، في استثناء مكدس) StackTraceElement؛
  • كائن فئة الملف - يمكنه تغيير الملفات، ولكنه في نفس الوقت غير قابل للتغيير؛
  • UUID - والذي يُستخدم غالبًا كمعرف فريد للعناصر؛
  • جميع كائنات فئة الحزمة java.time؛
  • Locale - يستخدم لتحديد منطقة جغرافية أو سياسية أو ثقافية.

15. ما هي مزايا الكائن غير القابل للتغيير على الكائنات العادية؟

  1. تكون هذه الكائنات آمنة عند استخدامها في بيئة متعددة الخيوط . باستخدامها، لا داعي للقلق بشأن فقدان البيانات بسبب ظروف سباق الخيط. على عكس العمل مع الكائنات العادية: في هذه الحالة، سيتعين عليك التفكير بعناية فائقة والعمل على آليات استخدام الكائن في بيئة موازية.
  2. الكائنات غير القابلة للتغيير هي مفاتيح جيدة في الخريطة، لأنه إذا كنت تستخدم كائنًا قابلاً للتغيير ثم قام الكائن بتغيير حالته، فقد يصبح الأمر مربكًا عند استخدام HashMap: سيظل الكائن موجودًا، وإذا كنت تستخدم يحتوي على مفتاح () فقد لا يكون كذلك يتم إيجاده.
  3. تعتبر الكائنات غير القابلة للتغيير رائعة لتخزين البيانات غير القابلة للتغيير (الثابتة) التي لا ينبغي تغييرها أبدًا أثناء تشغيل البرنامج.
  4. "الذرية حتى الفشل" - إذا قام كائن غير قابل للتغيير بإلقاء استثناء، فلن يبقى في حالة غير مرغوب فيها (مكسورة).
  5. من السهل اختبار هذه الفئات.
  6. ليست هناك حاجة إلى آليات إضافية مثل مُنشئ النسخ وتنفيذ النسخ.

أسئلة حول OOP

تحليل أسئلة وأجوبة المقابلة.  الجزء 2 - 4

16. ما هي مميزات OOP بشكل عام ومقارنتها بالبرمجة الإجرائية؟

إذن مميزات OOP:
  1. تعد كتابة التطبيقات المعقدة أسهل من البرمجة الإجرائية، حيث يتم تقسيم كل شيء إلى وحدات صغيرة - كائنات تتفاعل مع بعضها البعض - ونتيجة لذلك، تتلخص البرمجة في العلاقات بين الكائنات.
  2. تعد التطبيقات المكتوبة باستخدام OOP أسهل بكثير في التعديل (طالما يتم اتباع مفاهيم التصميم).
  3. نظرًا لأن البيانات والعمليات الموجودة عليها تشكل كيانًا واحدًا، فلا يتم تلطيخها في جميع أنحاء التطبيق (وهو ما يحدث غالبًا مع البرمجة الإجرائية).
  4. يحمي تغليف المعلومات البيانات الأكثر أهمية من المستخدم.
  5. من الممكن إعادة استخدام نفس الكود مع بيانات مختلفة، لأن الفئات تسمح لك بإنشاء العديد من الكائنات، كل منها له قيم السمات الخاصة به.
  6. يسمح لك الوراثة وتعدد الأشكال أيضًا بإعادة استخدام التعليمات البرمجية الموجودة وتوسيعها (بدلاً من تكرار وظائف مماثلة).
  7. سهولة توسيع التطبيق مقارنة بالنهج الإجرائي.
  8. يتيح نهج OOP إمكانية التجريد من تفاصيل التنفيذ.

17. أخبرنا ما هي أوجه القصور الموجودة في OOP

ولسوء الحظ، فهي موجودة أيضا:
  1. يتطلب OOP الكثير من المعرفة النظرية التي يجب إتقانها قبل أن تتمكن من كتابة أي شيء.تحليل أسئلة وأجوبة المقابلة.  الجزء 2 - 5
  2. ليس من السهل فهم أفكار OOP وتطبيقها عمليًا (يجب أن تكون فيلسوفًا قليلاً في القلب).
  3. عند استخدام OOP، ينخفض ​​أداء البرنامج قليلاً بسبب التنظيم الأكثر تعقيدًا للنظام.
  4. يتطلب أسلوب OOP ذاكرة أكبر، نظرًا لأن كل شيء يتكون من فئات وواجهات وأساليب تشغل ذاكرة أكبر بكثير من المتغيرات العادية.
  5. الوقت اللازم للتحليل الأولي أكبر من الوقت اللازم للتحليل الإجرائي.

18. ما هو تعدد الأشكال الساكن والديناميكي

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

19. تعريف مبدأ التجريد في OOP

التجريد في OOP هو وسيلة لتسليط الضوء على مجموعة من الخصائص المهمة لكائن ما، باستثناء التفاصيل غير المهمة. أي أنه عند تصميم برنامج بأسلوب OOP، فإنك تركز على النماذج بشكل عام، دون الخوض في تفاصيل تنفيذها. في Java، تكون الواجهات مسؤولة عن التجريد . على سبيل المثال، لديك جهاز، وستكون هذه هي الواجهة. والتفاعلات المختلفة معها - على سبيل المثال، تشغيل المحرك، استخدام علبة التروس - هي وظائف نستخدمها دون الخوض في تفاصيل التنفيذ. بعد كل شيء، في الوقت الحالي، عندما تقود السيارة، لا تفكر في كيفية تحقيق علبة التروس للغرض المقصود منها، أو كيف يقوم المفتاح بتشغيل المحرك، أو بالضبط كيف تدير عجلة القيادة العجلات. وحتى إذا تم استبدال تنفيذ أحد هذه الوظائف (على سبيل المثال، المحرك)، فقد لا تلاحظ ذلك. هذا لا يهمك: لا تدخل في تفاصيل التنفيذ. من المهم بالنسبة لك أن يتم تنفيذ الإجراء. في الواقع، هذا مجرد تجريد من تفاصيل التنفيذ. هذا هو المكان الذي سنتوقف فيه اليوم: نواصل!تحليل أسئلة وأجوبة المقابلة.  الجزء 2 - 6
مواد أخرى في السلسلة:
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION