CodeGym /مدونة جافا /Random-AR /أهم 21 سؤالًا في مقابلة جافا
John Squirrels
مستوى
San Francisco

أهم 21 سؤالًا في مقابلة جافا

نشرت في المجموعة
هناك عدد لا يحصى من أسئلة مقابلات Java ولا يمكننا جمعها كلها في مقال واحد. ومع ذلك، يمكنك العثور هنا على بعض الأسئلة الشائعة جدًا في مقابلات Java، وفقًا لمديري الموارد البشرية في شركات تكنولوجيا المعلومات. أهم 21 سؤالًا في مقابلة جافا - 1
  1. "تفكيك" public static void main(String args[]).

    أحد أسئلة مقابلات جافا الشائعة للمبتدئين، وهو سهل للغاية.

    • publicهو معدّل الوصول. نستخدمها لتحديد الوصول إلى هذه الطريقة. المُعدِّل هنا "عام"، لذا فإن أي فئة لديها حق الوصول إلى هذه الطريقة.

    • static. تعني كلمة Java الأساسية هذه أننا نستخدم هذه الطريقة دون إنشاء كائن فئة جديد.

    • Voidهو نوع الإرجاع للطريقة. وهذا يعني أن الطريقة لا تُرجع أي قيمة.

    • mainهو اسم الطريقة. "يعرفها" JVM كنقطة دخول إلى التطبيق (يجب أن يكون له توقيع معين). Mainهي الطريقة التي يحدث فيها التنفيذ الرئيسي.

    • String args[]. هذه هي المعلمة التي تم تمريرها إلى الطريقة الرئيسية. لدينا هنا وسيطات نوع السلسلة التي يقبلها تطبيق Java الخاص بك عند تشغيله. يمكنك كتابتها على المحطة.

  2. ما هو الفرق بين equals()و ==؟

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

  3. هل يمكننا تنفيذ برنامج بدون main()طريقة؟

    العديد من أسئلة المقابلة الأساسية في جافا سهلة حقًا. مثل هذه. لذا فإن الإجابة المختصرة هي: نعم، نستطيع. على سبيل المثال يمكننا القيام بذلك باستخدام كتلة ثابتة.

    يمكنك استخدام الكتلة الثابتة لتهيئة عضو البيانات الثابتة. يتم تنفيذه قبل mainالطريقة، في وقت تحميل الفصل.

    class Example{
     Static{
    System.out.println("static block is invoked");
    }
      public static void main(String args[]){
       System.out.println("Now main method");
      }
    }

    الإخراج هو:

    static block is invoked
    Now main method
  4. ماذا عن الغياب التام للطريقة الرئيسية؟ إذا حاولت تشغيل فئة عادية بدون الطريقة الرئيسية على الإطلاق، فستحصل على الخطأ التالي: لم يتم العثور على الطريقة الرئيسية في اختبار الفئة، يرجى تحديد الطريقة الرئيسية على النحو التالي: public static void main (String [] args) أو تطبيق JavaFX يجب أن يمتد الفصل إلى javafx.application.Application. يشير الخطأ نفسه إلى أنه إذا كان هذا تطبيق JavaFX والفئة موروثة من javafx.application.Application، فمن الممكن.
  5. ما هو immutableالكائن؟ هل يمكنك إنشاء immutableكائن؟

    لا يمكنك تعديل كائنات الفصل immutableبعد إنشائها. لذا، بمجرد إنشائها، لا يمكنك تغييرها. إذا حاولت تعديل Immutableالكائن، فستحصل على كائن جديد (استنساخ) وتغيير هذا الاستنساخ أثناء الإنشاء.

    وخير مثال على ذلك هو Stringأنه immutableفي جافا. وهذا يعني أنه لا يمكنك تغيير الكائن نفسه، ولكن يمكنك تغيير المرجع إلى الكائن.

  6. كم عدد الكائنات التي تم إنشاؤها في الكود التالي؟

    أحد أسئلة المقابلة الفنية لجافا والذي يحل محل رقم 4.

    String s1="Hello";
    String s2="Hello";
    String s3="Hello";

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

  7. كم عدد الكائنات التي تم إنشاؤها في الكود التالي؟

    String s = new String("Hello");

    هناك 2 كائنات. أحدهما موجود في مجموعة ثابتة من السلسلة (إن لم يكن موجودًا بالفعل) والآخر موجود في الكومة.

  8. ما هو الفرق بين Stringوالفئات StringBuilderفي StringBufferجافا؟

    هناك أحد الأسئلة الرائدة في مقابلة جافا.

    أولا وقبل كل شيء Stringهو فئة غير قابلة للتغيير. وهذا يعني أنه لا يمكنك تعديل محتواه بمجرد إنشائه. بينما StringBufferو StringBuilderهي فئات قابلة للتغيير، لذا يمكنك تغييرها لاحقًا. إذا قمنا بتغيير محتوى Stringالكائن، فإنه ينشئ سلسلة جديدة وبالتالي لا يعدل السلسلة الأصلية. لهذا السبب فإن الأداء StringBufferمع String.

    الفرق الرئيسي بين أساليب StringBufferو StringBuilderthat StringBufferهو أن الأساليب متزامنة في حين أن StringBuilderالأساليب ليست كذلك.

  9. هل هناك أي اختلاف في Stringما تم إنشاؤه باستخدام الحرفي ومع new()المشغل؟

    هنالك. إذا قمنا بإنشاء سلسلة باستخدام new()عامل التشغيل، فإنها تظهر في الكومة وفي تجمع السلاسل (إذا لم تكن موجودة بالفعل). إذا قمت بإنشاء حرف Stringباستخدام حرفي، فسيتم إنشاؤه في تجمع السلسلة (إذا لم يكن موجودًا بالفعل). تجمع السلسلة عبارة عن منطقة تخزين داخل الكومة، والتي تقوم بتخزين سلسلة حرفية.

  10. هل يمكنك تجاوز privateأو staticطريقة في جافا؟

    أحد أسئلة مقابلة جافا الصعبة للمبتدئين. لا يمكنك حقًا التجاوز privateأو staticالأسلوب في Java.

    لا يمكنك تجاوز privateالأساليب لأن نطاق محدد الوصول الخاص يقع داخل الفصل فقط. عندما تريد تجاوز شيء ما، يجب أن يكون لدينا فئة الوالدين والطفل. إذا كانت طريقة الفئة الفائقة هي private، فلن تتمكن الفئة الفرعية من استخدامها، وسيتم التعامل مع الطرق الموجودة في الفئة الفرعية على أنها طرق جديدة (لا يتم تجاوزها).

    Staticلا يمكن أيضًا تجاوز الأساليب، لأن staticالأساليب هي جزء من الفئة نفسها، وليست جزءًا من أي كائن في الفئة. بالتأكيد يمكنك الإعلان عن نفس staticالطريقة بنفس التوقيع في الفئات الفرعية، ولكن مرة أخرى، سيتم التعامل معها كطرق جديدة.

  11. الفرق بين Abstract ClassوInterface

    أحد الأسئلة الشائعة لمقابلة مطوري جافا والتي تتعلق بمبادئ OOP. أولا وقبل كل شيء، في جافا interfaceيحدد السلوك ويخلق abstract classالتسلسل الهرمي.

    فئة مجردة واجهه المستخدم
    من الممكن أن يكون هناك نص أسلوب (طرق غير مجردة) في فئة مجردة يمكن أن تحتوي الواجهة على طرق مجردة فقط. في Java 8 أو الأحدث، أصبح من الممكن تحديد الأساليب الافتراضية وتنفيذها مباشرة في الواجهة. أيضًا، يمكن أن تحتوي الواجهات في Java 8 على طرق ثابتة.
    يمكن أن تكون متغيرات الحالة في فئة مجردة لا يمكن أن تحتوي الواجهة على متغيرات مثيل.
    يسمح للبناء لا يمكن أن تحتوي الواجهة على أي مُنشئ.
    الأساليب الثابتة مسموح بها الأساليب الثابتة غير مسموح بها
    يمكن أن يكون للفئة أصل مجرد واحد فقط قد تقوم واجهة واحدة بتنفيذ فئات مختلفة
    قد توفر الفئة المجردة تنفيذ الواجهة. لا يمكن للواجهة توفير تنفيذ الفئة المجردة.
    يُسمح للفئة المجردة بتوسيع فئة Java الأخرى وتنفيذ واجهات Java المتعددة. يُسمح للواجهة بتوسيع واجهة Java الأخرى فقط.
    يمكن أن تحتوي فئة Java المجردة على أعضاء فئة خاصة ومحمية يكون أعضاء واجهة Java عامًا بشكل افتراضي
  12. هل يمكننا الإعلان عن staticالمتغيرات والأساليب في abstractالفصل؟

    نعم، من الممكن الإعلان عن staticالمتغيرات والأساليب في abstractالطريقة. ليست هناك حاجة لإنشاء كائن للوصول إلى السياق الثابت. لذلك يُسمح لنا بالوصول إلى السياق الثابت المعلن داخل الفصل abstractباستخدام اسم الفصل abstract.

  13. ما أنواع مناطق الذاكرة المخصصة بواسطة JVM؟

    تقوم منطقة الفئة بتخزين بنيات كل فئة، على سبيل المثال، التجمع الثابت لوقت التشغيل، والحقول، وبيانات الطريقة، وجميع التعليمات البرمجية الخاصة بالطرق.

    الكومة هي منطقة بيانات وقت التشغيل حيث يتم تخصيص الذاكرة للكائنات.

    كومة مخازن الإطارات. يحتوي على متغيرات محلية ونتائج جزئية، ويشارك في استدعاء الطريقة وإرجاعها. يحتوي كل مؤشر ترابط على مكدس JVM خاص، يتم إنشاؤه في نفس وقت إنشاء الخيط. يتم إنشاء إطار جديد في كل مرة يتم فيها استدعاء الطريقة. يتم تدمير الإطار عند اكتمال استدعاء الطريقة الخاصة به.

    يحتوي سجل عداد البرنامج على عنوان تعليمات جهاز Java الظاهري الذي يتم تنفيذه حاليًا.

    يحتوي Native Method Stack على كافة الطرق الأصلية المستخدمة في التطبيق.

  14. لماذا لا يسمح بالميراث المتعدد في جافا؟

    سيكون الأمر معقدًا حقًا. تخيل ثلاث فئات Aو Bو Cو Cيرث Aو B. الآن، Aوالفئات Bلها نفس الطريقة وتستدعيها من كائن فئة فرعية... أيهما؟ A's أو B's؟ وهنا لدينا الغموض.

    إذا حاولت أن ترث فئتين، فإن Java تعرض خطأً في وقت الترجمة.

  15. هل يمكن أن نفرط في main()الطريقة؟

    بالتأكيد، يُسمح لنا بالحصول على العديد من mainالأساليب في برنامج Java باستخدام طريقة التحميل الزائد. حاول!

  16. هل يمكننا أن نعلن المنشئ كـ final؟

    لا. لا يمكن الإعلان عن المنشئ finalلأنه لا يمكن توريثه. لذلك فمن غير المنطقي أن نعلن عن المنشئين على أنهم final. ومع ذلك، إذا حاولت القيام بذلك، فسيظهر لك مترجم Java خطأً.

  17. هل يمكننا أن نعلن عن الواجهة كـ final؟

    لا، لا يمكننا أن نفعل هذا. لا يمكن أن تكون الواجهة موجودة finalلأنه يجب تنفيذ الواجهة بواسطة فئة معينة وفقًا لتعريفها. ولذلك، ليس هناك أي معنى لإنشاء واجهة final. ومع ذلك، إذا حاولت القيام بذلك، سيظهر المترجم خطأ.

  18. ما هو الفرق بين static bindingو dynamic binding؟

    ما bindingيمكن حله في وقت الترجمة بواسطة المترجم يسمى staticأو الربط المبكر. Bindingمن جميع الطرق staticوالطرق privateيتم finalإجراؤها في وقت الترجمة.

    في Dynamic bindingالمترجم لا يمكن اختيار طريقة ليتم استدعاؤها. التجاوز هو مثال مثالي لـ dynamic binding. في تجاوز كل من فصول الوالدين والطفل لها نفس الطريقة.

    Static Binding
    class Cat{
     private void talk()
    {System.out.println("cat is mewing...");
    }
    
     public static void main(String args[]){
      Cat cat=new Cat();
      cat.talk();
     }
    }
    Dynamic Binding
    class Animal{
     void talk(){
    System.out.println("animal is talking...");
    }
    }
    
    class Cat extends Animal{
     void talk(){
    System.out.println("cat is talking...");
    }
     public static void main(String args[]){
      Animal animal=new Cat();
      animal.talk();
     }
    }
  19. كيفية إنشاء فئة للقراءة فقط في جافا؟

    يمكنك القيام بذلك عن طريق جعل كافة حقول الفصل الدراسي خاصة. تحتوي فئة القراءة فقط على أساليب getter التي تعيد الملكية الخاصة للفئة إلى الطريقة main. لا يمكنك تعديل هذه الخاصية، والسبب هو عدم وجود طريقة الضبط.

    public class HockeyPlayer{
    private String team ="Maple leaf";
    public String getTeam(){
    return team;
    }
    }
  20. كيفية إنشاء فئة للكتابة فقط في جافا؟

    مرة أخرى، يجب عليك إنشاء كافة حقول الفصل private. الآن، يجب أن يحتوي فصل الكتابة فقط على أساليب ضبط فقط ولا يحتوي على حروف. لذلك، لا يمكننا قراءة خصائص الفصل.

    public class HockeyPlayer{
    private String team;
    public void setTeam(String college){
    this.team = team;
    }
    }
  21. كل tryكتلة يجب أن تتبعها catchكتلة، أليس كذلك؟

    لا. انها ليست ضرورة. كل tryكتلة يمكن أن تكون بدون catchكتلة. يمكن أن يتبعه إما كتلة التقاط أو كتلة نهائية أو حتى بدونها على الإطلاق.

    public class Main{
         public static void main(String []args){
            try{
                int variable = 1;
                System.out.println(variable/0);
            }
            finally
            {
                System.out.println("the other part of the program...");
            }
         }
    }

    انتاج:

    Exception in thread main java.lang.ArithmeticException:/ by zero
    the other part of the program...

    مثال آخر:
    class Main {
            public static void main(String[] args) throws IOException {
                try(InputStreamReader inputStreamReader = new InputStreamReader(System.in);
                    BufferedReader reader = new BufferedReader(inputStreamReader)){
                    System.out.println("test");
                }
            }
        }

    انتاج:

    test

    ملاحظة: قبل أن تكون أساليب Java 8 في الواجهات مجردة فقط. في Java 8 أو الأحدث، أصبح من الممكن تحديد الأساليب الافتراضية وتنفيذها مباشرة في الواجهة.
  22. ما هو الفرق بين throwوالكلمات throwsالرئيسية؟

    Throwsيُستخدم للإعلان عن استثناء، لذا فهو يعمل بشكل مشابه للكتلة try-catch. Throwيتم استخدام الكلمة الأساسية لطرح استثناء بشكل صريح من طريقة ما أو أي كتلة أخرى من التعليمات البرمجية.

    Throwيتبعه مثيل Exceptionللفئة ويتبع الرميات أسماء فئات الاستثناء.

    Throwيتم استخدامه في نص الطريقة لطرح استثناء. Throwsيُستخدم في توقيع الطريقة للإعلان عن الاستثناءات التي قد تحدث في العبارات الموجودة في الطريقة.

    يُسمح بطرح استثناء واحد في كل مرة ولكن يمكنك التعامل مع استثناءات متعددة عن طريق الإعلان عنها باستخدام throwالكلمة الأساسية. يمكنك الإعلان عن استثناءات متعددة، على سبيل المثال public void method()throws IOException، SQLException.

هنا لم يكن لدينا سوى عدد قليل من الأسئلة والأجوبة لمقابلة جافا. هذه المقالة هي الأولى من سلسلة المقابلات. السؤال التالي (قريبًا) يدور حول أسئلة بنية البيانات.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION