วิศวกรรมซอฟต์แวร์

ถาม - ตอบสำหรับมืออาชีพนักวิชาการและนักเรียนที่ทำงานในวงจรการพัฒนาระบบ

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

2
การใช้คุกกี้เทียบกับเซสชันเทียบกับการตรวจสอบตาม Token และการตรวจสอบสิทธิ์
ฉันได้อ่านเกี่ยวกับการรับรองความถูกต้องและทำให้เกิดความสับสนเกี่ยวกับการจำแนกประเภท เริ่มจากการพิสูจน์ตัวตนแบบใช้คุกกี้ถ้าฉันเข้าใจถูกต้องประเด็นสำคัญคือข้อมูลทั้งหมดที่จำเป็นสำหรับการตรวจสอบผู้ใช้จะถูกเก็บไว้ในคุกกี้ และนี่เป็นความสับสนครั้งแรกของฉัน: ในคุกกี้เราอาจเก็บไว้ session id และมันจะกลายเป็นการรับรองความถูกต้องตามเซสชั่น? การอ้างสิทธิ์และควรเรียกว่าเป็นการรับรองความถูกต้องโดยอิงตามการเรียกร้องหรือไม่ ฉันได้พบว่าบางคนถึงกับเก็บโทเค็น JWT ไว้ในคุกกี้ แต่ดูเหมือนว่าจะมีการปรับใช้การตรวจสอบสิทธิ์เอง ... ตอนนี้เรามาเปลี่ยนมาใช้การรับรองความถูกต้องตามการอ้างสิทธิ์ องค์ประกอบหลักคือการเรียกร้องและการรวบรวมการเรียกร้องสามารถใช้เป็นที่เก็บ คุกกี้ (ตามที่กล่าวไว้ข้างต้น) โทเค็น (JWT เป็นตัวอย่าง) จากอีกด้านหนึ่งเมื่อเราพูดถึงโทเค็นมันอาจมีข้อมูลใด ๆ ... รหัสเซสชันเช่น ... แล้วฉันจะพลาดอะไรไป? ทำไมคนไม่กำหนดสิ่งที่ชอบCookie-Session-basedหรือToken-Claims-basedรับรองความถูกต้องเมื่อพูดคุยเกี่ยวกับประเภทการรับรองความถูกต้อง?

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

4
Microservices และการจัดเก็บข้อมูล
ฉันกำลังพิจารณาที่จะย้าย REST API แบบเสาหินไปยังสถาปัตยกรรม microservice และฉันสับสนเล็กน้อยเกี่ยวกับที่เก็บข้อมูล ตามที่ฉันเห็นประโยชน์บางประการของ microservices คือ: ปรับขนาดได้ในแนวนอน - ฉันสามารถเรียกใช้สำเนาบริการซ้ำซ้อนหลายชุดเพื่อจัดการกับโหลดและ / หรือเซิร์ฟเวอร์หยุดทำงาน การเชื่อมโยงอย่างหลวม - ฉันสามารถเปลี่ยนการใช้งานภายในของไมโครไซต์โดยไม่ต้องเปลี่ยนไมโครซอฟท์และฉันสามารถปรับใช้และเปลี่ยนแปลงได้อย่างอิสระ ... ปัญหาของฉันอยู่ที่การจัดเก็บข้อมูล เท่าที่ฉันเห็นมันมีหลายตัวเลือก: บริการฐานข้อมูลเดียวที่ใช้ร่วมกันโดย microservices ทั้งหมด - นี่ดูเหมือนจะขจัดข้อได้เปรียบของการมีเพศสัมพันธ์แบบหลวม ๆ อย่างสมบูรณ์ อินสแตนซ์ฐานข้อมูลที่ติดตั้งในเครื่องบนไมโครไซต์แต่ละบริการ - ฉันไม่เห็นวิธีการปรับขนาดแนวนอนดังนั้นฉันไม่คิดว่ามันจะเป็นตัวเลือก microservice แต่ละตัวมีบริการฐานข้อมูลของตัวเอง - ซึ่งเป็นวิธีที่มีแนวโน้มมากที่สุดเนื่องจากจะรักษาประโยชน์ของข้อต่อหลวมและการขยายตามแนวนอน (โดยใช้สำเนาฐานข้อมูลที่ซ้ำซ้อนและ / หรือทำให้เกิดปัญหาหลายอย่าง) สำหรับฉันตัวเลือกที่สามน่าจะเป็นตัวเลือกเดียว แต่ดูเหมือนว่าฉันจะมีน้ำหนักมากอย่างไม่น่าเชื่อและเป็นวิธีแก้ปัญหาที่มีการปรับแก้มากเกินไป ถ้าฉันเข้าใจถูกต้องแล้วสำหรับแอปพลิเคชันธรรมดาที่มี 4-5 microservices ฉันต้องใช้เซิร์ฟเวอร์ 16-20 - สองอินสแตนซ์ microservice จริงสองต่อ microservice (ในกรณีที่เซิร์ฟเวอร์ล้มเหลวและสำหรับการปรับใช้โดยไม่ต้องหยุดทำงาน) …

4
มันสมเหตุสมผลหรือไม่ที่ refactor จะจบลงด้วย LOC ที่สูงขึ้น? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดเมื่อปีที่แล้ว มีกรณีที่รหัส verbose เพิ่มเติม (ในงบตรรกะมากขึ้น) จะสะอาดกว่ารหัสรัดกุมมากขึ้น?

3
จะค้นหาเส้นทางที่สั้นที่สุดที่มีโหนดหนอนได้อย่างไร
นี่คือตัวอย่างของสิ่งที่ฉันต้องการทำผ่านรหัส ฉันรู้ว่าคุณสามารถใช้การค้นหาจุดกระโดดได้อย่างง่ายดายจากโหนดสีเขียวไปยังโหนดสีแดงโดยไม่มีปัญหาหรือแม้แต่ A * แต่คุณจะคำนวณสิ่งนี้อย่างไรกับการแปรปรวน ในภาพคุณจะเห็นว่ามันใช้เวลาเพียง 8 ย้ายจากโหนดสีเขียวไปยังโหนดสีแดงเมื่อถ่ายเส้นทางสีฟ้า เส้นทางสีน้ำเงินย้ายตำแหน่งของคุณจากโหนดสีม่วงไปยังตำแหน่งถัดไปทันที พื้นที่ตรงกลางที่มีค่าใช้จ่าย 2 การเคลื่อนไหวเป็นจุดระหว่างสองโซน warp ที่คุณต้องย้ายไป เห็นได้ชัดว่าเร็วกว่าที่จะใช้เส้นทางสีฟ้าเนื่องจากคุณจะต้องย้ายครึ่งหนึ่ง (ประมาณ) เท่า ๆ กับเส้นทางสีเหลือง แต่ฉันจะทำสิ่งนี้อย่างไรในเชิงโปรแกรม? เพื่อจุดประสงค์ในการแก้ปัญหานี้สมมติว่ามี "วาร์ป" สีม่วงหลายรอบกราฟที่คุณสามารถใช้งานได้และเรารู้ว่าจุดสีม่วงแต่ละจุดจะโค้งงอและตรงไหนบนกราฟ วาร์ปสีม่วงบางตัวเป็นแบบสองทิศทางและบางอันไม่ใช่ความหมายบางครั้งคุณสามารถป้อนวาร์ปจากด้านหนึ่ง แต่ไม่กลับไปหลังจากการแปรปรวน ฉันคิดเกี่ยวกับวิธีแก้ปัญหาและสรุปเพียงว่าฉันจะสามารถคำนวณปัญหาได้โดยการตรวจสอบระยะทางไปยังจุดแปรปรวนแต่ละจุด (ลบจุดเดียวทิศทาง) และความแตกต่างระหว่างจุดเหล่านั้นและจุดที่อยู่ใกล้พวกเขา . โปรแกรมจะต้องคิดออกว่ามันจะมีประโยชน์มากกว่าที่จะใช้วิปริตที่สองแทนที่จะเดินจากการกระโดดครั้งแรก ดังนั้นแทนที่จะเคลื่อนที่ 6 จุดจากนั้นแปรปรวนจากนั้นย้ายส่วนที่เหลืออีก 8 ก้าวด้วยการเดินเท้า (ซึ่งเร็วกว่าการไม่ใช้ warps เลย) จะใช้การเคลื่อนไหว 6 ครั้งจากนั้นทั้งสองเดินไปที่วิปริตสอง แก้ไข:ฉันรู้ว่าเส้นทางสีน้ำเงินจะใช้เวลา 12 การเคลื่อนไหวแทนที่จะเป็น 8 แต่คำถามยังคงเหมือนเดิม

4
มันหมายความว่าอย่างไรเมื่อมีคนพูดว่า“ ห่อหุ้มสิ่งที่แตกต่างกัน”?
หนึ่งในหลักการของ OOP ที่ฉันพบคือ: - สรุปสิ่งที่แตกต่าง ฉันเข้าใจความหมายของวลีคือซ่อนสิ่งที่แตกต่างกัน อย่างไรก็ตามฉันไม่รู้ว่ามันจะช่วยในการออกแบบที่ดีขึ้นได้อย่างไร บางคนสามารถอธิบายได้โดยใช้ตัวอย่างที่ดี

8
วิธีสากลในการจัดเก็บที่อยู่ทางภูมิศาสตร์ / ที่ตั้งในฐานข้อมูลคืออะไร? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา รูปแบบที่ถูกต้องของที่อยู่ทางภูมิศาสตร์ / ที่ตั้งซึ่งเหมาะสมกับที่อยู่ใด ๆ บนโลกคืออะไร ในขณะนี้ฉันมี: ประเทศ เมือง ถนน จำนวน ข้อมูลตัวอักษร (เพื่อความง่าย) ซิป ลาดพร้าว / LNG แต่ฉันเชื่อว่าฉันสามารถปรับปรุงได้: อาจมีรัฐ / ภูมิภาคของประเทศหรือบางอย่างเช่นพื้นที่ หรือไม่มีพื้นที่ / ภูมิภาค / รัฐในสิงคโปร์หรือฮ่องกง อาจไม่มีถนน แต่มีถนนหรือถนนหรืออย่างอื่น จำนวนอาคารอาจเป็นแบบผสม อาจมีพื้น หมายเลขห้อง ฯลฯ ....

5
เป็นวิธีปฏิบัติที่ดีในการหลีกเลี่ยงค่าคงที่โดยใช้ getters หรือไม่
มันเป็นการดีหรือไม่ที่จะแทนที่ค่าคงที่ที่ใช้นอกคลาสโดย getters ตัวอย่างเช่นใช้ดีกว่าif User.getRole().getCode() == Role.CODE_ADMINหรือif User.getRole().isCodeAdmin()? นั่นจะนำไปสู่คลาสนี้: class Role { constant CODE_ADMIN = "admin" constant CODE_USER = "user" private code getRoleCode() { return Role.code } isCodeAdmin () { return Role.code == Role.CODE_ADMIN } isCodeUser () { return Role.code == Role.CODE_USER } }

5
การปฏิเสธสัญญาสำหรับกรณีข้อผิดพลาดเท่านั้นหรือไม่
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 3 ปีที่แล้ว สมมติว่าฉันมีฟังก์ชันนี้รับรองความถูกต้องที่ส่งกลับสัญญา สัญญานั้นแก้ไขได้ด้วยผลลัพธ์ เท็จและจริงเป็นผลลัพธ์ที่คาดหวังตามที่เห็นและการปฏิเสธควรเกิดขึ้นในกรณีที่มีข้อผิดพลาดเท่านั้น หรือความล้มเหลวในการตรวจสอบถือว่าเป็นสิ่งที่คุณจะปฏิเสธสัญญาหรือไม่
25 javascript 

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

7
ระบุชื่อพารามิเตอร์ทางเลือกแม้ว่าจะไม่จำเป็นก็ตาม?
พิจารณาวิธีการต่อไปนี้: public List<Guid> ReturnEmployeeIds(bool includeManagement = false) { } และสายต่อไปนี้: var ids = ReturnEmployeeIds(true); สำหรับนักพัฒนาใหม่สำหรับระบบมันค่อนข้างยากที่จะคาดเดาสิ่งที่trueทำ สิ่งแรกที่คุณต้องทำคือวางเม้าส์เหนือชื่อเมธอดหรือไปที่คำจำกัดความ (ซึ่งไม่ได้เป็นงานใหญ่เลยแม้แต่น้อย) แต่เพื่อประโยชน์ในการอ่านมันทำให้รู้สึกถึงการเขียน: var ids = ReturnEmployeeIds(includeManagement: true); มีที่ไหนที่อย่างเป็นทางการกล่าวถึงว่าจะระบุพารามิเตอร์ทางเลือกอย่างชัดเจนหรือไม่เมื่อคอมไพเลอร์ไม่ต้องการให้คุณ? บทความต่อไปนี้กล่าวถึงข้อตกลงการเข้ารหัสบางอย่าง: https://msdn.microsoft.com/en-gb/library/ff926074.aspx สิ่งที่คล้ายกับบทความข้างต้นจะดีมาก

5
อินสแตนซ์อาจเท่ากับอินสแตนซ์อื่นที่เป็นประเภทเฉพาะเจาะจงมากกว่าหรือไม่
ฉันได้อ่านบทความนี้: วิธีการเขียนวิธีที่เท่าเทียมกันในชวา โดยพื้นฐานแล้วจะมีวิธีแก้ปัญหาสำหรับวิธีเท่ากับ () ที่รองรับการสืบทอด: Point2D twoD = new Point2D(10, 20); Point3D threeD = new Point3D(10, 20, 50); twoD.equals(threeD); // true threeD.equals(twoD); // true แต่มันเป็นความคิดที่ดี? อินสแตนซ์ทั้งสองนี้ดูเหมือนจะเท่ากัน แต่อาจมีรหัสแฮชที่แตกต่างกันสองแบบ ไม่ผิดหรอกเหรอ? ฉันเชื่อว่าสิ่งนี้จะสำเร็จได้ดีกว่าโดยการคัดเลือกตัวถูกดำเนินการแทน
25 java  c#  scala  comparison 

1
สิ่งที่ควรทราบเมื่อเปิดแอปที่ใช้ไลบรารี่ที่ได้รับอนุญาตภายใต้ Apache 2.0 License [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิด5 เดือนที่ผ่านมา ฉันกำลังสร้างแอพ Android ที่พร้อมจะเปิดตัวเร็ว ๆ นี้ ฉันแค่จะใช้ระบบแท็บโดยใช้ห้องสมุดนี้ ผมอ่านว่ามันอยู่ภายใต้สัญญาอนุญาต Apache 2.0 ฉันไม่เคยใช้ไลเซนส์ไลบรารี่ใด ๆ สำหรับแอพ / โปรแกรม / เกมที่ฉันเผยแพร่ (เพราะฉันไม่ได้แจกจ่ายอะไรเลย) ดังนั้นฉันจึงไม่มีประสบการณ์เกี่ยวกับไลเซนส์และไลเซนส์ไลบรารี่ดังนั้นฉันจึงสงสัยว่ามีอะไรบ้าง พึงระลึกไว้เสมอเมื่อทำการเผยแพร่แอพที่ใช้ไลบรารี่ที่ได้รับอนุญาตภายใต้ Apache 2.0 License เก็บไว้ในใจ ฉันถามคำถามนี้ที่StackOverflowแต่ฉันแนะนำให้ย้ายไปที่โปรแกรมเมอร์แทน แต่เพื่อตรวจสอบศูนย์ช่วยเหลือหากเว็บไซต์นี้ยอมรับคำถามประเภทนี้ก่อนที่ฉันจะโพสต์ ฉันทำและเท่าที่ฉันสามารถเห็นและเข้าใจในสิ่งที่ฉันอ่านคำถามประเภทนี้ได้รับอนุญาต ฉันได้อ่านคำถามที่คล้ายกันหลายข้อและพบคำตอบสำหรับคำถามบางคำถามของฉัน แต่ยังมีบางสิ่งที่ฉันสงสัยและฉันต้องการชัดเจนดังนั้นฉันจึงไม่ทำผิดพลาด นี่คือคำถามที่เหลืออยู่ ฉันอ่านว่า"ผู้ใช้แอปพลิเคชันของฉันต้องได้รับสำเนาของ Apache 2.0 License เพื่อหลีกเลี่ยงความสับสนคุณควรระบุว่าส่วนใดของการแจกจ่ายสิทธิ์ใช้งานนั้น" มันเพียงพอหรือไม่ที่จะใส่ลิงค์ไปยัง Apache 2.0 License ในหน้า …

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

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