คำถามติดแท็ก design

คำถามเกี่ยวกับการแก้ปัญหาและการวางแผนแก้ปัญหาผ่านการออกแบบซอฟต์แวร์

9
ชั้นเรียนที่มีวิธีการเดียว (สาธารณะ) เป็นปัญหาหรือไม่?
ฉันกำลังทำงานในโครงการซอฟต์แวร์ที่ทำการบีบอัดและจัดทำดัชนีวิดีโอคลิปการเฝ้าระวังวิดีโอ การบีบอัดทำงานโดยการแยกพื้นหลังและวัตถุเบื้องหน้าจากนั้นให้บันทึกพื้นหลังเป็นภาพนิ่งและส่วนหน้าเป็นสไปรต์ เมื่อเร็ว ๆ นี้ฉันได้เริ่มต้นการทบทวนบางคลาสที่ฉันออกแบบมาสำหรับโครงการ ฉันสังเกตเห็นว่ามีหลายคลาสที่มีวิธีการสาธารณะเพียงครั้งเดียวเท่านั้น บางส่วนของชั้นเรียนเหล่านี้คือ: VideoCompressor (ด้วยcompressวิธีการที่ใช้ในวิดีโออินพุตประเภทRawVideoและส่งกลับวิดีโอประเภทเอาต์พุตCompressedVideo) VideoSplitter (ด้วยsplitวิธีที่ใช้ในอินพุตวิดีโอประเภทRawVideoและส่งคืนเวกเตอร์ของวิดีโอเอาต์พุต 2 ชนิดแต่ละประเภทRawVideo) VideoIndexer (ด้วยindexวิธีที่ใช้ในวิดีโออินพุตประเภทRawVideoและส่งกลับดัชนีวิดีโอประเภทVideoIndex) ฉันพบตัวเอง instantiating แต่ละชั้นเรียนเพียงเพื่อให้สายเช่นVideoCompressor.compress(...), ,VideoSplitter.split(...)VideoIndexer.index(...) บนพื้นผิวฉันคิดว่าชื่อชั้นเรียนมีความหมายเพียงพอของฟังก์ชั่นที่ตั้งใจไว้และเป็นคำนามจริง ๆ ตามลําดับวิธีการของพวกเขายังเป็นคำกริยา ปัญหานี้จริงหรือ

2
การปรับปรุง MVP ผ่าน MVC คืออะไร
ฉันได้อ่านสามวันเกี่ยวกับModel-View-Controller (MVC)และModel-View-Presenter (MVP)รูปแบบ และมีคำถามหนึ่งที่รบกวนจิตใจฉันอย่างมาก ทำไมนักออกแบบซอฟต์แวร์จึงคิดค้น MVP เมื่อมี MVC อยู่แล้ว พวกเขาประสบปัญหาอะไรบ้าง MVC ไม่ได้แก้ปัญหา (หรือแก้ไขไม่ดี) แต่ MVP สามารถแก้ไขได้ MVP ปัญหาใดที่ตั้งใจจะแก้ไข? ฉันได้อ่านบทความมากมายเกี่ยวกับประวัติและคำอธิบายของ MVP หรือเกี่ยวกับความแตกต่างระหว่าง MVC และ MVP แต่ไม่มีคำตอบที่ชัดเจนสำหรับคำถามของฉัน ในหนึ่งในบทความที่ฉันอ่านมันก็บอกว่า: ตอนนี้เข้าสู่ Model View Presenter ซึ่งเป็นการตอบสนองต่อความไม่เพียงพอของรูปแบบ MVC เมื่อนำไปใช้กับส่วนติดต่อผู้ใช้แบบกราฟิกที่ใช้องค์ประกอบที่ทันสมัย ในระบบ GUI ที่ทันสมัยส่วนประกอบของ GUI จะจัดการกับอินพุตของผู้ใช้เช่นการเคลื่อนไหวของเมาส์และการคลิกแทนที่จะเป็นตัวควบคุมส่วนกลาง ดังนั้นฉันจึงไม่เข้าใจ แต่จริง ๆ แล้วมันสามารถเป็นไปได้ในทางอื่นเช่นองค์ประกอบ GUI ไม่จัดการกับการป้อนข้อมูลของผู้ใช้ด้วยตัวเอง? และ "จัดการกับตัวเอง" หมายความว่าอย่างไร?

7
สองโครงสร้างที่มีสมาชิกเดียวกัน แต่ตั้งชื่อต่างกันมันเป็นความคิดที่ดีใช่ไหม
ฉันกำลังเขียนโปรแกรมที่เกี่ยวข้องกับการทำงานกับพิกัดเชิงขั้วและคาร์ทีเซียน มันสมเหตุสมผลหรือไม่ที่จะสร้างสองโครงสร้างที่แตกต่างกันสำหรับแต่ละประเภทของคะแนนซึ่งเป็นหนึ่งเดียวกับXและYสมาชิกและอีกหนึ่งเป็นด้วยRและThetaสมาชิก หรือมันมากเกินไปและดีกว่าถ้ามีโครงสร้างเดียวfirstและsecondเป็นสมาชิก สิ่งที่ฉันกำลังเขียนนั้นง่ายและจะไม่เปลี่ยนแปลงมากนัก แต่ฉันอยากรู้ว่าอะไรจะดีไปกว่านี้ในมุมมองของการออกแบบ ฉันคิดว่าตัวเลือกแรกดีกว่า ดูเหมือนว่าอ่านได้มากขึ้นและฉันจะได้รับประโยชน์จากการตรวจสอบประเภท
49 design 

6
คำขอขนาดเล็กจำนวนมากเทียบกับคำขอขนาดใหญ่จำนวนน้อย (การออกแบบ API)
ฉันกำลังทำงานในโครงการกับองค์กรดังต่อไปนี้: ไคลเอ็นต์ - รับข้อมูลจากเซิร์ฟเวอร์หลักผ่าน REST api เซิร์ฟเวอร์ - ร้องขอข้อมูลจากเซิร์ฟเวอร์อื่น ๆ ผ่าน API ของบุคคลที่สาม API ของบุคคลที่สาม - บริการอยู่นอกเหนือการควบคุมของฉันที่ให้ข้อมูลกับเซิร์ฟเวอร์ (Reddit, Hackernews, Quora ฯลฯ ) เพื่อประโยชน์ในการโต้แย้งสมมติว่าลูกค้าต้องการรายการจาก API บุคคลที่สามแต่ละรายการก่อน จากรายการนี้รายการจะถูกเลือก ณ จุดที่ลูกค้าต้องการดูเนื้อหาทั้งหมดของรายการรวมถึงการตอบกลับ (เช่นความคิดเห็น) ไปยังรายการ ฉันพยายามตัดสินใจระหว่างสามตัวเลือก: อาหารตามสั่ง ในวิธีการนี้ฉันจะมีจุดสิ้นสุด 3 จุดแยกกันบนเซิร์ฟเวอร์ของฉัน: รายการหนึ่งเพื่อรับรายการรายการหนึ่งรายการเพื่อรับเนื้อหาหลักสำหรับรายการและอีกรายการหนึ่งเพื่อรับการตอบกลับของรายการ ข้อดี: ฉันไม่เคยขอมากกว่าที่ต้องการการร้องขอควรมีขนาดเล็กดังนั้นโดยทั่วไปพวกเขาควรจะเร็วกว่า ข้อด้อย: ฉันต้องขอจำนวนมาก หลังจากเลือกรายการจากรายการผู้ใช้อาจต้องรอก่อนเห็นเนื้อหาหลักจากนั้นรออีกนานเพื่อดูการตอบกลับ แคชฝั่งเซิร์ฟเวอร์ ในคำขอนี้ฉันจะโทรหาเซิร์ฟเวอร์ของฉันเพื่อ "ดึง" ข้อมูลทั้งหมดสำหรับแหล่งที่มาทั้งหมด ข้อมูลจะถูกแคชบนเซิร์ฟเวอร์ จากนั้นไคลเอ็นต์จะมีจุดสิ้นสุด REST แบบเดิมเหมือนกันยกเว้นจะไม่มีการรอระหว่างการโทรเนื่องจากเซิร์ฟเวอร์ของฉันมีข้อมูลอยู่แล้วและจะต้องป้อนให้กับลูกค้า ข้อดี: …

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

19
ให้บริการงานพื้นหลังในไซต์ขนาดใหญ่
เรากำลังจัดการกับปัญหาที่น่าสนใจใน StackOverflow เรามีงานเล็ก ๆ น้อย ๆ "ที่ต้องทำในไม่ช้า" ตัวอย่างกำลังอัปเดตรายการ "คำถามที่เกี่ยวข้อง" สิ่งที่เราทำในอดีตคือการแบกภาระงานเหล่านั้นลงบนหน้าโหลดของผู้ใช้บางคน เรื่องนี้ไม่เหมาะ แต่ก็ไม่ได้สังเกตเห็นได้ชัดเจนจริงๆ ตอนนี้ SO จึงผ่านเครื่องหมายคำถาม 1,000,000 รายการผู้ใช้ที่โชคร้ายเหล่านั้นเริ่มรู้สึก วิธีแก้ปัญหาตามธรรมชาติคือการผลักงานเหล่านี้เป็นพื้นหลัง มีสองวิธีในการทำสิ่งนี้ที่ฉันกำลังพิจารณา 1. ใน IIS เป็น Thread-Pool / Work-Queue ที่กำหนดเอง โดยพื้นฐานแล้วเราจะหมุนเธรดไม่กี่อัน (ไม่ใช่ThreadPoolเพื่อไม่รบกวน IIS) และให้พวกเขาให้บริการคอลเลกชันบางอย่างที่เรากำลังผลักให้Funcsทำงาน โปรใหญ่ที่นี่คือความเรียบง่าย เราไม่ต้องกังวลเกี่ยวกับการจัดการอะไรเลยและเราไม่จำเป็นต้องตรวจสอบให้แน่ใจว่าบริการจากภายนอกนั้นพร้อมแล้วที่จะตอบสนอง นอกจากนี้เรายังสามารถเข้าถึงรหัสทั่วไปของเราทั้งหมด คอนดิชั่นก็คือว่าเราไม่ควรใช้เธรดพื้นหลัง การคัดค้านที่ฉันรู้นั้นมีศูนย์กลางอยู่ที่ IIS ที่หิวโหย (ถ้าคุณใช้ ThreadPool) และเธรดที่สุ่มแบบสุ่ม (เนื่องจากการรีไซเคิล AppPool) เรามีโครงสร้างพื้นฐานที่มีอยู่เพื่อทำให้เธรดที่ตายแบบสุ่มไม่ใช่ประเด็น (เป็นไปได้ในการตรวจสอบงานที่ถูกทอดทิ้งโดยทั่วไป) และ จำกัด จำนวนเธรด (และการใช้เธรดที่ไม่ใช่ ThreadPool) …

9
คลาสผู้จัดการสามารถเป็นสัญลักษณ์ของสถาปัตยกรรมที่ไม่ดีได้หรือไม่?
เมื่อเร็ว ๆ นี้ฉันเริ่มคิดว่าการมีคลาสผู้จัดการจำนวนมากในการออกแบบของคุณเป็นสิ่งที่ไม่ดี ความคิดนั้นไม่เพียงพอสำหรับฉันที่จะโต้แย้งที่น่าสนใจ แต่นี่คือประเด็นทั่วไปบางประการ: ฉันพบว่ามันยากมากสำหรับฉันที่จะเข้าใจระบบที่ต้องพึ่งพา "ผู้จัดการ" เป็นอย่างมาก นี่เป็นเพราะนอกเหนือจากองค์ประกอบของโปรแกรมที่เกิดขึ้นจริงคุณต้องเข้าใจวิธีการและเหตุผลที่จะใช้ผู้จัดการ ผู้จัดการหลายครั้งดูเหมือนว่าจะใช้เพื่อบรรเทาปัญหาในการออกแบบเช่นเมื่อโปรแกรมเมอร์ไม่สามารถหาวิธีที่จะทำให้โปรแกรม Just Work TMและต้องอาศัยคลาสผู้จัดการเพื่อให้ทุกอย่างทำงานได้อย่างถูกต้อง แน่นอนผู้จัดการได้ดี ตัวอย่างที่ชัดเจนคือโครงสร้างที่EventManagerฉันโปรดปรานตลอดกาล : P ประเด็นของฉันคือผู้จัดการดูเหมือนจะใช้เวลามากเกินไปและไม่มีเหตุผลที่ดีไปกว่าการปิดบังปัญหากับสถาปัตยกรรมของโปรแกรม คลาสผู้จัดการเป็นสัญลักษณ์ของสถาปัตยกรรมที่ไม่ดีจริง ๆ หรือไม่?

10
การแยกแอพพลิเคชั่นแบบเสาหินออกเป็นส่วนเล็ก ๆ หลาย ๆ อันช่วยป้องกันข้อผิดพลาดหรือไม่? [ปิด]
วิธีการถามนี้ก็คือ; ทำไมโปรแกรมมีแนวโน้มที่จะเป็นเสาหิน? ฉันกำลังคิดถึงบางสิ่งเช่นแพ็คเกจอนิเมชั่นเช่น Maya ซึ่งผู้คนใช้สำหรับเวิร์กโฟลว์ต่างๆ หากความสามารถในการเคลื่อนไหวและการสร้างแบบจำลองถูกแบ่งออกเป็นแอปพลิเคชันแยกต่างหากของตนเองและพัฒนาแยกต่างหากเมื่อไฟล์ถูกส่งผ่านระหว่างกันจะไม่สามารถดูแลรักษาได้ง่ายขึ้นหรือไม่

6
AJAX ที่ซ่อนไว้นั้นปลอดภัยแค่ไหนที่ขอประสิทธิภาพปลอมมา?
คำขอ AJAX ที่ซ่อนอยู่คืออะไร ฉันสังเกตเห็นการเพิ่มขึ้นของการใช้คำขอ AJAX ที่ซ่อนอยู่ซึ่งออกแบบมาเพื่อให้การกระทำของผู้ใช้ปรากฏขึ้นทันที ฉันจะอ้างถึงคำขอ AJAX ประเภทนี้ว่าไม่ปิดกั้น มันเป็นคำขอ AJAX ที่เกิดขึ้นโดยที่ผู้ใช้ไม่ได้ตระหนักว่ากำลังเกิดขึ้นมันถูกดำเนินการในพื้นหลังและการดำเนินการของมันเงียบ ( ไม่มี verbose เพื่อระบุว่าการโทร AJAX เสร็จสมบูรณ์แล้ว ) เป้าหมายคือเพื่อให้การดำเนินการปรากฏว่ามันเกิดขึ้นทันทีเมื่อมันยังไม่เสร็จ นี่คือตัวอย่างของคำขอ AJAX ที่ไม่ปิดกั้น ผู้ใช้คลิกที่ลบในชุดอีเมล รายการจะหายไปจากกล่องจดหมายทันทีและสามารถดำเนินการต่อกับการดำเนินการอื่นได้ ในขณะเดียวกันคำขอ AJAX กำลังประมวลผลการลบรายการในพื้นหลัง ผู้ใช้กรอกฟอร์มสำหรับบันทึกใหม่ คลิกบันทึก รายการใหม่จะปรากฏในรายการทันที ผู้ใช้สามารถเพิ่มระเบียนใหม่ต่อไปได้ เพื่อชี้แจงนี่คือตัวอย่างของการปิดกั้นการร้องขอ AJAX; ผู้ใช้คลิกที่ลบในชุดอีเมล เคอร์เซอร์นาฬิกาทรายปรากฏขึ้น มีการร้องขอ AJAX และเมื่อตอบสนองเคอร์เซอร์นาฬิกาทรายถูกปิดใช้งาน ผู้ใช้ต้องรอวินาทีเพื่อให้การดำเนินการเสร็จสมบูรณ์ ผู้ใช้กรอกฟอร์มสำหรับบันทึกใหม่ คลิกบันทึก แบบฟอร์มเปลี่ยนเป็นสีเทาเมื่อมีตัวโหลด AJAX เคลื่อนไหว ข้อความจะปรากฏ "บันทึกข้อมูลของคุณแล้ว" และบันทึกใหม่จะปรากฏในรายการ ความแตกต่างระหว่างสองสถานการณ์ข้างต้นคือการตั้งค่า AJAX …

3
วิธีใดเป็นวิธีปฏิบัติที่ดีกว่าสำหรับตัวอย่างหรือแบบสถิต?
คำถามนี้เป็นเรื่องส่วนตัว แต่ฉันแค่อยากรู้ว่าโปรแกรมเมอร์ส่วนใหญ่เข้าหานี้อย่างไร ตัวอย่างด้านล่างเป็นแบบหลอก -C # แต่ควรใช้กับ Java, C ++ และภาษา OOP อื่น ๆ ด้วย อย่างไรก็ตามเมื่อเขียนวิธีการช่วยเหลือในชั้นเรียนของฉันฉันมักจะประกาศให้พวกเขาเป็นแบบคงที่และเพียงผ่านเขตข้อมูลหากวิธีการช่วยเหลือที่พวกเขาต้องการ ตัวอย่างเช่นกำหนดรหัสข้างล่างนี้ผมชอบที่จะใช้วิธีการโทร # 2 class Foo { Bar _bar; public void DoSomethingWithBar() { // Method Call #1. DoSomethingWithBarImpl(); // Method Call #2. DoSomethingWithBarImpl(_bar); } private void DoSomethingWithBarImpl() { _bar.DoSomething(); } private static void DoSomethingWithBarImpl(Bar bar) { …

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


10
เป็นคนใจกว้างในสิ่งที่คุณยอมรับ ... หรือไม่?
[คำปฏิเสธ: คำถามนี้เป็นอัตนัย แต่ฉันต้องการคำตอบที่ได้รับการสนับสนุนจากข้อเท็จจริงและ / หรือการสะท้อนกลับ] ฉันคิดว่าทุกคนรู้เกี่ยวกับหลักการความแข็งแกร่งซึ่งมักจะสรุปตามกฎหมายของ Postel: ระมัดระวังในสิ่งที่คุณส่ง มีอิสระในสิ่งที่คุณยอมรับ ฉันยอมรับว่าสำหรับการออกแบบโปรโตคอลการสื่อสารที่กว้างขวางสิ่งนี้อาจสมเหตุสมผล (โดยมีเป้าหมายเพื่อให้ขยายได้อย่างง่ายดาย) อย่างไรก็ตามฉันคิดเสมอว่าแอปพลิเคชันสำหรับ HTML / CSS นั้นล้มเหลวทั้งหมดเบราว์เซอร์แต่ละตัวใช้การปรับแต่งเงียบ ๆ การตรวจจับ / พฤติกรรมทำให้เป็นไปไม่ได้ที่จะได้รับการเรนเดอร์ที่สอดคล้องกันในหลายเบราว์เซอร์ ฉันสังเกตเห็นว่ามี RFC ของโปรโตคอล TCP เห็นว่า "ยอมรับความล้มเหลว" เว้นแต่จะระบุไว้เป็นอย่างอื่น ... ซึ่งเป็นพฤติกรรมที่น่าสนใจที่จะพูดน้อย มีตัวอย่างอื่น ๆ ของการประยุกต์ใช้หลักการนี้ตลอดการค้าซอฟต์แวร์ที่ปรากฏขึ้นอย่างสม่ำเสมอเพราะพวกเขามีผู้พัฒนาที่ถูกกัดตั้งแต่หัวจรดหัวของฉัน: การแทรกเซมิโคลอน Javascript การแปลง builtin C (เงียบ) (ซึ่งจะไม่เลวร้ายหากไม่ตัดทอน ... ) และมีเครื่องมือที่จะช่วยทำให้เกิดพฤติกรรม "ฉลาด": การจับคู่ชื่ออัลกอริทึมการออกเสียง ( Double Metaphone ) ขั้นตอนวิธีระยะทางสตริง ( …
45 design 

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

23
ทำไมโปรแกรมเมอร์ที่ดีจึงมีเว็บไซต์ที่น่าเกลียด [ปิด]
นี่เป็นกฎของเมอร์ฟีหรือเปล่า? บางทีถ้าฉันต้องการจ้างนินจานักเขียนโปรแกรมที่ดีฉันควรตรวจสอบเว็บไซต์ของเขาใน "แสดงเว็บไซต์ของคุณและฉันจะบอกว่าคุณเก่งแค่ไหน" แก้ไข: ไปที่แท็บผู้ใช้ระดับสูงของ stackoverflow และคุณจะเห็น

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