JavaRush /جاوا بلاگ /Random-SD /روزگار لاءِ ٽيسٽ ٽاسڪ، اچو ته ان جو اندازو لڳايو..
timurnav
سطح

روزگار لاءِ ٽيسٽ ٽاسڪ، اچو ته ان جو اندازو لڳايو..

گروپ ۾ شايع ٿيل
دوستو، سڀني کي سلام. مان توهان سان هڪ روسي ڪمپني ۾ جاوا ڊولپر جي پوزيشن لاءِ ٽيسٽ ٽاسڪ حل ڪرڻ جو منهنجو تجربو حصيداري ڪرڻ چاهيان ٿو. مان فوري طور تي چوندس ته اسائنمينٽ جي بنيادي ڪارڪردگي کي لاڳو ڪرڻ خاص طور تي ڏکيو نه آهي، پر هميشه وانگر، تفصيلات ۽ ننڍيون شيون اهم آهن، جن مون کي وقت تي جمع ڪرڻ کان روڪيو آهي؛ انهن ڪڏهن به اسائنمينٽ بابت ڪجهه به جواب نه ڏنو - انهن جي خالي جاء اڳ ۾ ئي ڀريل هو جڏهن مون انهن ڏانهن موڪليو. مان توهان کي صلاح ڏيان ٿو ته توهان ڪم کي ڏسو ته ڏسو ته ڇا مون اهو سڀ ڪجهه ڪيو جيڪو مون کان گهربل هو. ۽ انهن لاءِ جن کي ڪا خبر ناهي ته ان کي ڪيئن ٺاهيو، مان ان بابت گهڻو پاڻي شامل ڪندس ته مون ان سان ڪيئن ڊيل ڪيو. جيڪڏهن ڪنهن کي هن ۾ دلچسپي آهي، ڀلي ڪري آيا ٻلي ۾. مان فوري طور تي چوندس ته آئون هتي سڄو حل پوسٽ نه ڪندس، پر شروعات ڪندڙن لاء تمام گهڻيون وضاحتون هونديون، جيڪڏهن ڪنهن کي منهنجي ٻاهران پڙهڻ ۾ دلچسپي نه آهي، هتي گيتوب تي پروجيڪٽ آهي . مان شروع ڪندس. خود ڪم جو متن.
ٽيسٽ ٽاسڪ نمبر 1
تفصيل: API سرور (JSON HTTP API) ڊولپمينٽ ٽولز: جاوا فريم ورڪ: Play Framework 2.4 (يا اعلي) يا اسپرنگ بوٽ 1.2.3 (يا وڌيڪ) ڊيٽابيس: MySQL پروٽوڪول: HTTP، پورٽ 80 فنڪشنلٽي (درخواستون):
  1. لوڊ ڪندڙ.
    • اسان فائل (JPG اوتار تصوير) کي سرور ڏانهن منتقل ڪيو.
    • اسان تصوير کي سرور تي ڊاريڪٽري ۾ محفوظ ڪريون ٿا.
    • سرور جو جواب تصوير جي اندروني URI آهي.
  2. نئون استعمال ڪندڙ شامل ڪرڻ.
    • اسان صارف جي ذاتي ڊيٽا کي سرور ڏانهن منتقل ڪريون ٿا (تصوير جو URI، يوزرنيم، اي ميل، وغيره).
    • اسان ڊيٽابيس ۾ معلومات محفوظ ڪندا آهيون.
    • سرور جو جواب نئين استعمال ڪندڙ جي منفرد ID آهي.
  3. استعمال ڪندڙ جي باري ۾ معلومات حاصل ڪرڻ.
    • اسان سرور ڏانهن هڪ منفرد يوزر ID منتقل ڪريون ٿا.
    • ڊيٽابيس مان معلومات پڙهڻ.
    • سرور جو جواب صارف جي ذاتي ڊيٽا آهي (مٿي ڏسو).
  4. صارف جي حيثيت کي تبديل ڪرڻ (آن لائن، آف لائن).
    • اسان منفرد يوزر ID ۽ نئين اسٽيٽس (آن لائن، آف لائن) کي سرور ڏانهن منتقل ڪريون ٿا.
    • صارف جي حيثيت کي تبديل ڪرڻ.
    • سرور جواب - منفرد يوزر ID، نئين ۽ پوئين حيثيت.
    نوٽ: سرور هڪ خارجي API/ڊيٽابيس کان سوال ڪري رهيو آهي. جيئن ته هي هڪ آسان ٽيسٽ ٽاسڪ آهي، ان لاءِ ضروري آهي ته هڪ ”اسٽب“ کي لاڳو ڪرڻ لاءِ نقلي رسائي ۽ 5-10 سيڪنڊن جي دير سان.
  5. سرور جا انگ اکر.
    • اسان پيٽرولر کي سرور ڏانهن منتقل ڪريون ٿا: 1. ڪلائنٽ جي حيثيت (آن لائن، آف لائن يا غير حاضر)، 2. درخواست جي منفرد ID (ٽائم اسٽيمپ) (شايد غير حاضر)
    • سرور جو جواب صارفن جي ھڪڙي فهرست آھي جنھن ۾ اسٽيٽس ۽ تصويري URIs، گڏو گڏ درخواست جي ھڪڙي منفرد ID (ٽائم اسٽيمپ) آھي.
    نوٽ: جيڪڏهن درخواست ۾ پيٽرول شامل آهن، سرور کي انهن جي جواب کي فلٽر ڪرڻ گهرجي. جيڪڏهن درخواست ۾ درخواست جي هڪ منفرد ID (ٽائم اسٽيمپ) شامل آهي (اڳ ۾ مليل)، پوءِ سرور کي صرف انهن صارفين کي واپس ڪرڻ گهرجي جن جون حالتون (وقت ۾) هن منفرد ID (ٽائم اسٽيمپ) کان پوءِ تبديل ٿيون.
لازمي گهرجون:
- آرام سان. - سڀ ڊيٽا JSON فارميٽ ۾ آهي. - API سرور کي ان ڳالهه کي مدنظر رکندي ٺاهيو وڃي ته درخواستون 3 ۽ 5 کي اعليٰ ترجيح آهي (درخواستن 1، 2، 4 جي نسبت سان) ۽ جيترو ٿي سگهي مڪمل ڪيو وڃي. - غلطي پروسيسنگ.
اختياري گهرجون (مطلوب):
- ڪوڊ جي دستاويز. - API سرور آرڪيٽيڪچر کي اعلي لوڊ ۽ اسڪيلنگ لاء ٺهيل هجڻ گهرجي. - ٽيسٽ.
امتحان جا نتيجا:
- ٽيسٽ ٽاسڪ جو نتيجو لازمي طور تي آرڪائيو ۾ مهيا ڪيو وڃي ۽ ان جي لڳائڻ لاءِ تفصيلي هدايتون. اهو مشورو ڏنو ويو آهي ته هڪ Dockerfile ڳنڍڻ لاءِ هڪ Docker ڪنٽينر ٺاهڻ لاءِ ٽيسٽ ٽاسڪ لاءِ. ڊائون لوڊ ڪري سگھجي ٿو github.com تي. - ٺاھيل API جي مختصر دستاويزن تي مشتمل ھئڻ گھرجي (درخواستن جي فهرست، درخواست جي ماپ، درخواست فارميٽ، جوابي فارميٽ، وغيره). - ٽيسٽ جي ڪم تي خرچ ڪيل وقت جي حوالي سان معلومات: ڊيزائن، پروگرامنگ، دستاويز، وغيره. مهرباني ڪري نوٽ ڪريو ته هي آزمائشي ڪم صرف علم ۽ صلاحيتن جو اندازو لڳائڻ آهي، ۽ مقصد هڪ مڪمل پراڊڪٽ (API سرور) ٺاهڻ نه آهي، تنهنڪري وضاحتن ۽ سببن سان آسان ڪرڻ جي اجازت آهي.
هوشيار ۽ تجربيڪار پروگرامر ايندڙ سيڪشن کي ڇڏي سگهن ٿا، هتي آئون پاڻ ئي ڪم جي متن سان ڊيل ڪندس. ٽاسڪ جو ”هيڊر“ سمجھڻ ۾ ڪا به ڏکيائي نه ٿو پيدا ڪري، تنهن ڪري مان صرف ايترو چوندس ته منهنجي پسند اسپرنگ بوٽ تي ٿي، پر ان ڪري نه ته مون ان سان اڳ ۾ ئي ڪجهه ڪيو هو، پر ان ڪري جو مون اڳ ۾ ئي هڪ حقيقي پروجيڪٽ مڪمل ڪيو هو. بهار (پر اتي بوٽ نه هو، جيئن مان سمجهان ٿو ته ان جي سادگي جي ڪري). سرور جي ڪارڪردگي جي مطابق: 1) فائل ڊائون لوڊ ڪندڙ. هتي بنيادي طور تي ڪجھ به پيچيده ناهي، مون کي صرف اهو ڄاڻڻ جي ضرورت آهي ته تصويرون ڪيئن عام طور تي سرور تي محفوظ ڪيون وينديون آهن، اهو ظاهر ٿيو ته سڀ کان وڌيڪ آسان طريقو آهي انهن کي صرف ڪجهه خاص ڊاريڪٽري ۾ رکڻ لاء. اسان هيٺ ڏنل مخصوص عمل تي نظر ڪنداسين. 2) نئين استعمال ڪندڙ کي شامل ڪرڻ، هڪ سادي آپريشن، جيڪڏهن توهان ڪڏهن به CRUD ايپليڪيشنون ڪيون آهن، ته پوء هو مون کي سپورٽ ڪندو، جيڪڏهن نه، توهان هيٺ ڏنل هر شيء کي ڏسندا. 3) صارف بابت معلومات حاصل ڪرڻ. ڪوبه سوال ناهي - سڀ ڪجهه واضح آهي. 4) صارف جي حيثيت کي تبديل ڪرڻ. ڪم جا پهريان ٻه نقطا ڏينهن وانگر واضح آهن، پر ٻاهرين درخواست بابت ڇا؟ 100g کان سواءِ ان کي سمجهڻ ناممڪن آهي، اڃا به مون کي 100% پڪ ناهي ته جيڪڏهن مان صحيح سمجهي چڪو آهيان. تفصيل هيٺ. 5) سرور جا انگ اکر. اهو پڻ دلچسپ آهي. پهريون نقطو مشورو ڏئي ٿو ته هڪ طريقو لاڳو ڪرڻ لاء مختلف اختيارن سان پيرا ميٽرز، اهو اڃا تائين واضح ناهي ته اهو ڪيئن ڪجي، ڏنو ويو آهي ته اهو هڪ ڪنٽرولر طريقو هجڻ گهرجي. ٻيو نقطو سڀني صارفين کان پڇي ٿو جن جي حيثيت وقت ۾ هڪ لمحي کان پوء تبديل ٿي وئي آهي، اهو صاف لڳي ٿو، پر ذيلي ذوق موجود آهن.
شروع ٿيڻ
آءٌ هن ڪم تي ڪم ڪندي هي جملو ڪيترا دفعا پڙهي چڪو آهيان! جيڪڏهن توهان ڪڏهن ڪوشش ڪئي آهي ته بهار ۾ هڪ پروجيڪٽ ڪيئن ترتيب ڏيو، پر ڪجهه سببن جي ڪري توهان ڪڏهن به اسپرنگ بوٽ جي ڪوشش نه ڪئي آهي، مبارڪون، توهان صرف ان سان خوش ٿيندؤ جيڪو آئون هيٺ لکندس. مون ڪٿي پڙهيو آهي ته پروگرامر ڪوڊ جي هڪ تمام وڏي مقدار کي پروجيڪٽ کان پروجيڪٽ تائين منتقل ڪندا هئا، هي آهي ٽيمپليٽ ڪوڊ - ڊيٽابيس سان ڳنڍڻ لاءِ سيٽنگون، سرورٽ ميپنگ وغيره وغيره، مثال طور، ٽيمپليٽ جي مقدار کي گهٽائڻ لاءِ. ڪوڊ سان ڪم ڪرڻ لاءِ اسان ڊيٽابيس لاءِ JPA/Hibernate استعمال ڪندا آهيون، اهي ڪجهه ٽيمپليٽ لڪائيندا آهن، پر انهن کي ترتيب ڏيڻ لاءِ، توهان کي ٻيهر هڪ xml فائل يا ڪنفيگريشن ڪلاس لکڻو پوندو. ۽ جيڪڏهن توهان وٽ هڪ ننڍڙو منصوبو آهي، پوء اهو ظاهر ٿئي ٿو ته توهان گهٽ ڪوڊ نه لکندا آهيو، پر ان جي برعڪس. اڳيون اسان بهار ۾ JPA سان ڪم ڪرڻ ختم ڪريون ٿا؛ اتي ڪيترائي منصوبا آھن، پر سڀ کان وڌيڪ آسان آھي، يقينا، بهار جي ڊيٽا. هي هڪ تمام وڏو پروجيڪٽ آهي جيڪو شايد هر ممڪن ڪم سان ڪم ڪري سگهي ٿو، بشمول JPA ۽ NoSQL ۽ مختلف منصوبن جو هڪ مڪمل گروپ، اهو ناقابل يقين حد تائين جادوگر آهي، اسان ان کي پنهنجي منصوبي ۾ استعمال ڪنداسين. بهار کي استعمال ڪندي اسان تقريبن ڊيٽابيس ڪنيڪشن سيٽنگن کان نجات حاصل ڪريون ٿا، اسپرنگ اسان لاءِ سڀ ڪجهه ڪري ٿو، اسان کي صرف ٽرانزيڪشن، ڪيشنگ، ۽ خاص حالتن ۾ گوگل (ٻين کي ڏسو) ڪجهه ٻين سيٽنگن جي حوالي سان ترتيب ڏيڻ جي ضرورت آهي. پر ساڳئي وقت، اڪثر نوان ڊولپرز بلڪل نه ڄاڻندا آهن ته بهار ۾ هڪ منصوبو ڪيئن ٺاهيو وڃي. ڪنهن کي به مڪمل طور تي خبر ناهي ته پروجيڪٽ کي هلائڻ لاءِ ان کي ڪيئن ترتيب ڏيو ۽ لوڪل هسٽ: 8080/* سان شروع ٿيندڙ لنڪ تي عمل ڪندي برائوزر ۾ نتيجو حاصل ڪريو. ۽ پوءِ بهار جو بوٽ تصوير ۾ اچي ٿو! اهو بهتر آهي ته هڪ خاص مثال سان اسپرنگ بوٽ بابت ڳالهائڻ! اچو ته خالي سان شروع ڪريون. اسپرنگ بوٽ پروجيڪٽ ٺاهڻ لاءِ، اسپرنگ ڊولپرز ٽيمپليٽس ٺاهڻ لاءِ ”ڪنسٽرڪٽر“ سان گڏ آيا. توهان ان کي استعمال ڪري سگهو ٿا انهن جي ويب سائيٽ تي، پر اهو ڪرڻ تمام آسان آهي اسان جي پسنديده IDE، Intellij IDEA ۾. ۽ ائين: فائل->نئون->پروجيڪٽ ونڊو ۾، وڃو بهار جي شروعاتي ٽيب، jdk ان ۾ سيٽ ڪيو وڃي، ۽ URL https://start.spring.io، انٽرنيٽ ڪنيڪشن چيڪ ڪريو، پوء توهان کي ضرورت پوندي. نالو چونڊڻ لاءِ، ۽ پوءِ ٽيڪنالاجيون جيڪي اسان استعمال ڪنداسين، پهرين مرحلي ۾ اسان کي صرف WEB جي ضرورت آهي - ان جي اڳيان هڪ ٽڪ لڳايو ۽ پوءِ پروجيڪٽ ٺاهيو ويندو. Maven لاء سڀني انحصار کي ڇڪڻ لاء، اسان کي کولڻ جي ضرورت آهي Maven ٽيب خيال ۾ ۽ ڪلڪ ڪريو تازه ڪاري بٽڻ. اسان هڪ تيار ٿيل ايپليڪيشن ٽيمپليٽ حاصل ڪيو، جنهن ۾ ڪلائنٽ-سرور ڪميونيڪيشن لاءِ سڀ سيٽنگون شامل آهن. پهريون تاثر حاصل ڪرڻ لاءِ، اچو ته هڪ ڪنٽرولر ڪلاس ٺاهيو (اسان شايد سڀ MVC بابت ٻڌو هوندو). سڀني اسپرنگ ايپليڪيشنن ۾، ڪنٽرولرز وٽ بلڪل سادو ڊيزائن آهي - هي هڪ ڪلاس آهي جنهن کي @Controller تشريح سان نشان لڳايو ويو آهي (اڳوڻيون ممڪن آهن، مثال طور، @RestController)، هي ڪلاس ايندڙ درخواستن جي پروسيسنگ لاءِ ذميوار آهي. ڪنٽرولر لاءِ ڪجھ ايڊريس جي درخواست کي سڃاڻڻ لاءِ، توھان کي ھن ايڊريس کي ڪنٽرولر جي طريقي سان نقشي ڪرڻ جي ضرورت آھي. import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(value = "/hello") public class DemoController { @RequestMapping(method = RequestMethod.GET) public String halloWorld() { return "Hello World!"; } @RequestMapping(value = "/{name}", method = RequestMethod.GET) public String halloName(@PathVariable("name") String name) { return "Hello, " + name + "!"; } } اچو ته سمجهون ته هتي ڇا ٿي رهيو آهي. @ ريسٽ ڪنٽرولر . بلڪل اها تشريح جيڪا مون مٿي لکي آهي. اسان باقي ڪنٽرولر استعمال ڪريون ٿا ڇاڪاڻ ته اسان فوري طور نتيجو ڏسڻ چاهيون ٿا ۽ نه ٿا چاهيون .jsp صفحا (wow)، اهو اسان لاءِ آسان ٿيندو ته فوري طور تي برائوزر ۾ نتيجن کي اسٽرنگ طور ڏسڻ. @RequestMapping صرف هڪ ايڊريس تي پابند آهي. عوامي پتو اڳوڻو ٿيندو: localhost:8080. جيئن ته اسان ڏسي سگهون ٿا، سڄو ڪلاس /hello ايڊريس تي hanging آهي ، ان جو مطلب اهو آهي ته هن طبقي جي اندر سڀني طريقن سان اڳفڪس آهي localhost:8080/hello. اڳيون ڪلاس جو پهريون طريقو آهي، ان جي پنهنجي نقشي ۾ Http پروٽوڪول جو طريقو اشارو ڪيو ويو آهي - هڪ GET درخواست (پنهنجي لاءِ Http پروٽوڪول طريقن بابت پڙهو) اهو سڀ ڇا مطلب آهي؟ ايڊريس تي هڪ GET گذارش ڪرڻ سان localhost:8080/hello، اسان کي اسٽرنگ جي صورت ۾ جواب ملندو “Hello World!”، اچو ته ان کي چيڪ ڪريون! DemoApplication ڪلاس ۾، هڪ بهترين تشريح آهي جنهن کي چئي سگهجي ٿو ته اڪيلو هٿ سان سڄي بهار جي حوالي سان لانچ ڪرڻ - @SpringBootApplication. هن ڪلاس جو مکيه طريقو جادوئي ٿي ويندو آهي، اهو صرف اسپرنگ ايپليڪشن ۾ لڪيل سڀني جادو کي لانچ ڪري ٿو، جيڪڏهن توهان هن ڪلاس تي ڪنٽيڪٽ مينيو کي ڪال ڪندا ته رن لائين ۾ آپشنز ظاهر ٿيندا، مان ان کي سائي نشان سان جلد لانچ ڪرڻ جي صلاح ڏيان ٿو، هن طريقي سان ڪنسول بهتر نظر ايندو ۽ مستقبل ۾ ان کان سڌو سنئون لاگ پڙهڻ آسان ٿيندو. اچو ته ايپليڪيشن لانچ ڪريون. جڏهن ڪنسول آئوٽ بند ٿي وڃي، توهان کي ڪنسول ۾ ڏسڻ گهرجي
2015-09-02 09:25:36.895 INFO 5844 --- [ main] sbcetTomcatEmbeddedServletContainer : Tomcat شروع ٿيو بندرگاهه(s): 8080 (http) 2015-09-02 09:25:604IN [Main] 09:25:604IN [Main] demo.DemoApplication: شروع ٿيل DemoApplication **** سيڪنڊن ۾ (JVM هلندڙ 15.501)
جتي "****" ايپليڪيشن لانچ جي مدت آهي :) ان کان پوء، ڪنهن به برائوزر ۾ (يا ڪرل، يا جيڪو توهان استعمال ڪندا آهيو؟) توهان کي پتو ٽائيپ ڪرڻ جي ضرورت آهي جنهن تي ڪنٽرولر طريقو نقشو ڪيو ويو آهي.
localhost: 8080/هيلو
برائوزر کي ظاھر ڪرڻ گھرجي Canonical
هيلو دنيا!
هتي توهان لاءِ هڪ ويب ايپليڪيشن آهي! جيڪڏهن توهان محسوس ڪيو ته ڪنٽرولر ۾ هڪ ٻيو طريقو آهي، ان جي پنهنجي ايڊريس ميپنگ آهي؛ هڪ جڳهه هولڊر موجوده ايڊريس ۾ شامل ڪيو ويو آهي. جيڪو بهار جي ذريعي هڪ پيٽرولر جي طور تي طريقي سان منظور ڪيو ويو آهي. اهو اندازو لڳائڻ ڏکيو ناهي ته @PathVariable تشريح هن لاء ذميوار آهي. تنهنڪري درخواست تي
localhost: 8080/هيلو/توهان جو نالو
برائوزر ڏيکاريندو
هيلو، تنهنجو نالو!
اسان اسپرنگ بوٽ جي بنيادي شين کي ترتيب ڏنو آهي. اڳيون، اسان ڊيٽابيس کي ڳنڍينداسين، پر اهو ايندڙ پوسٽ ۾ ٿيندو. سڀني جي مهرباني.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION