كيف تجتاز مقابلة Java: أهم الأسئلة من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

كيف تجتاز مقابلة Java: أهم الأسئلة من الألف إلى الياء

\n\n

مقابلة العمل لوظيفة مطور Java ليست مجرد اختبار لمعرفة بناء الجملة. صاحب العمل يقيم فهمك للمبادئ الأساسية، وقدرتك على كتابة كود نظيف، وقدرتك على حل المشكلات الحقيقية. في هذه المقالة، قمنا بتجميع أهم أسئلة Java التي تغطي جميع الموضوعات الرئيسية: من أساسيات OOP إلى تعدد الخيوط والأطر. المقالة مناسبة لمطوري Junior و Middle على حد سواء.

\n\n

قمنا بتقسيم المحتوى إلى كتل منطقية لتتمكن من التحضير بشكل منهجي. كل سؤال مصحوب بإجابة مختصرة ومثال كود بلغة Java. استعد للمقابلة مع PythonLib!

\n\n

1. أساسيات Java و OOP (البرمجة كائنية التوجه)

\n\n

1.1. ما هي مبادئ OOP المطبقة في Java؟

\n

تدعم Java أربعة مبادئ رئيسية لـ OOP: الوراثة (extends/implements)، تعدد الأشكال (تحميل وتجاوز الدوال)، التغليف (حقول خاصة + getters/setters) و التجريد (abstract class/interface).

\n\n
// مثال على التغليف\npublic class User {\n    private String name;\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n}\n
\n\n

1.2. ما الفرق بين الفئة المجردة والواجهة؟

\n

قبل Java 8: يمكن للفئة المجردة أن تحتوي على دوال وحقول مطبقة، بينما تحتوي الواجهة فقط على دوال مجردة وثوابت. بعد Java 8، ظهرت في الواجهات دوال default و static. الفرق الرئيسي: يمكن للفئة تنفيذ واجهات متعددة، ولكنها ترث فئة مجردة واحدة فقط.

\n\n

1.3. ما هو تحميل الدوال وتجاوزها؟

\n
    \n
  • تحميل الدوال (overloading): دوال بنفس الاسم ولكن بمعاملات مختلفة (وقت الترجمة).
  • \n
  • تجاوز الدوال (overriding): الفئة الفرعية تغير تنفيذ دالة الفئة الأم (وقت التشغيل).
  • \n
\n\n
// Overloading\nclass Calculator {\n    int sum(int a, int b) { return a + b; }\n    double sum(double a, double b) { return a + b; }\n}\n\n// Overriding\nclass Animal {\n    void sound() { System.out.println("Some sound"); }\n}\nclass Dog extends Animal {\n    @Override\n    void sound() { System.out.println("Bark"); }\n}\n
\n\n

2. إطار مجموعات Java (Java Collections Framework)

\n\n

2.1. اذكر التطبيقات الرئيسية لـ List و Set و Map.

\n
    \n
  • List: ArrayList (وصول سريع حسب الفهرس)، LinkedList (إدراج/حذف سريع).
  • \n
  • Set: HashSet (يعتمد على HashMap، لا يضمن الترتيب)، TreeSet (مرتب)، LinkedHashSet (يحافظ على ترتيب الإدراج).
  • \n
  • Map: HashMap (وصول سريع، مفاتيح null)، TreeMap (ترتيب حسب المفتاح)، LinkedHashMap (ترتيب الإدراج).
  • \n
\n\n

2.2. كيف يعمل HashMap؟

\n

يستخدم HashMap مصفوفة من السلال (buckets) ودالة تجزئة. عند إدراج مفتاح، يتم حساب hashCode الخاص به، ثم تحديد فهرس السلة. إذا كانت السلة تحتوي بالفعل على عناصر (تصادم)، يتم استخدام قائمة مرتبطة أو شجرة حمراء-سوداء (إذا كان عدد العناصر > 8). السعة الافتراضية هي 16، وعامل التحميل هو 0.75.

\n\n
Map<String, Integer> map = new HashMap<>();\nmap.put("Java", 1);\nmap.put("Python", 2);\nSystem.out.println(map.get("Java")); // 1\n
\n\n

2.3. ما الفرق بين ArrayList و LinkedList؟

\n

يعتمد ArrayList على مصفوفة ديناميكية، بينما يعتمد LinkedList على قائمة مزدوجة الارتباط. ArrayList أسرع في الوصول حسب الفهرس (O(1) مقابل O(n))، ولكنه أبطأ في الإدراج/الحذف في المنتصف (O(n) مقابل O(1)). يتطلب LinkedList ذاكرة أكبر بسبب تخزين المراجع.

\n\n

3. تعدد الخيوط والتزامن

\n\n

3.1. ما هي طرق إنشاء الخيوط في Java؟

\n
    \n
  • وراثة الفئة Thread وتجاوز دال

المدونات

توصيات الكتب