CodeGym /جاوا بلاگ /Random-SD /جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن...
John Squirrels
سطح
San Francisco

جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا. حصو 7

گروپ ۾ شايع ٿيل
هي سڀ! پروگرامنگ خرابين سان ڀريل آهي. ۽ شايد ئي ھڪڙو ھڪڙو موضوع آھي جيڪو توھان کي دٻائڻ ۽ پنھنجي پير کي ڇڪڻ جو سبب نه بڻائيندو. اهو خاص طور تي beginners لاء صحيح آهي. توهان جي آڱرين کي بچائڻ جو واحد طريقو سکڻ آهي. خاص طور تي، توهان کي تمام گهڻي بنيادي موضوعن ۾ گهيرو ڪرڻ جي ضرورت آهي. اڄ، اسان جاوا ڊولپرز لاءِ انٽرويو دوران سڀ کان وڌيڪ مشهور سوالن جو جائزو جاري رکنداسين. اهي انٽرويو سوال بنيادي عنوانن کي ڍڪڻ لاء هڪ بهترين نوڪري ڪندا آهن. نوٽ ڪريو ته لسٽ ۾ ڪجھ غير معياري سوال پڻ شامل آھن جيڪي توھان کي عام مسئلن کي مختلف طريقي سان ڏسڻ جي اجازت ڏين ٿا. جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 7 - 1

62. اسٽرنگ پول ڇا آهي، ۽ ان جي ضرورت ڇو آهي؟

جاوا پروگرام لاءِ دستياب ڪيل ميموري جي هڪ حصي کي هيپ چئبو آهي (جنهن جي باري ۾ اسان بعد ۾ ڳالهائينداسين)، ۽ هيپ جي هڪ حصي کي اسٽرنگ پول سڏيو ويندو آهي . اهو اسٽرنگ ويلز کي محفوظ ڪرڻ لاءِ آهي. ٻين لفظن ۾، جڏهن توهان هڪ اسٽرنگ ٺاهيندا آهيو، مثال طور، هن طرح ٻه حوالا استعمال ڪندي:
String str = "Hello world";
JVM چيڪ ڪري ٿو ته ڇا اسٽرنگ پول اڳ ۾ ئي مخصوص قدر آهي. جيڪڏهن اهو ڪري ٿو، پوء str متغير پول ۾ انهي قدر جو حوالو لڳايو ويو آهي. جيڪڏهن اهو نه آهي، پول ۾ هڪ نئين قيمت ٺاهي وئي آهي، ۽ ان جو حوالو str متغير ڏانهن لڳايو ويو آهي. اچو ته هڪ مثال تي غور ڪريو:
String firstStr = "Hello world";
String secondStr = "Hello world";
System.out.println(firstStr == secondStr);
صحيح اسڪرين تي ڏيکاري ويندي. ياد رکو ته == حوالن جو مقابلو ڪري ٿو، ۽ اهي ٻه متغير ساڳيا قدر ڏانهن اشارو ڪن ٿا اسٽرنگ پول ۾. هي ميموري ۾ ڪيتريون ئي هڪجهڙا String شيون پيدا ڪرڻ کان بچڻ ۾ مدد ڪري ٿي. اسان اهو ڪري سگهون ٿا ڇو ته، جيئن توهان کي ياد هوندو، اسٽرنگ هڪ ناقابل بدلجندڙ ڪلاس آهي، تنهنڪري ساڳئي قدر جي ڪيترن ئي حوالن سان گڏ ڪجهه به غلط ناهي. هاڻي اهو ناممڪن آهي ته اهڙي صورتحال هجي جتي هڪ جڳهه تي قيمت تبديل ڪرڻ جي نتيجي ۾ ڪيترن ئي ٻين حوالن ۾ تبديل ٿي وڃي. اڃا، جيڪڏهن اسان نئين استعمال ڪندي هڪ اسٽرنگ ٺاهي سگهون ٿا :
String str = new String("Hello world");
پوءِ ميموري ۾ هڪ الڳ شئي ٺاهي وئي آهي ۽ مخصوص اسٽرنگ ويل کي محفوظ ڪري ٿي (انهي سان فرق نٿو پوي ته اها قيمت اڳ ۾ ئي اسٽرنگ پول ۾ آهي). هن دعوي جي تصديق ڪرڻ لاء، هن تي غور ڪريو:
String firstStr = new String("Hello world");
String secondStr = "Hello world";
String thirdStr = new String("Hello world");
System.out.println(firstStr == secondStr);
System.out.println(firstStr == thirdStr);
اسان کي ٻه لائينون ملنديون جيڪي اشارو ڪندي false ، جنهن جو مطلب آهي ته اسان وٽ ٽي الڳ تار آهن. بنيادي طور تي، اهو ئي سبب آهي ته توهان کي صرف ڊبل اقتباس استعمال ڪندي تار ٺاهڻ گهرجي. اهو چيو ته، اهو ممڪن آهي شامل ڪرڻ (يا حوالو حاصل ڪريو) قدرن جي پول ۾ جيتوڻيڪ نئين لفظ کي استعمال ڪندي اعتراض ٺاهيندي . ائين ڪرڻ لاءِ، اسان استعمال ڪريون ٿا String class جي intern() طريقو. اهو طريقو يقيني بڻائي ٿو ته اسان يا ته اسٽرنگ پول ۾ قدر ٺاهيندا آهيون يا اسان ان جو حوالو حاصل ڪندا آهيون جيڪڏهن اهو اڳ ۾ ئي موجود آهي. هتي هڪ مثال آهي:
String firstStr = new String("Hello world").intern();
String secondStr = "Hello world";
String thirdStr = new String("Hello world").intern();
System.out.println(firstStr == secondStr);
System.out.println(firstStr == thirdStr);
System.out.println(secondStr == thirdStr);
هي ڪوڊ ٽي دفعا ڪنسول تي صحيح نڪرندو آهي، جيڪو اسان کي ٻڌائي ٿو ته سڀئي ٽي متغير ميموري ۾ ساڳئي اسٽرنگ ڏانهن اشارو ڪن ٿا.

63. اسٽرنگ پول ۾ ڪهڙا GoF ڊيزائن جا نمونا استعمال ٿيندا آهن؟

اسٽرنگ پول ۾، GoF ڊيزائن جو نمونو هڪ فلائي ويٽ نمونو آهي . جيڪڏهن توهان محسوس ڪيو آهي هڪ ٻيو ڊزائن جو نمونو هتي، ان کي تبصرن ۾ حصيداري ڪريو. هتي اسان فلائي ويٽ ڊيزائن جي نموني بابت ڳالهائينداسين. اهو هڪ ڍانچي ڊيزائن جو نمونو آهي جنهن ۾ هڪ اعتراض جيڪو پاڻ کي پروگرام ۾ مختلف هنڌن تي هڪ منفرد مثال طور پيش ڪري ٿو اصل ۾ منفرد ناهي. فلائي ويٽ هر شئي ۾ هڪجهڙائي واري ڊيٽا کي محفوظ ڪرڻ جي بجاءِ شين جي شيئر اسٽيٽ کي محفوظ ڪري ياداشت کي محفوظ ڪري ٿو. خلاصو سمجھڻ لاءِ، ھن ابتدائي مثال تي غور ڪريو. اچو ته اسان وٽ هڪ ملازم انٽرفيس آهي:
public interface Employee {
   void work();
}
۽ ان ۾ ڪجھ عمل آھن، جھڙوڪ وڪيل طبقو:
public class Lawyer implements Employee {

   public Lawyer() {
       System.out.println("A lawyer was hired.");
   }

   @Override
   public void work() {
       System.out.println("Settling legal issues...");
   }
}
۽ هڪ اڪائونٽنٽ ڪلاس:
public class Accountant implements Employee {

   public Accountant() {
       System.out.println("An accountant was hired.");
   }

   @Override
   public void work() {
       System.out.println("Keeping accounting records...");
   }
}
طريقا مڪمل طور تي خودمختيار آهن - هن مثال لاء، اسان کي صرف اهو ڏسڻ جي ضرورت آهي ته انهن تي عمل ڪيو پيو وڃي. ساڳيو ئي تعمير ڪندڙ جي باري ۾ سچ آهي. ڪنسول آئوٽ اسان کي ٻڌائي ٿو جڏهن نوان شيون ٺاهي رهيا آهن. اسان وٽ پڻ انساني وسيلن جو کاتو آهي جنهن جو ڪم هڪ درخواست ٿيل ملازم کي واپس ڪرڻ آهي. جيڪڏهن اهو ملازم اڳ ۾ ئي عملي تي نه آهي، پوء اهي نوڪريون آهن ۽ HR ڊپارٽمينٽ نئين ملازم کي واپس ڪري ٿو:
public class HumanResourcesDepartment {
   private Map<String, Employee> currentEmployees = new HashMap<>();

   public Employee getEmployee(String type) throws Exception {
       Employee result;
       if (currentEmployees.containsKey(type)) {
           result = currentEmployees.get(type);
       } else {
           switch (type) {
               case "Accountant":
                   result = new Accountant();
                   currentEmployees.put(type, result);
                   break;
               case "Lawyer":
                   result = new Lawyer();
                   currentEmployees.put(type, result);
                   break;
               default:
                   throw new Exception("This employee is not on the staff!");
           }
       }
       return result;
   }
}
تنهن ڪري، منطق سادو آهي: جيڪڏهن گهربل اعتراض موجود آهي، ان کي واپس ڏيو؛ جيڪڏهن نه، ان کي ٺاهيو، ان کي اسٽوريج ۾ رکو (ڪجهه ڪيش وانگر)، ۽ ان کي واپس ڪريو. هاڻي اچو ته ڏسو ته اهو سڀ ڪيئن ڪم ڪري ٿو:
public static void main(String[] args) throws Exception {
   HumanResourcesDepartment humanResourcesDepartment = new HumanResourcesDepartment();
   Employee empl1 = humanResourcesDepartment.getEmployee("Lawyer");
   empl1.work();
   Employee empl2 = humanResourcesDepartment.getEmployee("Accountant");
   empl2.work();
   Employee empl3 = humanResourcesDepartment.getEmployee("Lawyer");
   empl1.work();
   Employee empl4 = humanResourcesDepartment.getEmployee("Accountant");
   empl2.work();
   Employee empl5 = humanResourcesDepartment.getEmployee("Lawyer");
   empl1.work();
   Employee empl6 = humanResourcesDepartment.getEmployee("Accountant");
   empl2.work();
   Employee empl7 = humanResourcesDepartment.getEmployee("Lawyer");
   empl1.work();
   Employee empl8 = humanResourcesDepartment.getEmployee("Accountant");
   empl2.work();
   Employee empl9 = humanResourcesDepartment.getEmployee("Lawyer");
   empl1.work();
   Employee empl10 = humanResourcesDepartment.getEmployee("Accountant");
   empl2.work();
}
هتي اهو آهي جيڪو اسان ڪنسول ۾ ڏسندا سين:
هڪ وڪيل رکيو ويو. قانوني مسئلا حل ڪرڻ... هڪ اڪائونٽنٽ ڀرتي ڪيو ويو. اڪائونٽنگ رڪارڊ رکڻ... قانوني مسئلا حل ڪرڻ... اڪائونٽنگ رڪارڊ رکڻ... قانوني مسئلا حل ڪرڻ... اڪائونٽنگ رڪارڊ رکڻ... قانوني مسئلا حل ڪرڻ... اڪائونٽنگ رڪارڊ رکڻ... قانوني مسئلا حل ڪرڻ... حساب ڪتاب رکڻ رڪارڊ…
جئين توهان ڏسي سگهو ٿا، اسان صرف ٻه شيون ٺاهيون ۽ انهن کي ڪيترائي ڀيرا ٻيهر استعمال ڪيو. مثال تمام سادو آهي، پر اهو ظاهر ڪري ٿو ته هي ڊزائن جو نمونو اسان جي وسيلن کي ڪيئن بچائي سگهي ٿو. جئين توهان محسوس ڪيو هوندو، هن نموني جو منطق دردناڪ طور تي انشورنس پول جي منطق سان ملندڙ جلندڙ آهي. جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 7 - 2

64. اسان هڪ تار کي حصن ۾ ڪيئن ورهائي سگهون ٿا؟ لاڳاپيل ڪوڊ جو هڪ مثال ڏيو

ظاهر آهي، هي سوال ورهائڻ واري طريقي بابت آهي. اسٽرنگ ڪلاس ۾ هن طريقي جا ٻه مختلف قسم آهن:
String split(String regex);
۽
String split(String regex);
ريجڪس پيٽرولر ڊيليميٽر آهي - ڪجهه باقاعده اظهار جو استعمال اسٽرنگ جي هڪ صف ۾ ورهائڻ لاء، مثال طور:
String str = "Hello, world it's Amigo!";
String[] arr = str.split("\\s");
for (String s : arr) {
  System.out.println(s);
}
ڪنسول ڏيکاريندو:
هيلو، دنيا اها آهي اميگو!
تنهن ڪري، اسان جي اسٽرنگ کي اسٽرنگ جي هڪ صف ۾ ورهايو ويو، هڪ اسپيس کي ڊيليميٽر جي طور تي استعمال ڪندي (باقاعدي ايڪسپريس "\\s" جي بدران ، اسان پڻ عام اسٽرنگ ايڪسپريس "" استعمال ڪري سگهون ٿا ). ٻيو، اوورلوڊ ٿيل قسم، هڪ اضافي حد پيٽرولر آهي. حد نتيجي واري صف جي وڌ ۾ وڌ اجازت ڏنل سائيز آهي. ٻين لفظن ۾، هڪ ڀيرو اسٽرنگ کي ورهايو ويو آهي وڌ ۾ وڌ اجازت ڏنل تعداد ۾ سبسٽرنگ، ورهائڻ بند ٿي ويندو آهي، ۽ آخري عنصر ممڪن طور تي غير ورهايل اسٽرنگ مان ڪنهن به "بچي" تي مشتمل هوندو. مثال:
String str = "Hello, world it's Amigo!";
String[] arr = str.split(" ", 2);
for (String s : arr) {
  System.out.println(s);
}
ڪنسول آئوٽ:
هيلو، دنيا اها آهي اميگو!
جيئن ته اسان ڏسي سگهون ٿا، جيڪڏهن اهو حد تائين نه هجي ها = 2 ، صف جي آخري عنصر کي ورهائي سگهجي ٿو ٽن سبسٽنگن ۾.

65. پاس ورڊ کي محفوظ ڪرڻ لاءِ هڪ اکر ايري اسٽرنگ کان بهتر ڇو آهي؟

پاسورڊ کي محفوظ ڪرڻ وقت هڪ اسٽرنگ کي ترجيح ڏيڻ جا ڪيترائي سبب آهن:

1. اسٽرنگ پول ۽ اسٽرنگ جي ناقابل تبديلي.

جڏهن هڪ صف استعمال ڪندي ( char[] )، اسان واضح طور تي ڊيٽا کي ختم ڪري سگهون ٿا هڪ ڀيرو اسان ان سان ڪم ڪيو آهي. اسان به ڪري سگھون ٿا صف کي اوترو ڪري سگھون جيترو اسان چاهيون، سسٽم مان پاسورڊ کي ختم ڪرڻ کان اڳ به گندگي گڏ ڪرڻ کان اڳ (اها ڪافي آهي ته ڪجهه سيلز کي غلط قدرن ۾ تبديل ڪرڻ). ان جي ابتڙ، اسٽرنگ هڪ ناقابل قابل ڪلاس آهي. هن جو مطلب اهو آهي ته جيڪڏهن اسان هڪ String اعتراض جي قيمت کي تبديل ڪرڻ چاهيون ٿا ، اسان کي هڪ نئين حاصل ڪنداسين، پر پراڻي هڪ اسٽرنگ پول ۾ رهندي. جيڪڏهن اسان پاسورڊ تي مشتمل اسٽرنگ کي هٽائڻ چاهيون ٿا ، اسان کي هڪ پيچيده ڪم کي منهن ڏيڻو پوي ٿو، ڇاڪاڻ ته اسان کي گاربيج ڪليڪٽر جي ضرورت آهي ته هو ان قدر کي اسٽرنگ پول مان هٽائي، پر اهو اسٽرنگ گهڻو وقت تائين اتي رهندو. اهو آهي، جڏهن اهو اچي ٿو محفوظ طور تي ڊيٽا کي محفوظ ڪرڻ لاء، اسٽرنگ هڪ چار صف کان گهٽ آهي .

2. جيڪڏهن اسان ڪنسول (يا هڪ لاگ) ۾ اسٽرنگ جي قيمت کي ٻاھر ڪڍون ٿا، پوء اسان حاصل ڪندا آھيون:

String password = "password";
System.out.println("Password - " + password);
ڪنسول آئوٽ:
پاسورڊ- پاسورڊ
۽ جيڪڏهن توهان ڪنسول ڏانهن صف کي پرنٽ ڪرڻ چاهيو ٿا:
char[] arr = new char[]{'p','a','s','s','w','o','r','d'};
System.out.println("Password - " + arr);
ڪنسول ناقابل فهم گببرش ڏيکاريندو:
پاسورڊ - [C@7f31245a
حقيقت ۾، اها بيوقوف نه آهي. هتي اهو آهي ته توهان جيڪي ڏسو ٿا ان جو احساس ڪيئن ڪجي: [C درجي جو نالو آهي - char array، @ هڪ ڊيليميٽر آهي، ۽ پوءِ 7f31245a هڪ هيڪساڊيڪل هيش ڪوڊ آهي.

3. سرڪاري جاوا ڪرپٽوگرافي آرڪيٽيڪچر (JCA) ريفرنس گائيڊ واضح طور تي اسٽرنگ جي بدران چار[] ۾ پاسورڊ محفوظ ڪرڻ جو ذڪر ڪري ٿو :

"اهو منطقي لڳي ٿو پاسورڊ گڏ ڪرڻ ۽ ذخيرو ڪرڻ لاءِ پاس ورڊ کي ڪنهن شئي جي java.lang.String ۾ . جڏهن ته، هتي انتباہ آهي: اسٽرنگ جي قسم جا شيون ناقابل تبديلي آهن، يعني، اهڙا طريقا بيان نه ڪيا ويا آهن جيڪي توهان کي تبديل ڪرڻ جي اجازت ڏين ٿا (اوور رائٽ) يا استعمال کان پوءِ اسٽرنگ جي مواد کي صفر ڪري ڇڏيو . ھي خصوصيت اسٽرنگ شين کي محفوظ رکڻ لاءِ نا مناسب بنائي ٿي حساس معلومات جھڙوڪ يوزر پاسورڊ. توھان کي ھميشه حفاظتي حساس معلومات گڏ ڪرڻ ۽ ذخيرو ڪرڻ گھرجي ان جي بدران. جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 7 - 3

اينيم

66. جاوا ۾ Enum جو مختصر بيان ڏيو

Enum ڳڻپ لاءِ مختصر آهي، جيڪو هڪ عام قسم سان گڏيل اسٽرنگ مستقل جو هڪ سيٽ آهي. اسان هڪ اعلان ڪريون ٿا enum لفظ استعمال ڪندي. هتي هڪ مثال آهي enum سان : اجازت ڏنل ڪردار ڪجهه اسڪول ڪيمپس تي:
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD
}
وڏن اکرن ۾ لکيل لفظ ڳڻپيوڪر مستقل آهن. اهي نئين آپريٽر کان سواء، هڪ آسان انداز ۾ بيان ڪيا ويا آهن. ڳڻپيوڪر استعمال ڪرڻ زندگي کي تمام آسان بڻائي ٿو ڇو ته اهي نالن ۾ غلطي ۽ مونجهاري کان بچڻ ۾ مدد ڪن ٿا (جيئن ته فهرست صرف صحيح قدر بيان ڪري ٿي). مون لاء، اهي سوئچ جي تعمير ۾ تمام آسان آهن.

67. ڇا اينيم انٽرفيس کي لاڳو ڪري سگھي ٿو (ايپليمينٽ ڪي ورڊ استعمال ڪريو)؟

ها. آخرڪار، اينيمڪس کي صرف غير فعال سيٽن کان وڌيڪ نمائندگي ڪرڻ گهرجي (جهڙوڪ اسڪول ڪيمپس تي ڪردار). جاوا ۾، اهي وڌيڪ پيچيده شيون نمائندگي ڪري سگھن ٿا، تنهنڪري توهان کي انهن ۾ اضافي ڪارڪردگي شامل ڪرڻ جي ضرورت پوندي. اهو پڻ توهان کي اجازت ڏئي ٿو ته پوليمورفيزم جو فائدو وٺي انهن هنڌن تي اينيم ويليو کي متبادل بڻايو جتي لاڳو ٿيل انٽرفيس قسم جي ضرورت آهي.

68. ڇا اينيم ڪلاس کي وڌائي سگھي ٿو (Extends keyword استعمال ڪريو)؟

نه، اهو نٿو ٿي سگهي، ڇاڪاڻ ته هڪ اينم ڊفالٽ Enum<T> ڪلاس جو هڪ ذيلي ڪلاس آهي، جتي T enum قسم آهي. هي جاوا ٻولي ۾ سڀني اينم قسمن لاءِ هڪ عام بيس ڪلاس کان وڌيڪ ناهي. هڪ اينم کان هڪ ڪلاس ۾ تبديلي جاوا ڪمپلر طرفان مرتب ڪيل وقت تي ڪئي ويندي آهي. توسيع واضح طور تي ڪوڊ ۾ ظاهر نه ڪئي وئي آهي، پر اهو هميشه لاڳو ٿئي ٿو.

69. ڇا اهو ممڪن آهي ته ڪنهن به شيءِ جي مثالن کان سواءِ اينيم ٺاهيو؟

اهو سوال ٿورڙو مونجهارو آهي، ۽ مون کي پڪ ناهي ته مان ان کي مڪمل طور تي سمجهان ٿو. مون وٽ ٻه تشريحون آهن: 1. ڇا توهان وٽ اينيم آهي بغير ڪنهن قدر؟ ها، يقينا، پر اهو هڪ خالي طبقي وانگر هوندو - بي مقصد، مثال طور
public enum Role {
}
۽ جيڪڏھن اسان کي سڏين ٿا:
var s = Role.values();
System.out.println(s);
اسان هيٺ ڏنل ڪنسول ۾ حاصل ڪندا آهيون:
[Lflyweight.Role؛@9f70c54
( رول ويلز جي هڪ خالي صف ) 2. ڇا اهو ممڪن آهي ته نئين آپريٽر کان سواءِ هڪ اينيم ٺاهيو ؟ ها بلڪل. جيئن مون مٿي چيو آهي، توهان اينم ويلز لاءِ نئون آپريٽر استعمال نٿا ڪريو ، ڇاڪاڻ ته اهي جامد قدر آهن.

70. ڇا اسان Enum جي toString() طريقي کي ختم ڪري سگھون ٿا؟

ها، يقيناً توهان مٿي ڪري سگهو ٿا toString() طريقي جي وضاحت ڪرڻ لاءِ ته توهان جي اينم کي ڪيئن ظاهر ڪيو وڃي جڏهن toString طريقو سڏيو وڃي ٿو (جڏهن هڪ اينيم کي عام اسٽرنگ ۾ تبديل ڪيو وڃي، مثال طور، ان کي ڪنسول يا لاگز ۾ آئوٽ ڪرڻ).
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD;

   @Override
   public String toString() {
       return "Selected role - " + super.toString();
   }
}
اهو سڀ ڪجهه اڄ مون لاءِ آهي. ايندڙ حصي تائين!
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION