1. يتم استخدام طريقة متساوية لمقارنة ما إذا كان محتوى الكائن متساويًا (تجاوزه لاحقًا)
2. طريقة Hashcode تستخدم فقط في المجموعات
3. عندما يتم الكتابة فوق طريقة متساوية ، ما إذا كان كائن المقارنة متساويًا من خلال طريقة المساواة المكتوبة (الحكم على ما إذا كانت محتويات الكائن متساوية).
4. عند وضع كائن في مجموعة ، حدد أولاً ما إذا كانت قيمة hashcode للكائن الواجب وضعها مساوية لقيمة Hashcode لأي عنصر في المجموعة. إذا لم يكن ذلك متساويًا ، فضع الكائن في المجموعة مباشرة. إذا كانت قيم hashcode متساوية ، فاستخدم طريقة متساوية لتحديد ما إذا كان الكائن الواجب وضعه يساوي أي كائن في المجموعة. إذا لم يكن الحكم المساواة متساوًا ، فضع العنصر مباشرة في المجموعة ، وإلا فلن يتم وضعه.
5. تستخدم طريقة متساوية ما إذا كانت عناوين ذاكرة الكائن مساوية لتحديد ما إذا كانت الكائنات متساوية.
نظرًا لأنهما كائنين جديدين ، فإن عناوين ذاكرة الكائنات ليست متساوية ، لذا فإن STU1.equals (STU2) خاطئة.
6. يجب أن تحصل الخيوط A و B على قفل الكائن O. على افتراض أن A يستحوذ على قفل الكائن O ، ب سوف تنتظر A لإصدار قفل O. إذا تم استخدام مزامنة ، إذا لم يتم إطلاق A ، فسينتظر B حتى لا يمكن أن يتم مقاطعة. إذا تم استخدام REENTRANTLOCK ، إذا لم يتم إطلاق A ، فيمكن أن يقطع B الانتظار بعد الانتظار لفترة طويلة بما فيه الكفاية والقيام بأشياء أخرى.
Reentrantlock يكتسب أقفال بثلاث طرق:
أ) قفل () ، إذا تم الحصول على القفل ، فأعود على الفور. إذا كان مؤشر ترابط آخر يحتفظ بالقفل ، فسيبقى الخيط الحالي في حالة نائمة حتى يتم الحصول على القفل.
ب) Trylock () ، إذا تم الحصول على القفل ، فسيعود True على الفور ، وإذا كان مؤشر ترابط آخر يحمل القفل ، فسيعود False على الفور ؛
ج) Trylock (فترة طويلة ، وحدة TimeUnit) ، إذا تم الحصول على القفل ، فسيعود صحيح على الفور. إذا كان مؤشر ترابط آخر يحتفظ بالقفل ، فسوف ينتظر الوقت المحدد للمعلمة.
أثناء عملية الانتظار ، إذا تم الحصول على القفل ، فإنه يعود صحيحًا ، وإذا كان مهلة الانتظار ، فإنه يعود خطأ ؛
د) lockinterruptly: إذا تم الحصول على القفل ، والعودة على الفور. إذا لم يتم الحصول على القفل ، يكون الخيط الحالي في حالة نائمة حتى أو مغلق.
أو تم مقاطعة الخيط الحالي بخيط آخر
يتم تنفيذ متزامن على مستوى JVM. لا يمكن مراقبة قفل المزامنة من خلال بعض أدوات المراقبة فحسب ، بل يمكن أن تحدث الاستثناءات أيضًا أثناء تنفيذ التعليمات البرمجية.
ستقوم JVM تلقائيًا بإصدار القفل ، ولكن لا يمكن استخدام القفل. يتم تنفيذ القفل من خلال الكود. لضمان إصدار القفل ، يجب وضع Unlock () في النهاية {}
عندما لا تكون مسابقة الموارد شرسة للغاية ، يكون أداء المزامنة أفضل من أداء Reetrantlock. ومع ذلك ، عندما تكون مسابقة الموارد شرسة للغاية ، فإن أداء متزامنه سوف ينخفض بعشرات المرات ، لكن أداء Reetrantlock يمكن أن يظل طبيعيًا ؛
في JDK ، تستخدم الفئات التالية بشكل أساسي لتنفيذ آلية انعكاس Java ، والتي توجد جميعها في حزمة java.lang.reflect:
الفصل: يمثل فئة.
فئة الحقل: متغير عضو يمثل فئة (تسمى متغيرات الأعضاء أيضًا سمات الفصل).
فئة الطريقة: طريقة تمثل الفصل.
فئة المنشئ: يمثل طريقة مُنشئ الفصل.
فئة المصفوفة: توفر طرقًا ثابتة لإنشاء صفائف ديناميكيًا والوصول إلى عناصر الصفيف.
فيما يلي بعض الأمثلة لمعرفة التطبيق الفعلي لآبار واجهة برمجة تطبيقات الانعكاس:
1.
يتم تعريف طريقة getClass () في فئة java.lang.object ، لذلك بالنسبة لأي كائن Java ، يمكن الحصول على نوع الكائن من خلال هذه الطريقة. الفصل الدراسي عبارة عن فئة أساسية في واجهة برمجة تطبيقات الانعكاس ، ولديها الطرق التالية
getName (): احصل على الاسم الكامل للفصل.
getFields (): احصل على خاصية النوع العام للفصل.
getDeclaredFields (): احصل على جميع خصائص الفصل.
getMethods (): طريقة للحصول على النوع العام من الفصل.
getDeclaredMethods (): احصل على جميع طرق الفصل.
getMethod (اسم السلسلة ، فئة [] ParameterTypes): يحصل على طريقة محددة للفئة ، تحدد المعلمة الاسم اسم الطريقة ، المعلمة المعلمة تحدد نوع المعلمة للطريقة.
getConstructors (): احصل على مُنشئ النوع العام للفئة.
getConstructor (class [] parametertypes): يحصل على مُنشئ محدد للفئة. تحدد المعلمة ParameterTypes نوع المعلمة للمُنشئ.
NewInstance (): قم بإنشاء كائن من هذه الفئة من خلال مُنشئ الفئة بدون معلمات.
خطوات لكتابة عاكس جافا:
1) يجب أولاً الحصول على كائن الفصل الدراسي
على سبيل المثال:
الفئة C1 = test.class ؛ الفئة C2 = class.forname ("com.reflection.test") ؛ الفئة C3 = اختبار جديد (). getClass () ؛ 2) ثم اتصل بالطرق في كائن الفئة بشكل منفصل للحصول على خصائص/أساليب/مُنشئين من فئة
ملاحظة: إذا كنت ترغب في الحصول على طرق/خصائص/منشئات في الفصل بشكل طبيعي ، فيجب عليك التركيز على فئات الانعكاس التالية
مجال
مُنشئ
طريقة
<Sradlet-mapping> <Sradlet-Name> </rectlet-name> <url-pattern> </url-pattern> </servlet-mapping> لـ (String elementa: str) {system.out.print (elementa + "") ؛ } قائمة <String> list = new ArrayList <String> () ؛ لـ (int i = 0 ؛ i <str.length ؛ i ++) {if (! list.contains (str [i])) {list.add (str [i]) ؛ }} SET <STRING> SET = NEW HASHSET <STRING> () ؛ لـ (int i = 0 ؛ i <str.length ؛ i ++) {set.add (str [i]) ؛ }الربيع لديه ستة معاملات وخمس مستويات عزل
الفئة 1: inte قصيرة int طويلة
الفئة 2: تعويم مزدوج
الفئة الثالثة: منطقية منطقية (لها قيمتان فقط يمكن اعتبارهما صحيحين)
الفئة 4: حرف شار
طرق في فئة التعديل النهائي
الوظيفة: يمكن موروثة ، ولكن لا يمكن إعادة كتابتها بعد الميراث.
فئة التعديل النهائي
الوظيفة: لا يمكن أن يتم مورث الفئات.
عند تعديل النوع النهائي للنوع الأساسي ، تظل القيمة دون تغيير. يشير النوع المرجعي إلى أن العنوان يبقى دون تغيير. هذا ، عندما يكون جديدًا ، لا يمكن إعادة تعيين العنوان.
أنت تعرف سمة التعديل النهائي
التحضير مسبق. أرسل أولاً SQL إلى قاعدة البيانات للمعالجة المسبقة ، ثم وضعها في ذاكرة التخزين المؤقت. في المرة القادمة التي تجد فيها أن هناك نفس الشيء ، لا تحتاج إلى تجميعه. كفاءة التنفيذ عالية ، وهناك مطالبات بناء الجملة لتسهيل التحقق ، والمعلمات ديناميكية ، وتمنع حقن SQL بسبب فحص بناء الجملة
حدد * من tbname = 'zck' و passwd = 'أو' 1 '=' 1 '؛
البيان غير مسبق ، ويتطلب فحصًا يدويًا لأخطاء بناء الجملة ، والتي تم ترميزها المتشددين
يسمح HashMap NULL كمفتاح أو قيمة للإدخال ، في حين أن علامة التجزئة لا
وضع الطريقة
سيقوم HashMap بإجراء معالجة خاصة على مفتاح القيمة الخالية ، دائمًا وضعه في وضع الجدول [0]. ضع العملية هي أولاً حساب التجزئة ثم حساب قيمة الفهرس من خلال التجزئة والطول ، ثم ضع المفتاح في موضع الجدول [الفهرس]. عندما تكون هناك عناصر أخرى موجودة بالفعل في الجدول [الفهرس] ، سيتم تشكيل قائمة مرتبطة في موضع الجدول [الفهرس] ، وسيتم وضع العناصر المضافة حديثًا في الجدول [الفهرس] ، وسيتم ربط العناصر الأصلية من خلال الإدخال التالي. وبهذه الطريقة ، يتم حل مشكلة تعارض التجزئة في شكل قائمة مرتبطة. عندما يصل عدد العناصر إلى القيمة الحرجة (عامل capactiy*) ، سيتم توسيع السعة ، ويصبح طول صفيف الجدول جدولًا.
احصل على الطريقة
وبالمثل ، عندما يكون المفتاح فارغًا ، سيتم تنفيذ المعالجة الخاصة ، ويتم العثور على العنصر مع المفتاح في القائمة المرتبطة بالجدول المرتبط [0].
تتمثل عملية GET أولاً في حساب التجزئة ثم حساب قيمة الفهرس من خلال التجزئة والطول ، ثم التكرار من خلال القائمة المرتبطة في الجدول [الفهرس] حتى يتم العثور على المفتاح ، ثم إرجاع التنفيذ الأساسي لـ HashMap و Hashtable ، وهما تطبيقات هيكل القائمة المصفوفة + المرتبطة بحساب أولاً. يتم حساب الفهرس ، وهو مركز صفيف الجدول ، استنادًا إلى التجزئة والطول. الطول ، ويتم إجراء العملية المقابلة.
تعتمد معظم الفهارس على شجرة B.
تحدث مشكلات سلامة مؤشر ترابط Servlet بشكل أساسي عن متغيرات المثيل ، لذلك يجب تجنب متغيرات المثيل في Servlets.
إذا لم يتمكن تصميم التطبيق من استخدام متغيرات المثيل ، فسيتم استخدام التزامن لحماية متغيرات المثيل لاستخدامه ، ولكن لأداء النظام الأمثل ، يجب مزامنة مسار الكود مع الحد الأدنى من توفره.
اكتب نمط المفرد
العودية الثابتة الطويلة (int n) {if (n <= 0) return 0 ؛ if (n == 1) return 1 ؛ إرجاع العودية (n - 1) + عودية (n - 2) ؛} static static static static static (int n) {if (n <= 0) return 0 ؛ if (n == 1) return 1 ؛ long fib1 = 0 ؛ i ++) {sum = fib1+fib2 ؛ fib1 = fib2 ؛ fib2 = sum ؛} sum ؛} Hashtable هو فئة آمنة مؤشرات الترابط. يستخدم متزامنًا لقفل جدول التجزئة بأكمله لتحقيق سلامة مؤشرات الترابط ، أي قفل الجدول بأكمله في كل مرة والسماح لخيط الخيط يشغله. يتيح ConcurrentHashMap إجراء عمليات تعديل متعددة بشكل متزامن ، والمفتاح هو استخدام تقنية فصل القفل. يستخدم أقفال متعددة للتحكم في التعديلات على أجزاء مختلفة من جدول التجزئة.
يستخدم ConcurrentHashMap مقاطع (قطاع) لتمثيل هذه الأجزاء المختلفة. كل قطعة هي في الواقع علامة تجزئة صغيرة ، ولها أقفال خاصة بهم. طالما تحدث عمليات التعديل المتعددة في قطاعات مختلفة ، يمكن تنفيذها بشكل متزامن.
تحتاج بعض الطرق إلى عبور الأجزاء ، مثل Size () و ContainSvalue (). قد يحتاجون إلى قفل الجدول بأكمله بدلاً من مجرد شريحة معينة. هذا يتطلب قفل جميع الأجزاء بالتسلسل. بعد اكتمال العملية ، يتم إصدار أقفال جميع القطاعات بالتسلسل. "بالترتيب" مهم للغاية هنا ، وإلا فهناك احتمال كبير للتمتزل. في concurrenthashmap ، صفيف القطاع نهائي ، ومتغيرات الأعضاء لها في الواقع نهائية. ومع ذلك ، فإن ببساطة إعلان الصفيف كنهائي لا يضمن أن أعضاء الصفيف نهائي ، الأمر الذي يتطلب ضمانات التنفيذ.
هذا يضمن عدم وجود طريق مسدود ، لأن الترتيب الذي يتم الحصول على الأقفال ثابت
① threadlocal ② Synchronized () ③ WAIT () وإخطار () ④ متقلبة
threadlocal
يضمن ThreadLocal أن تكون مؤشرات الترابط المختلفة لها مثيلات مختلفة ، ويجب أن يكون لخيط نفس الحالة نفس المثيل ، أي أن كل مؤشر ترابط باستخدام المتغير يوفر نسخة من قيمة المتغير. يمكن لكل مؤشر ترابط تغيير نسخته الخاصة بشكل مستقل ، بدلاً من التعارض مع نسخة الخيوط الأخرى.
المزايا: يوفر كائنات مشتركة آمنة مؤشرات الترابط
الفرق من آليات التزامن الأخرى: آلية التزامن هي مزامنة الوصول المتزامن إلى نفس المورد بواسطة مؤشرات ترابط متعددة ، والتواصل بين مؤشرات الترابط المتعددة ؛
ThreadLocal هو مشاركة البيانات معزولة عن مؤشرات الترابط المتعددة ، ولا يشارك بشكل أساسي الموارد بين مؤشرات الترابط المتعددة. هذا بالتأكيد لا يتطلب مزامنة عدة مؤشرات ترابط.
متقلب
يُجبر متغير العضو المعدل المتقلوب على إعادة قراءة قيمة متغير العضو من الذاكرة المشتركة في كل مرة يتم الوصول إليها بواسطة مؤشر ترابط. و،
عندما يتغير متغير العضو ، يتم إجبار مؤشر الترابط على كتابة قيمة التغيير مرة أخرى إلى الذاكرة المشتركة.
المزايا: وبهذه الطريقة ، في أي لحظة ، يرى موضوعان مختلفان دائمًا نفس القيمة لمتغير عضو معين.
السبب: تنص مواصفات لغة Java على أنه من أجل الحصول على أفضل سرعة ، يُسمح لمروح المواضيع بحفظ نسخ خاصة من متغيرات الأعضاء المشتركة.
ويتم مقارنتها فقط بالقيمة الأصلية لمتغير العضو المشترك عندما يدخل مؤشر الترابط أو يترك كتلة الكود المتزامن.
وبهذه الطريقة ، عندما تتفاعل مؤشرات ترابط متعددة مع كائن ما في نفس الوقت ، من الضروري الانتباه إلى السماح للموضوع بالحصول على تغييرات في متغيرات الأعضاء المشتركة في الوقت المناسب.
تطلب الكلمة الرئيسية المتطايرة VM: بالنسبة لمتغير العضو ، لا يمكنها حفظ نسختها الخاصة ، ولكن يجب أن تتفاعل مباشرة مع متغير العضو المشترك.
نصائح الاستخدام: استخدم متطايرة على متغيرات الأعضاء التي يتم الوصول إليها بواسطة خيطين أو أكثر.
ليس من الضروري استخدام عندما يكون المتغير الذي سيتم الوصول إليه بالفعل في كتلة التعليمات البرمجية المتزامنة أو ثابت.
من أجل تحسين الكفاءة ، يقوم مؤشر الترابط بنسخ متغير عضو (مثل A) (مثل B) ، والوصول إلى A في الخيط الذي يصل فعليًا إلى B. لا يتم تنفيذ مزامنة A و B إلا في إجراءات معينة ، لذلك هناك موقف لا يتناسق فيه A و B. يستخدم متقلبة لتجنب هذا الموقف.
يخبر Flatile JVM أن المتغيرات التي تعدلها لا تحتفظ بالنسخ والوصول مباشرة إلى تلك الموجودة في الذاكرة الرئيسية (من الأفضل استخدامها عندما يكون هناك العديد من عمليات القراءة ؛ التواصل مطلوب بين المواضيع ، لكن هذه المقالة لا يمكنها القيام بذلك)
المتغيرات المتطايرة لها خصائص رؤية متزامنة ، ولكن ليس لها خصائص ذرية.
هذا يعني أن الخيط يمكنه تلقائيًا اكتشاف أحدث قيمة للمتغير المتطاير. يمكن استخدام المتغيرات المتطايرة لتوفير سلامة مؤشرات الترابط ، ولكن لا يمكن تطبيقها إلا على مجموعة محدودة للغاية من حالات الاستخدام: لا يوجد أي قيد بين متغيرات متعددة أو بين القيمة الحالية للمتغير والقيمة المعدلة.
يمكنك فقط استخدام المتغير المتقلب بدلاً من الأقفال في الحالات المحدودة. لجعل سلامة الخيط المثالية المتغير المتغير ، يجب تلبية الشرطين التاليين في نفس الوقت:
لا تعتمد عمليات الكتابة على المتغيرات على القيمة الحالية ؛ لا يتم تضمين المتغير في المتغيرات الأخرى.
النوم () مقابل الانتظار ()
النوم هو فئة مؤشر ترابط (مؤشر ترابط) ، مما يتسبب في توقف هذا الموضوع لفترة زمنية محددة وإرسال فرصة التنفيذ إلى مؤشرات الترابط الأخرى ، ولكن تظل حالة المراقبة وستستأنف تلقائيًا بعد ذلك. لن يطلق استدعاء النوم قفل الكائن.
الانتظار هي طريقة فئة الكائن. يؤدي استدعاء طريقة الانتظار على هذا الكائن إلى التخلي عن مؤشر ترابط القفل وأدخل تجمع قفل الانتظار في انتظار هذا الكائن. فقط بعد إصدار طريقة إعلام (أو إخطار) لهذا الكائن ، يدخل مؤشر الترابط هذا تجمع قفل الكائن ويستعد للحصول على قفل الكائن ويدخل حالة التشغيل. (إذا تم الإعلان عن المتغير على أنه متطاير ، فسيكون متسقًا مع الذاكرة الرئيسية في كل مرة يتم الوصول إليها ؛ إذا تم الوصول إلى المتغير بطريقة متزامنة أو كتلة متزامنة ، يتم مزامنة المتغير عند الحصول على القفل عند مدخل الطريقة أو الكتلة ويتم إصدار القفل عند إطلاق الأسلوب أو الحظر.)
http://www.yjbys.com/news/202750.html
يحتاج برنامج العميل إلى الحصول على دور محدد للحاوية أولاً ، ثم الحصول على دور محدد للتكرار من خلال دور الحاوية المحدد.
iterator it = new ArrayList.iterator () ؛
1) الوصول إلى محتويات كائن الحاوية دون تعريض تمثيله الداخلي.
2) دعم عبور متعددة من كائنات الحاوية.
3) توفير واجهة موحدة (التكرار متعدد الأشكال) لاجتياز هياكل الحاويات المختلفة.
استخدم الكلمة الرئيسية الجديدة} → تم استدعاء المنشئ
استخدم طريقة NewInstance لفئة الفصل} → تم استدعاء المنشئ
استخدم طريقة NewInstance لفئة المنشئ} → تم استدعاء وظيفة المنشئ
باستخدام طريقة clone} → لا يتم استدعاء أي مُنشئ
باستخدام Deserialization} → لا يتم استدعاء أي مُنشئ
الموظف EMP2 = (الموظف) class.forname ("com.employee"). newinstance () ؛ أو
الموظف EMP2 = الموظف. الموظف emp3 = constructor.newinstance () ؛
باستخدام طريقة الاستنساخ ، نحتاج أولاً إلى تنفيذ الواجهة المستنسخة وتنفيذ طريقة الاستنساخ المحددة بواسطة ذلك
الموظف EMP4 = (الموظف) EMP3.Clone () ؛
عند بدء تشغيل البرنامج ، لا يقوم بتحميل جميع ملفات الفصل لاستخدامها من قبل البرنامج في وقت واحد. بدلاً من ذلك ، يقوم بتحميل ملف فئة معين بشكل ديناميكي في الذاكرة من خلال آلية تحميل فئة Java (ClassLoader) وفقًا لاحتياجات البرنامج. لذلك ، فقط بعد تحميل ملف الفصل في الذاكرة ، يمكن الرجوع إليه بواسطة فئات أخرى. لذلك ، يتم استخدام ClassLoader لتحميل ملفات الفئة ديناميكيًا في الذاكرة.
Bootstrap classloader: يُطلق عليه اسم Loader فئة بدء التشغيل ، وهو محمل فئة من المستوى الأعلى في التسلسل الهرمي لتحميل فئة Java ، المسؤول عن تحميل مكتبات الفئات الأساسية في JDK ، مثل: RT.JAR ، Resources.jar ، charsets.jar ، إلخ. java_home/jre/lib/ext/افتراضيًا.
App ClassLoader: يطلق عليه Loader فئة النظام ، وهو مسؤول عن تحميل جميع الجرار وملفات الفصل في دليل Application ClassPath.
نظرًا لأن هذا يمكن أن يتجنب التحميل المتكرر ، عندما يقوم الأب بتحميل الفصل ، لا توجد حاجة لمدير فئة الطفل لتحميله مرة أخرى.
بالنظر إلى عوامل الأمان ، دعنا نتخيل أنه إذا لم نستخدم وضع المندوب هذا ، فيمكننا استبدال الأنواع المحددة في Java Core API في أي وقت ، مما سيشكل خطرًا أمانًا كبيرًا للغاية. يمكن أن تتجنب طريقة مندوب الأصل هذا الموقف ، لأن السلسلة يتم تحميلها بالفعل بواسطة محمل فئة التمهيد (Bootstrcp ClassLoader) عند بدء التشغيل ، وبالتالي لن يتمكن جهاز تحميل الفئة المعرفة من قبل المستخدم من تحميل سلسلة مكتوبة بمفرده ، إلا إذا قمت بتغيير الخوارزمية الافتراضية لفئة بحث Classloader في JDK.
1. طلب عميل كائن الطلب ، سيحتوي هذا الطلب على معلمات من طلب GET/POST ، ويمكنه فهم احتياجات العميل فقط ثم الرد.
2. المعلومات ذات الصلة حول كائن الاستجابة تستجيب لطلبات العملاء
3. يشير كائن الجلسة إلى جلسة بين العميل والخادم ، بدءًا من webapplication من العميل إلى الخادم حتى يتم فصل العميل عن الخادم.
4. الكائن الخارجي هو مثيل لفئة JSPWriter وهو كائن شائع الاستخدام لإخراج محتوى العميل.
5. يشير كائن الصفحة إلى صفحة JSP الحالية نفسها ، والتي تشبه إلى حد ما هذا المؤشر في الفصل. إنه مثيل لفئة java.lang.object
6. يدرك كائن التطبيق مشاركة البيانات بين المستخدمين ويمكنه تخزين المتغيرات العالمية. يبدأ ببدء بدء تشغيل الخادم حتى يتم إيقاف تشغيل الخادم
7. كائن الاستثناء هو كائن استثناء. عندما يحدث استثناء أثناء عملية التشغيل ، يتم إنشاء هذا الكائن.
8. كائن PageContext يوفر الوصول إلى جميع الكائنات ومساحات الأسماء في صفحة JSP
9. يتم استخدام كائن التكوين بواسطة محرك JSP لتمرير المعلومات إليه عند تهيئة Servlet.
JS لديه وظيفة isnan (val) // إذا كان رقمًا ، فإنه يعيد خطأ
هناك تحليل XMLDOM ، ساكس التحليل ، و stax تحليل
XMLDOM: (XMLDOCINATIONOBJECTMODEL) يتدهور الأداء بشكل كبير عند معالجة الملفات الكبيرة. هذه المشكلة ناتجة عن بنية شجرة DOM ، التي تحتل الكثير من الذاكرة ، ويجب على DOM تحميل المستند بأكمله في الذاكرة قبل تحليل الملف ، وهو مناسب للوصول العشوائي إلى XML ؛
SAX: (SimpleApiforxml) على عكس DOM ، SAX هي طريقة تحليل XML التي تعتمد على الحدث. يقرأ ملفات XML بالتسلسل ولا يتطلب تحميل الملف بأكمله مرة واحدة. عند مواجهة حدث مثل بداية ملف ، أو نهاية مستند ، أو بداية العلامة ونهاية العلامة ، فإنه يؤدي إلى حدوث حدث حيث يقوم المستخدم بمعالجة ملف XML عن طريق كتابة رمز المعالجة في حدث رد الاتصال الخاص به ، وهو مناسب للوصول المتسلسل إلى XML ؛
Stax: الفرق بين (StreamingApiforXML) والطرق الأخرى هو أن التطبيقات يمكنها التعامل مع XML كدفق أحداث ، وهو أفضل من الطرق الأخرى من حيث الأداء والتوافر ؛
thread.getState ()
ما سبق هي أسئلة مقابلة Java التي جمعها المحرر لك. آمل أن يكونوا مفيدين لك. إذا كان لديك أي أسئلة ، يرجى ترك رسالة لي. سوف يرد المحرر إليك في الوقت المناسب!