
71. جيڪڏهن اسان Enum جي toString() طريقي کي اوور رائڊ نه ڪندا ته ڇا ٿيندو؟
فرض ڪريو اسان وٽ ھيٺ ڏنل اينم آھي :public enum Role {
STUDENT,
TEACHER,
DIRECTOR,
SECURITY_GUARD;
}
اچو ته شاگرد فيلڊ کي ڪنسول تي ڏيکاريون ان جي toString() طريقي سان ڪال ڪندي:
System.out.println(Role.STUDENT.toString());
نتيجي طور، اسان ھيٺ ڏنل ڪنسول ٻاھر حاصل ڪندا آھيون:
72. ڇا توھان Enum اندر ھڪڙي ٺاھيندڙ جو اعلان ڪري سگھو ٿا؟
ها بلڪل. تعمير ڪندڙ اهو آهي جيڪو اينيم جي اندروني شعبن جي قيمتن کي سيٽ ڪري ٿو . مثال طور، اچو ته پوئين enum ( ageFrom ۽ ageTo ) ۾ ٻه شعبا شامل ڪريون هر ڪردار جي عمر جي حد کي ظاهر ڪرڻ لاءِ:public enum Role {
STUDENT(5,18),
TEACHER(20,60),
DIRECTOR(40,70),
SECURITY_GUARD(18,50);
int ageFrom;
int ageTo;
Role(int ageFrom, int ageTo) {
this.ageFrom = ageFrom;
this.ageTo = ageTo;
}
}
73. == ۽ برابر () جي وچ ۾ ڇا فرق آهي؟
اھو ھڪڙو عام انٽرويو سوالن مان آھي جيڪي جاوا ڊولپرز کان پڇيا ويا آھن. شروع ڪرڻ لاءِ، جڏهن سادو قدرن جو مقابلو ڪيو وڃي ( int , char , double ...)، اسان استعمال ڪريون ٿا == ، ڇاڪاڻ ته اهي متغير ڪنڪريٽ قدرن تي مشتمل آهن جن جو سڌو سنئون مقابلو ڪري سگهجي ٿو. وڌيڪ ڇا آهي، پرائمري متغير مڪمل شيون نه آهن - اهي آبجیکٹ ڪلاس جو وارث نه آهن ۽ نه برابر () طريقو آهي. جيڪڏهن اسان متغيرن جي مقابلي جي باري ۾ ڳالهائي رهيا آهيون جيڪي شيون ڏانهن اشارو ڪن ٿا، پوء اسان کي ڄاڻڻ جي ضرورت آهي ته == صرف حوالن جي قيمت جي ڀيٽ ۾، يعني ڇا اهي ساڳيا اعتراض ڏانهن اشارو ڪن ٿا يا نه. ايستائين جو هڪ شئي ۾ موجود سموري ڊيٽا ٻئي هڪ جي سڀني ڊيٽا سان هڪجهڙائي رکي ٿي، استعمال ڪرڻ سان == مقابلي لاءِ ناڪاري نتيجو نڪرندو ( غلط )، ڇاڪاڻ ته اهي الڳ شيون آهن. جيئن توهان اندازو لڳايو هوندو، اسان استعمال ڪندا آهيون equals() طريقو ريفرنس متغيرن جي مقابلي لاءِ. هي هڪ آهي آبجیکٹ ڪلاس جي معياري طريقن مان، ۽ ضروري آهي ته شين جي مڪمل مقابلي لاءِ. پر مون کي فوري طور تي چوڻ جي ضرورت آهي ته هن طريقي سان صحيح ڪم ڪرڻ لاء، اهو ظاهر ڪرڻ گهرجي ته شين جي مقابلي ۾ ڪيئن هجڻ گهرجي. جيڪڏهن توهان طريقي کي اوور رائڊ نه ٿا ڪريو، ته پوءِ توهان کي ڊفالٽ عمل درآمد ملندو، جيڪو استعمال ڪندي شين جو مقابلو ڪيو == . IntelliJ IDEA ۾، توهان IDEA شارٽ ڪٽ استعمال ڪندي خودڪار طريقي سان ختم ڪري سگھو ٿا: Alt+Insert . ونڊو ۾ جيڪو ظاهر ٿئي ٿو، چونڊيو equals() ۽ hashCode() . پوءِ انھن شعبن کي چونڊيو جيڪي شامل ٿيڻ گهرجن. وائيلا! طريقا خودڪار طريقي سان لاڳو ٿين ٿا. هتي هڪ مثال آهي ته ڪيئن هڪ خود بخود پيدا ٿيل برابر طريقو ٻن شعبن سان گڏ سڀ کان آسان ممڪن Cat ڪلاس لاء نظر اچي ٿو - int age ۽ String name :@Override
public boolean equals(final Object o) {
if (this == o) return true;
if (o == null || this.getClass() != o.getClass()) return false;
final Cat cat = (Cat) o;
return this.age == cat.age &&
Objects.equals(this.name, cat.name);
}
جڏهن اهو اچي ٿو enum ، اتي ڪو عملي فرق ناهي == ۽ برابر () جي وچ ۾ . 


74. Enum جو ordinal() طريقو ڇا ڪندو؟
جڏهن اسان هڪ اينيم فيلڊ تي int ordinal() طريقو سڏين ٿا ، اسان حاصل ڪندا آهيون صفر جي بنياد تي انڊيڪس اينيم جي فهرست ۾. اچو ته هن طريقي کي رول اينم ۾ فيلڊ تي سڏين ، جنهن کي اسان اڳ ۾ سمجهيو آهي:System.out.println(Role.DIRECTOR.ordinal());
انهي جي مطابق، ڪنسول ڏيکاري ٿو:
75. ڇا Enum جاوا ۾ TreeSet يا TreeMap سان استعمال ڪري سگھجي ٿو؟
اسان Enum قسم استعمال ڪري سگھون ٿا TreeSet ۽ TreeMap ۾ . ۽ اسان هي لکي سگهون ٿا:TreeSet<Role> treeSet = new TreeSet<>();
treeSet.add(Role.SECURITY_GUARD);
treeSet.add(Role.DIRECTOR);
treeSet.add(Role.TEACHER);
treeSet.add(Role.STUDENT);
treeSet.forEach(System.out::println);
۽ ڪنسول ڏيکاريندو:
76. Enum جا ordinal() ۽ compareTo() طريقا ڪيئن لاڳاپيل آهن؟
جيئن اڳ بيان ڪيو ويو آهي، آرڊينل () اينيم فيلڊ جي لسٽ ۾ فيلڊ جي انڊيڪس واپسي. انهي سان گڏ، اسان جي پوئين سوال جي غور ۾، توهان ڏٺو ته جڏهن اينم فيلڊ کي ٽري سيٽ (جيڪو هڪ ترتيب ڏنل سيٽ آهي) ۾ رکيل آهي، اهي ترتيب تي وٺن ٿا جنهن ۾ اهي اينم ۾ اعلان ڪيا ويا آهن . ۽ جيئن اسان ڄاڻون ٿا، TreeSet ۽ TreeMap شيون ترتيب ڏيو compareTo() طريقي سان انهن جي مقابلي واري انٽرفيس کي ڪال ڪندي . اهو اسان کي ٻڌائي ٿو ته اينم ڪلاس Comparable انٽرفيس کي لاڳو ڪري ٿو، جنهن جو مطلب آهي ته اهو compareTo() طريقو لاڳو ڪري ٿو، جيڪو اندروني طور تي ترتيب ڏيڻ لاءِ ordinal() طريقو استعمال ڪري ٿو. Enum ڪلاس ۾ وڃڻ سان ، اسان اسان جي مفروضي جي تصديق ڪري سگھون ٿا:


77. Enum جو مثال لکو
مٿي ذڪر ڪيل سوالن ۾، مون اڳ ۾ ئي مثال ڏنو آهي enum s. مون کي هتي ڪوڊ نقل ڪرڻ جو ڪو سبب ناهي. مثال طور، ڏسو سوال 72 هڪ اينم ۾ تعمير ڪندڙ جي حوالي سان.78. ڇا اينيم کي سوئچ ڪيس ۾ استعمال ڪري سگھجي ٿو؟
اهو ٿي سگهي ٿو ۽ ٿيڻ گهرجي! منهنجي تجربي کي ڏسندي، مان نوٽ ڪندس ته اينيم جي سڀ کان عام استعمالن مان هڪ آهي منطقي تعميرات جهڙوڪ سوئچ بيانن ۾. انهي صورت ۾، توهان سڀني ممڪن صورتن کي مهيا ڪري سگهو ٿا - هڪ ڀيرو توهان هر اينيم فيلڊ لاء منطق لکي ، توهان کي ڊفالٽ شق جي ضرورت ناهي ! آخرڪار، جيڪڏهن توهان String يا عددي قدر استعمال ڪريو ٿا، جهڙوڪ هڪ int ، توهان کي اڻڄاتل قدر ملي سگهي ٿي، پر اهو ناممڪن آهي enum سان . هتي اهو آهي ته هڪ سوئچ بيان مٿي ڏنل مثال وانگر نظر ايندو:public void doSomething(Role role) {
switch (role) {
case STUDENT:
// some logic for STUDENT
break;
case TEACHER:
// some logic for TEACHER
break;
case DIRECTOR:
// some logic for DIRECTOR
break;
case SECURITY_GUARD:
// some logic for SECURITY_GUARD
break;
}
}
79. مان ڪيئن حاصل ڪري سگهان ٿو هڪ اينيم جا سڀ ممڪن قدر؟
جيڪڏهن توهان کي حاصل ڪرڻ جي ضرورت آهي سڀ ممڪن اينيم اقدار، اتي هڪ قدر () طريقو آهي، جيڪو اينيم لاء سڀني ممڪن قدرن جي هڪ صف کي واپس ڏئي ٿو انهن جي قدرتي ترتيب ۾ (اهو آهي، انهي ترتيب ۾ جنهن ۾ اهي بيان ڪيا ويا آهن enum ) . مثال:Role[] roles = Role.values();
for (Role role : roles) {
System.out.println(role);
}
اسان کي ڪنسول تي هيٺيون هونديون:
اسٽريم API
80. جاوا ۾ هڪ وهڪرو ڇا آهي؟
جاوا اسٽريم API ڊيٽا اسٽريم سان لهه وچڙ جو هڪ نسبتاً نئون طريقو آهي، جيڪو اسان کي وڏي ڊيٽا کي وڌيڪ آساني سان ۽ جامع طريقي سان پروسيس ڪرڻ جي اجازت ڏئي ٿو، ۽ انهي سان گڏ ڊيٽا کي پروسيس ڪرڻ لاءِ ڪجهه اسٽريم جي وچ ۾ متوازي طور تي عمل ڪرڻ، ممڪن طور تي ڪارڪردگي کي وڌائڻ.81. ٽرانزيڪشن جي مکيه ملڪيت جا نالا
هتي جو موضوع آهي وهڪرو API، پر سوال ٽرانزيڪشن بابت آهي. هيم... پهرين، اچو ته سمجھون ته ٽرانزيڪشن ڇا آهي. هڪ ٽرانزيڪشن هڪ ڊيٽابيس تي ترتيب واري عملن جو هڪ گروپ آهي. اهو ڪم جي منطقي يونٽ جي نمائندگي ڪري ٿو. هڪ ٽرانزيڪشن مڪمل طور تي ۽ ڪاميابيءَ سان ٻين سمورو ٽرانزيڪشن جي آزاديءَ سان مڪمل ٿي سگهي ٿي، ان سان گڏ ڊيٽا جي سالميت کي برقرار رکيو وڃي، يا ان تي عمل نه ڪيو وڃي، ان صورت ۾ ان جو ڪو به اثر ناهي. ٽرانزيڪشن ۾ چار مکيه خاصيتون آهن، جن کي اسان آساني سان ياد ڪري سگهون ٿا ACID جي مخفف جي مهرباني . اچو ته ڏسون ته هن مخفف جي هر اکر جو مطلب ڇا آهي: A جو مطلب آهي Atomicity . هي ملڪيت ضمانت ڏئي ٿي ته سسٽم ۾ ڪوبه ٽرانزيڪشن جزوي طور تي انجام نه ڏنو ويو آهي. يا ته ان جا سڀئي ماتحت عمل ڪيا ويندا، يا انهن مان ڪو به عمل نه ڪيو ويندو ( سڀ يا ڪجھ به نه ). С جو مطلب آهي تسلسل . هي ملڪيت ضمانت ڏئي ٿي ته هر ڪامياب ٽرانزيڪشن صرف صحيح نتيجا انجام ڏيندو. ٻين لفظن ۾، اها ضمانت آهي ته جيڪڏهن ٽرانزيڪشن ڪامياب ٿي وڃي، پوء مخصوص ڊيٽا لاء سسٽم جي سڀني ضابطن جي فرمانبرداري ڪئي ويندي. جيڪڏهن ٽرانزيڪشن ڪامياب نه آهي، پوء اهو عمل نه ڪيو ويندو ۽ سسٽم جي ڊيٽا ان جي پوئين حالت ڏانهن موٽندي. مان اڪيلائي لاءِ بيٺو آهيان . هن ملڪيت جو مطلب آهي ته جڏهن هڪ ٽرانزيڪشن تي عمل ڪيو ويندو آهي، سمورو ٽرانزيڪشن ان جي نتيجن کي متاثر نه ڪرڻ گهرجي. هي ملڪيت وسيع وسيع آهي، تنهن ڪري، ضابطي جي طور تي، اهو جزوي طور تي لاڳو ڪيو ويو آهي، ڪجهه مخصوص سطحن جي اڪيلائي جي اجازت ڏئي ٿو جيڪي مخصوص اڪيلائي مسئلن کي حل ڪن ٿا. اسان ان تي وڌيڪ تفصيل سان بحث ڪنداسين ايندڙ سوال ۾. D جو مطلب آهي Durability . هي ملڪيت ضمانت ڏئي ٿي ته جيڪڏهن صارف کي تصديق ملي ٿي ته ٽرانزيڪشن مڪمل ٿي وئي آهي، پوء هو يقين ڪري سگهي ٿو ته تبديلين کي منسوخ نه ڪيو ويندو ڪجهه ناڪامي سبب. اهو آهي، توهان يقين ڪري سگهو ٿا ته ڪجهه آپريٽنگ سسٽم جي ناڪامي توهان جي ڊيٽا کي ڪجهه به نه ڪندي جيڪڏهن توهان اڳ ۾ ئي تصديق ڪئي آهي ته توهان جي ٽرانزيڪشن ڪاميابي سان ختم ٿي وئي آهي.82. ٽرانزيڪشن آئسوليشن ليول ڇا آهن؟
جيئن مون اڳ ۾ چيو آهي، جڏهن اهو اچي ٿو ACID ملڪيت، اڪيلائي کي يقيني بڻائڻ هڪ وسيلا-گھڻي عمل آهي. ان جي مطابق، هي ملڪيت جزوي طور تي لاڳو ٿئي ٿو. اڪيلائي جا مختلف سطح آهن: اعليٰ سطح، ڪارڪردگي تي وڌيڪ سخت اثر. ان کان اڳ جو اسان ٽرانزيڪشن آئسوليشن جي سطح تي وڃون، اسان کي مختلف مسئلن تي غور ڪرڻ جي ضرورت آھي جيڪي ناقص ٽرانزيڪشن آئسوليشن جي ڪري پيدا ٿين ٿيون :-
phantom reads : جڏهن ساڳي درخواست، هڪ ئي ٽرانزيڪشن ۾ هڪ کان وڌيڪ ڀيرا سڏجي ٿي، ٻئي ٽرانزيڪشن جي داخل ٿيڻ سبب مختلف نتيجا پيدا ڪري ٿي؛
-
نه ورجائي سگهڻ وارو پڙهو : جڏهن ساڳي درخواست، هڪ ئي ٽرانزيڪشن ۾ هڪ کان وڌيڪ ڀيرا سڏجي ٿي، مختلف ڊيٽا حاصل ڪري ٿي تبديلين (تازه ڪارين) جي ڪري ۽ ڪنهن ٻئي ٽرانزيڪشن ذريعي حذف ڪرڻ؛
-
گندا پڙھڻ : اڃا تائين اڻڄاتل ڊيٽا پڙھڻ جيڪا ٽرانزيڪشن طرفان شامل ڪئي وئي يا تبديل ڪئي وئي آھي ۽ بعد ۾ واپس ڦري وئي آھي؛
-
گم ٿيل تازه ڪاريون : جڏهن هڪ ڊيٽا بلاڪ هڪ ئي وقت مختلف ٽرانزيڪشن ذريعي تبديل ڪيو ويندو آهي، ۽ آخري هڪ کان سواءِ سڀ تبديليون گم ٿي وينديون آهن (ملٽي ٿريڊنگ ۾ نسل جي حالت وانگر).
اڪيلائي جي سطح | پريت پڙهي ٿو | ناقابل ورجائي پڙهڻ | گندي پڙهي | گم ٿيل اپڊيٽ |
---|---|---|---|---|
سيريز ڪرڻ جي قابل | + | + | + | + |
بار بار پڙهڻ | - | + | + | + |
پڙهو عزم | - | - | + | + |
اڻ پڙهيل پڙهو | - | - | - | + |
ڪو به نه | - | - | - | - |
83. بيان ۽ تيار ڪيل بيان جي وچ ۾ ڇا فرق آهي؟
هتي اسان اوچتو تبديل ڪيو JDBC جي خصوصيتن ڏانهن منتقلي . ڪنهن به واقعي ۾، اچو ته پهرين اهو ڄاڻون ته بيان ڇا آهي. اهو هڪ اعتراض آهي جيڪو SQL سوالن کي ٺاهڻ لاء استعمال ڪيو ويندو آهي. JDBC ٽن قسمن جو استعمال ڪري ٿو: بيان ، تيار ڪيل بيان ، ۽ ڪالبل بيان . اڄ اسان CallableStatement تي غور نه ڪنداسين . ان جي بدران، اسان بيان ۽ PreparedStatement جي وچ ۾ فرق بابت ڳالهائي رهيا آهيون .-
بيان استعمال ڪيو ويندو آهي سادي SQL سوالن کي هلائڻ لاءِ بغير رن ٽائم ان پٽ پيٽرولن جي. PrepareStatement رن ٽائم تي ان پٽ پيٽرول کي قبول ڪري سگھي ٿو.
-
PreparedStatement لاءِ پيرا ميٽر مقرر ڪرڻ لاءِ ، ان پٽ پيراميٽرس کي گذارش ۾ سوالن جي نشانن جي طور تي لکيو ويندو آھي، تنھنڪري اھي مختلف سيٽرز استعمال ڪندي ڪجھ قدر سان مٽائي سگھجن ٿا، جھڙوڪ setDouble() , setFloat() , setInt() , setTime() ... ھي مطلب ته توهان درخواست ۾ غلط قسم جي ڊيٽا داخل نه ڪندا.
-
PreparedStatement precompiled آهي ۽ ڪيشنگ استعمال ڪري ٿو، تنهنڪري اهو بيان ڪيل شين جي درخواست کان ٿورو تيز ٿي سگهي ٿو . نتيجي طور، SQL بيان جيڪي بار بار عمل ڪيا ويندا آھن تيار ڪيل بيان ڪيل شيون ٺاھيا ويندا آھن ڪارڪردگي کي بهتر ڪرڻ لاءِ.
-
بيان SQL انجيڪشن لاءِ خطرناڪ آھي، پر PreparedStatement انھن کي روڪي ٿو.
GO TO FULL VERSION