1. السؤال: إذا تمت الرجوع إلى كائنات A و B بشكل دائري ، فهل يمكن أن تكون GC؟
الإجابة: نعم ، تستخدم الأجهزة الافتراضية اليوم خوارزميات تحليل إمكانية الوصول لتحديد ما إذا كان الكائن قد نجا ، بدلاً من مجرد الإشارة إلى حساب الكائن. تستخدم خوارزمية تحليل إمكانية الوصول سلسلة من كائنات "جذور GC" (الكائنات المشار إليها في مكدس الجهاز الظاهري ، كائنات مرجع السمة الثابتة) كنقطة انطلاق. المسارات التي تبحث عنها هذه العقد تسمى السلاسل المرجعية. عندما لا يكون للكائن أي اتصال سلسلة مرجعية بجذور GC ، يثبت الكائن أن الكائن غير متوفر.
2. كيف تسبب في تدفق الذاكرة في جافا؟
OutofMemoryerror:
(1) يستخدم برنامج Pergern Space عددًا كبيرًا من الجرار أو الفئات ، مما يجعل جهاز Java Virtual لا يتم تحميل مساحة فئة غير كافية.
الحل: اضبط المعلمات xx: permsize و xx: maxpermsize ، وتقليل حزم الجرة ، وتقليل التحميل المكررة للفئات.
(2) جافا كومة الفضاء الجهاز الافتراضي ينشئ الكثير من الكائنات.
الحل: ضبط المعلمات XMS (حجم الكومة الأولي) XMX (حجم الكومة القصوى) ، تحقق من حلقات ميتة أو كائنات مكررة غير ضرورية
(3) غير قادر على إنشاء مؤشر ترابط أصلي جديد ، يتطلب JVM مساحة كبيرة جدًا للذاكرة ، وإنشاء مؤشرات ترابط في JVM يتطلب أيضًا إنشاء مؤشرات ترابط في نظام التشغيل.
الحل: تغيير حجم المواضيع في JVM.
3. String s = "123" ؛ كم عدد الكائنات التي تم إنشاؤها في هذا البيان؟
إذا لم يكن هناك "123" في تجمع السلسلة ، يتم إنشاء كائن ووضعه في البركة الثابتة. إذا كان هناك "123" ، يتم إنشاء 0 كائنات.
إذا كانت String s = new String("123") ، إذا لم يكن هناك في المجموعة الثابتة ، فقم بإنشاء واحدة في البركة الثابتة ثم قم بإنشاء واحدة في ذاكرة الكومة.
4. ما هو الفرق بين الخطأ والاستثناء و RunTimeException؟
الخطأ والاستثناء كلاهما فئات فرعية من الرمي ، و RunTimeException هي فئة فرعية من الاستثناء.
يتم استخدام الخطأ للإشارة إلى أن التطبيق المعقول يجب ألا يحاول التقاط الأخطاء.
يشير الاستثناء إلى الشروط التي يحتاجها التطبيق المعقول إلى التقاطها. وهي مقسمة إلى استثناءات محددة واستثناءات غير محددة.
RunTimeException هو استثناء لم يتم فحصه ، لا يتطلب محاولة الصيد أو الإعلان عن الطريقة. الفئات الفرعية الرئيسية: nullpointer ، الحساب ، ArrayIndexoutofBounds ، classcast.
5. ما هو الفرق بين القارئ و inputStream؟
كلها فئات مجردة ، يتم استخدام القارئ لقراءة تدفقات الأحرف (char أو سلسلة) ، ويتم استخدام inputStream لقراءة تدفقات البايت (صفائف البايت).
6. ما هو دور Hashcode؟
يستخدم HashCode بشكل أساسي لعمليات البحث السريعة ، كما هو الحال في هيكل HashMap ، والذي يتم استخدامه لتحديد موقع أزواج القيمة الرئيسية. إذا كان كائنين متماثلين ، فيجب أن يكون رمز الهاش هو نفسه ، في حين أن كائنات hashcode التي تحمل نفس الرمز قد لا تكون هي نفسها ، وهو ما يعادل وضعها في نفس المربع.
7. ما هو الفرق بين hashmap و hashtable؟
سلامة الموضوع ، مفتاح القيمة الفارغة ، الكفاءة ، HashMap (ITerator Fast Failure Iterator) ، سوف يتغير علامة التجزئة (eSterator) ، وموضع عنصر hashmap مع مرور الوقت مع مرور الوقت
8. هل يمكن استخدام أي كائن في hashmap كمفتاح؟ هل هناك أي متطلبات للكائنات المعرفة من قبل المستخدم كمفتاح؟
نعم ، ولكن يجب أن يكون الكائن الرئيسي كائنًا ثابتًا. خلاف ذلك ، بعد إدراج الإدخال في الخريطة ، سيؤدي تغيير القيمة الرئيسية إلى عدم توافق قيمة المفتاح الحالي مع قيمة التجزئة ، أي أنه لا يتطابق مع فهرس الصفيف ولن يتم العثور عليه.
9. هل يجب أن أستخدم Run () أو start () لبدء موضوع؟
كيف تحل مشكلة التزامن والتزامن في MultiThreading؟ ما هو خيط الخفي؟ ما هو خيط الخفي؟ ما هي طريقة تنفيذ مؤشر ترابط الخفي (معنى thread.setDeamon ()) كيفية إيقاف مؤشر ترابط؟ اشرح ما هي سلامة الموضوع؟ إعطاء مثال على غير آمن الموضوع. اشرح دور الكلمات الرئيسية المتزامنة. عندما يدخل مؤشر ترابط طريقة متزامنة لكائن ، هل يمكن أن تدخل مؤشرات الترابط الأخرى طرقًا أخرى لهذا الكائن؟
(1) ابدأ
(2) ورث فئة مؤشرات الترابط ، وتنفيذ الواجهة القابلة للتشغيل ، واستخدم exectuorservice ، مستقبل ، وقابل للتطبيق لتنفيذ مؤشر الترابط الذي يعيد القيمة.
(3) طريقة التزامن ، كتلة رمز التزامن ، قفل
(4) توفر مؤشرات ترابط دامون خدمات لتشغيل مؤشرات الترابط الأخرى ، مثل GC و Thread. setDeamon (صحيح).
(5) لا ينصح بموضوع stop () (لن يتم إصدار الموارد بشكل صحيح) ، ويتم استخدام المقاطعات لإيقاف المواضيع.
(6) عندما تصل مؤشرات الترابط المتعددة إلى كائن ، إذا كانت الجدولة والتنفيذ المتناوب لهذه الخيوط في بيئة وقت التشغيل ليست ضرورية ، فلن يكون المزامنة إضافية غير مطلوبة ، أو يتم تنفيذ أي عمليات تنسيق أخرى على المتصل ، ويمكن الحصول على النتيجة الصحيحة عن طريق استدعاء هذا الكائن ، ثم يكون الكائن هو مؤشر ترابط.
(7) يتم بيع التذاكر مرارًا وتكرارًا.
(8) مزامنة الكلمات الرئيسية. عند تعديل الطرق الثابتة ، يتم استخدام الفئة ككائن قفل ، ويمكن لخيط واحد فقط الوصول إلى هذا النوع من الطرق الثابتة المزامنة ؛ عند تعديل الطرق العادية ، يتم استخدام الكائن ككائن قفل ، ويمكن لخيط واحد فقط الوصول إلى هذا النوع من الطرق العادية المزامنة ؛ يمكنك أيضًا تخصيص كتلة رمز مزامنة كائن القفل.
(9) لا يمكن إدخال الطريقة المتزامنة ، ويمكن إدخال غير متزامن.
10. ما هي الميزات الجديدة لـ JDK8 التي تعلمتها ووصف الميزات المقابلة مع أمثلة؟
(1) تعبير Lambda: البرمجة الوظيفية ، مرجع الطريقة
(2) دفق API
(3) الطريقة الافتراضية للواجهة
(4) تحسين API للتاريخ والوقت ، وإضافة طريقة DateTimeFormatter
11. ما هي مبادئ تحسين SQL؟
للحصول على التفاصيل ، يرجى الاطلاع على مدونة في تصنيف قاعدة البيانات الخاصة بي
12. ما هو الفرق بين Serlvet و CGI في دورة حياة Servlet؟
دورة الحياة: تحميل الطبقة ، إنشاء مثيل (بناء كائنات) ، التهيئة (init) ، الخدمة (الخدمة) ، والتدمير.
CGI: واجهة بوابة شائعة ، واجهة بوابة شائعة ، مكتوبة بلغة Perl ، تنشئ كائن CGI لكل طلب.
Servlet: هناك حاجة فقط إلى إنشاء مثيل وتهيئة مرة واحدة ، ومتعددة الخيوط.
13. ما هي مزايا StringBuffer؟ لماذا الصيام؟
لأن StringBuffer لا يتطلب إنشاء كائنات متكررة ، ولكن هذا ليس هو الحال.
على سبيل المثال ، STRING S = "A" + "B" + "C" سيتم تحسين برنامج التشغيل الخاص
سيتم أيضًا تحسين برنامج STRING S = S1 + S2 + S3 ويصبح عملية إلحاق StringBuilder. ومع ذلك ، إذا لم يتم تقطيعه في عملية + مرة واحدة ، فسيتم إنشاء كائن السلسلة وكائن StringBuilder مرارًا وتكرارًا ، والذي سيكون منخفضًا للغاية.
14. هل تفهم خوارزمية التشفير وفك التشفير؟
خوارزميات مجردة: MD5 (128 بت) ، SHA1 (160 بت) ، هي عملية لا رجعة فيها. بغض النظر عن حجم البيانات ، سيتم إنشاء بيانات من نفس الطول بعد خوارزمية Digest. لا يمكن تكسيره إلا من خلال القواميس.
خوارزميات التشفير المتماثل: DES ، AES ، يتم استخدام نفس المفتاح السري عند تشفير وفك التشفير.
خوارزمية التشفير غير المتماثلة: RSA ، استخدم مفاتيح سرية مختلفة عند تشفير وفك التشفير ، واستخدم RSA2 عند الاتصال بـ AliPay.
15. حل التزامن العالي والحمل العالي؟
(1) استهلاك الصفحة الثابتة هو الحد الأدنى ، HTML ثابت قدر الإمكان ، ويتم استخدام نظام نشر المعلومات CMS لإنشاء صفحات ثابتة تلقائيًا في إدخال المعلومات وبيانات ديناميكية ذاكرة التخزين المؤقت التي لم يتم تغييرها غالبًا في الواجهة الأمامية.
(2) CDN ، توزيع الموارد مثل CSS/JS على خوادم مختلفة.
(3) موازنة التحميل (nginx).
(4) بيانات ذاكرة التخزين المؤقت التي لم يتم تغييرها في كثير من الأحيان (redis ، memcache).
(5) يتم فصل خادم الصور عن خادم التطبيق.
(6) الكتلة.
16.
هناك صفيف عدد صحيح ثابت داخل فئة عدد صحيح ، والذي يخزن بعض كائنات عدد صحيح تم تهيئتها. القيمة العامة هي (-128 ~ 127). إذا كنت تستخدم == مقارنة ، فسيتم إرجاع في بعض الأحيان كاذبة لأن القيمة ليست في ذاكرة التخزين المؤقت ، لذلك يجب أن تستخدم مساواة للمقارنة.
17. ما هو مبدأ ArrayList؟
(1) ArrayList هو خيوط انعدام الأمن. إذا كنت تريد آمن مؤشر ترابط ، فاستخدم CopyOnwritelist.
(2) الطبقة السفلية هي الصفيف [] ، وهناك مرجع ElementData يشير إلى الصفيف في الداخل. في البداية ، يشير إلى صفيف فارغ (عابر) مؤقتًا بشكل افتراضي. عندما ترغب في التوسع ، سيتم إعادة إنشاء مجموعة جديدة بحجم 1.5 مرة (x + (x >> 1)) ، ثم يتم نسخ العنصر القديم إلى المصفوفة الجديدة من خلال System.ArrayCopy Native Method.
(3) تعقيد الخوارزمية للعشوائية القراءة والكتابة (GET ، SET) هي O (1).
(4) هناك نوعان من عمليات الإضافة. تعقيد الخوارزمية للإضافة (الفهرس ، القيمة) هو o (n) ، لأنه يجب نقله من خلال نسخ العناصر ؛ في حين أن تعقيد الخوارزمية لعملية (القيمة) هو O (1) (إذا لم يحدث التوسع).
(5) التعقيد الزمني لعملية الحذف هو O (n) ، لأنه سواء تم حذفه وفقًا للفهرس أو الكائن ، من الضروري تنفيذ عملية الحركة من خلال النسخ. بعد الحذف ، لن يتغير حجم الصفيف ، ويتم الحفاظ على الطول من خلال سمة الحجم. عند حذف الكائنات حسب الكائن ، لا يمكنك استخدام كائنات جديدة. يجب عليك حذفها من خلال الإشارات إلى الكائنات في ArrayList.
18. ما هو مبدأ LinkedList؟
(1) الطبقة الأساسية هي قائمة مرتبطة ثنائية الاتجاه ، والحفاظ على المؤشر الأول ومؤشر آخر.
(2) تعقيد الوقت للقراءة العشوائية والكتابة (الحصول ، تعيين) هو o (n).
(3) التعقيد الزمني لعملية الإدراج إضافة (كائن) هو O (1) ؛ التعقيد الزمني للإضافة (الفهرس ، الكائن) هو o (n).
(4) تعقيد الوقت لإزالة عملية الحذف (الكائن) هو O (1) ؛ التعقيد الزمني للإزالة (الفهرس) هو o (n).
19. أشياء يجب ملاحظتها عند استخدام برك المواضيع؟
(1) منع الجمود. جميع المواضيع في تجمع الخيوط تنتظر حدوث الحدث A ، ولا توجد مؤشرات ترابط مجانية لتنفيذ A.
(2) منع موارد النظام غير الكافية. للتحكم في عدد المواضيع.
(3) منع الأخطاء المتزامنة.
(4) منع تسرب الخيط. ينتهي مؤشر الترابط بشكل غير طبيعي بسبب RunTimeException أو الخطأ الذي لا يتم القبض عليه بشكل طبيعي ، ويفقد تجمع الخيوط موضوعًا.
(5) تجنب التحميل الزائد للمهمة.
20. ما هو الفرق بين autowire و resource في الربيع؟
يتم تجميع Autowire حسب النوع افتراضيًا. بشكل افتراضي ، يتطلب وجود كائن التبعية. إذا تم السماح NULL ، يمكن ضبطه على خطأ. إذا كنا نريد استخدام التجميع بالاسم ، فيمكننا استخدامه بالتزامن مع Qualifier Strentation ؛
يتم تجميع Resource بالاسم افتراضيًا. عندما لا يمكن العثور على الفاصوليا التي تطابق الاسم ، سيتم تجميعها وفقًا للنوع. يمكن تحديده من خلال سمة الاسم. إذا لم يتم تحديد سمة الاسم ، عند شرح التعليق التوضيحي في الحقل ، يتم أخذ اسم الحقل افتراضيًا كاسم حبة للعثور على كائن التبعية. عندما يتم تمييز التعليقات التوضيحية على طريقة Setter للسمة ، يتم أخذ اسم السمة افتراضيًا كاسم حبة للعثور على كائن التبعية.
21. مخطط نقل الحالة.
22. طرق فئة الكائن؟
(1) يساوي: تحديد ما إذا كان متساوي.
(2) Hashcode: ابحث عن قيمة التجزئة. إذا كانت قيم التجزئة للكائنات متساوية ، فقد لا تكون متساوية ؛ إذا كانت تساوي ، يجب أن تكون قيم التجزئة للكائنات متساوية.
(3) tostring: الحصول على نموذج تعبير السلسلة للكائن ، والذي يتم إعادة كتابته عمومًا.
(4) getClass: طريقة الانعكاس للحصول على الفصل الذي ينتمي إليه الكائن.
(5) انتظر: لا يمكن استخدامه إلا في مقاطع التعليمات البرمجية المتزامنة. إذا لم يتم تضمين المعلمة الزمنية ، فسوف يتسبب مؤشر الترابط التنفيذي في التخلي عن القفل وإدخال حالة الانتظار (تجمع الانتظار).
(6) الإخطار: لا يمكن استخدامه إلا في مقاطع التعليمات البرمجية المتزامنة ، وإخراج موضوع من تجمع الانتظار ووضعه في تجمع العلم.
(7) الإخطار: لا يمكن استخدامه إلا في مقاطع التعليمات البرمجية المتزامنة ، ويتم إخراج جميع المواضيع من تجمع الانتظار ووضعها في تجمع العلم القفل.
23. المبدأ الأساسي للتسلسل Java؟
تحويل معلومات الكائن إلى معلومات Bytecode.
(1) تخزين وصف التسلسل. (2) معلومات وصف الفئة الحالية. (3) وصف سمات الفئة الحالية. (4) وصف الفئة الفائقة (5) وصف السمة الفائقة (6) الوصف قيمة سمة الفئة الفائقة (7) الوصف