- میں ان سوالات کو چھوڑ دوں گا جو مضامین کی اس سیریز کے ساتھ ملتے ہیں تاکہ معلومات کو دوبارہ نقل نہ کیا جائے۔ میں ان مواد کو پڑھنے کی تجویز کرتا ہوں، کیونکہ ان میں جاوا کور انٹرویو کے سب سے عام (مقبول) سوالات ہوتے ہیں۔
- DOU پر سوالات یوکرین میں پیش کیے جاتے ہیں، لیکن میرے پاس یہاں سب کچھ روسی زبان میں ہوگا۔
- جوابات کو مزید تفصیل سے بیان کیا جا سکتا ہے، لیکن میں نہیں کروں گا، اس کے بعد سے ہر سوال کا جواب ایک پورا مضمون لے سکتا ہے۔ اور وہ کسی انٹرویو میں آپ سے اتنی تفصیل سے نہیں پوچھیں گے۔
11. آبجیکٹ کلاس کے تمام طریقوں کو نام دیں۔
آبجیکٹ کلاس کے 11 طریقے ہیں:- کلاس<?> getClass() - موجودہ آبجیکٹ کی کلاس حاصل کرنا؛
- int hashCode() - موجودہ آبجیکٹ کا ہیش کوڈ حاصل کرنا؛
- بولین مساوی (آبجیکٹ آبجیکٹ) - موجودہ چیز کا کسی اور چیز سے موازنہ؛
- آبجیکٹ کلون () - موجودہ آبجیکٹ کی کاپی بنانا اور واپس کرنا؛
- String toString() — کسی چیز کی سٹرنگ کی نمائندگی حاصل کرنا؛
- void notify() — اس آبجیکٹ کے مانیٹر پر انتظار کر رہے ایک تھریڈ کو جگانا (تھریڈ کا انتخاب بے ترتیب ہے)؛
- void notifyAll() - اس آبجیکٹ کے مانیٹر پر منتظر تمام تھریڈز کو بیدار کرتا ہے۔
- void wait() - موجودہ مانیٹر پر موجودہ تھریڈ کو اسٹینڈ بائی موڈ میں تبدیل کرتا ہے (اسے منجمد کر دیتا ہے)، صرف ایک مطابقت پذیر بلاک میں کام کرتا ہے جب تک کہ کچھ مطلع یا مطلع نہ کر دے تمام تھریڈ کو جاگتا ہے۔
- باطل انتظار (طویل وقت ختم) - موجودہ مانیٹر پر موجودہ تھریڈ کو بھی منجمد کر دیتا ہے (موجودہ مطابقت پذیر پر)، لیکن اس حالت سے باہر نکلنے کے لیے ٹائمر کے ساتھ (یا دوبارہ: جب تک مطلع یا مطلع نہ ہو جائے)؛
- void انتظار (طویل وقت ختم، int nanos) - اوپر بیان کردہ طریقہ سے ملتا جلتا طریقہ، لیکن منجمد کرنے کے لیے زیادہ درست ٹائمرز کے ساتھ؛
- void finalize() - اس شے کو حذف کرنے سے پہلے، کوڑا اٹھانے والا اس طریقہ کو (آخر میں) کہتا ہے۔ اس کا استعمال مقبوضہ وسائل کو صاف کرنے کے لیے کیا جاتا ہے۔
12. وسائل سے نمٹنے کے دوران وسائل کے ساتھ کوشش کرنے اور آخر میں کوشش کرنے کے درمیان کیا فرق ہے؟
عام طور پر، ٹرائی کیچ-آخر میں استعمال کرتے وقت، حتمی بلاک وسائل کو بند کرنے کے لیے استعمال کیا جاتا تھا۔ Java 7 نے ایک نئی قسم کا آپریٹر try-with-resources متعارف کرایا، وسائل کو آزاد کرنے کے لیے try-catch-finally کا ایک اینالاگ ، لیکن زیادہ کمپیکٹ اور پڑھنے کے قابل۔ آئیے یاد رکھیں کہ ٹرائی کیچ آخر میں کیسا لگتا ہے :String text = "some text......";
BufferedWriter bufferedWriter = null;
try {
bufferedWriter = new BufferedWriter(new FileWriter("someFileName"));
bufferedWriter.write(text);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
اب آئیے اس کوڈ کو دوبارہ لکھتے ہیں، لیکن وسائل کے ساتھ کوشش کریں :
String text = "some text......";
try(BufferedWriter bufferedWriter =new BufferedWriter(new FileWriter("someFileName"))) {
bufferedWriter.write(text);
} catch (IOException e) {
e.printStackTrace();
}
یہ کسی طرح آسان ہو گیا ہے، کیا آپ نہیں سوچتے؟ آسان بنانے کے علاوہ، چند نکات ہیں:
-
وسائل کے ساتھ کوشش کرنے میں ، قوسین میں اعلان کردہ وسائل (جو بند ہو جائیں گے) کو لازمی طور پر AutoCloseable انٹرفیس اور اس کا واحد طریقہ، close() کو لاگو کرنا چاہیے ۔
کلوز طریقہ ایک مضمر آخر میں بلاک میں عمل میں لایا جاتا ہے ، بصورت دیگر پروگرام کس طرح سمجھے گا کہ دیئے گئے وسائل کو کیسے بند کیا جائے؟
لیکن، غالباً، آپ وسائل کے اپنے نفاذ اور ان کے اختتامی طریقہ کو شاذ و نادر ہی لکھیں گے۔
-
بلاک پر عمل درآمد کا سلسلہ:
- بلاک کرنے کی کوشش کریں ۔
- مضمر آخر میں ۔
- ایک کیچ بلاک جو پچھلے مراحل میں مستثنیات کو پکڑتا ہے۔
- واضح آخر میں ۔
ایک اصول کے طور پر، فہرست میں جو مستثنیات کم دکھائی دیتے ہیں وہ ان میں رکاوٹ بنتے ہیں جو اوپر دکھائی دیتے ہیں۔
13. بٹ وائز آپریشنز کیا ہیں؟
بٹ وائز آپریشنز بٹ سٹرنگز پر ہونے والے آپریشن ہیں جن میں منطقی آپریشنز اور بٹ وائز شفٹ شامل ہیں۔ منطقی آپریشنز:-
bitwise AND - بٹ ویلیوز کا موازنہ کرتا ہے، اور اس عمل میں، کوئی بھی بٹ 0 (غلط) پر سیٹ کرتا ہے نتیجہ میں متعلقہ بٹ کو 0 کے طور پر سیٹ کرتا ہے۔ یعنی، اگر دونوں اقدار کا موازنہ کیا جائے تو بٹ 1 (سچ) تھا، نتیجہ بھی 1 ہوگا۔
کے طور پر بیان کیا گیا - اور ، اور
مثال: 10111101 اور 01100111 = 00100101
-
bitwise OR پچھلے والے کا الٹا آپریشن ہے۔ 1 پر سیٹ کوئی بھی بٹ نتیجہ میں 1 جیسا ہی بٹ سیٹ کرتا ہے۔ اور اس کے مطابق، اگر بٹ دونوں موازنہ کی قدروں میں 0 تھا، تو نتیجہ میں آنے والا بٹ بھی 0 ہوگا۔
بطور - یا , |
مثال: 10100101 | 01100011 = 11100111
-
bitwise NOT - ایک قدر پر لاگو ہوتا ہے، بٹس کو پلٹتا ہے (الٹا)۔ یعنی وہ بٹس جو 1 تھے 0 ہو جائیں گے۔ اور جو 0 تھے وہ 1 ہو جائیں گے۔
کے طور پر بیان کیا گیا - نہیں ، ~
مثال: ~10100101 = 01011010
bitwise exclusive OR - بٹ ویلیوز کا موازنہ کرتا ہے، اور اگر دونوں قدروں میں بٹ 1 کے برابر ہے، تو نتیجہ 0 ہوگا، اور اگر دونوں قدروں میں بٹ 0 ہے، تو نتیجہ 0 ہوگا۔ یعنی، نتیجہ 1 کے برابر ہونے کے لیے، بٹس میں سے صرف ایک 1 کے برابر ہونا چاہیے، اور دوسرا 0 کے برابر تھا۔ بطور - XOR , ^
مثال: 10100101 ^ 01100011 = 11000110
- 01100011 >> 4 = 00000110
- 01100011 << 3 = 00011000
14. جاوا میں کون سی معیاری غیر تبدیل شدہ کلاسیں آبجیکٹ ہیں؟
ناقابل تغیر ایک ایسی چیز ہے جو اپنے اصل پیرامیٹرز کو تبدیل کرنے کی اجازت نہیں دیتی ہے۔ اس میں ایسے طریقے ہوسکتے ہیں جو کسی مخصوص قسم کی نئی اشیاء کو واپس کرتے ہیں، ان پیرامیٹرز کے ساتھ جنہیں آپ تبدیل کرنا چاہتے ہیں۔ کچھ معیاری غیر متغیر اشیاء:- جاوا میں اب تک سب سے مشہور ناقابل تغیر آبجیکٹ String ہے۔
- ریپر کلاسز کی مثالیں جو معیاری اقسام کو لپیٹتی ہیں: بولین، کریکٹر، بائٹ، شارٹ، انٹیجر، لانگ، ڈبل، فلوٹ؛
- وہ اشیاء جو عام طور پر خاص طور پر بڑی تعداد کے لیے استعمال ہوتی ہیں - BigInteger اور BigDecimal؛
- ایک ایسی چیز جو اسٹیک ٹریس میں اکائی ہے (مثال کے طور پر، ایک استثنائی اسٹیک ٹریس میں) StackTraceElement؛
- فائل کلاس کا آبجیکٹ - فائلوں کو تبدیل کر سکتا ہے، لیکن ایک ہی وقت میں یہ خود ہی ناقابل تغیر ہے۔
- UUID - جو اکثر عناصر کے لیے ایک منفرد شناخت کے طور پر استعمال ہوتا ہے۔
- java.time پیکیج کی تمام کلاس اشیاء؛
- مقامی - جغرافیائی، سیاسی، یا ثقافتی علاقے کی وضاحت کے لیے استعمال کیا جاتا ہے۔
15. ریگولر اشیاء کے مقابلے میں ناقابل تغیر آبجیکٹ کے کیا فائدے ہیں؟
- ایسی اشیاء محفوظ ہوتی ہیں جب کثیر دھاگے والے ماحول میں استعمال ہوتے ہیں ۔ ان کا استعمال کرتے ہوئے، آپ کو دھاگے کی دوڑ کے حالات کی وجہ سے ڈیٹا کھونے کے بارے میں فکر کرنے کی ضرورت نہیں ہے۔ عام اشیاء کے ساتھ کام کرنے کے برعکس: اس معاملے میں، آپ کو بہت احتیاط سے سوچنا ہوگا اور متوازی ماحول میں آبجیکٹ کو استعمال کرنے کے طریقہ کار پر کام کرنا ہوگا۔
- ناقابل تغیر آبجیکٹ نقشے میں اچھی چابیاں ہیں، کیونکہ اگر آپ ایک متغیر آبجیکٹ کا استعمال کرتے ہیں اور پھر آبجیکٹ اپنی حالت کو تبدیل کر لیتا ہے، تو HashMap کا استعمال کنفیوژن کا باعث بن سکتا ہے: آبجیکٹ اب بھی موجود رہے گا، اور اگر آپ استعمال کرتے ہیں containsKey() ، ایسا نہیں ہو سکتا۔ پایا
- ناقابل تغیر اشیاء ناقابل تغیر (مسلسل) ڈیٹا کو ذخیرہ کرنے کے لیے بہترین ہیں جنہیں پروگرام کے چلنے کے دوران کبھی تبدیل نہیں کیا جانا چاہیے۔
- "ایٹمیٹی ٹو ناکامی" - اگر کوئی غیر تبدیل شدہ شے مستثنیٰ ہے، تب بھی وہ ناپسندیدہ (ٹوٹی ہوئی) حالت میں نہیں رہے گی۔
- ان کلاسوں کی جانچ کرنا آسان ہے۔
- اضافی میکانزم جیسے کاپی کنسٹرکٹر اور کلون کے نفاذ کی ضرورت نہیں ہے۔
OOP کے بارے میں سوالات
16. عام طور پر OOP کے کیا فوائد ہیں اور طریقہ کار پروگرامنگ کے مقابلے میں؟
لہذا، OOP کے فوائد:- پیچیدہ ایپلی کیشنز کو پروسیجرل پروگرامنگ کے مقابلے میں لکھنا آسان ہے، کیونکہ ہر چیز کو چھوٹے چھوٹے ماڈیولز میں تقسیم کیا جاتا ہے - وہ اشیاء جو ایک دوسرے کے ساتھ تعامل کرتے ہیں - اور اس کے نتیجے میں، پروگرامنگ اشیاء کے درمیان تعلقات پر آ جاتی ہے۔
- OOP کا استعمال کرتے ہوئے لکھی گئی ایپلی کیشنز میں ترمیم کرنا بہت آسان ہے (جب تک کہ ڈیزائن کے تصورات پر عمل کیا جائے)۔
- چونکہ اس پر موجود ڈیٹا اور آپریشنز ایک ہی ہستی کی تشکیل کرتے ہیں، اس لیے ان کو پوری ایپلی کیشن میں نہیں لگایا جاتا (جو اکثر طریقہ کار پروگرامنگ کے ساتھ ہوتا ہے)۔
- انفارمیشن انکیپسولیشن صارف کے انتہائی اہم ڈیٹا کی حفاظت کرتی ہے۔
- ایک ہی کوڈ کو مختلف ڈیٹا کے ساتھ دوبارہ استعمال کرنا ممکن ہے، کیونکہ کلاسز آپ کو بہت سی اشیاء بنانے کی اجازت دیتی ہیں، جن میں سے ہر ایک کی اپنی الگ الگ قدریں ہیں۔
- وراثت اور پولیمورفزم بھی آپ کو موجودہ کوڈ کو دوبارہ استعمال کرنے اور توسیع دینے کی اجازت دیتا ہے (اسی طرح کی فعالیت کو نقل کرنے کے بجائے)۔
- طریقہ کار کے مقابلے میں آسان درخواست کی توسیع۔
- OOP نقطہ نظر عمل درآمد کی تفصیلات سے خلاصہ کرنا ممکن بناتا ہے۔
17. ہمیں بتائیں کہ OOP میں کیا خامیاں ہیں۔
بدقسمتی سے، وہ بھی موجود ہیں:- OOP کو بہت سارے نظریاتی علم کی ضرورت ہوتی ہے جس میں مہارت حاصل کرنے کی ضرورت ہے اس سے پہلے کہ آپ کچھ بھی لکھ سکیں۔
- OOP کے خیالات کو سمجھنا اور عملی طور پر لاگو کرنا اتنا آسان نہیں ہے (آپ کو دل میں تھوڑا سا فلسفی بننے کی ضرورت ہے)۔
- OOP استعمال کرتے وقت، سسٹم کی زیادہ پیچیدہ تنظیم کی وجہ سے سافٹ ویئر کی کارکردگی قدرے کم ہو جاتی ہے۔
- OOP اپروچ کے لیے زیادہ میموری کی ضرورت ہوتی ہے، کیونکہ ہر چیز کلاسز، انٹرفیس، طریقوں پر مشتمل ہوتی ہے، جو عام متغیرات سے کہیں زیادہ میموری لیتی ہے۔
- ابتدائی تجزیہ کے لیے درکار وقت طریقہ کار کے مقابلے میں زیادہ ہے۔
18. جامد اور متحرک پولیمورفزم کیا ہے؟
پولیمورفزم اشیاء کو ایک ہی کلاس یا انٹرفیس کے لیے مختلف طریقے سے برتاؤ کرنے کی اجازت دیتا ہے۔ پولیمورفزم کی دو قسمیں ہیں، جنہیں ابتدائی اور دیر سے بائنڈنگ بھی کہا جاتا ہے ۔ جامد پولیمورفزم، یا اس سے قبل کا پابند:- مرتب وقت پر ہوتا ہے (پروگرام کے لائف سائیکل کے شروع میں)؛
- فیصلہ کرتا ہے کہ مرتب وقت پر کون سا طریقہ کار انجام دینا ہے۔
- طریقہ اوورلوڈنگ جامد پولیمورفزم کی ایک مثال ہے۔
- ابتدائی بائنڈنگ میں نجی، جامد، اور ٹرمینل طریقے شامل ہیں؛
- وراثت ابتدائی پابندی میں شامل نہیں ہے؛
- جامد پولیمورفزم میں مخصوص اشیاء شامل نہیں ہوتی ہیں، لیکن اس کلاس کے بارے میں معلومات، جس کی قسم متغیر نام کے بائیں طرف ظاہر کی جاتی ہے۔
- رن ٹائم پر ہوتا ہے (جب پروگرام چل رہا ہو)؛
- ڈائنامک پولیمورفزم فیصلہ کرتا ہے کہ رن ٹائم کے وقت طریقہ کار پر کیا مخصوص عمل درآمد ہوگا۔
- طریقہ اوور رائیڈنگ ڈائنامک پولیمورفزم کی ایک مثال ہے۔
- لیٹ بائنڈنگ کسی مخصوص شے کی تفویض، اس کی قسم کا حوالہ، یا اس کی سپر کلاس ہے۔
- وراثت کا تعلق متحرک پولیمورفزم سے ہے۔
GO TO FULL VERSION