فيما يلي أسئلة متقدمة نسبيًا ، ونادراً ما يتم طرحها خلال المقابلات لأنها قد تقوم بإخراج القائم بإجراء المقابلة. ولكن يمكنك أن تجد بعض الوقت لممارسة ذلك بنفسك.
1. System.exit (0) سيتخطى تنفيذ Block أخيرًا
System.SetSecurityManager (New SecurityManager () {Override public void checkexit (int status) {throw new threaddeath () ؛}}) ؛ حاول {system.exit (0) ؛ } أخيرًا {system.out.println ("in the أخيرًا block") ؛ } لماذا يخرج هذا الرمز في الكتلة أخيرًا؟ لماذا لم يتم طباعة معلومات تتبع المكدس؟
2. String str = "Hello" ؛ حيث str هو كائن سلسلة
على عكس C ++ ، فإن المتغيرات في Java هي إما أنواع أو مراجع أساسية. لا يمكن أن يكون المتغير كائنًا. هذا يعني تعبير مثل هذا:
String str = "Hello" ؛ سلسلة text = "bye" ؛ STR == نص ؛ // قارن مراجعين بدلاً من المحتوى str = text ؛ // تعيين مرجع النص إلى Str
في معظم الحالات ، لا يوجد فرق كبير ، لكن الكتابة مثل هذا يمكن أن تسبب الارتباك بسهولة.
Final StringBuilder sb = new StringBuilder () ؛ SB.Append ("Hello") ؛ // هذه المرجع من النوع النهائي ، وليس هذا المثال. الطريقة (SB) ؛ // يمكن تعديل هذا المثيل من خلال الأساليب ، ولكن لا يمكن تعديل هذا المتغير 3. تسرب ذاكرة Java هو نفسه كما يفهم المبرمجون C ++
تعريف تسرب الذاكرة على ويكيبيديا هو "في علوم الكمبيوتر ، إذا لم يدير البرنامج تخصيص الذاكرة بشكل صحيح ، فسيحدث تسرب الذاكرة. في البرمجة الموجهة للكائنات ، إذا كان لا يمكن الوصول إلى كائن في الذاكرة في الكود ، فهذا عبارة عن تسرب ذاكرة." ومع ذلك ، في Java ، يمكن الوصول إلى الأشياء دائمًا ، وسيتم مسح أولئك الذين ليس لديهم مراجع قوية. يعني مصطلح تسرب الذاكرة في Java: هناك كائنات لا ينبغي أن تكون موجودة في الذاكرة ، وعادة ما لا تزال بعض الموارد التي لم يتم استخدامها مخزنة في المجموعة.
4. برمجة متعددة مؤشرات الترقيم صعبة
إذا لم تكن لديك خبرة ، فإن البرمجة متعددة الخيوط صعبة بالفعل. إذا قمت فقط بإلقاء مجموعة من التعليمات البرمجية في مجموعة من المواضيع وتنفيذها ، فلا يمكن حل المشكلة على الإطلاق ، فستكون فوضى. ولكن إذا كان بإمكانك تنفيذ تخصيص مؤشرات الترابط عند الطلب ، والتحكم في تفاعلات المواضيع ، واستخدام أنماط بسيطة يمكن أن يفهمها بعض أعضاء الفريق أيضًا ، تصبح المشكلة أبسط بكثير. بالطبع ، هناك تحد آخر عليك أن تجعل الجميع في الفريق يتبع قواعدك
5. لا تهتم بالعروض المختلفة بين العمليات المختلفة
سمعت مؤخرًا أن هناك مشكلة ، تتضمن إضافة الأعداد الصحيحة ، والوصول إلى الذاكرة ، والمعامل ، والإخراج إلى وحدة التحكم. على الرغم من أن كل عملية من هذه العمليات هي ترتيب أبطأ من الحجم من السابق ، فإن هذا الرجل يريد فقط تحسين أسرع عملية وإضافة واستبدالها ببعض العمليات الأكثر تكلفة. إذا كنت ترغب حقًا في تحسين الأداء ، فمن الأفضل استبدال هذه العمليات باهظة الثمن بتشغيل رخيصة. إذا كان عنق الزجاجة الخاص بك في الأجهزة ، على سبيل المثال ، يجب عليك قراءة عدد كبير من الملفات من القرص الثابت ، فإن تعديل رمز البرنامج أمر غير مجدي ، لأن المشكلة ليست على الإطلاق.
6. الأرقام العشوائية عشوائية
مجموعة محددة من الأرقام العشوائية تشبه أرقام بعض الأنماط. لقد تحدثت بالفعل عن هذه القضية في هذه المقالة. كثير من الناس لا يعتقدون أن الأرقام التي تم إنشاؤها بواسطة مولدات الأرقام العشوائية ليست عشوائية في الواقع.
7. يجب تجنب النقاط العائمة لأنها ستنتج أخطاء عشوائية
لنفس العملية ، ستنتج أرقام النقاط العائمة نفس الخطأ في كل مرة. الأخطاء يمكن التنبؤ بها وبالتالي يمكن التحكم فيها. إذا كنت تعرف ما ستفعله والتمسك ببعض القواعد البسيطة ، مثل التقريب عن النتائج ، فإن أرقام النقطة العائمة لن ترتكب أخطاء أكثر من BigDecimal. بالإضافة إلى ذلك ، يكون أكثر قابلية للقراءة وأكثر من مائة مرة أسرع (وهناك عدد أقل من كائنات القمامة التي تم إنشاؤها في نفس الوقت).
8. المنطقة الزمنية أبدية
سبب سوء الفهم هذا هو أنه مع تغير الوقت ، تتغير المنطقة الزمنية. هذا يعني أن أوروبا/لندن كانت 1970/1/1 01:00 بدلاً من 00:00. لماذا؟ لأن لندن استخدمت وقت التوفير في ضوء النهار في العامين من عام 1968 إلى عام 1971.
في السنوات القليلة الماضية ، تغيرت العديد من المناطق الزمنية أيضًا. اعتادت موسكو أن تكون المنطقة الثالثة الشرقية (GMT+3) ، لكنها الآن هي المقاطعة الرابعة الشرقية (GMT+4) (بدءًا من 27 مارس 2011). إذا نظرت إلى وقت عام 2010 ، فستجد أنه شرق 3 و East 4.
هناك بعض الأشياء التي قد تبدو مندهشًا:
فبراير من السويد في عام 1721 لديه 30 يوما.
كان اليوم الأول في إنجلترا في عام 1751 25 مارس ، والذي كان بعد 11 يومًا من فرنسا.
بعد أن تتبنى الولايات المتحدة التقويم الغريغوري ، يتتبع مئات السنين ، بحيث يمكن التعبير عن التواريخ المسجلة في الأصل في تقويمين (عادة ما يتم توفير تاريخين في نفس الوقت لمزيد من الدقة). على سبيل المثال ، تغير عيد ميلاد جورج واشنطن من 11 فبراير 1731 إلى 22 فبراير 1732.
9. عندما تقرأ متغيرًا غير متطاير في مؤشر ترابط ، يمكنك أخيرًا قراءة القيمة التي تم تحديثها.
ظهرت هذه المشكلة مرتين على Stackoverflow قبل بضعة أيام. بشكل عام ، عندما يقوم برنامج التحويل البرمجي JIT بتحسين الكود ، فإنه سيضمن الحقول لأنواع غير متطايرة لم يتم تعديلها لهذا الموضوع. بمجرد تجميع هذا الرمز (يمكنك رؤيته باستخدام -xx:+printcompilation) ، فمن المحتمل أنه لن يكون مرئيًا أبدًا إذا قمت بتعديل هذا الحقل في مؤشر ترابط آخر. يمكن أن تؤخر إضافة كتل المزامنة العشوائية أو عبارات الطباعة تنفيذ هذا التحسين أو تعطيل برنامج التحويل البرمجي JIT بحيث لا يؤدي هذا التحسين.
10. أسئلة مقابلة جافا صحيحة
هناك العديد من أسئلة مقابلة Java التي عفا عليها الزمن (لم يتم تحديثها لأكثر من 10 سنوات ، وهي بعيدة عن إصدار Java الحالي) ، أو أنها مضللة ، أو قد تكون مخطئة. لسوء الحظ ، لم يتم تمرير أي من هذه الإجابات دون التحقق منها.
سأشير إلى إجابات StackOverflow أعلاه لأن مراجعة النظراء هنا تقوم بعمل أفضل لمراجعة الإجابات. بشكل عام ، لا تذهب إلى مواقع الويب مثل Rose India ، فإن الإجابات أعلاه ذات جودة سخيفة. إذا كنت ترغب في الوصول إلى أسفله ، فيمكنك التحقق من عدد أخطاء الإملاء (أسماء الفصول والشروط المهنية) أو الملاحظات الخاطئة في المقالة أعلاه. أحد أسباب هذه المشكلات هو أنه لا توجد آلية ردود فعل فعالة لتصحيح هذه الأخطاء.
أود أن أوصي ببعض أسئلة مقابلة Java:
أسئلة مقابلة Java الأكثر قيمة هي مناسبة للقبول لمبرمجي Java
10 أسئلة مقابلة الطريقة الكلاسيكية Java الرئيسية
ناقش أسئلة المقابلة العشرة الأكثر شيوعًا في Java (Super Classic)
10 أسئلة مقابلة XML لمبرمجي Java يتم إصدارها
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.