مهندس Java Backend: مجموعة أسئلة المقابلة
المشاريع ذات الصلة
- مقدمة عن النفس
- مقدمة عن المشروع
- حجم المشروع
- نقاط معرفة حول الخيوط (Threads) والتزامن (Concurrency)
- الفروق بين القفل (lock) وقفل الـ synchronized
- الفروق بين MYSQL و MONGODB
- المكونات وإصدارات SpringCloud المستخدمة
نظام Spring البيئي
- ما هو جوهر SpringBoot
- إصدار SpringBoot
- أي مكونات SpringCloud يتم استخدامها
- الفروق بين SpringBoot و SpringCloud
- طرق حقن Spring bean
- قواعد تسمية Bean لتكوين مصادر بيانات متعددة
هندسة الخدمات المصغرة (Microservice Architecture)
- كيفية تقسيم وحدات الخدمات المصغرة
- في حالة التزاوج (Coupling)، ما الذي يأخذ الأولوية: التزاوج التجاري أم التزاوج التقني؟
- ما هو نمط الخدمات المصغرة المستخدم
- الفروق بين عديم الحالة (Stateless) وذو الحالة (Stateful) في تصميم واجهات برمجة التطبيقات (API)، وكيفية الاختيار بينهما
- العدد الافتراضي للعقد (Nodes) لنشر الخدمات على السحابة (Cloud Deployment)
متعلق بـ Java
- إصدار JDK المستخدم
- التنفيذ الأساسي لـ Stream
- كيفية تصحيح مشاكل كود Stream
- مكونات Stream والبنية الأساسية
- كيفية تنفيذ مشاركة الرسائل بين الخيوط (Threads)
- ما هو القفل القابل لإعادة الدخول (Reentrant Lock)
- اشرح فهمك للأقفال
- الفروق بين JDK8 و JDK17
تكوين الخادم
- عدد الخيوط الافتراضي في Tomcat
- كيفية الانتقال من Tomcat إلى خوادم ويب أخرى
- تكوين وكيل عكسي لـ Nginx
قاعدة البيانات والذاكرة المؤقتة
- كيفية إنشاء اتصال Redis في المشروع، والتبعيات المطلوبة
- كيفية إنشاء اتصال باستخدام Jedis
- أوامر معاملات Redis
- سيناريو SQL: استعلام Join بين جدولي القسم والموظف لأعلى راتب حسب القسم
- مزايا Left Join
1. كيفية إنشاء اتصال Redis في المشروع، والتبعيات المطلوبة
لإنشاء اتصال Redis في مشروعك، تحتاج إلى إضافة التبعيات اللازمة. إذا كنت تستخدم Maven، يمكنك إضافة التبعية التالية إلى ملف pom.xml
:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.3</version>
</dependency>
إذا كنت تستخدم Gradle، يمكنك إضافة التبعية التالية إلى ملف build.gradle
:
implementation 'redis.clients:jedis:4.2.3'
2. كيفية إنشاء اتصال باستخدام Jedis
لإنشاء اتصال باستخدام Jedis، يمكنك استخدام الكود التالي:
import redis.clients.jedis.Jedis;
public class RedisExample {
public static void main(String[] args) {
// إنشاء اتصال مع Redis
Jedis jedis = new Jedis("localhost", 6379);
// اختبار الاتصال
System.out.println("Connection to server successfully");
System.out.println("Server is running: " + jedis.ping());
// إغلاق الاتصال
jedis.close();
}
}
3. أوامر معاملات Redis
Redis يدعم المعاملات باستخدام الأمر MULTI
لبدء المعاملة، وEXEC
لتنفيذها. إليك مثال بسيط:
jedis.multi();
jedis.set("key1", "value1");
jedis.set("key2", "value2");
jedis.exec();
4. سيناريو SQL: استعلام Join بين جدولي القسم والموظف لأعلى راتب حسب القسم
لحصول على أعلى راتب لكل قسم، يمكنك استخدام الاستعلام التالي:
SELECT d.department_name, e.employee_name, MAX(e.salary) AS max_salary
FROM department d
JOIN employee e ON d.department_id = e.department_id
GROUP BY d.department_name, e.employee_name;
5. مزايا Left Join
- إظهار جميع الصفوف من الجدول الأيسر: حتى إذا لم تكن هناك تطابقات في الجدول الأيمن.
- تحليل البيانات المفقودة: يمكنك تحديد الصفوف التي لا تحتوي على تطابقات في الجدول الأيمن.
- مرونة في الاستعلامات: يسمح لك بالحصول على بيانات من جدولين مع الاحتفاظ بجميع الصفوف من الجدول الأيسر.
مثال على استخدام Left Join:
SELECT d.department_name, e.employee_name
FROM department d
LEFT JOIN employee e ON d.department_id = e.department_id;
هذا الاستعلام سيعرض جميع الأقسام حتى إذا لم يكن هناك موظفين مرتبطين بها.
سيناريوهات البرمجة
- تنفيذ فرز كائنات
Person
حسب العمر والاسم باستخدام واجهة برمجة تطبيقات Java 8 - إخراج الأحرف المشتركة بين سلسلتين نصيتين
CI/CD (التكامل المستمر/التسليم المستمر)
- خبرة في كتابة Dockerfile
- ميزات الإغلاق (Closure) في Groovy ضمن خط أنابيب Jenkins
- الغرض من أداة Nexus
- الخبرة العملية في DevOps
المفاهيم الأساسية
- مفاهيم ووظائف نموذج ذاكرة Java (JMM)
- مبادئ تنفيذ HashMap وحل النزاعات
- تنفيذ نمط الوكيل (الستاتيكي والديناميكي)
- مبادئ IoC و AOP
- لماذا يحافظ Redis على أداء عالي باستخدام خيط واحد
- تكوين معلمات مجموعة خيوط Executor
تركيز المقابلات الهندية
- المفاهيم الأساسية في Java (مع أمثلة)
- استخدام تعدد الأشكال (Polymorphism)
- أداء LinkedList والاختلافات
- الاختلافات بين الخرائط (Maps)
- حلول التعامل مع المصفوفات (Arrays)
- أوامر Linux
- الخبرة في المشاريع (التقنيات المستخدمة: Python, Angular, Control-M)
- إتقان اللغة الإنجليزية
مستويات الطلاقة في اللغة الإنجليزية
- عدم القدرة على التعبير عن النفس - أساسيات ضعيفة، غير قادر على تقديم مقدمة عن النفس أو عرض المشاريع
- محادثة أساسية/بسيطة - أساسيات جيدة، يمكن تقديم مقدمة عن النفس مُعدة مسبقًا
- تواصل يومي - أساسيات قوية، يمكن المشاركة في الاجتماعات الإنجليزية وفهم معظم المحتوى
- قابل للعمل - أساسيات ممتازة، يمكن التواصل بطلاقة مع المُحاور
- قابل للعمل وتبادل تقني - إتقان ممتاز، يمكن المشاركة في مناقشات تقنية دون عوائق
نقاط تقييم أخرى في المقابلة
- طرق التعلم
- القدرة على التواصل التقني
- خبرة التواصل مع العملاء
- التحديات في المشاريع والحلول المقدمة
- خطة التطور الوظيفي
- العمق التقني (مثل التعددية في الخيوط، التحقق من البيانات، تطوير الواجهات الأمامية، إلخ)