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

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

2
มีข้อได้เปรียบในการจัดการบิตของ c-style มากกว่า std :: bitset หรือไม่?
ฉันทำงานเฉพาะใน C ++ 11/14 และมักจะประจบประแจงเมื่อฉันเห็นรหัสเช่นนี้ std::int64_t mArray; mArray |= someMask << 1; นี่เป็นเพียงตัวอย่างเท่านั้น ฉันกำลังพูดถึงการจัดการบิตที่ชาญฉลาดโดยทั่วไป ใน C ++ มีจุดใดจริง ๆ หรือไม่ ข้างต้นคือการแปรปรวนของจิตใจและข้อผิดพลาดได้ง่ายในขณะที่ใช้std::bitsetช่วยให้คุณ: ปรับเปลี่ยนขนาดของstd::bitsetสิ่งที่ต้องการได้ง่ายขึ้นโดยการปรับพารามิเตอร์เทมเพลตและให้การใช้งานสามารถจัดการส่วนที่เหลือและ ใช้เวลาน้อยลงในการหาว่าเกิดอะไรขึ้น (และอาจทำผิดพลาด) และเขียนstd::bitsetในลักษณะที่คล้ายกับstd::arrayหรือบรรจุข้อมูลอื่น ๆ คำถามของฉันคือ; มีเหตุผลที่จะไม่ใช้std::bitsetกับประเภทดั้งเดิมอื่น ๆ นอกเหนือจากความเข้ากันได้ย้อนหลัง?

2
ไม่ถูกต้องใน PHP: มีเหตุผลการออกแบบ OOP หรือไม่?
การสืบทอดส่วนต่อประสานด้านล่างนั้นผิดกฎหมายใน PHP แต่ฉันคิดว่ามันจะมีประโยชน์พอสมควรในชีวิตจริง มี antipattern จริงหรือมีปัญหาเกี่ยวกับการออกแบบเอกสารด้านล่าง PHP นั้นปกป้องฉันหรือไม่ <?php /** * Marker interface */ interface IConfig {} /** * An api sdk tool */ interface IApi { public __construct(IConfig $cfg); } /** * Api configuration specific to http */ interface IHttpConfig extends IConfig { public getSomeNiceHttpSpecificFeature(); } /** * Illegal, …

2
ฟิลเตอร์บลูมนั้นเร็วกว่าแฮชหรือไม่?
ตัวกรอง Bloom ดูดีมากเมื่อคุณพิจารณาว่าคุณสามารถตรวจสอบว่า Int อยู่ในชุดที่มีความมั่นใจ 99% ในเวลาคงที่หรือไม่ แต่สามารถแฮชได้โดยมีความแตกต่างเพียงอย่างเดียวคือส่วนใหญ่เวลาที่คุณเข้าถึงหน่วยความจำเพียงครั้งเดียว ด้วยตัวกรองบานคุณต้องเข้าถึงพวกเขา ~ 7 ครั้งต่อคำขอในสถานที่ห่างไกลอย่างสมบูรณ์ดังนั้นคุณจะพลาดแคชหลายครั้งต่อคำขอ ฉันพลาดอะไรไปรึเปล่า?

3
ทำไมไฟล์ที่เรียกใช้งานจึงขึ้นอยู่กับระบบปฏิบัติการ แต่ไม่ได้ใช้กับซีพียู
ถ้าฉันเขียนโปรแกรม C และคอมไพล์มันลงใน.exeไฟล์ไฟล์นั้น.exeจะมีคำสั่งเครื่องดิบไปยัง CPU (ฉันคิด). ถ้าเป็นเช่นนั้นจะเป็นไปได้อย่างไรที่ฉันจะเรียกใช้ไฟล์ที่คอมไพล์ในคอมพิวเตอร์เครื่องใดก็ได้ที่ใช้ Windows รุ่นทันสมัย CPU แต่ละตระกูลมีชุดคำสั่งต่างกัน ดังนั้นคอมพิวเตอร์เครื่องใดที่ใช้ระบบปฏิบัติการที่เหมาะสมสามารถเข้าใจคำแนะนำใน.exeไฟล์ของฉันได้อย่างไรไม่ว่าจะเป็น CPU จริงหรือไม่ นอกจากนี้บ่อยครั้งในเว็บไซต์ในหน้า "ดาวน์โหลด" ของแอพพลิเคชั่นบางตัวคุณมีการดาวน์โหลดสำหรับ Windows สำหรับ Linux และสำหรับ Mac (มักดาวน์โหลดสองครั้งสำหรับแต่ละระบบปฏิบัติการสำหรับคอมพิวเตอร์ 86 และ 64 บิต) เหตุใดจึงไม่มีการดาวน์โหลดเพิ่มเติมจำนวนมากสำหรับซีพียูแต่ละตระกูล

5
ฉันควรใช้ initializer blocks ใน Java หรือไม่
ฉันเพิ่งเจอโครงสร้าง Java ฉันไม่เคยเห็นมาก่อนและสงสัยว่าฉันควรใช้ มันดูเหมือนว่าจะถูกเรียกว่าการเริ่มต้นบล็อก public class Test { public Test() { /* first constructor */ } public Test(String s) { /* second constructor */ } // Non-static initializer block - copied into every constructor: { doStuff(); } } บล็อกรหัสจะถูกคัดลอกลงในตัวสร้างแต่ละตัวเช่นถ้าคุณมีตัวสร้างหลายตัวคุณไม่จำเป็นต้องเขียนรหัสใหม่ อย่างไรก็ตามฉันเห็นข้อเสียเปรียบหลักสามประการที่ใช้ไวยากรณ์นี้: เป็นหนึ่งในไม่กี่กรณีใน Java ที่ลำดับของรหัสของคุณมีความสำคัญเนื่องจากคุณสามารถกำหนดบล็อคโค้ดหลาย ๆ อันและจะถูกดำเนินการตามลำดับที่เขียน ดูเหมือนว่าเป็นอันตรายกับฉันเพียงแค่เปลี่ยนลำดับของการบล็อกรหัสจริง ๆ แล้วจะเปลี่ยนรหัส ฉันไม่เห็นประโยชน์ใด ๆ …
16 java 

6
มันจะดีกว่าที่จะวางรหัส JS ในไฟล์ html หรือในไฟล์ภายนอก?
ถ้าฉันออกแบบเว็บไซต์หนึ่งหน้ามันจะดีกว่าถ้าสร้างไฟล์ภายนอกสำหรับรหัส JS ของฉันหรือแค่วางไว้ในรหัส html วางบนหน้าเว็บเพื่อโหลดเร็วขึ้นหรือไม่ ฉันสามารถเปลี่ยนการอนุญาตให้ปฏิเสธการร้องขอของผู้ใช้ได้หรือไม่ แต่หน้า html ยังคงสามารถเรียกรหัสได้
16 javascript 

4
การทดสอบ: กำหนดหรือไม่กำหนด?
มันจะดีกว่าถ้ามี ชุดทดสอบที่กำหนดได้ซึ่งส่งผลให้การทดสอบเดียวกันสำเร็จ ชุดทดสอบที่ไม่สามารถกำหนดค่าได้ซึ่งอาจครอบคลุมหลายกรณี ? ตัวอย่าง: คุณเขียนชุดทดสอบเพื่อทดสอบการทำงานของคอนโทรลเลอร์ในแอปพลิเคชัน MVC คอนโทรลเลอร์ต้องการข้อมูลแอปพลิเคชันจากฐานข้อมูลเป็นอินพุตในระหว่างการทดสอบ มีสองตัวเลือกในการทำสิ่งนี้: คุณ hardcode แถวใดจากฐานข้อมูลการทดสอบที่ถูกเลือกเป็นอินพุต (เช่นแถวที่ 10 และแถวที่ 412) คุณใช้ตัวสร้างตัวเลขสุ่มเพื่อสุ่มเลือกข้อมูลจากฐานข้อมูล (สองแถวที่เลือกโดยตัวสร้างตัวเลขสุ่ม) สิ่งแรกคือแบบกำหนดค่าได้: การทดสอบทุกครั้งสำหรับการแก้ไขรหัสเดียวกันควรให้ผลลัพธ์เดียวกัน ข้อที่สองไม่สามารถกำหนดค่าได้: ชุดทดสอบทุกชุดมีความเป็นไปได้ที่จะให้ผลลัพธ์ที่ต่างกัน ข้อมูลที่สุ่มเลือกอาจเป็นตัวแทนของขอบกรณีข้อมูลได้ดีกว่า มันอาจจำลองผู้ใช้ที่ป้อนข้อมูลคอนโทรลเลอร์ของเราด้วยข้อมูลที่คาดเดาไม่ได้ดีกว่า? อะไรคือเหตุผลในการเลือกสิ่งหนึ่งเหนือสิ่งอื่นใด?
16 testing  mvc 

1
รับรองความถูกต้องแอปมือถือดั้งเดิมโดยใช้ REST API
ฉันกำลังเริ่มโครงการใหม่เร็ว ๆ นี้ซึ่งกำหนดเป้าหมายแอปพลิเคชันมือถือสำหรับแพลตฟอร์มมือถือที่สำคัญทั้งหมด (iOS, Android, Windows) มันจะเป็นสถาปัตยกรรมไคลเอนต์เซิร์ฟเวอร์ แอพนี้เป็นทั้งข้อมูลและธุรกรรม สำหรับส่วนการทำธุรกรรมพวกเขาจะต้องมีบัญชีและเข้าสู่ระบบก่อนที่จะสามารถทำธุรกรรมได้ ฉันยังใหม่ต่อการพัฒนาอุปกรณ์พกพาดังนั้นฉันจึงไม่ทราบว่าส่วนการรับรองความถูกต้องจะทำอย่างไรบนแพลตฟอร์มเหล่านี้ ลูกค้าจะสื่อสารกับเซิร์ฟเวอร์ผ่าน REST API จะใช้หลักสูตร HTTPS ฉันยังไม่ได้ตัดสินใจว่าต้องการให้ผู้ใช้เข้าสู่ระบบเมื่อพวกเขาเปิดแอพหรือเมื่อพวกเขาทำธุรกรรม ฉันได้รับคำถามต่อไปนี้: 1) เช่นเดียวกับแอปพลิเคชั่น Facebook คุณจะป้อนข้อมูลรับรองของคุณเมื่อคุณเปิดแอปพลิเคชั่นเป็นครั้งแรกเท่านั้น หลังจากนั้นคุณจะลงชื่อเข้าใช้อัตโนมัติทุกครั้งที่คุณเปิดแอพ เราจะทำสิ่งนี้ให้สำเร็จได้อย่างไร? เพียงแค่เข้ารหัสและจัดเก็บข้อมูลรับรองบนอุปกรณ์และส่งทุกครั้งที่แอปเริ่มทำงาน 2) ฉันต้องพิสูจน์ตัวตนผู้ใช้สำหรับคำขอ (ธุรกรรม) ที่ทำกับ REST API หรือใช้วิธีตามโทเค็นหรือไม่? โปรดแนะนำวิธีอื่น ๆ ในการตรวจสอบสิทธิ์ ขอบคุณ!

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

3
เหตุผลในการวางประเภทฟังก์ชั่นและชื่อวิธีการในบรรทัดที่แตกต่างกันในค
ฉันเพิ่งเริ่มต้นที่ บริษัท และหนึ่งในความคิดเห็นสไตล์ในการตรวจสอบรหัสแรกของฉันคือว่าประเภทการส่งคืนและชื่อวิธีการควรอยู่ในบรรทัดที่แตกต่างกัน ตัวอย่างเช่นสิ่งนี้ void foo() { } ควรเป็นแบบนี้ void foo() { } ฉันเคยใช้สไตล์แรกเสมอและฉันสงสัยว่ามีเหตุผลอื่นนอกเหนือจากความชอบส่วนตัวทำไมผู้คนถึงใช้สไตล์ที่สอง? ฉันไม่คิดว่าคนแรกจะเจ็บการอ่านเลย เป็นเรื่องธรรมดามากกว่าอย่างอื่นกับโปรแกรมเมอร์ C และโครงการโอเพ่นซอร์สขนาดใหญ่หรือไม่?
16 c  coding-style 

2
เหตุใดความคิดเห็น xml จึงไม่สามารถมียัติภังค์สองรายการได้
ฉันใช้ความคิดเห็นมาร์คดาวน์ในความคิดเห็น xml ของไฟล์กำหนดค่าเมื่อ XmlParser รายงานว่า--ไม่อนุญาตให้ใช้เครื่องหมายขีดคั่นสองตัว ( ) ในความคิดเห็น xml ตรวจสอบข้อมูลจำเพาะ XMLดูเหมือนว่าข้อคิดเห็น xml ไม่ได้ถูกออกแบบมาเพื่อมียัติภังค์สองรายการเนื่องจากเหตุผลด้านความเข้ากันได้กับตัวแยกวิเคราะห์ SGML ทำไมตัวแยกวิเคราะห์ SGML จึงไม่อนุญาตให้ใช้เครื่องหมายขีดคั่นคู่ในความคิดเห็น
16 xml  sgml 

4
ทำไมโปรแกรมเมอร์บางคนจัดหมวดหมู่ C, Python, C ++ แตกต่างกันอย่างไร - เกี่ยวกับระดับ
ฉันกำลังเรียนหลักสูตรเบื้องต้นเกี่ยวกับหลามและผู้สอนบอกว่าหลามเป็นภาษาระดับสูงและ C และ C ++ เป็นภาษาระดับต่ำ มันแค่ทำให้สับสน ฉันคิดว่า C, C ++, Python, Java และอื่น ๆ เป็นภาษาระดับสูงทั้งหมด ฉันอ่านคำถามที่ stackoverflow ใน C, C ++ และอื่น ๆ พวกเขาดูเหมือนจะอ้างถึงภาษาเหล่านั้นในระดับสูง ฉันคิดว่าโปรแกรมเมอร์บางคนใช้คำเหล่านั้นสลับกันได้

6
การตรวจสอบความถูกต้องของพารามิเตอร์อินพุตในตัวเรียก: การทำสำเนารหัสหรือไม่
สถานที่ที่ดีที่สุดในการตรวจสอบความถูกต้องของพารามิเตอร์อินพุตของฟังก์ชัน: ในผู้โทรเข้าหรือในฟังก์ชั่นของตัวเอง? เนื่องจากฉันต้องการปรับปรุงรูปแบบการเข้ารหัสของฉันฉันพยายามค้นหาแนวทางปฏิบัติที่ดีที่สุดหรือกฎบางอย่างสำหรับปัญหานี้ เมื่อไรและอย่างไรดีกว่า ในโครงการก่อนหน้าของเราเราใช้ในการตรวจสอบและปฏิบัติต่อทุกพารามิเตอร์อินพุตภายในฟังก์ชั่น (ตัวอย่างเช่นถ้ามันไม่เป็นโมฆะ) ตอนนี้ฉันได้อ่านที่นี่ในคำตอบบางอย่างและในหนังสือเล่มโปรแกรมเมอร์ Pragmatic ว่าการตรวจสอบพารามิเตอร์อินพุตเป็นความรับผิดชอบของผู้โทร ดังนั้นหมายความว่าฉันควรตรวจสอบพารามิเตอร์อินพุตก่อนที่จะเรียกใช้ฟังก์ชัน มีการเรียกใช้ฟังก์ชันทุกที่ และนั่นทำให้เกิดคำถามหนึ่งข้อ: มันไม่ได้สร้างเงื่อนไขการตรวจสอบซ้ำทุกที่ที่มีการเรียกใช้ฟังก์ชันหรือไม่ ฉันไม่ได้สนใจเพียงแค่ในเงื่อนไขที่เป็นโมฆะ แต่ในการตรวจสอบตัวแปรอินพุตใด ๆ (ค่าลบเพื่อsqrtฟังก์ชั่นหารด้วยศูนย์การรวมรัฐและรหัสไปรษณีย์ผิดหรืออย่างอื่น) มีกฎบางอย่างในการตัดสินใจว่าจะตรวจสอบสภาพอินพุตอย่างไร ฉันกำลังคิดถึงข้อโต้แย้งบางอย่าง: เมื่อการรักษาของตัวแปรที่ไม่ถูกต้องอาจแตกต่างกันเป็นสิ่งที่ดีในการตรวจสอบในด้านของผู้โทร (เช่นsqrt()ฟังก์ชั่น - ในบางกรณีฉันอาจต้องการที่จะทำงานกับจำนวนที่ซับซ้อนดังนั้นฉันปฏิบัติต่อเงื่อนไขในการโทร) เมื่อเงื่อนไขการตรวจสอบเหมือนกันในผู้โทรทุกคนควรตรวจสอบภายในฟังก์ชั่นเพื่อหลีกเลี่ยงการซ้ำซ้อน การตรวจสอบความถูกต้องของพารามิเตอร์อินพุตในตัวเรียกเกิดขึ้นเพียงครั้งเดียวก่อนที่จะเรียกใช้ฟังก์ชันจำนวนมากด้วยพารามิเตอร์นี้ ดังนั้นการตรวจสอบความถูกต้องของพารามิเตอร์ในแต่ละฟังก์ชั่นจึงไม่มีประสิทธิภาพ วิธีการแก้ปัญหาที่เหมาะสมขึ้นอยู่กับกรณีเฉพาะ ฉันหวังว่าคำถามนี้จะไม่ซ้ำกันฉันค้นหาปัญหานี้และฉันพบคำถามที่คล้ายกัน แต่พวกเขาไม่ได้พูดถึงกรณีนี้อย่างแน่นอน

2
Declarative UI คืออะไร
ฉันยังคงเห็นคำนี้ถูกโยนไปรอบ ๆ ในบล็อกเกี่ยวกับกรอบ ในขณะที่ฉันเข้าใจความแตกต่างระหว่างการเขียนโปรแกรมที่เปิดเผยและที่จำเป็นสิ่งนี้นำไปใช้กับ UI ได้อย่างไร ทำไมถึงมีคำพิเศษสำหรับมัน สิ่งเหล่านี้แตกต่างกันหรือไม่? ถ้าเป็นเช่นนั้นทางเลือกอื่นของ Declarative UI คืออะไรและทำไมฉันถึงต้องการใช้มัน
16 frameworks  ui 

1
ทำไมโกลังเลิกแพ็คเกจ“ netchan”?
แพ็คเกจ "netchan" ของ Golang ดูเหมือนจะถูกยกเลิก นั่นทำให้ฉันคิดว่าแนวคิดของ "ช่องทางเครือข่าย" ไม่ใช่วิธีปฏิบัติที่ดี (ทำไมพวกเขาถึงไม่ "ปล่อยให้เป็นอย่างอื่น") เป็นกรณีนี้หรือไม่? และถ้าเป็นเช่นนั้นทำไม
16 networking  go 

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