JavaRush /جاوا بلاگ /Random-SD /جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو. حصو ...

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

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

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

جاوا ۾ ياداشت ۾ (هيپ، جنهن بابت اسان بعد ۾ ڳالهائينداسين) اتي هڪ علائقو آهي - اسٽرنگ پول ، يا اسٽرنگ پول. اهو اسٽرنگ جي قيمتن کي ذخيرو ڪرڻ لاء ٺهيل آهي. ٻين لفظن ۾، جڏهن توهان هڪ خاص اسٽرنگ ٺاهيندا آهيو، مثال طور ڊبل حوالن ذريعي:
String str = "Hello world";
هڪ چيڪ ڪيو ويو آهي ڏسڻ لاءِ ته ڇا اسٽرنگ پول ۾ ڏنل قدر آهي. جيڪڏهن ائين آهي، str متغير پول ۾ انهي قدر جو حوالو لڳايو ويو آهي. جيڪڏهن اهو نه آهي، پول ۾ هڪ نئين قيمت ٺاهي ويندي، ۽ ان جو حوالو ڏنو ويندو str variable . اچو ته هڪ مثال ڏسو:
String firstStr = "Hello world";
String secondStr = "Hello world";
System.out.println(firstStr == secondStr);
صحيح اسڪرين تي ڏيکاري ويندي . اسان کي ياد آهي ته == حوالن جي ڀيٽ ڪري ٿو- مطلب ته اهي ٻه حوالا ساڳيا قدر کي اسٽرنگ پول مان حوالو ڏين ٿا. اهو ان لاءِ ڪيو ويو آهي ته ميموري ۾ اسٽرنگ قسم جون ڪيتريون ئي هڪجهڙيون شيون پيدا نه ٿين ، ڇاڪاڻ ته جيئن اسان کي ياد آهي، اسٽرنگ هڪ بدلجندڙ طبقو آهي، ۽ جيڪڏهن اسان وٽ ساڳئي قدر جا ڪيترائي حوالا آهن، ته ان ۾ ڪو به حرج ناهي. اهو هاڻي ممڪن ناهي ته اهڙي صورتحال ۾ جنهن ۾ هڪ جڳهه تي هڪ قدر تبديل ڪري ٿي، هڪ ئي وقت ۾ ڪيترن ئي ٻين لنڪس لاء تبديليون. پر ان جي باوجود، جيڪڏهن اسان نئين استعمال ڪندي هڪ اسٽرنگ ٺاهي سگهون ٿا :
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);
اسان حاصل ڪنداسين ٻه غلط قدر ، جنهن جو مطلب آهي ته اسان وٽ هتي ٽي مختلف قدر آهن جن جو حوالو ڏنو پيو وڃي. حقيقت ۾، اهو ئي سبب آهي ته اهو صرف ٻه حوالا استعمال ڪندي تار ٺاهڻ جي سفارش ڪئي وئي آهي. جڏهن ته، توهان نئين . هن کي ڪرڻ لاء، اسان استعمال ڪندا آهيون 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);
نتيجي طور، اسان ڪنسول ۾ ٽي سچا قدر حاصل ڪنداسين ، جنهن جو مطلب آهي ته سڀئي ٽي متغير هڪ ئي اسٽرنگ ڏانهن اشارو ڪن ٿا.جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 7 - 2

63. اسٽرنگ پول ۾ ڪهڙا GOF نمونا استعمال ٿيندا آهن؟

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

   public Lawyer() {
       System.out.println("Юрист взят в штат.");
   }

   @Override
   public void work() {
       System.out.println("Решение юридических вопросов...");
   }
}
۽ اڪائونٽنٽ:
public class Accountant implements Employee{

   public Accountant() {
       System.out.println("Бухгалтер взят в штат.");
   }

   @Override
   public void work() {
       System.out.println("Ведение бухгалтерского отчёта....");
   }
}
طريقا تمام مشروط آهن: اسان کي صرف اهو ڏسڻ جي ضرورت آهي ته اهي ڪيا ويا آهن. ساڳي صورتحال تعمير ڪندڙ تي لاڳو ٿئي ٿي. ڪنسول آئوٽ جي مهرباني، اسان ڏسنداسين جڏهن نوان شيون ٺاهيا ويندا. اسان وٽ پڻ هڪ ملازم ڊپارٽمينٽ آهي، جنهن جو ڪم اهو آهي ته درخواست ڪيل ملازم کي جاري ڪرڻ، ۽ جيڪڏهن هو اتي نه آهي، ان کي ملازمت ڏيو ۽ درخواست جي جواب ۾ جاري ڪريو:
public class StaffDepartment {
   private Map<String, Employee> currentEmployees = new HashMap<>();

   public Employee receiveEmployee(String type) throws Exception {
       Employee result;
       if (currentEmployees.containsKey(type)) {
           result = currentEmployees.get(type);
       } else {
           switch (type) {
               case "Бухгалтер":
                   result = new Accountant();
                   currentEmployees.put(type, result);
                   break;
               case "Юрист":
                   result = new Lawyer();
                   currentEmployees.put(type, result);
                   break;
               default:
                   throw new Exception("Данный сотрудник в штате не предусмотрен!");
           }
       }
       return result;
   }
}
اهو آهي، منطق سادو آهي: جيڪڏهن ڪو ڏنو ويو يونٽ آهي، ان کي واپس ڏيو؛ جيڪڏهن نه، ان کي ٺاهيو، ان کي اسٽوريج ۾ رکو (ڪجهه ڪيش وانگر) ۽ ان کي واپس ڏيو. هاڻي اچو ته ڏسو ته اهو سڀ ڪيئن ڪم ڪري ٿو:
public static void main(String[] args) throws Exception {
   StaffDepartment staffDepartment = new StaffDepartment();
   Employee empl1  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl2  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl3  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl4  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl5  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl6  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl7  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl8  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl9  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl10  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
}
۽ ڪنسول ۾، مطابق، اتي ھڪڙو ٻاھر ٿيندو:
وڪيل رکيو ويو آهي. قانوني مسئلا حل ڪرڻ... هڪ اڪائونٽنٽ رکيو ويو آهي. اڪائونٽنگ رپورٽ برقرار رکڻ.... قانوني مسئلا حل ڪرڻ... اڪائونٽنگ رپورٽ برقرار رکڻ.... قانوني مسئلا حل ڪرڻ... اڪائونٽنگ رپورٽ برقرار رکڻ.... قانوني مسئلا حل ڪرڻ... اڪائونٽنگ رپورٽ برقرار رکڻ.... قانوني مسئلن کي حل ڪرڻ ... اڪائونٽنگ رپورٽن کي برقرار رکڻ ...
جئين توهان ڏسي سگهو ٿا، صرف ٻه شيون ٺاهيا ويا، جيڪي ڪيترائي ڀيرا ٻيهر استعمال ڪيا ويا. مثال تمام سادو آهي، پر اهو واضح طور ڏيکاري ٿو ته هي ٽيمپليٽ ڪيئن استعمال ڪري اسان جا وسيلا بچائي سگهندا. خير، جيئن توهان محسوس ڪيو، هن نموني جو منطق انشورنس پول جي منطق سان بلڪل ملندڙ جلندڙ آهي. توھان ھن مضمون ۾ GOF نمونن جي قسمن بابت وڌيڪ پڙھي سگھو ٿا .جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 7 - 3

64. هڪ تار کي حصن ۾ ڪيئن ورهايو وڃي؟ مھرباني ڪري لاڳاپيل ڪوڊ جو ھڪڙو مثال ڏيو

ظاهر آهي، هي سوال تقسيم جي طريقي بابت آهي . اسٽرنگ ڪلاس ۾ هن طريقي جا ٻه مختلف قسم آهن:
String split(String regex);
۽
String split(String regex);
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 رڪاوٽ ، صف جي آخري عنصر کي ٽن ذيلي اسٽرنگ ۾ ورهائي سگهجي ٿو.جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 7 - 4

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

پاسورڊ کي محفوظ ڪرڻ وقت اسٽرنگ تي صف کي ترجيح ڏيڻ جا ڪيترائي سبب آهن: 1. اسٽرنگ پول ۽ اسٽرنگ جي بي ترتيبي. جڏهن هڪ صف استعمال ڪيو وڃي ( char[] )، اسان واضح طور تي ڊيٽا کي ختم ڪري سگهون ٿا جڏهن اسان ان سان ڪيو آهي. انهي سان گڏ، اسان صف کي ٻيهر لکي سگھون ٿا جيترو اسان چاهيون ٿا، ۽ صحيح پاسورڊ سسٽم ۾ ڪٿي به نه هوندو، جيتوڻيڪ گندگي گڏ ڪرڻ کان اڳ (اهو ڪافي آهي ته ڪجهه سيلن کي غلط قدرن ۾ تبديل ڪرڻ). ساڳئي وقت، اسٽرنگ هڪ ناقابل قابل ڪلاس آهي. اهو آهي، جيڪڏهن اسان ان جي قيمت کي تبديل ڪرڻ چاهيون ٿا، اسان کي هڪ نئون حاصل ڪنداسين، جڏهن ته پراڻي هڪ اسٽرنگ پول ۾ رهندو. جيڪڏهن اسان چاهيون ٿا ته ڪنهن پاس ورڊ جي اسٽرنگ ويليو کي هٽائي، اهو هڪ تمام ڏکيو ڪم ٿي سگهي ٿو، ڇاڪاڻ ته اسان کي گاربيج ڪليڪٽر جي ضرورت آهي ته جيئن اسٽرنگ پول مان قدر کي هٽائي ، ۽ ان ڳالهه جو تمام گهڻو امڪان آهي ته اها اسٽرنگ ويليو اتي ئي رهندي. وڏو وقت. اھو آھي، ھن صورتحال ۾، اسٽرنگ ڊيٽا اسٽوريج سيڪيورٽي جي لحاظ کان چار صف کان گھٽ آھي. 2. جيڪڏهن اسٽرنگ جي قيمت اتفاقي طور تي ڪنسول (يا لاگز) ڏانهن ٻاھر نڪرندي آھي، قيمت پاڻ کي ڏيکاري ويندي:
String password = "password";
System.out.println("Пароль - " + password);
ڪنسول آئوٽ:
پاسورڊ
ساڳئي وقت، جيڪڏهن توهان حادثاتي طور تي ڪنسول ڏانهن هڪ صف ڪڍيو ٿا:
char[] arr = new char[]{'p','a','s','s','w','o','r','d'};
System.out.println("Пароль - " + arr);
ڪنسول ۾ سمجھ ۾ نه اچڻ واري گوبلڊيگوڪ هوندي:
پاسورڊ - [C@7f31245a
اصل ۾ gobbledygook نه آهي، پر: [C طبقي جو نالو آهي چار صف ، @ هڪ جدا ڪندڙ آهي، جنهن جي پٺيان 7f31245a هڪ هيڪساڊيڪل هيش ڪوڊ آهي. 3. سرڪاري دستاويز، جاوا ڪرپٽوگرافي آرڪيٽيڪچر گائيڊ، واضح طور تي اسٽرنگ جي بدران چار[] ۾ پاسورڊ محفوظ ڪرڻ جو ذڪر ڪري ٿو : "اهو منطقي لڳي ٿو پاسورڊ گڏ ڪرڻ ۽ ذخيرو ڪرڻ هڪ قسم جي java.lang.String ۾ . تنهن هوندي، هتي هڪ احتياط آهي: اسٽرنگ شيون ناقابل بدلائي سگهجن ٿيون، يعني، اتي ڪي طريقا بيان نه ڪيا ويا آهن ته ڪنهن String اعتراض جي مواد کي تبديل ڪرڻ جي اجازت ڏني وڃي (اوور رائٽ) يا استعمال کان پوء ختم ڪيو وڃي. هي خصوصيت اسٽرنگ شين کي حساس معلومات محفوظ ڪرڻ لاءِ نا مناسب بڻائي ٿي جهڙوڪ يوزر پاسورڊ. ان جي بدران، توهان کي هميشه گڏ ڪرڻ گهرجي ۽ هڪ ڪردار جي صف ۾ حساس سيڪيورٽي معلومات گڏ ڪرڻ گهرجي.جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 7 - 5

اينيم

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

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

67. ڇا اينيم انٽرفيس کي لاڳو ڪري سگھي ٿو؟

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

68. ڇا اينيم ڪلاس وڌائي سگھي ٿو؟

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

69. ڇا اهو ممڪن آهي ته هڪ اينيم ٺاهڻ بغير اعتراض جي مثالن جي؟

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

70. ڇا اسان Enum لاءِ toString() طريقي کي اوور رائيڊ ڪري سگھون ٿا؟

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

   @Override
   public String toString() {
       return "Выбрана роль - " + super.toString();
   }
}
اهو سڀ ڪجهه اڄ لاءِ آهي، ايندڙ حصي تائين!جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 7 - 6
سيريز ۾ ٻيا مواد:
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION