JavaRush /جاوا بلاگ /Random-UR /ملازمت کے لیے ٹیسٹ ٹاسک، آئیے اس کا پتہ لگائیں۔
timurnav
سطح

ملازمت کے لیے ٹیسٹ ٹاسک، آئیے اس کا پتہ لگائیں۔

گروپ میں شائع ہوا۔
دوستو، سب کو سلام۔ میں آپ کے ساتھ روسی کمپنی میں جاوا ڈویلپر کے عہدے کے لیے ٹیسٹ ٹاسک کو حل کرنے کا اپنا تجربہ شیئر کرنا چاہتا ہوں۔ میں فوراً ہی کہوں گا کہ اسائنمنٹ کی مرکزی فعالیت کو نافذ کرنا کوئی خاص مشکل نہیں ہے، لیکن ہمیشہ کی طرح، تفصیلات اور چھوٹی چیزیں اہم ہیں، جس کی وجہ سے میں اسے وقت پر جمع کرانے سے روکا؛ انہوں نے اسائنمنٹ کے بارے میں کبھی کوئی جواب نہیں دیا - ان کی خالی جگہ جب میں نے انہیں بھیجا تو پہلے ہی بھر چکا تھا۔ میرا مشورہ ہے کہ آپ اس کام کو دیکھیں کہ آیا میں نے وہ سب کچھ کیا جس کی مجھ سے ضرورت تھی۔ اور ان لوگوں کے لیے جو اسے بنانے کا طریقہ نہیں جانتے ہیں، میں اس کے بارے میں بہت زیادہ پانی ڈالوں گا کہ میں نے اس سے کیسے نمٹا۔ اگر کوئی اس میں دلچسپی رکھتا ہے تو بلی میں خوش آمدید۔ میں ابھی کہوں گا کہ میں یہاں پورا حل پوسٹ نہیں کروں گا، لیکن ابتدائیوں کے لیے بہت ساری وضاحتیں ہوں گی، اگر کسی کو میری آؤٹ پورنگ پڑھنے میں دلچسپی نہیں ہے، تو یہ ہے گیتھب پر پروجیکٹ ۔ میں شروع کروں گا۔ کام کا خود متن.
ٹیسٹ ٹاسک نمبر 1
تفصیل: API سرور (JSON HTTP API) ڈویلپمنٹ ٹولز: Java Framework: Play Framework 2.4 (یا اس سے زیادہ) یا Spring boot 1.2.3 (یا اس سے زیادہ) ڈیٹا بیس: MySQL پروٹوکول: HTTP، پورٹ 80 فنکشنلٹی (درخواستیں):
  1. لوڈر۔
    • ہم فائل (JPG اوتار تصویر) کو سرور پر منتقل کرتے ہیں۔
    • ہم تصویر کو سرور پر ایک ڈائریکٹری میں محفوظ کرتے ہیں۔
    • سرور کا جواب تصویر کا اندرونی URI ہے۔
  2. ایک نیا صارف شامل کرنا۔
    • ہم صارف کا ذاتی ڈیٹا سرور پر منتقل کرتے ہیں (تصویر کا یو آر آئی، صارف نام، ای میل وغیرہ)۔
    • ہم ڈیٹا بیس میں معلومات محفوظ کرتے ہیں۔
    • سرور کا جواب نئے صارف کی منفرد ID ہے۔
  3. صارف کے بارے میں معلومات حاصل کرنا۔
    • ہم سرور پر ایک منفرد صارف ID منتقل کرتے ہیں۔
    • ڈیٹا بیس سے معلومات پڑھنا۔
    • سرور کا جواب صارف کا ذاتی ڈیٹا ہے (اوپر دیکھیں)۔
  4. صارف کی حیثیت کو تبدیل کرنا (آن لائن، آف لائن)
    • ہم منفرد یوزر آئی ڈی اور نیا اسٹیٹس (آن لائن، آف لائن) سرور کو منتقل کرتے ہیں۔
    • صارف کی حیثیت کو تبدیل کرنا۔
    • سرور کا جواب - منفرد صارف ID، نئی اور پچھلی حیثیت۔
    نوٹ: سرور ایک بیرونی API/ڈیٹا بیس سے استفسار کر رہا ہے۔ چونکہ یہ ایک آسان ٹیسٹ کا کام ہے، اس لیے ضروری ہے کہ ایک "سٹب" کو نقلی رسائی اور 5-10 سیکنڈ کی تاخیر کے ساتھ لاگو کیا جائے۔
  5. سرور کے اعدادوشمار۔
    • ہم پیرامیٹرز کو سرور پر منتقل کرتے ہیں: 1. کلائنٹ کی حیثیت (آن لائن، آف لائن یا غیر حاضر)، 2. درخواست کی منفرد ID (ٹائم اسٹیمپ) (غائب ہوسکتی ہے)
    • سرور کا جواب اسٹیٹس اور تصویری URIs والے صارفین کی فہرست کے ساتھ ساتھ درخواست کی ایک منفرد ID (ٹائم اسٹیمپ) ہے۔
    نوٹ: اگر درخواست میں پیرامیٹرز ہیں، تو سرور کو ان کے ذریعے اپنا جواب فلٹر کرنا چاہیے۔ اگر درخواست میں درخواست کی ایک منفرد ID (ٹائم اسٹیمپ) ہے (پہلے موصول ہوئی ہے)، تو سرور کو صرف ان صارفین کو واپس کرنا چاہیے جن کے اسٹیٹس اس منفرد ID (ٹائم اسٹیمپ) کے بعد (وقت کے ساتھ) بدل گئے ہیں۔
لازمی تقاضے:
- آرام دہ۔ - تمام ڈیٹا JSON فارمیٹ میں ہے۔ - API سرور کو اس بات کو مدنظر رکھتے ہوئے ڈیزائن کیا جانا چاہئے کہ درخواستیں 3 اور 5 کو سب سے زیادہ ترجیح حاصل ہے (درخواستیں 1, 2, 4 کے مقابلہ میں) اور اسے جلد از جلد مکمل کیا جانا چاہئے۔ - غلطی پر کارروائی۔
اختیاری ضروریات (مطلوبہ):
- کوڈ کی دستاویزات۔ - API سرور فن تعمیر کو زیادہ بوجھ اور اسکیلنگ کے لیے ڈیزائن کیا جانا چاہیے۔ - ٹیسٹ۔
ٹیسٹ کا نتیجہ:
- ٹیسٹ ٹاسک کا نتیجہ آرکائیو میں اور اس کی تعیناتی کے لیے تفصیلی ہدایات کے ساتھ فراہم کیا جانا چاہیے۔ ٹیسٹ ٹاسک کے لیے ڈوکر کنٹینر بنانے کے لیے ڈاکر فائل کو منسلک کرنے کا مشورہ دیا جاتا ہے۔ github.com پر ڈاؤن لوڈ کیا جا سکتا ہے۔ - تخلیق کردہ API کی مختصر دستاویزات پر مشتمل ہونا چاہئے (درخواستوں کی فہرست، درخواست کے پیرامیٹرز، درخواست کی شکلیں، رسپانس فارمیٹس وغیرہ)۔ - ٹیسٹ کے کام پر گزارے گئے وقت کے بارے میں معلومات: ڈیزائن، پروگرامنگ، دستاویزات وغیرہ۔ براہ کرم نوٹ کریں کہ اس آزمائشی کام کا مقصد صرف علم اور مہارت کا جائزہ لینا ہے، اور اس کا مقصد ایک تیار شدہ پروڈکٹ (API سرور) بنانا نہیں ہے، اس لیے وضاحت اور وجوہات کے ساتھ آسانیاں کرنے کی اجازت ہے۔
دھیان رکھنے والے اور تجربہ کار پروگرامرز اگلے حصے کو چھوڑ سکتے ہیں، یہاں میں خود کام کے متن سے نمٹوں گا۔ ٹاسک کا "ہیڈر" سمجھنے میں کسی قسم کی دشواری کا باعث نہیں بنتا، اس لیے میں صرف اتنا کہوں گا کہ میرا انتخاب اسپرنگ بوٹ پر پڑا، لیکن اس لیے نہیں کہ میں نے اس کے ساتھ پہلے ہی کچھ کر لیا تھا، بلکہ اس لیے کہ میں نے پہلے ہی ایک حقیقی پروجیکٹ مکمل کر لیا تھا۔ بہار (لیکن بوٹ وہاں نہیں تھا، جیسا کہ میں اسے اس کی سادگی کی وجہ سے سمجھتا ہوں)۔ سرور کی فعالیت کے مطابق: 1) فائل ڈاؤنلوڈر۔ یہاں بنیادی طور پر کچھ بھی پیچیدہ نہیں ہے، مجھے صرف یہ جاننے کی ضرورت تھی کہ تصویریں عام طور پر سرور پر کیسے محفوظ کی جاتی ہیں، معلوم ہوا کہ سب سے آسان طریقہ یہ ہے کہ انہیں کسی خاص ڈائریکٹری میں رکھا جائے۔ ہم ذیل میں مخصوص نفاذ کو دیکھیں گے۔ 2) ایک نیا صارف شامل کرنا، ایک آسان آپریشن، اگر آپ نے کبھی CRUD ایپلی کیشنز کی ہیں، تو وہ مجھے سپورٹ کرے گا، اگر نہیں، تو آپ نیچے سب کچھ دیکھیں گے۔ 3) صارف کے بارے میں معلومات حاصل کرنا۔ کوئی سوال نہیں - سب کچھ واضح ہے۔ 4) صارف کی حیثیت کو تبدیل کرنا۔ کام کے پہلے دو نکات دن کی طرح واضح ہیں، لیکن بیرونی درخواست کا کیا ہوگا؟ 100g کے بغیر اس کا پتہ لگانا ناممکن ہے، یہاں تک کہ اب مجھے 100% یقین نہیں ہے کہ میں صحیح طریقے سے سمجھ گیا ہوں۔ تفصیلات ذیل میں۔ 5) سرور کے اعدادوشمار۔ یہ بھی دلچسپ ہے۔ پہلا نکتہ پیرامیٹرز کے لئے مختلف اختیارات کے ساتھ ایک طریقہ کو نافذ کرنے کا مشورہ دیتا ہے، یہ ابھی تک واضح نہیں ہے کہ اسے کیسے کرنا ہے، یہ دیکھتے ہوئے کہ یہ ایک کنٹرولر طریقہ ہونا چاہئے۔ دوسرا نکتہ ان تمام صارفین سے پوچھتا ہے جن کی حیثیت ایک لمحے کے بعد بدل گئی ہے، یہ واضح لگتا ہے، لیکن اس میں باریکیاں ہیں۔
شروع ہوا چاہتا ہے
اوہ، میں نے اس کام پر کام کرتے ہوئے کتنی بار یہ جملہ پڑھا! اگر آپ نے کبھی یہ جاننے کی کوشش کی ہے کہ موسم بہار میں کوئی پروجیکٹ کیسے ترتیب دیا جائے، لیکن کسی وجہ سے آپ نے اسپرنگ بوٹ کو کبھی آزمایا ہی نہیں، مبارک ہو، آپ اس سے خوش ہوں گے جو میں ذیل میں لکھوں گا۔ میں نے کہیں پڑھا تھا کہ پروگرامرز بہت بڑی مقدار میں کوڈ کو پروجیکٹ سے دوسرے پروجیکٹ میں منتقل کرتے تھے، یہ ٹیمپلیٹ کوڈ ہے - ڈیٹا بیس سے منسلک ہونے کی ترتیبات، سرولیٹ میپنگ، وغیرہ وغیرہ، تاکہ مثال کے طور پر اس کی مقدار کو کم کیا جا سکے۔ کے ساتھ کام کرنے کے لیے ٹیمپلیٹ کوڈ ہم ڈیٹا بیس کے لیے JPA/Hibernate کا استعمال کرتے ہیں، وہ کچھ ٹیمپلیٹس کو چھپاتے ہیں، لیکن انہیں کنفیگر کرنے کے لیے، آپ کو دوبارہ ایک xml فائل یا کنفیگریشن کلاسز لکھنے کی ضرورت ہے۔ اور اگر آپ کے پاس ایک چھوٹا پروجیکٹ ہے، تو پتہ چلتا ہے کہ آپ کم کوڈ نہیں لکھتے، بلکہ اس کے برعکس بھی۔ اس کے بعد ہم موسم بہار میں JPA کے ساتھ کام کو سمیٹتے ہیں؛ بہت سارے منصوبے ہیں، لیکن سب سے زیادہ آسان، یقینا، بہار کا ڈیٹا ہے۔ یہ ایک بہت بڑا پروجیکٹ ہے جو ممکنہ طور پر ہر ممکن چیز کے ساتھ کام کر سکتا ہے، بشمول JPA اور NoSQL اور مختلف پروجیکٹس کے ایک پورے گروپ، یہ ناقابل یقین حد تک جادوئی ہے، ہم اسے اپنے پروجیکٹ میں استعمال کریں گے۔ اسپرنگ کا استعمال کرتے ہوئے ہم ڈیٹا بیس کنکشن کی ترتیبات سے تقریباً چھٹکارا پا لیتے ہیں، بہار ہمارے لیے سب کچھ کرتی ہے، ہمیں صرف لین دین، کیشنگ، اور خاص معاملات میں گوگل (دوسروں کو دیکھیں) سیاق و سباق کی ترتیب میں کچھ دیگر ترتیبات پر قائم رہنے کی ضرورت ہے۔ لیکن ایک ہی وقت میں، زیادہ تر نوسکھئیے ڈویلپرز کو بالکل اندازہ نہیں ہے کہ موسم بہار میں پروجیکٹ کیسے بنایا جائے۔ لوکل ہوسٹ:8080/* سے شروع ہونے والے لنک کو فالو کرکے پراجیکٹ کو چلانے اور براؤزر میں نتیجہ حاصل کرنے کے لیے اسے کنفیگر کرنے کا طریقہ کوئی بھی نہیں جانتا۔ اور پھر اسپرنگ بوٹ تصویر میں آتا ہے! اسپرنگ بوٹ کے بارے میں ایک مخصوص مثال کے ساتھ بات کرنا بہتر ہے! آئیے خالی سے شروع کرتے ہیں۔ اسپرنگ بوٹ پروجیکٹ بنانے کے لیے، اسپرنگ ڈویلپر ٹیمپلیٹس بنانے کے لیے ایک "کنسٹرکٹر" لے کر آئے۔ آپ اسے ان کی ویب سائٹ پر استعمال کر سکتے ہیں، لیکن ہمارے پسندیدہ IDE، Intellij IDEA میں اسے کرنا بہت آسان ہے۔ اور اس طرح: File->New->Project ونڈو میں، Spring Initializr ٹیب پر جائیں، اس میں 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 + "!"; } } آئیے معلوم کریں کہ یہاں کیا ہو رہا ہے۔ @RestController _ بالکل وہی تشریح جس کے بارے میں میں نے اوپر لکھا ہے۔ ہم باقی کنٹرولر استعمال کرتے ہیں کیونکہ ہم فوری طور پر نتیجہ دیکھنا چاہتے ہیں اور .jsp صفحات (واہ) نہیں لکھنا چاہتے ہیں، ہمارے لیے براؤزر میں فوری طور پر نتیجہ کو سٹرنگ کے طور پر دیکھنا آسان ہوگا۔ @RequestMapping صرف ایک ایڈریس کا پابند ہے۔ عوامی پتہ کا سابقہ ​​یہ ہوگا: localhost:8080۔ جیسا کہ ہم دیکھ سکتے ہیں، پوری کلاس /hello ایڈریس پر ہینگ ہے ، اس کا مطلب ہے کہ اس کلاس کے اندر موجود تمام طریقوں کا سابقہ ​​ہے localhost:8080/hello۔ اگلا کلاس کا پہلا طریقہ ہے، اس کی اپنی نقشہ سازی میں Http پروٹوکول کا طریقہ اشارہ کیا گیا ہے - ایک GET درخواست (اپنے لئے Http پروٹوکول طریقوں کے بارے میں پڑھیں) اس سب کا کیا مطلب ہے؟ لوکل ہوسٹ:8080/ہیلو ایڈریس پر جی ای ٹی کی درخواست کرنے سے، ہمیں سٹرنگ "ہیلو ورلڈ!" کی شکل میں جواب موصول ہوگا، آئیے اسے چیک کریں! DemoApplication کلاس میں، ایک ٹھنڈی تشریح ہے جس کے بارے میں کہا جا سکتا ہے کہ پورے موسم بہار کے سیاق و سباق کو اکیلے ہی لانچ کیا جائے - @SpringBootApplication۔ اس کلاس کا بنیادی طریقہ جادوئی بن جاتا ہے، یہ صرف SpringApplication میں چھپے تمام جادو کو لانچ کرتا ہے، اگر آپ اس کلاس کے سیاق و سباق کے مینو کو کال کریں گے تو رن لائن میں آپشنز ظاہر ہوں گے، میں اسے سبز نشان کے ساتھ جلد شروع کرنے کا مشورہ دیتا ہوں، اس طرح کنسول بہتر نظر آئے گا اور مستقبل میں اس سے براہ راست لاگز کو پڑھنا آسان ہوگا۔ آئیے ایپلیکیشن لانچ کریں۔ جب کنسول آؤٹ پٹ رک جاتا ہے، تو آپ کو کنسول میں دیکھنا چاہیے۔
2015-09-02 09:25:36.895 INFO 5844 --- [ main] sbcetTomcatEmbeddedServletContainer : Tomcat پورٹ(s): 8080 پر شروع ہوا demo.DemoApplication : **** سیکنڈ میں ڈیمو ایپلیکیشن شروع کی (JVM 15.501 کے لیے چل رہا ہے)
جہاں "****" ایپلیکیشن لانچ کی مدت ہے :) اس کے بعد، کسی بھی براؤزر میں (یا curl، یا جو بھی آپ استعمال کرتے ہیں؟) آپ کو وہ پتہ ٹائپ کرنے کی ضرورت ہے جس پر کنٹرولر کا طریقہ میپ کیا گیا تھا۔
لوکل ہوسٹ: 8080/ہیلو
براؤزر کو کیننیکل ڈسپلے کرنا چاہئے۔
ہیلو ورلڈ!
یہاں آپ کے لیے ایک ویب ایپلیکیشن ہے! اگر آپ نے دیکھا کہ کنٹرولر میں ایک اور طریقہ ہے، اس کا اپنا ایڈریس میپنگ ہے؛ موجودہ ایڈریس میں پلیس ہولڈر شامل کیا جاتا ہے۔ جو اسپرنگ کے ذریعہ پیرامیٹر کے طور پر طریقہ کو منتقل کیا جاتا ہے۔ یہ اندازہ لگانا مشکل نہیں ہے کہ @PathVariable تشریح اس کے لیے ذمہ دار ہے۔ تو درخواست پر
لوکل ہوسٹ: 8080/ہیلو/آپ کا نام
براؤزر دکھائے گا۔
ہیلو، آپ کا نام!
ہم نے اسپرنگ بوٹ کی بنیادی باتوں کو ترتیب دیا ہے۔ اگلا، ہم ڈیٹا بیس کو منسلک کریں گے، لیکن یہ اگلی پوسٹ میں ہوگا۔ سب کا شکریہ.
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION