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

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

2
ครอบคลุม - ข้อบกพร่องในอัลกอริทึม - วิธีกำจัดการใช้งาน?
บทนำ เอ็นจิ้นการเรนเดอร์กราฟิกแบบเวกเตอร์หลายตัวมีข้อบกพร่องของอัลกอริทึมในตัว พวกมันแสดงรูปร่างแต่ละแบบแยกกันและ antialias โดยการคำนวณความครอบคลุมของพิกเซลแล้วประกอบมันไว้ที่ด้านบนของกันและกัน ใช่มันง่าย แต่การแก้ปัญหาที่ถูกต้องนั้นง่ายกว่า สิ่งนี้นำไปสู่ปัญหา conflation ในขณะที่ conflates ความคุ้มครองโดยความโปร่งใส การผสมอัลฟ่าเป็นไปตามกฎที่ไม่ได้เป็นตัวแทนของสถานการณ์อย่างถูกต้องตัวอย่างเช่นถ่ายภาพพิกเซลที่ครอบคลุม 50% ที่อยู่ใกล้เคียงกับพิกเซลที่ครอบคลุม 50% ไม่ได้จบลงด้วยการครอบคลุม 100% มันจบลงด้วยความครอบคลุม 75% . สิ่งที่ดูเหมือนจะขึ้นอยู่กับวิธีการปรับอัลกอริทึมและรายละเอียดอื่น ๆ แต่ในสาระสำคัญนี่เป็นข้อผิดพลาดที่ทราบ บางคนทำปัญหาการทำเอกสารข้อผิดพลาดของเครื่องยนต์แตกต่างกันไปรวมทั้งการเขียนบทความแสดงให้เห็นว่าสามารถทำได้ดีกว่า ภาพที่ 1 : ตัวอย่างที่ไม่ได้เป็นตัวแทนทั้งหมดของการเรนเดอร์รูปร่างที่ทำจากสามเหลี่ยมแสดงข้อผิดพลาดแบบขยายที่แถวบนสุด แหล่งที่มาของ SVG ปัญหามีวิธีแก้ปัญหาที่ไม่ยุ่งยากง่าย ๆ * เป็นเพียงตัวอย่างขั้นสูงโดยไม่ต้องคำนวณการครอบคลุมและกรองภาพลง เป็นโบนัสที่คุณจะได้ใช้อัลกอริธึมการสร้างภาพที่ดีกว่าการกรองแบบกล่อง (อ่านA Pixel ไม่ใช่สี่เหลี่ยมจัตุรัส3 ) มีแม้กระทั่งโซลูชันที่มีความเร็วเทียบเคียงได้กับโซลูชันปัจจุบันและวิธีแก้ปัญหาเหล่านี้ทำได้ง่ายกว่ามากในท่อส่งแรสเตอร์ฮาร์ดแวร์ นี่ไม่ใช่ปัญหาโดยไม่มีค่าใช้จ่าย มีหลายคนที่ทำงานด้านการออกแบบกราฟิกที่ใช้เวลาจำนวนเล็กน้อยในการพยายามหลีกเลี่ยงปัญหานี้ด้วยตนเองโดยทำให้แน่ใจว่ามีการทับซ้อนกันที่นี่และไม่มีการทับซ้อนกันเพื่อแก้ไขปัญหาที่คอมพิวเตอร์ควรทำเพื่อพวกเขา และล้มเหลวอย่างน่าทึ่งในหลายกรณี แต่ลูกค้าของพวกเขาไม่สนใจว่าทำไมข้อผิดพลาดอยู่ที่นั่นพวกเขาจะต้องแก้ไข คำถาม ข้อผิดพลาดเผยแพร่อย่างไร เนื่องจากพวกเขากำลังทำข้อผิดพลาดเดียวกันทั้งหมดจึงสามารถสรุปได้ว่าพวกเขาใช้แหล่งเดียวกันสำหรับอัลกอริทึมของพวกเขา สิ่งที่อาจทำให้นักออกแบบเลือกอัลกอริทึมนี้ เหตุใดโปรแกรมเมอร์ …

2
ควรจัดเก็บ CSS แบบย่อใน Git หรือไม่
ฉันใช้ Gulp เพื่อสร้าง CSS แบบย่อจากรหัส SASS ของฉันสำหรับโครงการที่ฉันกำลังทำอยู่ ฉันสงสัยว่าเป็นวิธีปฏิบัติที่ดีที่สุดในการสร้าง CSS minified ใหม่นี้เมื่อทำการถ่ายทอดสดจาก Git ... หรือ ในการจัดเก็บไฟล์ CSS ขนาดเล็กใน Git พวกเขาจะถูกส่งไปยังการผลิตสดโดยอัตโนมัติโดยไม่ต้องทำงานเพิ่มเติมในส่วนของเซิร์ฟเวอร์? ฉันขอขอบคุณความคิดของผู้คนในเรื่องนี้ ขอบคุณ!

4
เป็นความคิดที่ดีหรือไม่ที่จะมีวิธีทดสอบแยกต่างหากสำหรับทุกขั้นตอน?
ฉันกำลังทดสอบ api REST สมมติว่ามันส่งคืนโครงสร้าง JSON วิธีทดสอบเซิร์ฟเวอร์ที่ดีที่สุดคืออะไร? แต่ละขั้นตอนการทดสอบจะประสบความสำเร็จก็ต่อเมื่อก่อนหน้านี้ทั้งหมดประสบความสำเร็จ โครงสร้าง A: ทดสอบทุกอย่างในครั้งเดียว - Test method 1: - make server request - assert http response code was 200 - assert returned file is not empty - assert returned file has valid JSON syntax - assert returned JSON contains key X นี่น่าจะเป็นทางออกที่ดีที่สุด ข้อดี: คำขอเซิร์ฟเวอร์เดียวเท่านั้น …

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

5
คุณควรลดการสร้างวัตถุขนาดเล็กจำนวนมากหรือไม่
เมื่อเขียนสิ่งที่สร้างวัตถุขนาดเล็กจำนวนมาก (1,000s) บ่อยครั้งคุณควรพยายามลดประสิทธิภาพการทำงานลงหรือไม่ โดยเฉพาะอย่างยิ่งหากคุณไม่ทราบว่าระบบนั้นจะทำงานบนเดสก์ท็อประดับต่ำถึงสูงหรือแม้แต่มือถือ สำหรับมือถือฉันได้ยินมาว่าการสร้างวัตถุจำนวนมากเป็นอุปสรรคต่อประสิทธิภาพการทำงานที่ดีแม้ว่าฉันจะไม่รู้ว่ามันเป็นความจริงแค่ไหน ฉันมีตัวอย่างที่แสดงความคิดนี้ได้ดี drawPixel(Point)ในโปรแกรมกราฟิกบอกว่ามีวิธีการที่จะใช้สำหรับการวาดภาพทั้งหมดที่เรียกว่านึกคิด อาจมีการสร้างคะแนน 1,000 คะแนนและอาจเกิดซ้ำบ่อยเช่นในเกมที่สามารถเรียก 60+ ครั้งต่อวินาที หรือdrawPixel(int x, int y)อาจใช้เพื่อลดการสร้างออบเจ็กต์ Point จำนวนมาก ในการออกแบบเชิงวัตถุฉันคิดว่าการใช้ Point น่าจะเหมาะสมกว่า อย่างไรก็ตามการใช้ประเภทดั้งเดิมอาจเพิ่มประสิทธิภาพ การเพิ่มประสิทธิภาพอาจไม่ได้ผลในกรณีส่วนใหญ่ แต่ฉันไม่แน่ใจเกี่ยวกับสิ่งต่าง ๆ เช่นโทรศัพท์มือถือหรือเครื่องรุ่นเก่า ประสิทธิภาพการทำงานเพิ่มขึ้นจากการทำอะไรแบบนี้และมันเป็นสิ่งที่ควรนำมาพิจารณาด้วย?

5
การใช้รูปแบบที่แตกต่างกันสำหรับคุณสมบัติที่คล้ายกัน
ฉันเป็นผู้พัฒนาเพียงผู้เดียวในโครงการที่อาจมีคนอื่นนำไปใช้ในโครงการต่อไปในอนาคต สมมติว่าฉันใช้รูปแบบ X เพื่อใช้คุณสมบัติ A หลังจากพัฒนาและทำให้คุณลักษณะเสร็จสมบูรณ์ฉันรู้ว่าฉันสามารถใช้คุณสมบัติเดียวกันโดยใช้รูปแบบ Y ซึ่งฉันเพิ่งเรียนรู้มา แต่ฟีเจอร์ A ทำงานได้ดีและการเปลี่ยนจาก X เป็น Y นั้นใช้เวลานานและให้ประโยชน์เล็กน้อย จากนั้นก็ถึงเวลาที่จะใช้งานคุณสมบัติ B มันคล้ายกับ A แต่คราวนี้ฉันต้องการใช้โอกาสนี้เพื่อเล่นกับรูปแบบ Y ฉันมีความสุขกับผลลัพธ์สุดท้ายดีกว่าเมื่อใช้คุณสมบัติ A แต่ตอนนี้โค้ดของฉันใช้สอง รูปแบบที่ต่างกัน, X และ Y, สำหรับคุณสมบัติที่คล้ายกัน แต่ไม่มีเหตุผลที่แท้จริงที่จะใช้รูปแบบที่แตกต่างกันยกเว้นความจริงที่ว่าเมื่อการสร้างฟีเจอร์ AI นั้นไม่ชำนาญพอที่จะใช้รูปแบบเดียวกันกับฟีเจอร์ B โปรดทราบว่าคำถามนี้ไม่ได้เกี่ยวกับการเลือกรูปแบบที่เหมาะสมสำหรับปัญหาที่กำหนด ; มันมีอยู่สองรูปแบบที่อยู่ร่วมกันในฐานของรหัสเพื่อแก้ปัญหาที่คล้ายกันซึ่งสามารถลดลงเหลือเพียงครั้งเดียวเพื่อให้มีการปรับโครงสร้าง รหัสนั้นมีกลิ่นหรือไม่? อะไรคือข้อเสียของการรักษาซอร์สโค้ดเช่นนี้? ฉันควรจะใช้รูปแบบเดียวเท่านั้นหรือไม่ เช่น refactor A เพื่อใช้ Y หรือใช้ X ต่อไปเมื่อเขียน B? ฉันจะสื่อสารได้อย่างไรว่าสาเหตุที่มีสองรูปแบบที่แตกต่างกันสำหรับคุณสมบัติที่คล้ายกันนั้นไม่มีเหตุผล ฉันกังวลมากเกินไปเกี่ยวกับสิ่งที่นักพัฒนาคนต่อไปคิดเกี่ยวกับรหัสของฉันหรือไม่

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

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

1
การจับคู่ชื่อบางส่วนในล้านเรคคอร์ด
เราได้พัฒนาแอพพลิเคชั่นบนเว็บสำหรับการจับคู่ชื่อ มันทำงานโดยการแบ่งชื่อออกเป็นส่วน ๆ และค่าSoundexของแต่ละส่วนจะถูกเก็บไว้ในฐานข้อมูล เมตริก Levenshtein ระยะทางที่ใช้ในการสมัครเปอร์เซ็นต์การจับคู่ของเสียงเช่นเดียวกับการสะกดคำกับชื่อที่กำหนด ที่รันไทม์เราโหลดเร็กคอร์ดทั้งหมดลงในหน่วยความจำและใช้ระยะทาง Levenshtein กับค่า Soundex ทั้งหมดและการสะกดคำของส่วนทั้งหมดของชื่อทั้งหมด สิ่งนี้ใช้ได้ดีในตอนแรกเพราะมีชื่อสูงสุด 20,000 ชื่อ แต่ตอนนี้ลูกค้าของเรารายหนึ่งมีชื่อ 30 ล้านชื่อ การโหลดรายการขนาดใหญ่นี้ลงในหน่วยความจำสำหรับคำขอแต่ละครั้งและการใช้การจับคู่ประเภทนี้เป็นวิธีที่น่าสมเพชโดยใช้หน่วยความจำและเวลาดำเนินการจำนวนมาก เรากำลังมองหาคำแนะนำในการค้นหาฐานข้อมูล 30 ล้านรายการขึ้นไปในอนาคตอันใกล้นี้ด้วยการจับคู่เปอร์เซ็นต์ของเสียงและการสะกดคำ ฟังก์ชั่นหลัก ผู้ใช้ปลายทางป้อนชื่อที่จะจับคู่และเปอร์เซ็นต์ขั้นต่ำ เราควรจะแสดงชื่อเหล่านั้นทั้งหมดในฐานข้อมูลที่ส่วนใดส่วนหนึ่งของชื่อตรงกับส่วนใดส่วนหนึ่งของชื่อที่กำหนดจนถึงเปอร์เซ็นต์ที่กำหนด ไม่จำเป็นต้องใช้ชื่อเต็มในการจับคู่ส่วนใดส่วนหนึ่งหากตรงกันไม่เกินเปอร์เซ็นต์ก็จะสำเร็จ ตัวอย่างเช่น. Given Name: Helen Hunt Name in DB: Holly Hunter ทั้งสองส่วนของชื่อทั้งสองไม่ตรงกันอย่างแน่นอน แต่ไม่เกินขอบเขตให้เราสมมติ 80% ดังนั้นหากผู้ใช้ป้อน 80% ดังนั้นชื่อใน DB จะต้องแสดงเป็นชื่อที่ตรงกัน

3
เมื่อตะขอเป็นตัวเลือกการออกแบบที่ถูกต้อง
ฉันได้ทำงานกับแอพ Rails ขนาดใหญ่ซึ่งการใช้งานการเรียกกลับของ ActiveRecord นั้นอาละวาดและบาดใจ การบันทึกมักจะมีผลข้างเคียงที่ไม่คาดคิดและมันเป็นความท้าทายที่จะให้เหตุผลเกี่ยวกับระบบ ในเวลาเดียวกันฉันเคยเห็น hooks ใช้เพื่อให้เกิดผลดีในฐานะส่วนหนึ่งของการสืบทอด (เช่นคลาสแม่ที่ใช้แม่แบบวิธีการเพื่อให้คลาสย่อยเพิ่มพฤติกรรมพิเศษโดยไม่จำเป็นต้องรู้เกี่ยวกับ internals ของผู้ปกครอง) และปลั๊กอิน (เช่นโหมด emacs ที่เรียกใช้ hook เมื่อเปิดใช้งานช่วยให้ผู้ใช้สามารถเพิ่มพฤติกรรมที่กำหนดเองในโหมดนั้น) ฉันรู้ว่าแอพพลิเคชั่น Rails และ Lisp เป็นระบบที่แตกต่างกันอย่างมาก แต่ฉันอยากรู้ว่ามีเกณฑ์อะไรที่คนรู้จักกันดีเมื่อตัดสินใจว่า hooks เป็นตัวเลือกที่เหมาะสมสำหรับปัญหาที่พวกเขากำลังเผชิญหรือไม่ ชุดรูปแบบที่กระโดดออกมาที่ฉันคือการคาดการณ์ การใช้ตะขอในทางที่ผิดดูเหมือนว่าจะนำไปสู่การกระทำที่น่ากลัวในระยะไกลและพฤติกรรมที่น่าแปลกใจในขณะที่การใช้งานที่ดีสามารถนำไปสู่กรอบการทำงานที่คาดการณ์ได้โดยไม่ต้องมีเพศสัมพันธ์อย่างแน่นหนา ในขณะที่ฉันยังไม่กี่ปีในอาชีพการเขียนโปรแกรมของฉันฉันคิดว่าตัวเองเป็น noob ในหลาย ๆ ด้านและสงสัยว่าผู้คนได้ใส่ความคิดที่เป็นธรรมในหัวข้อนี้ แนวทางอะไรบ้างที่สามารถนำการตัดสินใจนี้ไปใช้?
10 hooks 

3
มันหมายถึงอะไรในการฉีดข้อมูล (พฤติกรรมเทียบ) ในตัวสร้างคลาสและทำไมจึงถือว่าการปฏิบัติที่ไม่ดี?
ฉันกำลังอ่านหนังสือ "Learning TypeScript" โดย Remo Jansen ในส่วนเดียวผู้เขียนอธิบายถึงวิธีการสร้างกรอบงาน MVC ที่พิสูจน์ง่ายของแนวคิดรวมถึงวิธีการสร้างModelชั้นเรียนและกล่าวว่าต่อไปนี้: รูปแบบจะต้องมี URL ของบริการบนเว็บที่ใช้ พวกเราจะใช้ตัวตกแต่งคลาสชื่อ ModelSettings เพื่อตั้งค่า URL ของบริการที่จะใช้ เราสามารถฉีด URL บริการผ่านทางคอนสตรัค แต่ก็ถือว่ามีการปฏิบัติที่ไม่ดีที่จะฉีดข้อมูล (เมื่อเทียบกับพฤติกรรม) ผ่านการสร้างคลาส ฉันไม่เข้าใจประโยคสุดท้าย โดยเฉพาะฉันไม่เข้าใจว่า "ฉีดข้อมูล" หมายความว่าอย่างไร สำหรับผมแล้วดูเหมือนว่าในการนำเสนอคลาสจาวาเกือบทั้งหมดโดยใช้ตัวอย่างที่ง่ายกว่านั้นจะมีการแนะนำข้อมูล ("injected"?) ลงใน Constructor ผ่านพารามิเตอร์ ตัวอย่างเช่น: class Person { constructor(name) { this.name = name; } } แน่นอนฉันคิดว่าnameเป็นข้อมูลไม่ใช่เป็นพฤติกรรมและรวมอยู่ในระดับสากลในตัวอย่างประเภทนี้เป็นพารามิเตอร์ตัวสร้างและไม่เคยมีการเอ่ยถึงว่านี่เป็นการปฏิบัติที่ไม่ดี ฉันคิดว่าฉันเข้าใจผิดบางอย่างในคำพูดข้างต้นไม่ว่า "data" หรือ "inject" หมายถึงอะไร คำตอบของคุณอาจรวมถึงคำอธิบายว่าเมื่อใดที่ไหนอย่างไรและทำไมต้องใช้มัณฑนากรใน …

2
การสร้างคลาสที่มีวัตถุประสงค์เพื่อแปลงเป็นคลาสอื่นโดยปริยายหรือไม่?
ลองนึกภาพสถานการณ์ที่เรากำลังใช้ห้องสมุดที่อนุญาตให้คุณสร้างCircleวัตถุที่คุณสามารถระบุรัศมีและศูนย์กลางของวงกลมเพื่อกำหนด อย่างไรก็ตามด้วยเหตุผลบางอย่างมันยังใช้flavourพารามิเตอร์ที่จำเป็น ตอนนี้สมมติว่าฉันจำเป็นต้องใช้Circleในแอพของฉันเอง แต่สำหรับวัตถุประสงค์ของแอพของฉันฉันสามารถกำหนดรสชาติให้เป็นFlavours.Cardboardทุกครั้ง ในการ "แก้ปัญหา" สิ่งนี้ฉันสร้างCircleคลาสของตัวเองในเนมสเปซที่ต่างกันซึ่งใช้radiusและcenterเป็นพารามิเตอร์เท่านั้น แต่มีตัวแปลงโดยนัยไปยังCircleคลาสของไลบรารีภายนอกซึ่งเพิ่งสร้างCircle(this.radius, this.center, Flavours.Cardboard)วัตถุ ดังนั้นทุกที่ที่ฉันต้องการประเภทอื่นCircleฉันจะให้การแปลงอัตโนมัติเกิดขึ้น อะไรคือผลของการสร้างชั้นเรียนดังกล่าว? มีวิธีแก้ปัญหาที่ดีกว่านี้ไหม? มันจะสร้างความแตกต่างหรือไม่ถ้าแอปพลิเคชันของฉันเป็น API ที่สร้างอยู่บนห้องสมุดภายนอกนี้มีไว้สำหรับใช้งานโดยโปรแกรมเมอร์อื่น ๆ ?

4
Java: วิธีการใช้เครื่องมือสร้างขั้นตอนซึ่งลำดับของ setters ไม่สำคัญ?
แก้ไข:ฉันต้องการจะชี้ให้เห็นว่าคำถามนี้อธิบายถึงปัญหาทางทฤษฎีและฉันรู้ว่าฉันสามารถใช้อาร์กิวเมนต์ตัวสร้างสำหรับพารามิเตอร์บังคับหรือส่งข้อยกเว้น runtime ถ้าใช้ API ไม่ถูกต้อง อย่างไรก็ตามฉันกำลังมองหาวิธีแก้ปัญหาที่ไม่ต้องการตัวสร้างอาร์กิวเมนต์หรือการตรวจสอบรันไทม์ ลองนึกภาพคุณมีCarอินเทอร์เฟซเช่นนี้: public interface Car { public Engine getEngine(); // required public Transmission getTransmission(); // required public Stereo getStereo(); // optional } ตามความคิดเห็นที่จะแนะนำCarต้องมีEngineและTransmissionแต่Stereoเป็นตัวเลือก นั่นหมายความว่าสร้างที่สามารถเพียงตัวอย่างที่เคยควรจะมีวิธีการถ้าและมีทั้งรับแล้วมอบให้กับผู้สร้างอินสแตนซ์ ด้วยวิธีการตรวจสอบชนิดจะปฏิเสธที่จะรวบรวมรหัสใด ๆ ที่พยายามที่จะสร้างอินสแตนซ์โดยไม่ต้องหรือbuild()Carbuild()EngineTransmissionCarEngineTransmission สายนี้สำหรับสร้างขั้นตอน โดยทั่วไปแล้วคุณจะใช้สิ่งนี้: public interface Car { public Engine getEngine(); // required public Transmission getTransmission(); // required public Stereo …

3
มีปัจจัยความสัมพันธ์ระหว่างเวลาประชุมและประหยัดเวลาในการพัฒนาหรือไม่?
ฉันกำลังทำงานในโครงการและเรามีการประชุมปกติ (โดยปกติทุกสัปดาห์) การประชุมอย่างไม่เป็นทางการซึ่งเราจะหารือเกี่ยวกับสถานะของโครงการและ GUI ของมัน ฉันเป็นนักพัฒนาเพียงคนเดียวที่นั่นอีก 4-5 คนมีพื้นหลังที่ไม่ใช่ด้านไอที การประชุมนี้ใช้เวลานานกว่าปกติมาก แต่ ณ จุดหนึ่งเพื่อนร่วมงานคนหนึ่งของฉันถามเกี่ยวกับบางสาขาในโปรแกรมและวิธีการเติม ฉันตอบและในการสนทนาฉันสังเกตเห็นว่าฉันมีกระบวนการผิดทั้งหมดในใจของฉัน แต่เมื่อเราพูดถึงมันและพบข้อผิดพลาดล่วงหน้าฉันสามารถเปลี่ยนได้อย่างรวดเร็ว ในขณะที่คิดเกี่ยวกับเรื่องนี้ฉันได้ถามตัวเองว่าถ้ามีเวลาระหว่างการประชุมเมื่อมันมาถึงการประหยัดเวลาในการพัฒนา? ตัวอย่างเช่นเวลา 1 นาทีของการประชุมอาจช่วยประหยัดเวลาในการพัฒนา X นาที ถ้าเป็นเช่นนั้นสิ่งนี้จะช่วยในการกำหนดความถี่และระยะเวลาในการประชุมของเรา (เพียงเพื่อชี้แจง: ฉันไม่ต้องการที่จะทำให้การประชุมที่ดีขึ้นแม้จะสามารถกำหนดความยาวของการประชุมเป็นตัวเลือกฉันมักจะสนใจถ้ามีความสัมพันธ์ระหว่างเวลาการประชุมและเวลาในการพัฒนาเหตุผลของฉันถาม: อยากรู้! )

3
ทำไมบิลด์ที่เพิ่มขึ้นใน“ make” ไม่ใช้อัลกอริทึมการแปลงแป้นพิมพ์
ผมเริ่มต้นด้วยและฉันสงสัยเกี่ยวกับเวลาที่จะใช้makemake clean เพื่อนร่วมงานคนหนึ่งบอกฉันว่างานสร้างที่เพิ่มขึ้นมาmakeนั้นขึ้นอยู่กับการประทับเวลาของไฟล์ ดังนั้นหากคุณชำระเงินไฟล์รุ่นเก่าใน VCS ของคุณมันจะมีเวลา "เก่า" และจะถูกทำเครื่องหมายว่า "ไม่จำเป็นต้องคอมไพล์ไฟล์นี้ใหม่" จากนั้นไฟล์นั้นจะไม่รวมอยู่ในบิลด์ถัดไป ตามที่เพื่อนร่วมงานเดียวกันกับที่มันจะเป็นเหตุผลที่จะใช้ make clean อย่างไรก็ตามฉันได้รับคำตอบสำหรับคำถาม "เมื่อต้องการใช้make clean" จากคำถาม StackExchange อื่น ๆ แต่คำถามอื่นของฉันคือ: ทำไมบิลด์ที่เพิ่มขึ้นโดยใช้การmakeประทับเวลาของไฟล์และไม่ใช่ SHA-1 เช่น ตัวอย่างเช่น Git แสดงให้เห็นว่าเราสามารถตรวจสอบว่ามีการแก้ไขไฟล์โดยใช้ SHA-1 หรือไม่ สำหรับปัญหาเรื่องความเร็วหรือไม่
10 builds  make 

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