سلام ڪوڊ گيم ماڻهن جي هڪ متنوع گروهه کي گڏ ڪيو آهي. اسان مان ڪجهه جاوا ڊولپرز ٿيڻ کان وڌيڪ ڪجهه نٿا چاهيون، ۽ اسان ترقي ۾ گهڻو وقت ۽ ڪوشش لڳائي رهيا آهيون. ٻيا پهريان ئي جاوا ڊولپر آهن. ڪنهن به صورت ۾، توهان کي ٽيڪنيڪل انٽرويو ۾ آزمائشي ٿيڻ لاء تيار ٿيڻ جي ضرورت آهي. اهي آسان نه آهن. اهي ٻئي جذباتي ۽ فني تياري جي ضرورت آهي. جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 1 - 1مون تازو ئي جاوا ڊولپر جي پوزيشن لاءِ انٽرويو سوالن جي چند وڏين لسٽن ۾ آيو آهيان. سوال مختلف سطحن ۾ ورهايل آهن: جونيئر، وچين سطح، ۽ سينيئر. پريشان نه ٿيو: نه سڀئي سوال آسان آهن، پر اهي جيڪي ستاري سان گڏ آهن گهٽ ۾ گهٽ پڇيا ويندا آهن. سوال سٺا آھن، ۽ مان انھن مان گھڻا جواب ڏيڻ جي ڪوشش ڪندس. واضح طور تي، هي سڀ هڪ مضمون ۾ مناسب نه ٿيندو. آخرڪار، اتي ڪيترائي سوال آھن. ان جو مطلب آهي ته انهن انٽرويو سوالن جي جوابن سان گڏ آرٽيڪل جو پورو سلسلو هوندو. مون کي فوري طور تي ڪجهه نقطن تي زور ڏيڻ ڏيو: جواب مختصر هوندا، ڇاڪاڻ ته وڏي تفصيل سان لکيل جواب هڪ الڳ مضمون ۾ ڪڍيا ويندا. ان سان گڏ، انٽرويوز تي سپر تفصيلي ۽ وڏي جوابن جي ضرورت نه آهي، ڇو ته توهان جي انٽرويو وٺندڙ وٽ صرف هڪ ڪلاڪ آهي توهان جو انٽرويو ڪرڻ لاء ضروري عنوانن تي (۽، جيئن توهان کي ياد ڪيو ويندو، انهن مان ڪافي آهن).

سوال ۽ جواب جونيئر ڊولپر پوزيشن لاءِ

عام سوال

1. توهان ڪهڙي ڊزائن جا نمونا ڄاڻو ٿا؟ اسان کي ٻڌايو ته ٻن ڊزائن جي نمونن بابت جيڪي توھان پنھنجي ڪم ۾ استعمال ڪيا آھن.

نمونن جي هڪ وڏي قسم آهن. توھان مان انھن لاءِ جيڪي پاڻ کي ٺاھڻ جي نمونن سان چڱيءَ طرح واقف ڪرڻ چاھين ٿا، مان ڪتاب پڙھڻ جي صلاح ڏيان ٿو ”ھيڊ فرسٽ. ڊيزائن جا نمونا“. اهو توهان کي آساني سان سکڻ ۾ مدد ڏيندو سڀ کان وڌيڪ بنيادي ڊيزائن جي نمونن جا تفصيل. ڊزائن جي نمونن جي لحاظ کان جيڪي توهان نوڪري جي انٽرويو ۾ ذڪر ڪري سگهو ٿا، هيٺيان ذهن ۾ اچن ٿا:
  • بلڊر - اڪثر استعمال ٿيل ٽيمپليٽ، اعتراض جي تخليق لاء کلاسک انداز جو متبادل؛
  • حڪمت عملي - هڪ نمونو جيڪو بنيادي طور تي پوليمورفيزم جي نمائندگي ڪري ٿو. اھو آھي، اسان وٽ ھڪڙو انٽرفيس آھي، پر پروگرام جو رويو تبديل ٿي ويندو آھي ان جي بنياد تي مخصوص انٽرفيس تي عمل ڪرڻ جي عمل کي منظور ڪيو ويو آھي (حڪمت عملي جو نمونو ھاڻي صرف جاوا ايپليڪيشنن ۾ تقريبا ھر جڳھ استعمال ڪيو ويندو آھي).
جيڪڏهن اهو توهان لاء ڪافي نه آهي، بهار تي ڌيان ڏيو (جيڪڏهن توهان اڳ ۾ ئي واقف آهيو)، ڇاڪاڻ ته اهو فريم ورڪ جو هڪ مڪمل پليٽ فارم آهي، جنهن جي نتيجي ۾، نمونن سان گڏ شروع کان آخر تائين. هتي ڪجهه مثال آهن جن بابت آئون ڳالهائي رهيو آهيان:
  • ڪارخانو - هي نمونو ڳولي سگھجي ٿو ApplicationContext (يا BeanFactory ۾)؛
  • سنگلٽن - سڀ ڀاڄيون ڊفالٽ طور سنگلٽن آهن.
  • پراکسي - بنيادي طور تي، بهار ۾ هر شي هن نموني کي هڪ طريقي سان استعمال ڪري ٿو، مثال طور، AOP؛
  • ذميداري جو سلسلو - هڪ نمونو جيڪو بهار جي سيڪيورٽي کي گهٽائي ٿو.
  • سانچو - بهار JDBC ۾ استعمال ٿيل.

جاوا ڪور

جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 1 - 2

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 ۾ سڀڪنھن شيءِ تي مشتمل آھي، اضافي طور تي مختلف اضافي اوزار - گڏ ڪرڻ وارا ۽ ڊيبگر - جاوا ايپليڪيشن ٺاهڻ لاءِ گھربل آھن (جنھن ۾ جاوا دستاويز شامل آھن). جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 1 - 3

6. JVM ڇو استعمال ڪريو؟

جيئن مٿي بيان ڪيو ويو آهي، جاوا ورچوئل مشين هڪ ورچوئل مشين آهي جيڪا هلندي آهي جاوا بائيٽ ڪوڊ جيڪا ڪمپلر طرفان اڳ ۾ ٺاهي وئي آهي. هن جو مطلب آهي JVM جاوا سورس ڪوڊ نه سمجهي. سو، پھريون، اسان .java فائلون گڏ ڪريون ٿا. مرتب ڪيل فائلن ۾ .class ايڪسٽينشن آهي ۽ هاڻي بائيٽ ڪوڊ جي صورت ۾ آهن، جنهن کي JVM سمجهي ٿو. JVM هر OS لاء مختلف آهي. جڏهن JVM هلندي آهي bytecode فائلون، اهو انهن کي او ايس لاءِ ٺاهي ٿو جنهن تي اهو هلندڙ آهي. حقيقت ۾، ڇاڪاڻ ته اتي مختلف JVMs آهن، JDK (يا JRE) پڻ مختلف OS لاء مختلف آهن (هر نسخو پنهنجي JVM جي ضرورت آهي). اچو ته ياد رکو ته ٻين پروگرامنگ ٻولين ۾ ترقي ڪيئن ڪم ڪري ٿي. توهان هڪ پروگرام لکندا آهيو، پوء ان جو ڪوڊ هڪ مخصوص OS لاء مشين ڪوڊ ۾ مرتب ڪيو ويندو آهي، ۽ پوء توهان ان کي هلائي سگهو ٿا. ٻين لفظن ۾، توهان کي هر پليٽ فارم لاء پروگرام جي مختلف نسخن کي لکڻ جي ضرورت آهي. پر جاوا جي ڪوڊ جي ڊبل پروسيسنگ (بائيٽ ڪوڊ ۾ سورس ڪوڊ جو مجموعو، ۽ پوءِ JVM پاران بائيٽ ڪوڊ جي پروسيسنگ) توهان کي ڪراس پليٽ فارم حل جي فائدن مان لطف اندوز ٿيڻ جي اجازت ڏئي ٿي. اسان هڪ ڀيرو ڪوڊ ٺاهيو ۽ ان کي بائيٽ ڪوڊ ۾ گڏ ڪيو. پوء اسان ان کي ڪنهن به OS ڏانهن وٺي سگهون ٿا، ۽ اصلي JVM ان کي هلائڻ جي قابل آهي. ۽ اھو بلڪل صحيح آھي جاوا جي افسانوي لکت ھڪ ڀيرو، ھلايو ڪٿي به فيچر. جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 1 - 4

7. بائيٽ ڪوڊ ڇا آهي؟

جيئن مون مٿي چيو، ڪمپائلر جاوا ڪوڊ کي وچولي بائيٽ ڪوڊ ۾ تبديل ڪري ٿو (اسان .java ايڪسٽينشن واري فائلن مان .class ايڪسٽينشن سان فائلن ڏانهن وڃون ٿا). ڪيترن ئي طريقن سان، بائيٽ ڪوڊ مشين ڪوڊ سان ملندڙ جلندڙ آهي، سواء ان جي هدايتن جو سيٽ هڪ حقيقي پروسيسر لاء ناهي، پر هڪ مجازي هڪ. اهو چيو ته، ان ۾ سيڪشن شامل ٿي سگھي ٿو JIT ڪمپيلر لاءِ ٺهيل، جيڪو اصل پروسيسر لاءِ ڪمانڊ ايگزيڪيوشن کي بهتر ڪري ٿو جيڪو پروگرام هلي رهيو آهي. JIT تاليف، جنهن کي آن-دي-فلائي ڪمپليشن پڻ سڏيو ويندو آهي، هڪ ٽيڪنالاجي آهي جيڪا بائيٽ ڪوڊ پروگرام جي ڪارڪردگي کي وڌائي ٿي بائيٽ ڪوڊ کي مشين ڪوڊ يا ٻئي فارميٽ ۾ گڏ ڪري جڏهن پروگرام هلي رهيو آهي. جئين توهان اندازو لڳايو هوندو، JVM استعمال ڪري ٿو JIT ڪمپلر جڏهن اهو هلندي آهي bytecode. اچو ته ڪجهه نموني بائيٽ ڪوڊ تي هڪ نظر رکون: جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 1 - 5تمام گهڻو پڙهڻ لائق ناهي، ها؟ سٺي خبر اها آهي ته هي هدايت اسان لاءِ ناهي. اهو JVM لاء آهي.

8. JavaBean جون خاصيتون ڇا آهن؟

هڪ JavaBean هڪ جاوا ڪلاس آهي جيڪو ڪجهه ضابطن تي عمل ڪري ٿو. JavaBean لکڻ لاءِ هتي ڪجھ ضابطا آهن :
  1. ڪلاس ۾ عوامي رسائي موڊيفائر سان گڏ هڪ خالي (نه-دليل) تعمير ڪندڙ هجڻ گهرجي. هي تعمير ڪندڙ اهو ممڪن بڻائي ٿو ته ڪنهن به غير ضروري مسئلن کان سواءِ ڪلاس جو هڪ اعتراض ٺاهيو (انهي ڪري ته دليلن سان ڪو به غير ضروري تڪرار نه هجي).

  2. اندروني شعبن تائين رسائي حاصل ڪئي وئي آھي حاصل ڪريو ۽ سيٽ مثالن جي طريقن سان، جن کي معياري عمل ڪرڻ گھرجي. مثال طور، جيڪڏهن اسان وٽ نالي جي فيلڊ آهي، ته پوءِ اسان وٽ هجڻ گهرجي getName ۽ setName وغيره. هي مختلف اوزارن (فريم ورڪ) کي اجازت ڏئي ٿو ته پاڻمرادو حاصل ڪري سگھن ۽ بنا ڪنهن ڏکيائي جي.

  3. ڪلاس کي override ڪرڻ گهرجي equals() ، hashCode() ، ۽ toString() طريقن.

  4. ڪلاس کي لازمي طور تي ترتيب ڏيڻ گهرجي. اھو آھي، اھو لازمي آھي Serializable مارڪر انٽرفيس يا Externalizable انٽرفيس کي لاڳو ڪريو. اهو انهي ڪري آهي ته لوبن جي حالت کي معتبر طور تي محفوظ، ذخيرو ۽ بحال ڪري سگهجي ٿو.

جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 1 - 6

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) آرڊر ۾. جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 1 - 7جاوا ۾، جڏهن ماڻهو هڪ اسٽيڪ ٽريس بابت ڳالهائيندا آهن، انهن جو مطلب عام طور تي هڪ اسٽيڪ ٽريس ڪنسول تي ڏيکاريل آهي جڏهن هڪ غلطي (يا استثنا) ٿئي ٿي. توھان حاصل ڪري سگھوٿا اسٽيڪ ٽريس ھن طرح استثنا مان:
StackTraceElement[] stackTraceElements;
try{
                ...
} catch (Exception e) {
   stackTraceElements = e.getStackTrace();
}
۽ جيڪڏهن اسان ڪنسول تي هڪ استثنا جي اسٽيڪ ٽريس ڏيکارڻ چاهيون ٿا:
try{
                ...
} catch (Exception e) {
  e.printStackTrace();
}
اضافي طور تي، جيڪڏهن هڪ غلطي، اڻ چيڪ ٿيل استثنا، يا اڻڄاتل چيڪ ٿيل استثنا ٿئي ٿي، ته پوء اسان خودڪار طريقي سان حاصل ڪندا آهيون استثنا جي اسٽيڪ ٽريس ڪنسول تي جڏهن ايپليڪيشن خراب ٿئي ٿي. هتي هڪ ننڍڙو مثال آهي اسٽيڪ ٽريس جو ڪنسول تي: جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 1 - 8۽ انهي نوٽ تي، اسان اڄ هن موضوع جي بحث کي ختم ڪنداسين.جاوا ڊولپر پوزيشن لاءِ نوڪري جي انٽرويو کان سوالن ۽ جوابن جي ڳولا.  حصو 1 - 9