في وقت سابق، كتبت مقالًا حول أفضل 50 سؤالًا في برمجة Java. أحبه القراء كثيرًا. لذا، اليوم سنلقي نظرة على بعض الأسئلة الصعبة في مقابلات العمل بلغة Java.
أسئلة مقابلات Java الصعبة
هذه أسئلة برمجة، ولكن ما لم يكن لديك فهم عميق للغة Java، سيكون من الصعب تخمين النتيجة وشرحها.
1. Null كوسيط
لدينا وظائف متعددة ونقوم بتمرير قيمة null. أي وظيفة ستتم استدعاؤها وماذا سيكون مخرج البرنامج؟
public class Test {
public static void main(String[] args) {
foo(null);
}
public static void foo(Object o) {
System.out.println("Object argument");
}
public static void foo(String s) {
System.out.println("String argument");
}
}
2. استخدام “L” للنوع long
هل يمكنك تخمين نتيجة البيانات أدناه؟
long longWithL = 1000*60*60*24*365L;
long longWithoutL = 1000*60*60*24*365;
System.out.println(longWithL);
System.out.println(longWithoutL);
شرح لسؤال Null Argument Tricky
وفقًا لمواصفات جافا، في حالة التحميل، يختار المترجم الدالة الأكثر تحديدًا. من الواضح أن فئة String أكثر تحديدًا من فئة Object، لذلك ستقوم بطباعة “String argument”. ولكن ماذا لو كان لدينا طريقة أخرى في الفئة كما هو موضح أدناه.
public static void foo(StringBuffer i){
System.out.println("StringBuffer impl");
}
في هذه الحالة، سيقوم مترجم جافا بإلقاء خطأ بوصف “الطريقة foo(String) غامضة لنوع Test”. فئات String و StringBuffer ليس لديها تسلسلية التوريث. لذا فإن أي منها ليس أكثر تحديدًا من الآخرين. الطريقة تكون أكثر تحديدًا من أخرى إذا كان بإمكان أي استدعاء يتم التعامل معه بواسطة الطريقة الأولى أن يتم تمريره إلى الطريقة الأخرى دون خطأ في النوع أثناء الترجمة. يمكننا تمرير String كمعلمة إلى الوسيطة Object والوسيطة String ولكن ليس إلى طريقة الوسيطة StringBuffer.
تفسير للمتغير الطويل
سيكون إخراج مقتطف الكود كالتالي:
31536000000
1471228928
نحن ننشئ صراحة المتغير الأول بواسطة إضافة لاصقة “L” له. لذلك، سيعامله المترجم على أنه عدد صحيح طويل وسيسنده إلى المتغير الأول. بالنسبة للبيان الثاني، سيقوم المترجم بأداء العملية الحسابية ويعاملها على أنها عدد صحيح بحجم 32 بت. نظرًا لأن الناتج خارج نطاق قيمة العدد الصحيح القصوى (2147483647)، فسيقوم المترجم بقص أكثر البتات أهمية ثم يسندها إلى المتغير. المكافئ الثنائي لـ 1000*60*60*24*365L = 011101010111101100010010110000000000 (36 بتًا). بعد إزالة 4 بتات أكثر أهمية للمكان في عدد صحيح بحجم 32 بتًا، القيمة الجديدة = 01010111101100010010110000000000 (32 بتًا). هذا يعادل 1471228928 وبالتالي الناتج. مؤخرًا، قمت بإنشاء سلسلة فيديوهات على يوتيوب لبرامج جافا الصعبة.
يمكنك مراجعة المزيد من أمثلة برامج جافا من مستودعنا على GitHub.
Source:
https://www.digitalocean.com/community/tutorials/java-tricky-interview-questions