นักพัฒนาเว็บควรเข้าใจ TCP / IP และเราเตอร์จัดการการร้องขออย่างไร [ปิด]


15

ฉันมีการสัมภาษณ์งานในวันนี้สำหรับตำแหน่งงานในฐานะนักพัฒนาในเว็บไซต์ที่สำคัญ พวกเขาถามคำถามเกี่ยวกับการเขียนโปรแกรมภาษาตันซึ่งฉันสามารถตอบได้อย่างไม่มีปัญหา แต่จากนั้นพวกเขาเริ่มถามคำถามว่าคำขอ TCP / IP เกิดขึ้นได้อย่างไรเมื่อฉันส่งคำขอบนพีซีไปยังเว็บเซิร์ฟเวอร์ ฉันได้รับเนื้อหาเหล่านั้นในฐานะนักเรียน แต่ฉันจำไม่ได้ดีเพราะฉันทำงานเป็นส่วนใหญ่ในการพัฒนาเว็บไซต์คำถามของฉันคือ:

ในฐานะนักพัฒนาซอฟต์แวร์ซึ่งส่วนใหญ่ทำงานกับเว็บแอปพลิเคชันฉันจำเป็นต้องมีความรู้อย่างกว้างขวางเกี่ยวกับ TCP / IP และวิธีที่เราเตอร์จัดการการร้องขอหรือว่าเป็นเพียงความรู้เกี่ยวกับกล่องดำให้ฉัน


พวกเขาต้องการทราบเพิ่มเติมเกี่ยวกับวิธีการร้องขอ TCP / IP ในระดับแนวคิดหรือไม่หรือต้องการทราบข้อมูลเฉพาะ TCP / IP ใช้ภายใต้ประทุนทุกครั้งที่เราสื่อสารบนเครือข่าย โดยส่วนตัวผมเชื่อว่ามันสำคัญมากที่จะต้องเข้าใจว่าสิ่งต่าง ๆ ทำงานอย่างไรภายใต้หน้ากากอย่างน้อยที่สุดก็ในระดับแนวคิด สิ่งนี้จะช่วยให้คุณเห็นปัญหาและบ่อยครั้งที่จะออกแบบวิธีแก้ปัญหาที่ดีกว่า
Parag

คำตอบ:


25

ชนิดของความรู้นี้มาในมากที่มีประโยชน์มากไม่บ่อย

ตัวอย่างเช่นเมื่อทีม ops ของคุณตั้งค่าไซต์การผลิตของคุณหลังเราเตอร์ / ไฟร์วอลล์ / โหลดบาลานเซอร์ซึ่งตั้งค่าแตกต่างกันเล็กน้อยจากหนึ่งในสภาพแวดล้อมการทดสอบของคุณและคุณพบปัญหาเกี่ยวกับสิ่งนั้นมันจะให้บริการคุณได้อย่างชัดเจน อย่างรวดเร็วและพูดคุยกับ ops แทนที่จะขุดหารหัสแปลก ๆ มันจะช่วยให้คุณดียิ่งขึ้นเพื่อให้สามารถเข้าใจภาษาของพวกเขาเมื่อคุณมีการสนทนา

แต่ฉันไม่เข้าใจว่าทำไมผู้คนถึงให้ความสำคัญกับเรื่องนี้มากนักในการสัมภาษณ์โดยเฉพาะอย่างยิ่งเมื่อเป็นโปรแกรมเมอร์จูเนียร์ แน่นอนว่ามันไม่ใช่ความรู้ที่จำเป็นสำหรับทุกคนในทีมและคุณสามารถสอนได้


2
ข้อดีของโปรแกรมเมอร์รุ่นใหม่ที่ดี แต่ฉันไม่แน่ใจว่าตำแหน่งระดับใด @forgotmynick ใช้สำหรับ :-)
Dean Harding

@Dean - จุดยุติธรรม ฉันมักจะคิดว่าคนที่อ้างถึงเมื่อพวกเขาเป็นนักเรียนไม่ได้อยู่ใน dev 5+ ปี แต่คุณพูดถูกนั่นไม่ใช่กรณีเสมอไป
สาธารณรัฐประชาธิปไตยประชาชนลาว

1
อย่างน้อยก็รู้ว่าจะเกิดอะไรขึ้นเมื่อเราเตอร์ทำการเชื่อมต่ออย่างเงียบ ๆ มันดีมากในการตั้งค่าการผลิต ถูกกัดโดยที่มากกว่าหนึ่งครั้ง

@pdr - ฉันไม่เห็นด้วย ความรู้ประเภทนี้มีประโยชน์เมื่อคุณต้องการทราบว่าเหตุใดจึงใช้เวลานานหรือเหตุใดการอัปเดตที่คุณทำกับไซต์ของคุณจึงไม่ปรากฏในเบราว์เซอร์ของผู้ใช้ ใครก็ตามที่มีความรู้เครือข่ายจะรู้คำตอบ: แคช โดยส่วนตัวในฐานะที่ปรึกษาฉันได้ทำการแก้ไขสิ่งที่ง่าย ๆ อย่างโง่เขลา (และเสียค่าใช้จ่ายมากสำหรับ บริษัท ) สิ่งต่าง ๆ ที่ผู้คนจะหลีกเลี่ยงหากพวกเขารู้จักสิ่งเหล่านี้ มันไม่เหมือนกับวิทยาศาสตร์จรวดหรือกลศาสตร์ควอนตัมเช่นกัน ฉันหมายถึง c'mon ไม่มีข้อแก้ตัวสำหรับผู้พัฒนา jr ที่ไม่ต้องรู้เกี่ยวกับสิ่งนี้ (โดยเฉพาะถ้ามีพื้นฐานของ CS)
luis.espinal

@ luis.espinal - โดยความจริงแล้วฉันไม่คิดว่าจะมีการแคชในหมวดหมู่เดียวกันเลย มันไม่ใช่สิ่งเครือข่าย แต่เป็นสิ่งที่เบราว์เซอร์ ฉันเห็นด้วยกับคุณว่าการแคช (เบราว์เซอร์หรือเซิร์ฟเวอร์) เป็นสิ่งที่ทุกคนต้องเข้าใจเพราะมันเรียบง่าย แต่มี gotchas มากมาย แต่ TCP / IP
สาธารณรัฐประชาธิปไตยประชาชนลาว

16

ความเห็นส่วนตัวของฉันคือผู้พัฒนาเว็บควรรู้ว่าโปรโตคอลระดับต่ำทำงานอย่างไร โดยเฉพาะอย่างยิ่ง HTTP แต่ยัง (อย่างน้อยพื้นฐาน) ของ TCP / IP ขึ้นอยู่กับความซับซ้อนของไซต์ของคุณคุณอาจพบว่าตัวเองต้องดู HTTP trace dumps หรือแม้แต่tcpdumplog ในกรณีนี้คุณต้องมีความรู้เกี่ยวกับ TCP / IP อย่างน้อย

ตอนนี้ไม่ว่าคุณจะเคยดูที่ tcpdump ขึ้นอยู่กับรายละเอียดของไซต์ของคุณหรือไม่ ตัวอย่างเช่นหากคุณมีเว็บไซต์ขนาดใหญ่ที่มีผู้ใช้และเซิร์ฟเวอร์จำนวนมากกระจายอยู่ทั่วศูนย์ข้อมูลหลายแห่งทำให้มีคำขอจำนวนมาก (เช่น Ajax โดยเฉพาะอย่างยิ่งคำขอสไตล์ Comet เช่นกัน) ดังนั้นtcpdumps อาจเป็นสิ่งที่คุณต้องการ ' จะต้องดู

หากสิ่งที่คุณกำลังทำอยู่คืออินทราเน็ตไซต์หรือบางสิ่งที่ค่อนข้างง่ายความรู้อาจไม่สำคัญนัก แต่ฉันก็ยังคิดว่าการรู้ว่าสิ่งที่อยู่ในระดับต่ำจะช่วยได้เสมอ


3
ฮ่า ๆ ... ฉันจะไม่เรียก http เป็นโปรโตคอลระดับต่ำ
Pemdas

2
@Permdas: มันคือทั้งหมดที่เกี่ยวข้อง HTTP เป็นระดับที่สูงกว่า TCP แต่ระดับที่ต่ำกว่า SOAP
Dean Harding

1
SOAP เป็นสิ่งที่เฉพาะเจาะจงสำหรับการนำไปใช้งานมากกว่าโปรโตคอล น่าเสียดายที่การใช้งานของมันอยู่ใกล้กันมากจนพวกเขาเรียกมันว่า "โปรโตคอล"
kagali-san

HTTP: ใช่ TCP / IP: ความเข้าใจเบื้องต้นว่าทำไมการดำเนินการในระดับที่สูงขึ้นอาจเป็นเรื่องปกติ ฉันสงสัยว่าจำเป็นต้องมีความรู้เชิงลึก (หรือมีประโยชน์บ่อยเกินไป) ในสภาพแวดล้อมการพัฒนาเว็บ
Andy Hunt

7

มีประโยชน์เสมอที่จะเข้าใจว่าเลเยอร์ที่อยู่ใต้เลเยอร์ที่คุณเขียนโค้ดนั้นทำงานได้ดีเพียงใดเพราะมันมีประโยชน์มากเมื่อคุณพยายามแก้ไขข้อบกพร่องที่ค่อนข้างซับซ้อนและคุณต้องเข้าใจว่าทำไมแอปพลิเคชันของคุณมีปัญหาประสิทธิภาพที่ไม่คาดคิด บน WAN หรือเหตุใดจึงล้มเหลวสำหรับผู้ใช้ที่ใช้ NAT เป็นต้นนอกจากนี้ยังสามารถประเมินค่าได้เมื่อคุณต้องอยู่ในห้องที่พูดคุยปัญหากับนักพัฒนาผู้ดูแลระบบผู้ดูแลเว็บเซิร์ฟเวอร์ผู้ดูแลระบบเครือข่ายและผู้ดูแลฐานข้อมูล พูดและเข้าใจภาษาที่ทุกคนพูดและถามคำถามที่ฉลาด และยิ่งคุณเข้าใจรายละเอียดการใช้งานต่าง ๆ มากเท่าไรคุณก็ยิ่งมีความสามารถในการสร้างเว็บไซต์ที่ปรับขนาดได้เช่น

ดังกล่าวมีจุดลดลงอย่างชัดเจนว่าการเรียนรู้เพิ่มเติมเกี่ยวกับสิ่งที่เป็นนามธรรมซึ่งเป็นนามธรรมที่ 6 ชั้นห่างจากรหัสที่คุณเขียนไม่น่าจะทำให้คุณเป็นนักพัฒนาเว็บที่ดีขึ้น ดังนั้นมันจะขึ้นอยู่กับขอบเขตของสิ่งที่คุณหมายถึงโดย "กว้างขวาง" การทำความเข้าใจพื้นฐานของวิธีที่เราเตอร์จัดการคำขอเป็นสิ่งที่อาจมีประโยชน์มาก แต่การทำความเข้าใจว่าเราเตอร์ที่แตกต่างกันสามารถกำหนดค่าเพื่อจัดลำดับความสำคัญของปริมาณการใช้งานที่แตกต่างกันอาจไม่เป็นประโยชน์อย่างมากเว้นแต่คุณจะทำงานกับแอปพลิเคชั่น เพื่อเค้น

แต่แม้ว่ามันจะไม่เป็นประโยชน์โดยเฉพาะนักพัฒนาที่แข็งแกร่งมักจะอยากรู้เกี่ยวกับเลเยอร์ที่แตกต่างกันของสแต็คและมีแนวโน้มที่จะเรียนรู้เกี่ยวกับพวกเขาแม้ว่าจะไม่มีประโยชน์ที่ชัดเจนในการทำเช่นนั้น ฉันมักจะคาดหวังว่านักพัฒนาเว็บที่มีความเข้าใจอย่างลึกซึ้งเกี่ยวกับวิธีการทำงานของฐานข้อมูลเชิงสัมพันธ์หรือการทำงานของระบบเครือข่ายจะดีกว่านักพัฒนาเว็บที่ จำกัด การรับรู้เกี่ยวกับเทคโนโลยีการพัฒนาเว็บเพียงอย่างเดียว เห็นได้ชัดว่ามันไม่ใช่ความสัมพันธ์ที่สมบูรณ์แบบ แต่ก็สมเหตุสมผลที่จะถาม


+1 สำหรับ"นอกจากนี้ยังสามารถประเมินค่าได้เมื่อคุณจำเป็นต้องอยู่ในห้องคุยปัญหากับนักพัฒนาผู้ดูแลระบบเว็บเซิร์ฟเวอร์ผู้ดูแลเครือข่ายและผู้ดูแลฐานข้อมูลเพื่อให้สามารถพูดและเข้าใจภาษาที่คนอื่นพูด และถามคำถามที่ชาญฉลาด "
Parag

5

ขึ้นอยู่กับเว็บไซต์ที่คุณกำลังสร้าง สำหรับเว็บไซต์ขนาดเล็ก / ขนาดกลางความรู้พื้นฐานของ TCP / IP น่าจะดี

หากคุณกำลังทำงานบนเว็บไซต์ชั้นนำ (ในแง่ของปริมาณข้อมูล) ความรู้โดยละเอียดเกี่ยวกับโปรโตคอลเครือข่ายพื้นฐานและโครงสร้างพื้นฐานเป็นสิ่งสำคัญอย่างยิ่ง มันจะแนะนำคุณบ่อยครั้งในการตัดสินใจออกแบบที่ดี


3

ในความคิดของฉันคุณต้องรู้ว่าบิตได้รับจากแอปพลิเคชันของคุณไปยังเซิร์ฟเวอร์และย้อนกลับโดยเฉพาะอย่างยิ่งสำหรับตำแหน่งการพัฒนาเว็บ ไม่มีกล่องดำในการเขียนโปรแกรม ทุกนามธรรมรั่วไหล


2

ในฐานะนักพัฒนาซอฟต์แวร์ซึ่งส่วนใหญ่ทำงานกับเว็บแอปพลิเคชันฉันจำเป็นต้องมีความรู้อย่างกว้างขวางเกี่ยวกับ TCP / IP และวิธีที่เราเตอร์จัดการคำขอหรือเป็นเพียงแค่กล่องดำความรู้สำหรับฉัน

IMO ความจริงที่ว่าคุณเป็นนักพัฒนาซอฟต์แวร์ (ฉันคิดว่ามีพื้นหลัง CS) ควรรู้เกี่ยวกับสิ่งเหล่านี้ โดยเฉพาะถ้าคุณทำการพัฒนาเว็บไซต์ ดังที่ฉันได้กล่าวถึงหนึ่งในความคิดเห็นของฉันฉันได้ทำค่าธรรมเนียมการให้คำปรึกษา sh * เพียงแค่แก้ไขข้อผิดพลาดโง่ ๆ ที่ทำโดยคนที่ไม่ทราบเกี่ยวกับพื้นฐานของสถาปัตยกรรมเครือข่าย / อินเทอร์เน็ต

ZOMG การเปลี่ยนแปลงที่ฉันทำกับเว็บไซต์ของฉันไม่แสดงโปรดช่วยด้วย! * ZOMG โปรไฟล์ของผู้คนกำลังถูกข้ามเนื่องจากเซสชันกำลังถูกเก็บไว้ที่ใดที่หนึ่งโปรดช่วยด้วย! * ZOMG เรามีเนื้อหาที่ปลอดภัยสำหรับผู้ใช้ที่ได้รับการรับรองความถูกต้อง แต่ผู้คนสามารถเข้าถึงพวกเขาด้วยบุ๊คมาร์คและหน้าจอรับรองความถูกต้อง ช่วยด้วย! "

... และอื่น ๆ ... เศร้า ...

มีสิ่งต่าง ๆ มากมายระหว่างแอปพลิเคชันเว็บของคุณกับเบราว์เซอร์ของผู้ใช้: แอปของคุณแอป NIC เราเตอร์และไฟร์วอลล์ของคุณจากนั้นเซิร์ฟเวอร์ HTTP ของคุณภายใน NIC จากนั้นเซิร์ฟเวอร์ HTTP ของคุณจากนั้นเซิร์ฟเวอร์ HTTP ของคุณ เราเตอร์และไฟร์วอลล์แน่นอนที่สุด จากนั้นเป็นอุปกรณ์แคชและอาจเป็นอุปกรณ์ SSL จากนั้นออกสู่อินเทอร์เน็ตด้วยเราเตอร์และแคชเซิร์ฟเวอร์ที่มากขึ้นจากนั้นก็ไปยังเบราว์เซอร์ของผู้ใช้ของคุณ (และแคชภายใน)

zillion สามารถผิดพลาดได้และถ้าคุณไม่มีความรู้เล็กน้อยเกี่ยวกับระบบเครือข่ายโปรโตคอลเครือข่ายระบบปฏิบัติการ / ดูแลระบบและสถาปัตยกรรมอินเทอร์เน็ตคุณจะหลงทางและอยู่ในความดูแลของแผนกไอทีแผนกไอทีของคุณ ไม่สามารถเข้าถึงโครงสร้างพื้นฐานและไม่รู้ว่าจะค้นหาเมื่อแก้ไขปัญหาต่าง ๆ ) ที่แย่ที่สุดมันจะทำให้คุณเป็นนักพัฒนาเว็บที่เส็งเคร็งจริงๆ

ด้านการเขียนโปรแกรมของการพัฒนาเว็บเป็นเพียงแค่หนึ่งด้าน การดำเนินการที่ประสบความสำเร็จนั้นตั้งอยู่อย่างสมบูรณ์เหนือกว่าทักษะอื่น ๆ (โดยเฉพาะเครือข่ายและการบริหารระบบ) ที่ไม่สามารถดำเนินการเพื่อรับหรือมอบหมายอย่างสุ่มสี่สุ่มห้าเพื่อการดำเนินงานด้านไอที ไม่ได้หมายความว่าคุณต้องรับผิดชอบการแก้ไขปัญหาเครือข่าย / ระบบปฏิบัติการ แต่

คุณต้องรู้ว่าสิ่งใดที่ผิดพลาดได้ในระดับเครือข่าย / ระบบปฏิบัติการเพื่อให้คุณสามารถร่วมมือและให้คำแนะนำแก่ OPS ไอทีที่ไม่เคยมีความรู้เกี่ยวกับแอปพลิเคชันของคุณมาก่อน ข ความรู้ดังกล่าวช่วยให้คุณสามารถสร้างระบบของคุณเพื่อหลีกเลี่ยงหรืออย่างน้อยก็ช่วยเหลือและแก้ไขข้อผิดพลาดดังกล่าวได้อย่างสวยงาม

การเขียนโปรแกรมเป็นเพียงส่วนหนึ่งของวิศวกรรมและการพัฒนา มันไม่สามารถเป็นทักษะหลักของคุณและประสบความสำเร็จอย่างแท้จริงในระยะยาวในการพัฒนาองค์กรโดยทั่วไปและโดยเฉพาะอย่างยิ่งการพัฒนาเว็บสิ่งเหล่านี้เป็นสิ่งที่คุณต้องรู้ และตรงไปตรงมาสิ่งเหล่านี้เป็นสิ่งที่ควรเรียนรู้ (อย่างแน่นหนา) ทั้งในโรงเรียนหรือผ่านการเรียนรู้ด้วยตนเองก่อนสำเร็จการศึกษา (หรือทันทีที่เข้าสู่ตลาดงาน)

โชคดี.


1

สิ่งสำคัญคือต้องเข้าใจ TCP / IP และวิธีที่เราเตอร์จัดการคำขอ แต่คุณไม่ทราบว่าจำเป็นต้องมีความรู้ที่ครอบคลุมในการสัมภาษณ์ น้อยกว่าที่มันถูกแสดงออกมาก่อนหน้านี้ มิฉะนั้นคุณทั้งสองก็เสียเวลา ฟังดูเหมือนกับดัก

แต่สำหรับบทบาทสถาปนิกฉันเชื่อมั่นว่าความรู้นี้มีความสำคัญไม่ว่าในกรณีใด ๆ คนที่แต่งตัวประหลาดจะให้บริการโซลูชั่นที่สามารถใช้ประโยชน์จากการใช้หรือแม้แต่การจำลองสถาปัตยกรรมในโซลูชันที่กำหนด มีวันหยุดสุดสัปดาห์กับ Tanenbaum Networks และใช้งานง่าย !!


1

นี่เป็นคำถามที่ยุ่งยาก ใช่ฉันคิดว่านักพัฒนาทุกคนควรมีความรู้พื้นฐาน TCP / IP และวิธีการจัดระเบียบเครือข่ายตามโปรโตคอลนั้น อย่างไรก็ตามสิ่งนี้นำไปสู่คำถามว่าพื้นที่รอบรู้ขั้นพื้นฐานได้รับการพิจารณาให้เป็นอย่างไร

ฉันคิดว่าโดยไม่ต้องเผชิญกับปัญหาใด ๆ (ดังนั้นจึงจำเป็นต้องรู้ว่าสิ่งต่าง ๆ มีการจัดระเบียบ "ลงไปที่นั่น") นักพัฒนาควรรู้ว่าแพ็คเก็ตคืออะไรและแพ็คเก็ตกระจายผ่านเครือข่ายอย่างไร เข้ามาติดต่อด้วย) อย่างไรก็ตามฉันคิดว่ามันเพียงพอที่จะรู้ว่าเราเตอร์กระจายแพ็คเก็ตไปยังผู้รับทั้งหมดและสวิตช์ส่งมอบแพ็กเก็ตไปยังผู้รับบางคน ฉันยังไม่ต้องการ devloper ทุกสิ่งที่ subnet - ฉันแน่ใจว่าไม่ทราบรายละเอียดทั้งหมดด้วยตัวเอง ;-) ฉันควรจะรู้ว่า subnets อาจถูกแยกออกและแพ็กเก็ตจำเป็นต้องถูกส่งจากเน็ต A ไปยังเน็ต B แต่ทั้งหมด รายละเอียดเป็นวิธีที่มากสำหรับนักพัฒนาทั่วไป

ฉันคิดว่ามันเหมือนกับการขับรถ: คุณควรรู้ว่าทำไมคุณถึงต้องการเครื่องยนต์และทำไมคุณถึงต้องการเชื้อเพลิง แต่ในฐานะที่เป็นคนขับโดยเฉลี่ยคุณไม่จำเป็นต้องรู้วิธีคำนวณส่วนผสมที่สมบูรณ์แบบของเชื้อเพลิงและอากาศสำหรับกระบวนการเผาไหม้


0

มีบางสิ่งที่น่าผิดหวังมากกว่าคนที่ไม่เข้าใจพื้นฐานของสิ่งที่เกิดขึ้นรอบตัว มันนำไปสู่การถามคำถามเดียวกันซ้ำแล้วซ้ำอีก (แน่นอนอยู่ในรูปแบบที่แตกต่างกันเล็กน้อย)

เมื่อคุณพบว่าตัวเองถามคำถามซ้ำ ๆ ก็ถึงเวลาที่จะอ่านหนังสือ ตัวอย่างคำถามล่าสุดที่ฉันได้รับ:

  • "ฉันจะกำหนดค่าเครือข่ายได้อย่างไรถ้า xyz" ...
  • "ฉันจะกำหนดค่าเครือข่ายได้อย่างไรถ้า abc" ...
  • ทำซ้ำ ...

ในความเป็นจริงฉันได้รับคำถามซ้ำ ๆ มากมายจากผู้ที่พบว่าถามได้ง่ายกว่าการเรียนรู้ฉันเริ่มติดตามพวกเขาและสร้างสไลด์ Powerpoint ตอนนี้ทุก ๆ หกเดือนหรือมากกว่านั้นฉันเริ่มเรียนภาคปฏิบัติ ผู้คนสามารถอ้างอิงสไลด์ที่ฉันทำ ต่อมาเมื่อพวกเขาถามสิ่งที่เราพูดถึงในชั้นเรียนฉันพูดถึงมันเบา ๆ และพวกเขามักจะจำได้ว่าเราปิดมันและไปอ่านสไลด์อีกครั้งสำหรับตัวเอง ผู้ที่เรียนรู้เรื่องนี้ดีกว่าจริง ๆ และพบว่ามันมีค่า มันสร้างความแตกต่างที่น่าทึ่งในรูปแบบของการขัดจังหวะน้อยลงกับวันทำงานของฉัน

อีกความคิดหนึ่ง: ในโลกแห่งความเป็นจริงระบบจริงมีปัญหาและปัญหามากมายมัน จำกัด อย่างไม่น่าเชื่อที่จะรู้มากกว่าแค่ความรู้เฉพาะโดเมนของคุณ ความคิดใด ๆ ว่าพื้นฐานพื้นฐานทำงานอย่างไรสามารถช่วยคุณได้

ทีนี้ถ้ามันอยู่นอกขอบเขตของสิ่งที่คุณควรรู้จริง ๆ แล้วก็ไม่เป็นไร แต่ถ้าคุณพบว่าตัวเองถามคำถามมากกว่าหนึ่งครั้งให้เรียนรู้มัน คุณจะไม่เสียใจ

ไชโยที่ถามคำถาม ไม่หยุดเรียน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.