الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اختبر قدراتك في الجافا - الحلقة الثامنة

مغلق
بدأه Snack3r في 28 نوفمبر 2013 · 2 رد · 1,647 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

 

فهرس الحلقات.

 

 

الهدف من هذه الحلقة هو التعرف على بعض المفاهيم النظرية التي سنتطرق لها في الحلقات القادمة. كان من المفترض أن تكون هذه الحلقة هي الأولى من هذه السلسلة لكن لم تساعدني الظروف لأن الحلقات الأولى كانت مرتجلة و كتبتُها دون تحضير مسبق.

لنبدأ على بركة الله.

 

  1. قمنا بتخزين مجلد المشروع في المسار التالي D:\projet. المجلد projet يحوي مجلداً باسم src يحتوي على الأكواد و مجلد آخر build, هذا الأخير يحتوي على مجلد classes الذي يحتوي بدوره على مجموعة مجلدات بأسماء تحمل نفس أسماء الفئات الخاصة بها  و تحتوي على الـ bytecodes. قمنا بإنشاء فئة جديدة باسم Machin داخل الحزمة machin التي توجد في المجلد src. تحتوي الفئة Machin على استدعاءات لدوال موجودة في الفئة Truc التي تمت ترجمتها سابقاً داحل المجلد classes.
    من خلال سطر الأوامر, اكتب الأمرين اللذين يُمكنان من ترجمة Machin داخل المجلد classes و تنفيذها .
  2. ما هي الـ numeric promotion في الجافا ؟
  3. اذكر مختلف الكتابات الممكنة للإعلان عن مصفوفة من الأعداد الصحيحة.
  4. إذا كانت لدينا فئة E ترث فئة F, ماذا تعني الكتابة :
    super(X,b)
    في دالة بناء الفئة E مع العلم أن X من نوع String و b من نوع double ؟
  5. مالفرق بين الـ Overload و الـ Override في الجافا ؟ و ما هي شروط كل منهما ؟
  6. ما هي أهمية الـ ploymorphisme في الجافا ؟
  7. ماذا تعني الـ dynamic binding ؟
  8. لتكن لدينا الفئتان A و B كالتالي :
    class A {
      void f() {
     }
    }
    
    class B extends A {
      void g() {
     }
    }
    ---
    A obj = new B();
    كيف يُمكن أن نصل إلى الدالة g من خلال الكائن obj ؟
  9. اذكر الأسباب التي تجعلك تتعامل مع الـ exceptions.
  10. ماهو الـ binary filter المناسب لكتابة مجموعة من البيانات في formatted stream ؟
  11. إذا كان لدينا كائن من HashMap, كيف نقوم بالمرور فقط على مفاتيحه ؟
  12. قمنا بإضافة مجموعة كائنات من فئة X داخل كائن من TreeSet, كيف سيتم ترتيب تلك الكائنات ؟
  13. عرف مفهوم الـ view في الـ collections و اذكر دور مختلف الـ views الموجودة.
  14. عرف الـ critical section ؟ و اذكر أهميته في التعامل مع الـ Threads.
  15. ماهو المفهوم الذي يجب تطبيقه عند تنفيذ مجموعة من الدوال في وقت واحد ؟ و ما هي أهميته ؟
  16. هل يوجد فرق بين استدعاء الدالتين run و start في الـ Threads ؟
  17. اذكر أهم الفروق بين AWT و Swing ؟
  18. ما هي فائدة الدالة forName التابعة للفئة Class و ماهو الاستثناء الذي عادة ما يتم إصداره من طرف تلك الفئة ؟ و متى يتم إصداره ؟
  19. مالفرق بين الـ static queries و الـ precompiled queries ؟
  20. اذكر كافة الخطوات المُتبعة عند إجراء اتصال بين تطبيق جافا يستخدم JDBC و قاعدة بيانات ذات جدوال مترابطة (relational database).
  21. ما هي أنواع الـ JDBC الموجودة في الجافا ؟

 

 

تُرسل الإجابة على الخاص.

 

 

 

تحياتي.

تم تعديل هذه المشاركة بواسطة Snack3r في 1 ديسمبر 2013 في 16:42

1
#2

محاولة العضو مصطفى 36a2 :

 

3- (المقصود في السؤال هو مختلف الكتابات لإنشاء مصفوفة و إسناد عناصر لها, لذا توجد بعض الكتابات المكررة لديك)
        int[]x0=new int[2];
        int[]x1=new int[]{1,2};
        int x2[]=new int[2];
        int x3[]=new int[]{1,2};
        int[] x4={1,2};
        int x5[]={1,2};
        4- (إجابة صحيحة)
        تعني استدعاء دالة بناء الفئة F التي تأخذ سلسلة ثم عدد حقيقي في وسطائها
        5-(إجابة صحيحة)
        overload هو تعريف دالة بنفس الاسم ولكن بوسطاء مختلفة
        وشرطه هو وجود الدالتين الأصلية والجديدة في نفس الفئة وفقط
        override هو تعريف نفس الدالة بنفس الوسطاء وبنفس القيم المعادة
        وشرطه أن تكون الدالة الجديدة في فئة وارثة للفئة الحاوية على الدالة الأصلية ويجب أن يكون محدد الوصول مماثل أو أعلى من محدد وصول الدالة الأصلية
        
        6-(إجابة صحيحة)
        ploymorphisme  هو محور كائنية التوجّه , فيمكننا بفضله أن نعتبر الكائن هو أبوه وهو جدّه وهو أي واجهة ينفّذها ..حيث "هو" هي عملي الوراثة أو التطبيق implements
        وهذا يتوضح في تمرير الوسطاء وإعادة القيم من الدوال حيث يمكننا تنفيذها بشكل عام على كل ما يرث فئة معينة
        
        8-(إجابة صحيحة)
        بعمل cast للكائن A كما يلي : ((B)obj).g()
        9-(إجابة صحيحة - غير مكتملة)
        أولاً : غصباً عنّي .. عندما أتعامل مع دالة تقوم بـthrowلاستثناء ما ..
        ثانياً : كقيمة معادة من الدالة , وذلك عندما أعتبر رمي الاستثناء هو حدوث حدث ما هو جزء طبيعي من سير البرنامج
        ثالثاً : لتمكين البرنامج من المتابعة بعد حدوث خطأ في وقت التنفيذ , بحيث نحدد السلوك المطلوب لمواجهة هذا الخطأ    
        
        11-(إجابة صحيحة - غير مكتملة)
        باستخدام الدالة keySet()
        12-(إجابة صحيحة)
        لن يتم ترتيبها , وسيصدر استثناء ClassCastException إن لم تكن الفئة قد قامت بعمل  implements للواجهة java.lang.Comparable
        أما إن كانت قد قامت بعمل الـ implements فسيتم الترتيب حسب الدالة ما تعيده الدالة compareTo
        13-(إجابة صحيحة)
        view تعني إمكانية المرور على العناصر لقراءتها فقط ولا يُسمح بالتعديل على العناصر .
        
        15-(إجابة صحيحة)
        التزامن : وأهميته هي تنظيم تشارك الموارد مثل الوصول للمتحولات/الملفات/الـstreams/الكائنات وهذا الوصول يجب أن يكون تسلسليّاً وليس تفرّعيّاً ..

 

 

محاولتي :

  1. كمثال على السؤال, هذه هي الفئة Truc :
    package machin;
    
    public class Truc {
    
        public void display() {
            System.out.println("Truc");
        }
    }
    و هذه Machin :
    package machin;
    
    public class Machin {
    
        public static void main(String agrs[]) {
    	Truc obj = new Truc();
            obj.display();
        }
    }
    بداية, ننتقل إلى مسار المجلد src :
    C:\>cd /D D:Projet/src
    لترجمة الفئة Machin :
    D:\Projet\src>javac 
    	-d ../build/classes 
    	-classpath ../build/classes/ 
    	machin/Machin.java
    و للتنفيذ :
    D:\Projet\src>java 
    	-classpath ../build/classes/ 
    	machin.Machin

    نستخدم الأمر tree للتأكد من بنية المشروع :

    D:.
    ├───build
    │   └───classes
    │       └───machin
    │               Machin.class
    │               Truc.class
    │
    └───src
        └───machin
                Machin.java
                Truc.java
  2. كل نوع من الأنواع العددية (numeric type) في جافا له قيمة صغرى و أخرى عظمى و بالتالي لا يُمكنه تخزين أقل من القيمة الصغرى أو أكبر من القيمة العظمى, إذا تم إسناد قيمة أكبر من القيمة العظمى لمتغير عددي, يتم تحويله تلقائيا إلى النوع العددي الأكبر منه بحيث تتناسب قيمته مع العملية الحسابية المراد تنفيذها (عملية التحويل التلقائية هي ما يُسمى بـ numeric promotion). مثال :
    int a = 12;
    short b = 15;
    int result = a + b;
    // numeric promotion
    int result = a + (int)b;
  3. for (int i = 0; i < arr.length; i++)      arr = i+1;int arr[] = {1,2,3};int arr[] = new int[]{1,2,3};
  4. تعني استدعاء دالة بناء الفئة الأم (و هي F في هذه الحالة) و تمرير (على التوالي) الوسيطين X و b لها.
  5. Overload : تغيير عدد أو نوع وسائط الدالة دون تغيير اسمها, هكذا مثلا :
    class MaClasse
    {
       public void maMethode(int i) { ... }
       public void maMethode(float f) { ... }
    }
    Override تعني إعادة تعريف الدالة, هذا المفهوم له علاقة وطيدة بالـ polymorphisme حيث يسمح بإعادة تعريف الدالة في فئة معينة مع إمكانية استدعاء الدالة الأم عن طريق super. يُشترط في الـ Override عدم تغيير signature الدالة الموجودة في الفئة الأم و إلا سنعود إلى الـ Overload.
  6. الـ polymorphisme بشكل عام عبارة عن وصف لعنصر معين يُمكنه أخذ عدة أشكال (مثل الماء, قد يكون سائلا, صلباً أو غاز ..). في الـ OOP يُطلق الـ polymorphisme على :
    1. إمكانية التعامل مع كائن من فئة معينة على أنه كائن من فئة أخرى.
    2. يُمكن أن يختلف نفس الاستدعاء لدالة معينة حسب اختلاف الفئة المُطبقة عليها.
  7. الـ dynamic binding هي إحدى خصائص الـ polymorphisme : أثناء الـ compilation يتم تحديد الـ declared type للدالة, يقوم الـ complier بأخذ توقيع الدالة و إرساله إلى الـ JVM, هذه الأخيرة يُمكنها تحديد النوع الحقيقي للدالة المستدعاة حيث تقوم بالتأكد من إعادة تعريف الدالة, إذا كان الجواب لا, تصعد إلى الأعلى باتجاه الـ hierarchy للفئة المعنية لإيجاد الدالة المناسبة. انظر المثال :
    public class ClasseXXX {
    
        public void methodeXXX(double p) {
            System.out.println("Appel 1");
        }
    }
    
    class ClasseYYY extends ClasseXXX {
    
        @Override
        public void methodeXXX(double k) {
            System.out.println("Appel 2");
        }
    
        public void methodeXXX(float d) {
            System.out.println("Appel 3");
        }
    
        public static void main(String args[]) {
            ClasseXXX objX = new ClasseXXX();
            ClasseYYY objY = new ClasseYYY();
            objX = objY;
            objX.methodeXXX(12);
            ((ClasseYYY) objX).methodeXXX(12);
            ((ClasseYYY) objX).methodeXXX(12.65);
        }
    }
  8. يُمكنك الإجابة على السؤال من خلال المثال السابق !
  9. a- كتابة فئة استثناءات خاصة بك من خلال عمل extends للفئة Exception و تعريف الدوال كيفما تريد.
    b- استخدام try-catch لإضافة تعليمات بديلة عند حدوث الاستثناء.
    c- أو لتخصيص رسائل الخطأ (قد لا ترغب في أن يرى المستخدم الرسالة الأصلية التي توضح طبيعة الخطأ حتى لا يُهاجم برنامجك مثلا إذا كان الاستثناء قد يقود المستخدم إلى اكتشاف ضعف برمجي في تطبيقك أو استغلال ثغرة معينة)
  10. java.io.PrintWriter
  11. الدالة getKey الموجودة في Map.entry.
  12. راجع إجابة الأخ مصطفى.
  13. a - تسمح الــ view بالمرور على عناصر الـ Map.
    b - الدالة entrySet تسمح برؤية Map كمجموعة أزواج.
    c - الزوج عبارة عن كائن من نوع الواجهة Map.entry حيث يجمع كائنين في آن واحد.
    d - الدالتان getKey و getValue الموجودتان في Map.entry تسمحان باستخراج مفتاح و قيمة زوج معين.
  14. إذا كان لدينا الكود التالي :
    synchronized (obj) { // code}
    حيث obj عبارة عن كائن معين, تقوم جافا بعمل locking للكائن obj أثناء تنفيذ الكود الموجود بين معكوفين و بالتالي لا يُمكن تنفيذ أي synchronized bloc آخرلهذا الكائن يتبع لـ thread معين إلا بعد أن يتم انتهاء تنفيذ الكود و نزع القفل عن الكائن obj. (يُطلق على هذا المفهوم مصطلح الـ critical section)
  15. synchronization, تسمح بوجود عدة دوال تتعامل مع نفس الكائن دون أن يُؤثر بعضها على عمل بعض.
  16. نعم, الدالة run تحتوي على الكود الذي سيقوم الـ thread بتنفيذه.
    start : تقوم بحجز مساحة من الذاكرة للـ thread و تطلب من الـ scheduler استدعاء run.
  17. تبدأ جميع مكونات Swing بالحرف J.
    الفئة الأم لكافة مكونات Swing هي JComponent و التي ترث الفئة الأم لمكونات AWT (و هي Container)
    مكونات AWT تعتمد على نظام التشغيل على عكس Swing.
    توجد جميع فئات Swing  في الحزمة javax.swing .*.
    تنقسم مكونات Swing إلى نوعين :
    1. مكونات من الدرجة الأولى : (JFrame, JWindow, JApplet et JDialog)
    2. مكونات أخرى : بقية المكونات الخاصة بالتحكم في الـ GUI.
  18. الدالة forName تسمح بالحصول على الفئة المُمرّرة كوسيط. إذا لم يتم إيجاد الفئة ستحصل على الاستثناء ClassNotFoundException.
  19. static queries : الـ SGBD لا يعرف الاستعلام قبل  تنفيذه.
    precompiled queries : يطلب تطبيق الجافا من الـ SGBD إنشاء empty area, تتم معرفة الاستعلام المراد تنفيذه من طرف الـ SGBD مُسبقاً. قبل تنفيذ الاستعلام, يتم ملأ الفراغات الموجودة فيه  باستخدام الدوال setXXX حيث XXX هو نوع المتغير.
    إذا كان التطبيق يحتوي على الكثير من الاستعلامات يُفضل استخدام الـ precompiled queries من خلال الفئة PreparedStatement.
  20. تحميل الـ drver باستخدام الدالة forName.
    فتح اتصال مع قاعدة البيانات باستخدام getConnection.
    إنشاء الاستعلام من خلال createStatement و تنفيذه بـ executeQuery.
    تحرير الذاكرة باستخدام close.
  21. توجد 4 أنواع :
    Type I: jdbc: odbc:source : يتصل الـ driver بالـ SGBDR مروراً بـ ODBC الذي يعني (standard Microsoft: Open DataBase Connectivity) من خلال جسر JDBC-ODBC.
    Type II: jdbc: protocole : النوع الثاني عبارة عن drivers كُتبت بالجافا بشكل جزئئ حيث تعتمد على مكتبات خارجية (كُتبت بلغات أخرى مثل C) للوصول إلى الـ SGBD.
    Type III and IV: jdbc: driver: adresse : النوع الثالث و الرابع كُتبا بجافا بشكل كامل.
    النوع الثالث يتواصل مع الـ SGBD عن طريق الـ Sockets, عملية التواصل بينهما تتم عن طريق تطبيق موجود في السيرفر و يلعب دور الوسيط بين كلا الجانبين (يُطلق عليه الـ Middleware).
    الفرق بين III و IV هو عدم وجود الـ middleware في هذا الأخير.

تم تعديل هذه المشاركة بواسطة Snack3r في 1 ديسمبر 2013 في 23:54

#3

بارك الله فيك , آخر 3 أسئلة كنت فيها خارج نطاق التغطية تماماً :D
أقل ما يمكنني عمله هو تنسيق الأسئلة مع الأجوبة للدلالة على أهمية هذه السلسلة
___________________________________________________

السؤال الأول :
قمنا بتخزين مجلد المشروع في المسار التالي D:\projet. المجلد projet يحوي مجلداً باسم src يحتوي على الأكواد و مجلد آخر build, هذا الأخير يحتوي على مجلد classes الذي يحتوي بدوره على مجموعة مجلدات بأسماء تحمل نفس أسماء الفئات الخاصة بها  و تحتوي على الـ bytecodes. قمنا بإنشاء فئة جديدة باسم Machin داخل الحزمة machin التي توجد في المجلد src. تحتوي الفئة Machin على استدعاءات لدوال موجودة في الفئة Truc التي تمت ترجمتها سابقاً داحل المجلد classes.
من خلال سطر الأوامر, اكتب الأمرين اللذين يُمكنان من ترجمة Machin داخل المجلد classes و تنفيذها .
الجواب :
كمثال على السؤال, هذه هي الفئة Truc :

package machin;

public class Truc {

    public void display() {
        System.out.println("Truc");
    }
}
و هذه Machin :
package machin;

public class Machin {

    public static void main(String agrs[]) {
    Truc obj = new Truc();
        obj.display();
    }
}
بداية, ننتقل إلى مسار المجلد src :
C:\>cd /D D:Projet/src
لترجمة الفئة Machin :
D:\Projet\src>javac
    -d ../build/classes
    -classpath ../build/classes/
    machin/Machin.java
و للتنفيذ :
D:\Projet\src>java
    -classpath ../build/classes/
    machin.Machin
نستخدم الأمر tree للتأكد من بنية المشروع :
D:.
|---build
|   |--classes
|       |---machin
|               Machin.class
|               Truc.class
|
|---src
    ----machin
            Machin.java
            Truc.java
___________________________________________________
السؤال الثاني:
ما هي الـ numeric promotion في الجافا ؟
الجواب:
كل نوع من الأنواع العددية (numeric type) في جافا له قيمة صغرى و أخرى عظمى و بالتالي لا يُمكنه تخزين أقل من القيمة الصغرى أو أكبر من القيمة العظمى, إذا تم إسناد قيمة أكبر من القيمة العظمى لمتغير عددي, يتم تحويله تلقائيا إلى النوع العددي الأكبر منه بحيث تتناسب قيمته مع العملية الحسابية المراد تنفيذها (عملية التحويل التلقائية هي ما يُسمى بـ numeric promotion). مثال :
char a=(char) 65535;char b=(char) 1;    int c=a+b;
____________________________________________________
السؤال الثالث :
اذكر مختلف الكتابات الممكنة للإسناد قيم عناصر مصفوفة من الأعداد الصحيحة
الجواب :
for (int i = 0; i < arr.length; i++)      arr = i+1;int arr[] = {1,2,3};int arr[] = new int[]{1,2,3};
____________________________________________________
السؤال الرابع:
    إذا كانت لدينا فئة E ترث فئة F, ماذا تعني الكتابة :
    
        super(X,b)
    في دالة بناء الفئة E مع العلم أن X من نوع String و b من نوع double ؟
    الجواب :
    تعني استدعاء دالة بناء الفئة الأم (و هي F في هذه الحالة) و تمرير (على التوالي) الوسيطين X و b لها.
____________________________________________________
السؤال الخامس:
    مالفرق بين الـ Overload و الـ Override في الجافا ؟ و ما هي شروط كل منهما ؟
الجواب:
: تغيير عدد أو نوع وسائط الدالة دون تغيير اسمها, هكذا مثلا :
class MaClasse
{
   public void maMethode(int i) { ... }
   public void maMethode(float f) { ... }
}
Override تعني إعادة تعريف الدالة, هذا المفهوم له علاقة وطيدة بالـ polymorphisme حيث يسمح بإعادة تعريف الدالة في فئة معينة مع إمكانية استدعاء الدالة الأم عن طريق super. يُشترط في الـ Override عدم تغيير الـ signature الخاص بالفئة الأم و إلا سنعود إلى الـ Overload.
____________________________________________________
السؤال السادس:
    ما هي أهمية الـ ploymorphisme في الجافا ؟
الجواب:
الـ polymorphisme بشكل عام عبارة عن وصف لعنصر معين يُمكنه أخذ عدة أشكال (مثل الماء, قد يكون سائلا, صلبا أو غاز ..). في الـ OOP يُطلق الـ polymorphisme على :
1. إمكانية التعامل مع كائن من فئة معينة على أنه كائن من فئة أخرى.
2. يُمكن أن يختلف نفس الاستدعاء لدالة معينة حسب اختلاف الفئة المُطبقة عليها.
____________________________________________________
السؤال السابع:
    ماذا تعني الـ dynamic binding ؟
الجواب:
الـ dynamic binding هي إحدى خصائص الـ polymorphisme : أثناء الـ compilation يتم تحديد الـ declared type للدالة, يقوم الـ complier بأخذ توقيع الدالة و إرساله إلى الـ JVM, هذه الأخيرة يُمكنها تحديد النوع الحقيقي للدالة المستدعاة حيث تقوم بالتأكد من إعادة تعريف الدالة, إذا كان الجواب لا, تصعد إلى الأعلى باتجاه الـ hierarchy للفئة المعنية لإيجاد الدالة المناسبة. انظر المثال :
public class ClasseXXX {

    public void methodeXXX(double p) {
        System.out.println("Appel 1");
    }
}

class ClasseYYY extends ClasseXXX {

    @Override
    public void methodeXXX(double k) {
        System.out.println("Appel 2");
    }

    public void methodeXXX(float d) {
        System.out.println("Appel 3");
    }

    public static void main(String args[]) {
        ClasseXXX objX = new ClasseXXX();
        ClasseYYY objY = new ClasseYYY();
        objX = objY;
        objX.methodeXXX(12);
        ((ClasseYYY) objX).methodeXXX(12);
        ((ClasseYYY) objX).methodeXXX(12.65);
    }
}
____________________________________________________
السؤال الثامن:
    لتكن لدينا الفئتان A و B كالتالي :
    class A {
      void f() {
     }
    }

    class B extends A {
      void g() {
     }
    }
    ---
    A obj = new B();
    كيف يُمكن أن نصل إلى الدالة g من خلال الكائن obj ؟
الجواب:
   بعمل cast للكائن A كما يلي :
  
   ((B)obj).g()
____________________________________________________
السؤال التاسع:
    اذكر الأسباب التي تجعلك تتعامل مع الـ exceptions.
الجواب:
a- كتابة فئة استثناءات خاصة بك من خلال عمل extends للفئة Exception و تعريف الدوال كيفما تريد.
b- استخدام try-catch لإضافة تعليمات بديلة عند حدوث الاستثناء.
c- أو لتخصيص رسائل الخطأ (قد لا تريد أن يرى المستخدم الرسالة الأصلية حتى لا يُهاجم برنامجك مثلا إذا كان ذلك الاستثناء قد يؤدي إلى ثغرة معينة)
____________________________________________________
السؤال العاشر:
    ماهو الـ binary filter المناسب لكتابة مجموعة من البيانات في formatted stream ؟
الجواب:
java.io.PrintWriter
____________________________________________________
السؤال الحادي عشر:
    إذا كان لدينا كائن من HashMap, كيف نقوم بالمرور فقط على مفاتيحه ؟
الجواب:
الدالة getKey الموجودة في Map.entry.
____________________________________________________
السؤال الثاني عشر:
    قمنا بإضافة مجموعة كائنات من فئة X داخل كائن من TreeSet, كيف سيتم ترتيب تلك الكائنات ؟
الجواب:
    لن يتم ترتيبها , وسيصدر استثناء ClassCastException إن لم تكن الفئة قد قامت بعمل  implements للواجهة java.lang.Comparable
        أما إن كانت قد قامت بعمل الـ implements فسيتم الترتيب حسب الدالة ما تعيده الدالة compareTo        
____________________________________________________
السؤال الثالث عشر:
    عرف مفهوم الـ view في الـ collections و اذكر دور مختلف الـ views الموجودة.
الجواب:
a - تسمح الــ view بالمرور على عناصر الـ Map.
b - الدالة entrySet تسمح برؤية Map كمجموعة ازواج.
c - الزوج عبارة عن كائن من نوع الواجهة Map.entry حيث يجمع كائنين في آن واحد.
d - الدالتان getKey و getValue الموجودتان في Map.entry تسمحان باستخراج مفتاح و قيمة زوج معين.
____________________________________________________
السؤال الرابع عشر:
    عرف الـ critical section ؟ و اذكر أهميته في التعامل مع الـ Threads.
الجواب:
إذا كان لدينا الكود التالي :
synchronized (obj) { // code}
حيث obj عبارة عن كائن معين, تقوم جافا بعمل locking للكائن obj أثناء تنفيذ الكود الموجود بين معكوفين و بالتالي لا يُمكن تنفيذ أي synchronized bloc آخرلهذا الكائن يتبع لـ thread معين إلا بعد أن يتم انتهاء تنفيذ الكود و نزع القفل عن الكائن obj. (هذا المفهوم يُسمى الـ critical section)
____________________________________________________
السؤال الخامس عشر:
    ماهو المفهوم الذي يجب تطبيقه عند تنفيذ مجموعة من الدوال في وقت واحد ؟ و ما هي أهميته ؟
الجواب:
synchronization, تسمح بوجود عدة دوال تتعامل مع نفس الكائن دون أن يُؤثر بعضها على عمل بعض.
____________________________________________________
السؤال السادس عشر:
    هل يوجد فرق بين استدعاء الدالتين run و start في الـ Threads ؟
الجواب:
نعم, الدالة run تحتوي على الكود الذي سيقوم الـ thread بتنفيذه.
start : تقوم بحجز ذاكرة للـ thread و تطلب من الـ scheduler استدعاء run.
____________________________________________________
السؤال السابع عشر:
    اذكر أهم الفروق بين AWT و Swing ؟
الجواب:
1-    تبدأ جميع مكونات Swing بالحرف J.
2-    الفئة الأم لكافة مكونات Swing هي JComponent و التي ترث الفئة الأم لمكونات AWT (و هي Container)
3-    مكونات AWT تعتمد على نظام التشغيل على عكس Swing.
4-    توجد جميع فئات Swing  في الحزمة javax.swing .*.
5-    تنقسم مكونات Swing إلى نوعين :
        1. مكونات من الدرجة الأولى : (JFrame, JWindow, JApplet et JDialog)
        2. مكونات أخرى : بقية المكونات الخاصة بالتحكم في الـ GUI.
____________________________________________________
السؤال الثامن عشر:
    ما هي فائدة الدالة forName التابعة للفئة Class و ماهو الاستثناء الذي عادة ما يتم إصداره من طرف تلك الفئة ؟ و متى يتم إصداره ؟
الدالة forName تسمح بالحصول على الفئة التي تم تمرير اسمها كوسيط. إذا لم يتم إيجاد الفئة ستحصل على الاستثناء ClassNotFoundException.
ملاحظة : يجب تمرير الاسم الكامل للفئة , مثال :
Class.forName("java.lang.Object")
____________________________________________________
السؤال التاسع عشر:
    مالفرق بين الـ static queries و الـ precompiled queries ؟
الجواب:
static queries : الـ SGBD لا يعرف الاستعلام قبل  تنفيذه.
precompiled queries : يطلب تطبيق الجافا من الـ SGBD إنشاء empty area, تتم معرفة الاستعلام المراد تنفيذه من طرف الـ SGBD مُسبقاً و قبل تنفيذ الاستعلام, يتم ملأ الفراغات الموجودة فيه  باستخدام الدوال setXXX حيث XXX هو نوع المتغير.
إذا كان التطبيق يحتوي على الكثير من الاستعلامات يُفضبل استخدام precompiled queries من خلال الفئة PreparedStatement.
____________________________________________________
السؤال العشرون:
    اذكر كافة الخطوات المُتبعة عند إجراء اتصال بين تطبيق جافا يستخدم JDBC و قاعدة بيانات ذات جدوال مترابطة (relational database).
الجواب:
تحميل الـ drver باستخدام الدالة forName.
فتح اتصال مع قاعدة البيانات باستخدام getConnection.
إنشاء الاستعلام من خلال createStatement و تنفيذه بـ executeQuery.
تحرير الذاكرة باستخدام close.
____________________________________________________
السؤال الحادي والعشرون:
    ما هي أنواع الـ JDBC الموجودة في الجافا ؟
الجواب:
توجد 4 أنواع :
Type I: jdbc: odbc:source
Type II: jdbc: protocole
Type III and IV: jdbc: driver: adresse
____________________________________________________
____________________________________________________
لدي بعض الأسئلة ..
اقتباس
ما هي الـ numeric promotion في الجافا ؟

حسب ما فهمت من الشرح فالمثال الذي أرفقته لا يوضّح نفس الفكرة , ولكن فهمت أن المثال التالي هو المقصود :
char a=(char) 65535;char b=(char) 1;        int c=a+b;
ففي لغة أخرى ,سيتم إسناد 0 إلى c وبدون نقاش :) أما هنا على ما يبدو فسيتم ترقية النوع إلى int لمنع تجاوز القيمة العظمى
اقتباس
اذكر مختلف الكتابات الممكنة للإعلان عن مصفوفة من الأعداد الصحيحة.

ما رأيك بالكتابة التالية
while(i<10)x=++i;
:D

جزاك الله خيراً , أظن أن هذه الحلقة كانت متشعّبة جدّاً .. وبانتظار أن نمر على كل فقرة من المذكورين و"نمخمخ" عليها :)
 وفقك الله وبارك لك في وقتك وعلمك

هذا الموضوع مغلق.

مواضيع مشابهة