JavaRush /جاوا بلاگ /Random-SD /مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب. حصو 1

مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب. حصو 1

گروپ ۾ شايع ٿيل
هيلو سڀني کي، خواتين ۽ حضرات سافٽ ويئر انجنيئرز! اچو ته انٽرويو سوالن بابت ڳالهايو. انهي بابت جيڪو توهان کي تيار ڪرڻ جي ضرورت آهي ۽ توهان کي ڄاڻڻ جي ضرورت آهي. اھو ھڪڙو بھترين سبب آھي انھن پوائنٽن کي ورجائڻ يا پڙھڻ لاءِ شروع کان. مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب.  حصو 1 - 1مون وٽ او او پي، جاوا سنٽيڪس، جاوا ۾ استثنا، مجموعن ۽ ملٽي ٿريڊنگ بابت اڪثر پڇيا ويندڙ سوالن جو ڪافي وسيع مجموعو آهي، جنهن کي سهولت لاءِ مان ڪيترن حصن ۾ ورهائيندس. اهم:اسان صرف 8 تائين جاوا ورزن جي باري ۾ ڳالهائينداسين. 9، 10، 11، 12، 13 جي سڀني جدت کي هتي حساب ۾ نه رکيو ويندو. جوابن کي بهتر ڪرڻ بابت ڪي به خيال/تبصرا ڀليڪار آهن . خوش پڙهڻ، اچو ته وڃو!

جاوا انٽرويو: OOP سوال

1. جاوا ۾ ڪهڙيون خاصيتون آهن؟

جواب:
  1. OOP تصورات:

    1. اعتراض جو رخ؛
    2. وراثت؛
    3. encapsulation؛
    4. پوليمورفيزم؛
    5. خلاصو.
  2. ڪراس پليٽ فارم: هڪ جاوا پروگرام ڪنهن به پليٽ فارم تي بغير ڪنهن ترميم جي هلائي سگهجي ٿو. صرف هڪ شيء جيڪا توهان جي ضرورت آهي هڪ نصب ٿيل JVM (جاوا ورچوئل مشين).

  3. اعلي ڪارڪردگي: JIT (جسٽ ان ٽائيم ڪمپلر) اعلي ڪارڪردگي جي اجازت ڏئي ٿي. JIT بائيٽ ڪوڊ کي مشين ڪوڊ ۾ تبديل ڪري ٿو ۽ پوء JVM عمل شروع ٿئي ٿو.

  4. ملٽي ٿريڊنگ: عمل جو هڪ سلسلو، جنهن کي Thread. JVM هڪ موضوع ٺاهي ٿو جنهن کي سڏيو ويندو آهي main thread. هڪ پروگرامر ٿريڊ ڪلاس مان ورثي ۾ يا هڪ انٽرفيس کي لاڳو ڪندي ڪيترن ئي موضوعن کي ٺاهي سگھي ٿو Runnable.

2. وراثت ڇا آهي؟

وراثت جو مطلب آھي ھڪڙو طبقو وارث ٿي سگھي ٿو (“ وڌائي ”) ٻئي طبقي. هن طريقي سان توهان ڪلاس مان ڪوڊ ٻيهر استعمال ڪري سگهو ٿا جنهن مان توهان ورثي ۾ آهيو. موجوده طبقي کي سڃاتو وڃي ٿو superclass، ۽ جيڪو پيدا ڪيو وڃي ٿو ان کي سڃاتو وڃي ٿو subclass. اهي پڻ چوندا آهن parent۽ child.
public class Animal {
   private int age;
}

public class Dog extends Animal {

}
ڪٿي Animalآهي parent، ۽ Dog- child.

3. encapsulation ڇا آهي؟

اهو سوال اڪثر جاوا ڊولپر جي انٽرويو دوران اچي ٿو. Encapsulation عمل کي لڪائي رهيو آهي رسائي جي تبديلين کي استعمال ڪندي، گيٽرز ۽ سيٽرز استعمال ڪندي. اهو ڪيو ويو آهي ٻاهرين استعمال جي رسائي کي بند ڪرڻ لاءِ انهن هنڌن تي جتي ڊولپرز اهو ضروري سمجهن ٿا. زندگي مان هڪ قابل رسائي مثال هڪ ڪار آهي. اسان کي انجڻ جي آپريشن تائين سڌو رسائي نه آهي. اسان لاءِ، ڪم اهو آهي ته چاٻي کي انجڻ ۾ رکڻ ۽ انجڻ کي چالو ڪرڻ. ۽ هيڊ هيٺ ڪهڙو عمل ٿيندو اهو اسان جو ڪو به ڪاروبار ناهي. ان کان علاوه، هن سرگرمي ۾ اسان جي مداخلت هڪ غير متوقع صورتحال پيدا ڪري سگهي ٿي، جنهن جي ڪري اسان ڪار کي ٽوڙي سگهون ٿا ۽ پنهنجو پاڻ کي نقصان پهچائي سگهون ٿا. بلڪل ائين ئي پروگرامنگ ۾ ٿئي ٿو. وڪيپيڊيا تي چڱي طرح بيان ڪيو ويو آهي . JavaRush تي encapsulation بابت پڻ ھڪڙو مضمون آھي .

4. پوليمورفيزم ڇا آهي؟

پوليمورفيزم (Polymorphism) ھڪ پروگرام جي صلاحيت آھي جنھن کي ھڪڙي ئي انٽرفيس سان استعمال ڪري سگھن ٿا، بغير ڪنھن شئي جي مخصوص قسم جي ڄاڻ جي. جيئن ته چوندا آهن، هڪ انٽرفيس - ڪيترن ئي عملدرآمد. پوليمورفيزم سان، توهان مختلف قسمن جي شين کي گڏ ڪري سگهو ٿا ۽ استعمال ڪري سگهو ٿا انهن جي عام رويي جي بنياد تي. مثال طور، اسان وٽ ھڪڙو طبقو جانور آھي، جنھن جا ٻه اولاد آھن - ڪتو ۽ ٻلي. عام جانورن جي طبقي سڀني لاءِ هڪ عام رويو آهي - هڪ آواز ٺاهيو. ان صورت ۾ جڏهن اسان کي جانورن جي طبقي جي سڀني نسلن کي گڏ ڪرڻ جي ضرورت آهي ۽ "آواز ٺاهيو" طريقي سان عمل ڪرڻ گهرجي، اسان پوليمورفيزم جي امڪانن کي استعمال ڪندا آهيون. اھو اھو آھي جيڪو اھو نظر ايندو:
List<Animal> animals = Arrays.asList(new Cat(), new Dog(), new Cat());
animals.forEach(animal -> animal.makeSound());
تنهنڪري پوليمورفيزم اسان جي مدد ڪري ٿي. ان کان علاوه، اهو پڻ لاڳو ٿئي ٿو پوليمورفڪ (اوور لوڊ ٿيل) طريقن تي. پوليمورفيزم استعمال ڪرڻ جي مشق

انٽرويو سوال - جاوا نحو

5. جاوا ۾ هڪ تعمير ڪندڙ ڇا آهي؟

هيٺيون خاصيتون صحيح آهن:
  1. جڏهن هڪ نئين شئي ٺاهي وئي آهي، پروگرام ائين ڪرڻ لاء مناسب تعمير ڪندڙ استعمال ڪندو آهي.
  2. ھڪڙي ٺاھيندڙ ھڪڙي طريقي وانگر آھي. ان جي خاصيت اها آهي ته ڪو به واپسي عنصر نه آهي (بشمول باطل)، ۽ ان جو نالو ڪلاس جي نالي سان ساڳيو آهي.
  3. جيڪڏهن ڪو تعمير ڪندڙ واضح طور تي نه لکيو ويو آهي، هڪ خالي تعمير ڪندڙ خودڪار طور تي ٺاهي ويندي.
  4. تعمير ڪندڙ کي ختم ڪري سگھجي ٿو.
  5. جيڪڏھن ھڪڙو ٺاھيندڙ ٺاھيو ويو آھي پيرا ميٽرن سان، پر اھو پڻ ضروري آھي بغير پيٽرولر جي، اھو لازمي طور تي لکيو وڃي، ڇاڪاڻ⁠تہ اھو خودڪار طور تي ٺاھيو ويو آھي.

6. ڪهڙن ٻن طبقن کي Object مان ورثي ۾ نٿو ملي؟

اشتعال کان بيوقوف نه ٿيو، اهڙا ڪي به طبقا نه آهن: سڀئي طبقا سڌو سنئون يا ابن ڏاڏن جي ذريعي آبجیکٹ طبقي مان ورثي ۾ آهن!

7. مقامي متغير ڇا آهي؟

جاوا ڊولپر انٽرويو دوران هڪ ٻيو مشهور سوال. مقامي متغير ھڪڙو متغير آھي جيڪو ھڪڙي طريقي جي اندر بيان ڪيو ويو آھي ۽ موجود آھي ان وقت تائين جيستائين طريقي سان عمل ڪيو وڃي. هڪ دفعو تي عملدرآمد ختم ٿي ويندو، مقامي متغير موجود ٿيڻ بند ٿي ويندو. ھتي ھڪڙو پروگرام آھي جيڪو استعمال ڪري ٿو helloMessage local variable main() طريقي ۾:
public static void main(String[] args) {
   String helloMessage;
   helloMessage = "Hello, World!";
   System.out.println(helloMessage);
}

8. Instance Variable ڇا آھي؟

Instance Variable ھڪڙو متغير آھي جيڪو ھڪڙي طبقي جي اندر بيان ڪيو ويو آھي، ۽ اھو موجود آھي ان وقت تائين جيستائين اعتراض موجود آھي. ھڪڙو مثال آھي بي ڪلاس، جنھن ۾ ٻه متغير آھن nectarCapacity ۽ maxNectarCapacity:
public class Bee {

   /**
    * Current nectar capacity
    */
   private double nectarCapacity;

   /**
    * Maximal nectar that can take bee.
    */
   private double maxNectarCapacity = 20.0;

  ...
}

9. رسائي تبديل ڪندڙ ڇا آهن؟

Access modifiers هڪ اوزار آهي جيڪو توهان کي ڪلاس، طريقن، ۽ متغيرن تائين رسائي کي ترتيب ڏيڻ جي اجازت ڏئي ٿو. ھيٺ ڏنل تبديليون آھن، ترتيب ڏيڻ جي ترتيب ۾ رسائي وڌائڻ لاء:
  1. private- طريقن، شعبن ۽ تعمير ڪندڙن لاء استعمال ڪيو. رسائي جي سطح صرف اهو طبقو آهي جنهن ۾ اهو اعلان ڪيو ويو آهي.
  2. package-private(default)- ڪلاس لاء استعمال ڪري سگهجي ٿو. رسائي صرف هڪ مخصوص پيڪيج ۾ جنهن ۾ هڪ طبقي، طريقو، متغير، تعمير ڪندڙ قرار ڏنو ويو آهي.
  3. protected- ساڳي پهچ جيئن package-private+ انهن طبقن لاءِ جيڪي ورثي ۾ ورثي ۾ ورثي ۾ ورثي واري طبقي سان protected.
  4. public- ڪلاسن لاءِ پڻ استعمال ڪيو ويو. پوري ايپليڪيشن ۾ مڪمل رسائي.
  5. مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب.  حصو 1 - 2

10. اوور رائڊنگ طريقا ڇا آهن؟

طريقه اوور رائڊنگ تڏهن ٿيندي آهي جڏهن ٻار چاهي ٿو ته والدين طبقي جي رويي کي تبديل ڪري. جيڪڏھن توھان چاھيو ٿا ته والدين جي طريقي ۾ ڇا آھي تي عمل ڪيو وڃي، توھان استعمال ڪري سگھو ٿا ھڪڙي تعمير جھڙوڪ super.methodName() ٻار ۾، جيڪو ڪم ڪندو والدين جي طريقي سان، ۽ صرف پوء منطق شامل ڪريو. گهرجون پوريون ڪيون وڃن:
  • طريقو دستخط ساڳيو هجڻ گهرجي؛
  • واپسي جو قدر ساڳيو هجڻ گهرجي.

11. هڪ طريقو دستخط ڇا آهي؟

مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب.  حصو 1 - 3هڪ طريقو دستخط طريقو جي نالي ۽ دليلن جو هڪ سيٽ آهي جيڪو طريقو قبول ڪري ٿو. هڪ طريقو دستخط هڪ طريقو لاء هڪ منفرد سڃاڻپ ڪندڙ آهي جڏهن طريقن کي اوور لوڊ ڪندي.

12. اوور لوڊ ڪرڻ جو طريقو ڇا آهي؟

طريقو اوور لوڊ ڪرڻ پوليمورفيزم جي هڪ ملڪيت آهي جنهن ۾ طريقي جي دستخط کي تبديل ڪندي، توهان ساڳئي عملن لاءِ مختلف طريقا ٺاهي سگهو ٿا:
  • ساڳئي طريقي جو نالو؛
  • مختلف دليل؛
  • ٿي سگهي ٿو هڪ مختلف قسم جي واپسي.
مثال طور، ساڳيو add()ئي ArrayListاوورلوڊ ٿي سگھي ٿو ھيٺئين طور ۽ اضافي کي مختلف طريقي سان انجام ڏيندو، ايندڙ دليلن تي منحصر ڪري ٿو:
  • add(Object o)- صرف هڪ اعتراض شامل ڪري ٿو؛
  • add(int index, Object o)- هڪ خاص انڊيڪس ۾ اعتراض شامل ڪري ٿو؛
  • add(Collection<Object> c)- شين جي هڪ فهرست شامل ڪري ٿو؛
  • add(int index, Collection<Object> c)- ھڪڙي خاص انڊيڪس کان شروع ٿيندڙ شين جي ھڪڙي فهرست شامل ڪري ٿو.

13. انٽرفيس ڇا آهي؟

جاوا ۾ گھڻن وراثت تي عمل نه ڪيو ويو آھي، تنھنڪري ھن مسئلي کي ختم ڪرڻ لاء، انٽرفيس جيئن اسان ڄاڻون ٿا انھن کي شامل ڪيو ويو آھي ؛) ڊگھي وقت تائين، انٽرفيس صرف طريقا آھن انھن کي لاڳو ڪرڻ کان سواءِ. هن جواب جي حصي طور، اسان انهن بابت ڳالهائينداسين. مثال طور:

public interface Animal {
   void makeSound();
   void eat();
   void sleep();
}
هن مان ڪجهه nuances پٺيان آهن:
  • انٽرفيس ۾ سڀ طريقا عوامي ۽ خلاصا آهن؛
  • سڀئي متغير عوامي جامد فائنل آهن؛
  • طبقن انهن کي ورثي ۾ نه ٿا ڏين (وڌايو)، پر انهن کي لاڳو ڪن ٿا. ان کان علاوه، توھان لاڳو ڪري سگھوٿا گھڻن انٽرفيس کي جيئن توھان چاھيو.
  • ڪلاس جيڪي هڪ انٽرفيس کي لاڳو ڪن ٿا انهن کي لازمي طور تي انهن سڀني طريقن تي عمل درآمد مهيا ڪرڻ گهرجي جيڪي انٽرفيس وٽ آهن.
هن وانگر:
public class Cat implements Animal {
   public void makeSound() {
       // method implementation
   }

   public void eat() {
       // implementation
   }

   public void sleep() {
       // implementation
   }
}

14. انٽرفيس ۾ ڊفالٽ طريقو ڇا آهي؟

هاڻي اچو ته ڊفالٽ طريقن بابت ڳالهايون. ڇا لاءِ، ڪنهن لاءِ؟ اهي طريقا شامل ڪيا ويا ته هر شي کي "توهان جو ۽ اسان جو." مان ڪهڙي ڳالهه ڪري رهيو آهيان؟ ها، هڪ طرف، نئين ڪارڪردگي شامل ڪرڻ ضروري هئي: lambdas، اسٽريم API، ٻئي طرف، اهو ضروري هو ته جاوا لاء مشهور آهي - پسمانده مطابقت. هن کي ڪرڻ لاء، ان کي انٽرفيس ۾ تيار ٿيل حل متعارف ڪرائڻ ضروري هو. هي ڪيئن ڊفالٽ طريقا اسان وٽ آيا. اھو آھي، ڊفالٽ طريقو ھڪڙو لاڳو ڪيل طريقو آھي انٽرفيس ۾ جنھن ۾ لفظ آھي default. stream()مثال طور، ۾ مشهور طريقو Collection. ان کي چيڪ ڪريو، هي انٽرفيس ايترو سادو ناهي جيترو اهو لڳي ٿو؛). يا پڻ هڪ جيتري معروف طريقو forEach()مان Iterable. اهو پڻ موجود نه هو جيستائين ڊفالٽ طريقا شامل ڪيا ويا. رستي جي ذريعي، توهان هن بابت پڻ پڙهي سگهو ٿا JavaRush .

15. پوءِ ڪيئن ٻه هڪجهڙا ڊفالٽ طريقا ورثي ۾ ملن؟

اڳئين جواب جي بنياد تي ڇا ڊفالٽ طريقو آهي، توهان هڪ ٻيو سوال پڇي سگهو ٿا. جيڪڏهن توهان انٽرفيس ۾ طريقا لاڳو ڪري سگهو ٿا، پوء نظرياتي طور تي توهان ساڳئي طريقي سان ٻه انٽرفيس لاڳو ڪري سگهو ٿا، ۽ اهو ڪيئن ڪجي؟ ساڳئي طريقي سان ٻه مختلف انٽرفيس آهن:
interface A {
   default void foo() {
       System.out.println("Foo A");
   }
}

interface B {
   default void foo() {
       System.out.println("Foo B");
   }
}
۽ ھڪڙو طبقو آھي جيڪو انھن ٻن انٽرفيس کي لاڳو ڪري ٿو. غير يقيني صورتحال کان بچڻ لاءِ ۽ ڪوڊ گڏ ڪرڻ لاءِ، اسان کي foo()ڪلاس ۾ طريقي کي اوور رائڊ ڪرڻ جي ضرورت آهي، ۽ اسان صرف ان ۾ ڪنهن به انٽرفيس جي Cطريقي کي سڏي سگهون ٿا - يا . پر صرف هڪ مخصوص انٽرفيس جو طريقو ڪيئن چونڊيو يا ؟ ھن لاء ھڪڙي جوڙجڪ آھي : foo()ABАВA.super.foo()
public class C implements A, B {
   @Override
   public void foo() {
       A.super.foo();
   }
}
يا:
public class C implements A, B {
   @Override
   public void foo() {
       B.super.foo();
   }
}
اهڙيء طرح، هڪ foo()طبقي جو طريقو يا ته انٽرفيس مان Cڊفالٽ طريقو يا انٽرفيس مان هڪ طريقو استعمال ڪندو . foo()Afoo()B

16. تجريدي طريقا ۽ ڪلاس ڇا آهن؟

جاوا وٽ هڪ محفوظ لفظ آهي abstractجيڪو استعمال ڪيو ويندو آهي خلاصو طبقن ۽ طريقن کي ظاهر ڪرڻ لاءِ. پهرين، ڪجهه تعريفون. هڪ تجريدي طريقو هڪ طريقو آهي جيڪو abstractهڪ تجريدي ڪلاس ۾ هڪ لفظ سان عمل ڪرڻ کان سواء ٺاهيل آهي. اهو آهي، اهو هڪ طريقو آهي جهڙوڪ انٽرفيس ۾، صرف هڪ لفظ جي اضافي سان، مثال طور:
public abstract void foo();
هڪ خلاصو طبقو هڪ طبقو آهي جنهن ۾ پڻ abstractلفظ آهي:
public abstract class A {

}
هڪ خلاصو ڪلاس ۾ ڪيترائي خاصيتون آهن:
  • ڪا شئي ان جي بنياد تي پيدا نه ٿي ڪري سگھجي.
  • ان جا تجريدي طريقا ٿي سگهن ٿا؛
  • ٿي سگهي ٿو ته ان ۾ تجريدي طريقا نه هجن.
تجريدي طبقن کي ڪنهن قسم جي تجريد (معاف ڪجو) کي عام ڪرڻ لاءِ ضروري آهي، جيڪو حقيقي زندگيءَ ۾ موجود ناهي، پر ان ۾ ڪيترائي عام رويا ۽ حالتون (يعني طريقا ۽ متغيرات) شامل آهن. زندگيءَ مان ڪافي مثال آهن. هر شي اسان جي چوڌاري آهي. اهو ٿي سگهي ٿو "جانور"، "ڪار"، "جاميٽري شڪل" وغيره.

17. String، String Builder ۽ String Buffer ۾ ڇا فرق آھي؟

قيمتون Stringهڪ مستقل اسٽرنگ پول ۾ محفوظ ٿيل آهن. هڪ دفعو هڪ قطار ٺاهي وئي آهي، اهو هن تلاء ۾ ظاهر ٿيندو. ۽ ان کي ختم ڪرڻ ممڪن نه ٿيندو. مثال طور:
String name = "book";
... The variable جو حوالو ڏيندو string pool Constant string pool مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب.  حصو 1 - 4 جيڪڏھن توھان متغير جو نالو مختلف قدر تي مقرر ڪيو، توھان ھيٺ ڏنل حاصل ڪندا:
name = "pen";
Constant string pool مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب.  حصو 1 - 5پوءِ اهي ٻئي قدر اتي ئي رهندا. اسٽرنگ بفر:
  • قدر Stringاسٽيڪ تي محفوظ ٿيل آهن. جيڪڏهن قدر بدلجي وڃي ته پوءِ نئين قيمت پراڻي سان مٽائي ويندي؛
  • String Bufferهم وقت سازي ۽ تنهن ڪري ڌاڳو محفوظ؛
  • سلسلي جي حفاظت جي ڪري، آپريشن جي رفتار گهڻو ڪري ڇڏي ٿو گهربل هجي.
مثال:
StringBuffer name = "book";
مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب.  حصو 1 - 6جيئن ئي نالي جي قيمت تبديل ٿيندي، اسٽيڪ تي قيمت تبديل ٿي ويندي آهي: مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب.  حصو 1 - 7StringBuilder بلڪل ساڳي طرح StringBuffer، صرف اهو موضوع محفوظ ناهي. تنهن ڪري، ان جي رفتار واضح طور تي ان کان وڌيڪ آهي StringBuffer.

18. هڪ خلاصي طبقي ۽ انٽرفيس جي وچ ۾ ڇا فرق آهي؟

خلاصو طبقو:
  • تجريدي طبقن ۾ هڪ ڊفالٽ تعمير ڪندڙ آهي؛ اهو هر وقت سڏيو ويندو آهي جڏهن هن تجريدي طبقي جو ٻار پيدا ٿئي ٿو.
  • خلاصي ۽ غير تجريدي طريقن تي مشتمل آهي. عام طور تي، اهو شايد تجريدي طريقن تي مشتمل نه هجي، پر تڏهن به هڪ خلاصو طبقو هجي؛
  • ھڪڙو طبقو جيڪو ھڪڙي خلاصي مان ورثي ۾ ملي ٿو، ھڪڙي کي صرف تجريدي طريقن تي عمل ڪرڻ گھرجي؛
  • هڪ خلاصو طبقو هڪ مثالي متغير تي مشتمل ٿي سگهي ٿو (سوال نمبر 5 ڏسو).
انٽرفيس:
  • ڪو به تعمير ڪندڙ نه آهي ۽ شروعات نه ٿي ڪري سگھجي؛
  • صرف تجريدي طريقا شامل ڪيا وڃن (ڊفالٽ طريقن کي ڳڻڻ نه)؛
  • ڪلاس جيڪي هڪ انٽرفيس کي لاڳو ڪن ٿا انهن کي لازمي طور تي سڀني طريقن کي لاڳو ڪرڻ گهرجي (ڊفالٽ طريقن کي ڳڻڻ نه)؛
  • انٽرفيس صرف مستقل تي مشتمل ٿي سگھي ٿو.

19. ايري ۾ ڪنهن عنصر تائين رسائي O(1) ڇو وٺندي آهي؟

اهو سوال لفظي طور تي آخري انٽرويو کان آهي. جيئن ته مون بعد ۾ سکيو، اهو سوال پڇيو ويو آهي ڏسڻ لاء ته هڪ ماڻهو ڪيئن سوچي ٿو. اهو واضح آهي ته هن علم ۾ ٿورو عملي معني آهي: صرف هن حقيقت کي ڄاڻڻ ڪافي آهي. پهرين، اسان کي واضح ڪرڻ جي ضرورت آهي ته O(1) هڪ الگورٿم جي وقت جي پيچيدگي لاء هڪ نامزدگي آهي جڏهن آپريشن مسلسل وقت ۾ ٿئي ٿي. اهو آهي، هي نامزدگي تيز ترين عمل آهي. هن سوال جو جواب ڏيڻ لاء، اسان کي سمجهڻ جي ضرورت آهي ته اسان arrays بابت ڇا ڄاڻون ٿا؟ هڪ صف ٺاهڻ لاء int، اسان کي هيٺين لکڻ گهرجي:
int[] intArray = new int[100];
هن رڪارڊنگ مان ڪيترائي نتيجا ڪڍي سگهجن ٿا:
  1. ايري ٺاهڻ وقت ان جو قسم معلوم ٿئي ٿو.جيڪڏهن قسم معلوم ٿئي ٿو ته پوءِ اهو واضح ٿئي ٿو ته صف جي هر سيل جي سائيز ڪهڙي هوندي.
  2. اهو معلوم ٿئي ٿو ته صف جي سائيز ڪهڙي هوندي.
اھو ھن مان ھيٺ آھي: سمجھڻ لاءِ ڪھڙي سيل ڏانھن لکڻ لاءِ، توھان کي صرف ڳڻڻ جي ضرورت آھي ڪھڙي ميموري واري علائقي کي لکڻو آھي. هڪ ڪار لاء اهو آسان نه ٿي سگهي. مشين کي مختص ڪيل ياداشت جي شروعات، ڪيترن ئي عناصر، ۽ ھڪڙي سيل جي سائيز آھي. ان مان اهو واضح ٿئي ٿو ته رڪارڊنگ اسپيس ايري جي شروعاتي جڳهه جي برابر هوندي + سيل جي سائيز کي ان جي سائيز سان ضرب ڪيو ويندو.

توهان ڪيئن حاصل ڪندا O(1) هڪ ArrayList ۾ شيون تائين رسائي ۾؟

اهو سوال فوري طور تي پوئين هڪ جي پٺيان آهي. اهو سچ آهي ته جڏهن اسان هڪ صف سان ڪم ڪريون ٿا ۽ اُتي پرائميٽس موجود آهن، ته اسان اڳ ۾ ئي ڄاڻون ٿا ته هن قسم جي سائيز ڪهڙي هوندي آهي جڏهن اها ٺاهي ويندي آهي. پر ڇا ٿيندو جيڪڏهن اسان وٽ هڪ اسڪيم آهي جيئن تصوير ۾ آهي: مٿيان 50 جاوا ڪور انٽرويو سوال ۽ جواب.  حصو 1 - 8۽ اسان قسم A جي عناصرن سان گڏ هڪ مجموعو ٺاهڻ چاهيون ٿا، ۽ مختلف عملن کي شامل ڪرڻ چاهيون ٿا - B، C، D:
List<A> list = new ArrayList();
list.add(new B());
list.add(new C());
list.add(new D());
list.add(new B());
هن صورتحال ۾، توهان ڪيئن سمجهي سگهو ٿا ته هر سيل جي سائيز ڪهڙي هوندي، ڇاڪاڻ ته هر شئي مختلف هوندي ۽ ٿي سگهي ٿي مختلف اضافي فيلڊ (يا مڪمل طور تي مختلف). ڇا ڪجي؟ هتي سوال اهڙي انداز ۾ پيش ڪيو ويو آهي جيئن مونجهارو ۽ مونجهارو هجي. اسان ڄاڻون ٿا ته حقيقت ۾، مجموعو شيون ذخيرو نٿو ڪري، پر صرف انهن شين سان ڳنڍيل آهي. ۽ سڀئي لنڪس ساڳيا سائيز آهن، ۽ اهو معلوم ٿئي ٿو. تنهن ڪري هتي ڳڻپ واري جاءِ ساڳيءَ طرح ڪم ڪري ٿي جيئن پوئين سوال ۾.

21. آٽو باڪسنگ ۽ انباڪسنگ

تاريخي پس منظر: آٽو باڪسنگ ۽ آٽو ان باڪسنگ JDK 5 جي مکيه جدت مان هڪ آهي. آٽو باڪسنگ هڪ ابتدائي قسم کان مناسب ريپر ڪلاس ۾ خودڪار تبديليءَ جو عمل آهي. آٽو-ان باڪسنگ - آٽو باڪسنگ جي بلڪل ابتڙ ڪندو آھي - ھڪڙي ريپر ڪلاس کي ابتدائي ۾ تبديل ڪري ٿو. پر جيڪڏهن هڪ لفافي قيمت آهي null، ته پوء هڪ استثنا ان پيڪنگ دوران اڇلائي ويندي NullPointerException.

ملائڻ وارو پريم- چادر

ابتدائي ڪپڙا ڪلاس
بولين بوليان
int عدد
بائيٽ بائيٽ
چار ڪردار
فلوٽ فلوٽ
ڊگهو ڊگھو
مختصر ننڍو
ٻيڻو ٻيڻو

خودڪار پيڪنگ ٿيندي آهي:

  • جڏهن هڪ ابتدائي تفويض ڪندي ريپر ڪلاس جو حوالو:

    جاوا 5 کان اڳ:

    //manual packaging or how it was BEFORE Java 5.
    public void boxingBeforeJava5() {
       Boolean booleanBox = new Boolean(true);
       Integer intBox = new Integer(3);
       // and so on to other types
    }
    
    после Java 5:
    //automatic packaging or how it became in Java 5.
    public void boxingJava5() {
       Boolean booleanBox = true;
       Integer intBox = 3;
       // and so on to other types
    }
  • جڏهن هڪ ابتدائي طريقي سان هڪ دليل جي طور تي گذري ٿو جيڪو هڪ لفافي جي توقع رکي ٿو:

    public void exampleOfAutoboxing() {
       long age = 3;
       setAge(age);
    }
    
    public void setAge(Long age) {
       this.age = age;
    }

خودڪار انپيڪنگ ٿيندي آهي:

  • جڏهن اسان ريپر ڪلاس کي هڪ پرائمري متغير تفويض ڪريون ٿا:

    //before Java 5:
    int intValue = new Integer(4).intValue();
    double doubleValue = new Double(2.3).doubleValue();
    char c = new Character((char) 3).charValue();
    boolean b = Boolean.TRUE.booleanValue();
    
    //and after JDK 5:
    int intValue = new Integer(4);
    double doubleValue = new Double(2.3);
    char c = new Character((char) 3);
    boolean b = Boolean.TRUE;
  • رياضياتي آپريشن سان ڪيسن ۾. اهي صرف ابتدائي قسمن تي لاڳو ٿين ٿا؛ ان لاءِ توهان کي ڪرڻ جي ضرورت آهي پراڻين کي پيڪنگ ڪرڻ.

    // Before Java 5
    Integer integerBox1 = new Integer(1);
    Integer integerBox2 = new Integer(2);
    
    // for comparison it was necessary to do this:
    integerBox1.intValue() > integerBox2.intValue()
    
    //в Java 5
    integerBox1 > integerBox2
  • جڏهن هڪ طريقي سان لفافي ڏانهن منتقل ڪيو ويو آهي جيڪو لاڳاپيل ابتدائي قبول ڪري ٿو:

    public void exampleOfAutoboxing() {
       Long age = new Long(3);
       setAge(age);
    }
    
    public void setAge(long age) {
       this.age = age;
    }

22. آخري لفظ ڇا آهي ۽ ان کي ڪٿي استعمال ڪجي؟

لفظ finalمتغير، طريقن ۽ طبقن لاءِ استعمال ٿي سگھي ٿو.
  1. هڪ فائنل متغير ڪنهن ٻئي اعتراض کي ٻيهر نه ٿو ڏئي سگهجي.
  2. فائنل طبقو جراثيم کان پاڪ آهي)) ان جو وارث نه ٿي سگهي.
  3. آخري طريقو ڪنهن به ڏاڏي تي رد نه ٿو ڪري سگهجي.
اسان مٿي کي ڍڪي ڇڏيو آهي، هاڻي اچو ته ان تي وڌيڪ تفصيل سان بحث ڪريو.

آخري متغير

جاوا اسان کي ٻه طريقا ڏئي ٿو هڪ متغير ٺاهڻ ۽ ان کي ڪجهه قدر تفويض ڪرڻ لاء:
  1. توهان هڪ متغير جو اعلان ڪري سگهو ٿا ۽ ان کي بعد ۾ شروع ڪري سگهو ٿا.
  2. توهان هڪ متغير جو اعلان ڪري سگهو ٿا ۽ ان کي فوري طور تي تفويض ڪري سگهو ٿا.
مثال طور انهن ڪيسن لاء حتمي متغير استعمال ڪندي:
public class FinalExample {

   //final static variable, which is immediately initialized:
   final static String FINAL_EXAMPLE_NAME = "I'm likely final one";

   //final is a variable that is not initialized, but will only work if
   //initialize this in the constructor:
   final long creationTime;

   public FinalExample() {
       this.creationTime = System.currentTimeMillis();
   }

   public static void main(String[] args) {
       FinalExample finalExample = new FinalExample();
       System.out.println(finalExample.creationTime);

       // final field FinalExample.FINAL_EXAMPLE_NAME cannot be assigned
//    FinalExample.FINAL_EXAMPLE_NAME = "Not you're not!";

       // final field Config.creationTime cannot be assigned
//    finalExample.creationTime = 1L;
   }
}

ڇا فائنل متغير کي مسلسل سمجهي سگهجي ٿو؟

جيئن ته اسان حتمي متغير کي نئين قيمت تفويض ڪرڻ جي قابل نه هوندا، اهو ظاهر ٿئي ٿو ته اهي مسلسل متغير آهن. پر اهو صرف پهرين نظر ۾ آهي. جيڪڏهن ڊيٽا جو قسم متغير ڏانهن اشارو آهي immutable، پوء ها، اهو هڪ مستقل آهي. پر جيڪڏهن ڊيٽا جو قسم mutableميوٽيڪل آهي، طريقن ۽ متغيرن کي استعمال ڪندي، اهو ممڪن ٿيندو ته اعتراض جي قيمت کي تبديل ڪرڻ، جنهن ڏانهن finalمتغير ڏانهن اشارو آهي، ۽ انهي صورت ۾ ان کي مستقل نه ٿو چئي سگهجي. تنهن ڪري، مثال ڏيکاري ٿو ته ڪجهه حتمي متغير حقيقت ۾ مستقل آهن، پر ڪجهه نه آهن، ۽ انهن کي تبديل ڪري سگهجي ٿو.
public class FinalExample {

   //immutable final variables:
   final static String FINAL_EXAMPLE_NAME = "I'm likely final one";
   final static Integer FINAL_EXAMPLE_COUNT  = 10;

   // mutable filter variables
   final List<String> addresses = new ArrayList();
   final StringBuilder finalStringBuilder = new StringBuilder("constant?");
}

مقامي فائنل متغير

جڏهن finalهڪ variable هڪ طريقي جي اندر ٺاهي وئي آهي، ان کي local finalهڪ متغير سڏيو ويندو آهي:
public class FinalExample {

   public static void main(String[] args) {
       // This is how you can
       final int minAgeForDriveCar = 18;

       // or you can do it this way, in the foreach loop:
       for (final String arg : args) {
           System.out.println(arg);
       }
   }

}
اسان لفظ کي finalوڌايل لوپ ۾ استعمال ڪري سگھون ٿا forڇاڪاڻ ته لوپ جي ٻيهر عمل کي مڪمل ڪرڻ کان پوء، forهر دفعي هڪ نئون متغير ٺاهيو ويندو آهي. پر اهو لوپ لاءِ عام تي لاڳو نٿو ٿئي، تنهنڪري هيٺ ڏنل ڪوڊ هڪ مرتب وقت جي غلطي اڇلائي ڇڏيندو.
// final local changed j cannot be assigned
for (final int i = 0; i < args.length; i ++) {
   System.out.println(args[i]);
}

فائنل ڪلاس

توهان هڪ ڪلاس کي وڌائي نٿا سگهو جيئن اعلان ڪيو ويو آهي final. آسان لفظ ۾، ڪو به طبقو ان کان وراثت ۾ نٿو اچي. finalJDK ۾ هڪ طبقي جو هڪ وڏو مثال آهي String. هڪ ناقابل قابل ڪلاس ٺاهڻ لاء پهريون قدم ان کي نشان لڳائڻ آهي final، انهي ڪري ته ان کي وڌايو نه ٿو سگهجي:
public final class FinalExample {
}

// Compilation error here
class WantsToInheritFinalClass extends FinalExample {
}

آخري طريقا

جڏهن هڪ طريقو حتمي طور تي نشان لڳايو ويو آهي، ان کي آخري طريقو سڏيو ويندو آهي (منطقي، صحيح؟). آخري طريقو نسل پرست طبقي ۾ ختم نه ٿو ڪري سگھجي. رستي ۾، طريقي سان اعتراض ڪلاس ۾ - انتظار () ۽ نوٽيفڪيشن () - حتمي آهن، تنهنڪري اسان کي انهن کي ختم ڪرڻ جو موقعو نه آهي.
public class FinalExample {
   public final String generateAddress() {
       return "Some address";
   }
}

class ChildOfFinalExample extends FinalExample {

   // compile error here
   @Override
   public String generateAddress() {
       return "My OWN Address";
   }
}

جاوا ۾ فائنل ڪيئن ۽ ڪٿي استعمال ڪجي

  • آخري لفظ استعمال ڪريو ڪجھ ڪلاس-سطح جي مستقلن کي بيان ڪرڻ لاءِ؛
  • شيون لاءِ حتمي متغير ٺاھيو جڏھن توھان نٿا چاھيو ته انھن کي تبديل ڪيو وڃي. مثال طور، اعتراض جي مخصوص ملڪيت جيڪي اسان لاگنگ جي مقصدن لاء استعمال ڪري سگهون ٿا؛
  • جيڪڏهن توهان نٿا چاهيو ته ڪلاس وڌايو وڃي، ان کي حتمي طور نشان لڳايو؛
  • جيڪڏهن توهان کي هڪ ناقابل قابل< ڪلاس ٺاهڻ جي ضرورت آهي، توهان کي ان کي حتمي بڻائڻ جي ضرورت آهي.
  • جيڪڏھن توھان چاھيو ٿا ته ڪنھن طريقي جو نفاذ ان جي اولاد ۾ تبديل نه ٿئي، ان طريقي کي نامزد ڪريو جيئن final. اهو تمام ضروري آهي انهي کي يقيني بڻائڻ ته عمل درآمد تبديل نه ٿئي.

23. ڇا آهي ميوٽيبل غير مٽائي؟

تبديل ٿيندڙ

ميوٽبل (Mutable) شيون آهن جن جون حالتون ۽ variables ٺهڻ کان پوءِ تبديل ٿي سگهن ٿا. مثال طور، طبقن جهڙوڪ StringBuilder، StringBuffer. مثال:
public class MutableExample {

   private String address;

   public MutableExample(String address) {
       this.address = address;
   }

   public String getAddress() {
       return address;
   }

   // this setter can change the name field
   public void setAddress(String address) {
       this.address = address;
   }

   public static void main(String[] args) {

       MutableExample obj = new MutableExample("first address");
       System.out.println(obj.getAddress());

       // update the name field, so this is a mutable object
       obj.setAddress("Updated address");
       System.out.println(obj.getAddress());
   }
}

ناقابل بدلائي

تبديل نه ٿيندڙ شيون آهن جن جون حالتون ۽ متغير شيون ٺهڻ کان پوءِ تبديل نٿا ٿي سگهن. HashMap لاءِ وڏي ڪيڏي ڇو نه هجي، صحيح؟) مثال طور، اسٽرنگ، انٽيجر، ڊبل وغيره. مثال:
// make this class final so no one can change it
public final class ImmutableExample {

   private String address;

   ImmutableExample (String address) {
       this.address = address;
   }

   public String getAddress() {
       return address;
   }

   //remove the setter

   public static void main(String[] args) {

       ImmutableExample obj = new ImmutableExample("old address");
       System.out.println(obj.getAddress());

       // Therefore, do not change this field in any way, so this is an immutable object
       // obj.setName("new address");
       // System.out.println(obj.getName());

   }
}

24. هڪ ناقابل بدلجندڙ ڪلاس ڪيئن لکجي؟

توهان کي اهو سمجهڻ کان پوءِ ڪهڙيون تبديليون ۽ غير مٽائيندڙ شيون آهن، ايندڙ سوال قدرتي آهي - ان کي ڪيئن لکجي؟ لکڻ لاءِ هڪ ناقابل بدلجندڙ ڪلاس، توهان کي سادو قدم کڻڻ جي ضرورت آهي:
  • ڪلاس فائنل ڪريو.
  • سڀني شعبن کي خانگي بڻايو ۽ انهن لاءِ صرف حاصل ڪندڙ ٺاهيو. سيٽرز، يقينا، گهربل نه آهن.
  • سڀني ميوٽبل فيلڊ کي حتمي ٺاهيو ته جيئن قيمت صرف هڪ ڀيرو سيٽ ڪري سگهجي.
  • ڪنسٽرڪٽر جي ذريعي سڀني شعبن کي شروع ڪريو، هڪ گہرے ڪاپي کي انجام ڏيو (يعني، اعتراض پاڻ کي نقل ڪرڻ، ان جي متغير، متغير جا متغير، وغيره)
  • ڪلون ميوٽيٽبل variable شين کي حاصل ڪرڻ وارن ۾ صرف قدرن جون ڪاپيون واپس ڪرڻ لاءِ ۽ حقيقي شين جي حوالي سان نه.
مثال:
/**
* An example of creating an immutable object.
*/
public final class FinalClassExample {

   private final int age;

   private final String name;

   private final HashMap<String, String> addresses;

   public int getAge() {
       return age;
   }


   public String getName() {
       return name;
   }

   /**
    * Clone the object before returning it.
    */
   public HashMap<String, String> getAddresses() {
       return (HashMap<String, String>) addresses.clone();
   }

   /**
    * In the constructor, deep copy the mutable objects.
    */
   public FinalClassExample(int age, String name, HashMap<String, String> addresses) {
       System.out.println("Performing a deep copy in the constructor");
       this.age = age;
       this.name = name;
       HashMap<String, String> temporaryMap = new HashMap<>();
       String key;
       Iterator<String> iterator = addresses.keySet().iterator();
       while (iterator.hasNext()) {
           key = iterator.next();
           temporaryMap.put(key, addresses.get(key));
       }
       this.addresses = temporaryMap;
   }
}
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION