سوال ۽ جواب جونيئر ڊولپر پوزيشن لاءِ
عام سوال
1. توهان ڪهڙي ڊزائن جا نمونا ڄاڻو ٿا؟ اسان کي ٻڌايو ته ٻن ڊزائن جي نمونن بابت جيڪي توھان پنھنجي ڪم ۾ استعمال ڪيا آھن.
نمونن جي هڪ وڏي قسم آهن. توھان مان انھن لاءِ جيڪي پاڻ کي ٺاھڻ جي نمونن سان چڱيءَ طرح واقف ڪرڻ چاھين ٿا، مان ڪتاب پڙھڻ جي صلاح ڏيان ٿو ”ھيڊ فرسٽ. ڊيزائن جا نمونا“. اهو توهان کي آساني سان سکڻ ۾ مدد ڏيندو سڀ کان وڌيڪ بنيادي ڊيزائن جي نمونن جا تفصيل. ڊزائن جي نمونن جي لحاظ کان جيڪي توهان نوڪري جي انٽرويو ۾ ذڪر ڪري سگهو ٿا، هيٺيان ذهن ۾ اچن ٿا:- بلڊر - اڪثر استعمال ٿيل ٽيمپليٽ، اعتراض جي تخليق لاء کلاسک انداز جو متبادل؛
- حڪمت عملي - هڪ نمونو جيڪو بنيادي طور تي پوليمورفيزم جي نمائندگي ڪري ٿو. اھو آھي، اسان وٽ ھڪڙو انٽرفيس آھي، پر پروگرام جو رويو تبديل ٿي ويندو آھي ان جي بنياد تي مخصوص انٽرفيس تي عمل ڪرڻ جي عمل کي منظور ڪيو ويو آھي (حڪمت عملي جو نمونو ھاڻي صرف جاوا ايپليڪيشنن ۾ تقريبا ھر جڳھ استعمال ڪيو ويندو آھي).
- ڪارخانو - هي نمونو ڳولي سگھجي ٿو ApplicationContext (يا BeanFactory ۾)؛
- سنگلٽن - سڀ ڀاڄيون ڊفالٽ طور سنگلٽن آهن.
- پراکسي - بنيادي طور تي، بهار ۾ هر شي هن نموني کي هڪ طريقي سان استعمال ڪري ٿو، مثال طور، AOP؛
- ذميداري جو سلسلو - هڪ نمونو جيڪو بهار جي سيڪيورٽي کي گهٽائي ٿو.
- سانچو - بهار JDBC ۾ استعمال ٿيل.
جاوا ڪور
2. جاوا ۾ ڪهڙي قسم جا ڊيٽا موجود آهن؟
جاوا وٽ ھيٺ ڏنل پرائمري ڊيٽا جا قسم آھن:- بائيٽ - انٽيجرز -128 کان 127 تائين، 1 بائيٽ وٺي ٿو؛
- مختصر - انٽيجرز -32768 کان 32767 تائين، 2 بائيٽ وٺي ٿو.
- int - انٽيجرز -2147483648 کان 2147483647 تائين، 4 بائيٽ وٺي ٿو؛
- ڊگھا - 9223372036854775808 کان 9223372036854775807 تائين انٽيجرز، 8 بائيٽ وٺي ٿو.
- فلوٽ - فلوٽنگ پوائنٽ نمبر -3.4E+38 کان 3.4E+38 تائين، 4 بائيٽ وٺي ٿو؛
- ڊبل - سچل پوائنٽ نمبر -1.7E+308 کان 1.7E+308 تائين، 8 بائيٽ وٺي ٿو.
- char - UTF-16 ۾ اڪيلو اکر، 2 بائيٽ وٺي ٿو؛
- بولين سچا/غلط قدر، 1 بائيٽ وٺي ٿو.
3. هڪ شئي ڪيئن مختلف آهي پراڻي ڊيٽا جي قسمن کان؟
پهريون فرق آهي ميموري جي مقدار جو قبضو ڪيو ويو آهي: ابتدائي شيون تمام گهٽ وٺن ٿيون ڇاڪاڻ ته اهي صرف پنهنجون قيمتون رکن ٿا، پر شيون مختلف قدرن تي مشتمل ٿي سگهن ٿيون - ٻئي شيون ۽ ٻين شين ڏانهن حوالا. ٻيو فرق هي آهي: جاوا هڪ آبجیکٹ تي مبني ٻولي آهي، تنهنڪري جاوا ڪم ۾ هر شيءِ شين جي وچ ۾ هڪ رابطي آهي. Primitives هتي چڱيءَ طرح نه ٺهندا آهن. حقيقت ۾، اهو ئي سبب آهي ته جاوا هڪ 100٪ اعتراض تي مبني ٻولي ناهي. ٽيون فرق، جيڪو سيڪنڊ کان هيٺ اچي ٿو اهو آهي ته ڇاڪاڻ ته جاوا اعتراض جي ڳالهين تي مرکوز آهي، اتي شيون منظم ڪرڻ لاء ڪيترائي مختلف ميکانيزم آهن. مثال طور، تعمير ڪندڙ، طريقا، استثنا (جيڪي بنيادي طور تي شين سان ڪم ڪن ٿا) وغيره. ۽ بنيادي طور تي هن آبجیکٹ تي مبني ماحول ۾ ڪم ڪرڻ جي اجازت ڏيڻ لاءِ، جاوا جا تخليقڪار ابتدائي قسمن ( Integer ، Character ، Double ، Boolean ) لاءِ ريپر کڻي آيا. ...)4. حوالن ۽ قدر ذريعي دليلن کي پاس ڪرڻ ۾ ڪهڙو فرق آهي؟
Primitive fields انهن جي قيمت کي محفوظ ڪري ٿو: مثال طور، جيڪڏهن اسان مقرر ڪريون int i = 9؛ ، پوءِ i فيلڊ قدر 9 کي محفوظ ڪري ٿو. جڏهن اسان وٽ هڪ اعتراض جو حوالو آهي، ان جو مطلب آهي ته اسان وٽ اعتراض جي حوالي سان هڪ فيلڊ آهي. ٻين لفظن ۾، اسان وٽ ھڪڙو فيلڊ آھي جيڪو ميموري ۾ اعتراض جو پتو ذخيرو ڪري ٿو.Cat cat = new Cat();
هن جو مطلب اهو آهي ته هڪ اعتراض جي حوالي سان فيلڊ پڻ قدرن کي ذخيرو ڪري ٿو . انهن جا قدر ياداشت جا پتا آهن. اهو آهي، ٻلي نئين Cat() اعتراض جي ميموري ايڊريس کي ذخيرو ڪري ٿو . جڏهن اسان هڪ دليل کي هڪ طريقي سان منتقل ڪيو، ان جي قيمت نقل ڪئي وئي آهي. پرائمري جي صورت ۾، پريم جي قيمت نقل ڪئي وئي آهي. مطابق، طريقو نقل سان ڪم ڪري ٿو. جڏهن ڪاپي تبديل ڪئي وئي آهي، اصل متاثر نه ٿيندي. حوالي جي قسم جي صورت ۾، ميموري ايڊريس جو قدر نقل ڪيو ويو آهي. ان جي مطابق، ٻئي حوالا متغير ساڳئي اعتراض ڏانهن اشارو ڪندي پتي کي ذخيرو ڪندا. ۽ جيڪڏهن اسان هن نئين حوالن کي اعتراض کي تبديل ڪرڻ لاء استعمال ڪندا آهيون، ته اسان کي معلوم ٿيندو ته اهو پڻ پراڻي حوالن لاء تبديل ڪيو ويو آهي. آخرڪار، اهي ٻئي هڪ ئي اعتراض ڏانهن اشارو ڪن ٿا.
5. JVM، JDK، ۽ JRE ڇا آهي؟
JVM جاوا ورچوئل مشين لاءِ بيٺل آهي ، جيڪو هلائيندڙ جاوا بائيٽ ڪوڊ اڳ ۾ ٺاهيل آهي. JRE جاوا رن ٽائم ماحول لاء بيٺل آهي . بنيادي طور تي، اهو جاوا ايپليڪيشنن کي هلائڻ لاء هڪ ماحول آهي. ان ۾ JVM، معياري لائبريريون، ۽ جاوا پروگرامنگ ٻولي ۾ لکيل ايپلليٽس ۽ ايپليڪيشنن کي هلائڻ لاءِ ٻيا جزا شامل آھن. ٻين لفظن ۾، JRE هڪ مرتب ڪيل جاوا پروگرام کي هلائڻ لاءِ گهربل هر شيءِ جو هڪ پيڪيج آهي، پر ان ۾ اوزار ۽ افاديت شامل نه آهي جهڙوڪ مرتب ڪندڙ يا ڊيبگرز ڊولپمينٽ ايپليڪيشنز لاءِ. JDK جاوا ڊولپمينٽ کٽ لاءِ بيٺل آهي ، جيڪو JRE جي توسيع آهي . اھو آھي، اھو ھڪڙو ماحول آھي نه رڳو جاوا ايپليڪيشنن کي هلائڻ لاء، پر انھن کي ترقي ڪرڻ لاء پڻ. JDK JRE ۾ سڀڪنھن شيءِ تي مشتمل آھي، اضافي طور تي مختلف اضافي اوزار - گڏ ڪرڻ وارا ۽ ڊيبگر - جاوا ايپليڪيشن ٺاهڻ لاءِ گھربل آھن (جنھن ۾ جاوا دستاويز شامل آھن).6. JVM ڇو استعمال ڪريو؟
جيئن مٿي بيان ڪيو ويو آهي، جاوا ورچوئل مشين هڪ ورچوئل مشين آهي جيڪا هلندي آهي جاوا بائيٽ ڪوڊ جيڪا ڪمپلر طرفان اڳ ۾ ٺاهي وئي آهي. هن جو مطلب آهي JVM جاوا سورس ڪوڊ نه سمجهي. سو، پھريون، اسان .java فائلون گڏ ڪريون ٿا. مرتب ڪيل فائلن ۾ .class ايڪسٽينشن آهي ۽ هاڻي بائيٽ ڪوڊ جي صورت ۾ آهن، جنهن کي JVM سمجهي ٿو. JVM هر OS لاء مختلف آهي. جڏهن JVM هلندي آهي bytecode فائلون، اهو انهن کي او ايس لاءِ ٺاهي ٿو جنهن تي اهو هلندڙ آهي. حقيقت ۾، ڇاڪاڻ ته اتي مختلف JVMs آهن، JDK (يا JRE) پڻ مختلف OS لاء مختلف آهن (هر نسخو پنهنجي JVM جي ضرورت آهي). اچو ته ياد رکو ته ٻين پروگرامنگ ٻولين ۾ ترقي ڪيئن ڪم ڪري ٿي. توهان هڪ پروگرام لکندا آهيو، پوء ان جو ڪوڊ هڪ مخصوص OS لاء مشين ڪوڊ ۾ مرتب ڪيو ويندو آهي، ۽ پوء توهان ان کي هلائي سگهو ٿا. ٻين لفظن ۾، توهان کي هر پليٽ فارم لاء پروگرام جي مختلف نسخن کي لکڻ جي ضرورت آهي. پر جاوا جي ڪوڊ جي ڊبل پروسيسنگ (بائيٽ ڪوڊ ۾ سورس ڪوڊ جو مجموعو، ۽ پوءِ JVM پاران بائيٽ ڪوڊ جي پروسيسنگ) توهان کي ڪراس پليٽ فارم حل جي فائدن مان لطف اندوز ٿيڻ جي اجازت ڏئي ٿي. اسان هڪ ڀيرو ڪوڊ ٺاهيو ۽ ان کي بائيٽ ڪوڊ ۾ گڏ ڪيو. پوء اسان ان کي ڪنهن به OS ڏانهن وٺي سگهون ٿا، ۽ اصلي JVM ان کي هلائڻ جي قابل آهي. ۽ اھو بلڪل صحيح آھي جاوا جي افسانوي لکت ھڪ ڀيرو، ھلايو ڪٿي به فيچر.7. بائيٽ ڪوڊ ڇا آهي؟
جيئن مون مٿي چيو، ڪمپائلر جاوا ڪوڊ کي وچولي بائيٽ ڪوڊ ۾ تبديل ڪري ٿو (اسان .java ايڪسٽينشن واري فائلن مان .class ايڪسٽينشن سان فائلن ڏانهن وڃون ٿا). ڪيترن ئي طريقن سان، بائيٽ ڪوڊ مشين ڪوڊ سان ملندڙ جلندڙ آهي، سواء ان جي هدايتن جو سيٽ هڪ حقيقي پروسيسر لاء ناهي، پر هڪ مجازي هڪ. اهو چيو ته، ان ۾ سيڪشن شامل ٿي سگھي ٿو JIT ڪمپيلر لاءِ ٺهيل، جيڪو اصل پروسيسر لاءِ ڪمانڊ ايگزيڪيوشن کي بهتر ڪري ٿو جيڪو پروگرام هلي رهيو آهي. JIT تاليف، جنهن کي آن-دي-فلائي ڪمپليشن پڻ سڏيو ويندو آهي، هڪ ٽيڪنالاجي آهي جيڪا بائيٽ ڪوڊ پروگرام جي ڪارڪردگي کي وڌائي ٿي بائيٽ ڪوڊ کي مشين ڪوڊ يا ٻئي فارميٽ ۾ گڏ ڪري جڏهن پروگرام هلي رهيو آهي. جئين توهان اندازو لڳايو هوندو، JVM استعمال ڪري ٿو JIT ڪمپلر جڏهن اهو هلندي آهي bytecode. اچو ته ڪجهه نموني بائيٽ ڪوڊ تي هڪ نظر رکون: تمام گهڻو پڙهڻ لائق ناهي، ها؟ سٺي خبر اها آهي ته هي هدايت اسان لاءِ ناهي. اهو JVM لاء آهي.8. JavaBean جون خاصيتون ڇا آهن؟
هڪ JavaBean هڪ جاوا ڪلاس آهي جيڪو ڪجهه ضابطن تي عمل ڪري ٿو. JavaBean لکڻ لاءِ هتي ڪجھ ضابطا آهن :-
ڪلاس ۾ عوامي رسائي موڊيفائر سان گڏ هڪ خالي (نه-دليل) تعمير ڪندڙ هجڻ گهرجي. هي تعمير ڪندڙ اهو ممڪن بڻائي ٿو ته ڪنهن به غير ضروري مسئلن کان سواءِ ڪلاس جو هڪ اعتراض ٺاهيو (انهي ڪري ته دليلن سان ڪو به غير ضروري تڪرار نه هجي).
-
اندروني شعبن تائين رسائي حاصل ڪئي وئي آھي حاصل ڪريو ۽ سيٽ مثالن جي طريقن سان، جن کي معياري عمل ڪرڻ گھرجي. مثال طور، جيڪڏهن اسان وٽ نالي جي فيلڊ آهي، ته پوءِ اسان وٽ هجڻ گهرجي getName ۽ setName وغيره. هي مختلف اوزارن (فريم ورڪ) کي اجازت ڏئي ٿو ته پاڻمرادو حاصل ڪري سگھن ۽ بنا ڪنهن ڏکيائي جي.
-
ڪلاس کي override ڪرڻ گهرجي equals() ، hashCode() ، ۽ toString() طريقن.
-
ڪلاس کي لازمي طور تي ترتيب ڏيڻ گهرجي. اھو آھي، اھو لازمي آھي Serializable مارڪر انٽرفيس يا Externalizable انٽرفيس کي لاڳو ڪريو. اهو انهي ڪري آهي ته لوبن جي حالت کي معتبر طور تي محفوظ، ذخيرو ۽ بحال ڪري سگهجي ٿو.
9. هڪ OutOfMemoryError ڇا آهي؟
OutOfMemoryError جاوا ورچوئل مشين (JVM) سان لاڳاپيل هڪ نازڪ رن ٽائم غلطي آهي. هي نقص تڏهن ٿئي ٿو جڏهن JVM ڪنهن شئي کي مختص نٿو ڪري سگهي ڇو ته ان لاءِ ڪافي ميموري نه آهي، ۽ گاربيج ڪليڪٽر وڌيڪ ميموري مختص نٿو ڪري سگهي. OutOfMemoryError جا ڪجھ قسم :-
OutOfMemoryError: جاوا هيپ اسپيس - جاوا هيپ تي شئي مختص نه ٿي ڪري سگھجي ڇاڪاڻ ته ڪافي ميموري نه آهي. ھي نقص ٿي سگھي ٿو ميموري ليڪ جي ڪري يا ڊفالٽ ھيپ سائيز جي ڪري جيڪو موجوده ايپليڪيشن لاءِ تمام ننڍو آھي.
-
OutOfMemoryError: GC اوور هيڊ جي حد وڌي وئي - ڇاڪاڻ ته ايپليڪيشن جي ڊيٽا ڍير ۾ مشڪل سان ٺهڪي اچي ٿي، ڪچرو گڏ ڪندڙ هر وقت هلندو آهي، جاوا پروگرام تمام سست هلڻ جو سبب بڻيو. نتيجي طور، ردي جي ڪليڪٽر جي مٿي جي حد کان وڌي وئي آهي ۽ ايپليڪيشن هن غلطي سان خراب ٿي وئي آهي.
-
OutOfMemoryError: درخواست ڪيل صف جي سائيز VM جي حد کان وڌي ٿي - اھو ظاھر ڪري ٿو ته ايپليڪيشن ميموري کي ھڪڙي صف لاءِ مختص ڪرڻ جي ڪوشش ڪئي جيڪا ھيپ جي سائيز کان وڌيڪ آھي. ٻيهر، هن جو مطلب اهو ٿي سگھي ٿو ته ڪافي ميموري ڊفالٽ طرفان مختص ڪئي وئي هئي.
-
OutOfMemoryError: ميٽا اسپيس - ميٽاداٽا لاءِ مختص ڪيل جاءِ ختم ٿي وئي (ميٽا ڊيٽا ڪلاس ۽ طريقن لاءِ هدايتون آهن).
-
OutOfMemoryError: سبب لاءِ سائز بائيٽ جي درخواست ڪريو. ادل بدلڻ واري جاءِ کان ٻاهر - ڪجهه نقص پيدا ٿي جڏهن ڍير مان ميموري مختص ڪرڻ جي ڪوشش ڪئي وئي، ۽ نتيجي طور، هيپ ڪافي جاءِ نه آهي.
10. اسٽيڪ ٽريس ڇا آهي؟ مان ان کي ڪيئن حاصل ڪري سگهان ٿو؟
هڪ اسٽيڪ ٽريس طبقن ۽ طريقن جي هڪ فهرست آهي جنهن کي ايپليڪيشن جي عمل ۾ هن نقطي تائين سڏيو ويو آهي. توھان حاصل ڪري سگھوٿا اسٽيڪ ٽريس ايپليڪيشن ۾ ھڪڙي خاص نقطي تي ھن ڪندي ڪندي:StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
هي اسان کي حاصل ڪري ٿو StackTraceElements جو هڪ صف ترتيب ڏنل Last In First Out (LIFO) آرڊر ۾. جاوا ۾، جڏهن ماڻهو هڪ اسٽيڪ ٽريس بابت ڳالهائيندا آهن، انهن جو مطلب عام طور تي هڪ اسٽيڪ ٽريس ڪنسول تي ڏيکاريل آهي جڏهن هڪ غلطي (يا استثنا) ٿئي ٿي. توھان حاصل ڪري سگھوٿا اسٽيڪ ٽريس ھن طرح استثنا مان:
StackTraceElement[] stackTraceElements;
try{
...
} catch (Exception e) {
stackTraceElements = e.getStackTrace();
}
۽ جيڪڏهن اسان ڪنسول تي هڪ استثنا جي اسٽيڪ ٽريس ڏيکارڻ چاهيون ٿا:
try{
...
} catch (Exception e) {
e.printStackTrace();
}
اضافي طور تي، جيڪڏهن هڪ غلطي، اڻ چيڪ ٿيل استثنا، يا اڻڄاتل چيڪ ٿيل استثنا ٿئي ٿي، ته پوء اسان خودڪار طريقي سان حاصل ڪندا آهيون استثنا جي اسٽيڪ ٽريس ڪنسول تي جڏهن ايپليڪيشن خراب ٿئي ٿي. هتي هڪ ننڍڙو مثال آهي اسٽيڪ ٽريس جو ڪنسول تي: ۽ انهي نوٽ تي، اسان اڄ هن موضوع جي بحث کي ختم ڪنداسين.
GO TO FULL VERSION