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

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

5
การปรับปรุงประสิทธิภาพสำหรับการ grepping ทับไฟล์ขนาดใหญ่
ฉันมี FILE_A ซึ่งมีมากกว่า 300,000 บรรทัดและ FILE_B ซึ่งมีมากกว่า 30 ล้านบรรทัด ฉันสร้างสคริปต์Bashที่ greps แต่ละบรรทัดใน FILE_A มากกว่าใน FILE_B และเขียนผลลัพธ์ของ grep ไปยังไฟล์ใหม่ กระบวนการทั้งหมดนี้ใช้เวลานานกว่า 5 ชั่วโมง ฉันจะปรับปรุงประสิทธิภาพของสคริปต์ได้อย่างไร ฉันใช้grep -F -m 1เป็นคำสั่ง grep FILE_A มีลักษณะดังนี้: 123456789 123455321 และ FILE_B เป็นเช่นนี้: 123456789,123456789,730025400149993, 123455321,123455321,730025400126097, ดังนั้นด้วย Bash ฉันมีwhileวนรอบที่เลือกบรรทัดถัดไปใน FILE_A และ greps มากกว่าใน FILE_B เมื่อพบรูปแบบใน FILE_B ฉันเขียนลงในไฟล์ result.txt while read …

8
มีวิธีใดบ้างในการบำรุงรักษาโค้ดเบสที่เขียนในสองภาษาที่ใช้ตรรกะเดียวกัน
ฉันมีอัลกอริธึมเข้มข้นแบบลอจิคัลที่ฉันต้องการรหัสในสองภาษา (จริง ๆ แล้วฉันเสร็จในภาษาหนึ่งที่น่าพอใจและกำลังจะเริ่มเขียนโค้ดในภาษาอื่น) โดยความเข้มข้นของลอจิกผมหมายถึงอัลกอริทึมนั้นไม่สำคัญต้องมีความเข้าใจอย่างรอบคอบและที่สำคัญอาจมีข้อบกพร่อง (เนื่องจากความซับซ้อนและความประมาทคุณรู้) ซึ่งจะต้องได้รับการแก้ไขในอนาคต นอกจากนี้ฉันต้องการตรวจสอบให้แน่ใจว่าเมื่อรหัสนี้เปลี่ยนมือในที่สุดจะต้องไม่ครอบงำโปรแกรมเมอร์ใหม่ ในสถานการณ์นี้วิธีใดบ้างที่จะช่วยรักษาฐานรหัสและทำให้ข้อมูลตรงกัน ฉันหมายถึงเครื่องมือซอฟต์แวร์แนวปฏิบัติที่ดีที่สุด ฯลฯ FYI ทั้งสองภาษาคือ C ++ และ Java C ++ สำหรับ Windows / Linux และ Java สำหรับ "ทุกอย่างอื่น" รวมถึง Android

6
การตีความหลักการ DRY
ตอนนี้ฉันกำลังดิ้นรนกับแนวคิด DRY (อย่าทำซ้ำตัวเอง) ในการเขียนโค้ดของฉัน ฉันกำลังสร้างฟังก์ชั่นนี้ซึ่งฉันกลัวว่ามันจะซับซ้อนเกินไป แต่ฉันพยายามทำตามหลักการของ DRY createTrajectoryFromPoint(A a,B b,C c,boolean doesSomething,boolean doesSomething2) ฟังก์ชั่นนี้ผมจะพูดจะใช้เวลาป้อนพารามิเตอร์ 3 แล้วการทำงานจะทำบางสิ่งบางอย่างที่แตกต่างกันเล็กน้อยที่ได้รับการผสมบูลและdoesSomething doesSomething2อย่างไรก็ตามปัญหาที่ฉันมีคือฟังก์ชั่นนี้เพิ่มขึ้นอย่างซับซ้อนด้วยพารามิเตอร์บูลีนใหม่ทุกตัวที่เพิ่มเข้ามา ดังนั้นคำถามของฉันคือดีกว่าที่จะมีฟังก์ชั่นต่าง ๆ มากมายที่ใช้ตรรกะเดียวกันจำนวนมาก (ดังนั้นละเมิดหลักการ DRY) หรือฟังก์ชั่นหนึ่งที่ทำงานแตกต่างกันเล็กน้อยตามจำนวนพารามิเตอร์ แต่ทำให้ซับซ้อนมากขึ้น (แต่ รักษา DRY) หรือไม่
10 java  design  dry 

3
อัลกอริทึมใดที่สามารถใช้เพื่อให้ได้การทำนายคำถัดไปที่ดีพอสมควร
วิธีที่ดีในการใช้ "การคาดการณ์คำถัดไป" คืออะไร ตัวอย่างเช่นผู้ใช้พิมพ์ "I am" และระบบแนะนำ "a" และ "ไม่" (หรืออาจเป็นอย่างอื่น) เป็นคำถัดไป ฉันตระหนักถึงวิธีการที่ใช้โซ่มาร์คอฟและข้อความการฝึกอบรม (ชัดเจน) เพื่อให้บรรลุเป้าหมายนี้มากหรือน้อย แต่ฉันอ่านบางที่ว่าวิธีนี้มีข้อ จำกัด มากและใช้กับกรณีที่ง่ายมาก ฉันเข้าใจพื้นฐานของเครือข่ายประสาทและอัลกอริทึมทางพันธุกรรม (แต่ไม่เคยใช้มันในโครงการที่จริงจัง) และบางทีพวกเขาอาจได้รับความช่วยเหลือบ้าง ฉันสงสัยว่ามีอัลกอริทึมใด ๆ ที่ได้รับข้อความการฝึกอบรมที่เหมาะสม (เช่นบทความในหนังสือพิมพ์และการพิมพ์ของผู้ใช้) สามารถเกิดขึ้นได้พร้อมคำแนะนำที่เหมาะสมสำหรับคำถัดไป หากไม่ใช่ (ลิงก์ไปยัง) อัลกอริทึมวิธีการระดับสูงทั่วไปเพื่อโจมตีปัญหานี้ยินดีต้อนรับ

5
การเขียนโปรแกรมด้วยซอฟต์แวร์ recogition เสียง [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันใช้ Dragon Naturally พูดสั้น ๆ เมื่อไม่กี่ปีที่ผ่านมาและคิดว่ามันจะเป็นทางออกสำหรับการเขียนโปรแกรมหรือไม่? ฉันคิดมากขึ้นถ้าคุณหักแขนของคุณหรืออะไรที่จะเป็นอุปสรรคสำคัญในการเขียนโปรแกรม คำถามเดียวกันนี้สำหรับ SO แต่ไม่เคยตอบ

2
วิธีการออกแบบสกีมาฐานข้อมูล NoSql อย่างถูกต้อง? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ฉันต้องการเรียนรู้เพิ่มเติมเกี่ยวกับฐานข้อมูล NoSQL ดังนั้นฉันจึงเลือกสร้างโครงการใหม่ตั้งแต่เริ่มต้นเพื่อจัดการผลฟุตบอล ในฐานข้อมูลเชิงสัมพันธ์แบบดั้งเดิมของฉันฉันมีการแข่งขันทีมผลการแข่งขันและตารางการแข่งขัน เห็นได้ชัดว่าเกี่ยวข้องกันทั้งหมด สิ่งที่อาจเป็นวิธีที่ดีสำหรับการออกแบบโครงการเช่นนี้โดยใช้วิธี NoSQL แทน

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

4
เป็นวิธีที่ดีในการแสดงความสัมพันธ์แบบหลายต่อหลายระหว่างสองชั้นคืออะไร?
สมมติว่าฉันมีวัตถุสองชนิดคือ A และ B ความสัมพันธ์ระหว่างพวกมันมีมาก - ต่อ - กลุ่ม แต่ไม่มีพวกมันเป็นเจ้าของอีกคน อินสแตนซ์ A และ B ทั้งสองจำเป็นต้องตระหนักถึงการเชื่อมต่อ มันไม่ใช่แค่ทางเดียว ดังนั้นเราสามารถทำสิ่งนี้: class A { ... private: std::vector<B *> Bs; } class B { private: std::vector<A *> As; } คำถามของฉันคือ:ฉันจะวางฟังก์ชันเพื่อสร้างและทำลายการเชื่อมต่อที่ไหน? ควรเป็น A :: Attach (B) ซึ่งจะอัพเดท A :: Bs และ B :: เป็นเวกเตอร์หรือไม่ หรือควรเป็น B …
10 c++  c++11 

3
การแย่งชิง: เกิดอะไรขึ้นถ้าเจ้าของผลิตภัณฑ์มีงานทำ?
ฉันเพิ่งเริ่มทำงานกับทีมที่ได้เลือกบางแง่มุมของการแย่งชิงกัน (สองกล่องเวลาสองสัปดาห์) แต่ไม่ใช่คนอื่น ๆ (ทีมไม่เห็นด้วยกับการประมาณการทั้งหมดหรือจำนวนคะแนนในการวิ่ง แต่ฉันจะเปลี่ยนสิ่งนี้ เร็ว ๆ นี้) เจ้าของผลิตภัณฑ์ยังเป็นทรัพยากรด้านเทคนิค (นักวิทยาศาสตร์) ที่มีพื้นฐานการพัฒนาบางอย่าง เป็นการเหมาะสมที่จะมีงานของเจ้าของผลิตภัณฑ์ (ซึ่งส่วนใหญ่เกี่ยวข้องกับการวิจัย) ผสมกับงานของทีม (บางงานเป็นการวิจัยและพัฒนา)
10 scrum 

7
วิธีแนะนำทีมของคุณให้รู้จักรูปแบบการทำงานของการเข้ารหัส
ฉันมีสถานการณ์ที่คนส่วนใหญ่ในกลุ่มของฉันมาจากพื้นหลังการเขียนโปรแกรมเชิงวัตถุโดยไม่มีความเข้าใจเกี่ยวกับการเขียนโปรแกรมการทำงาน พื้นฐานไม่เหมือนการปิด ข้อเสนอแนะใด ๆ เกี่ยวกับสิ่งที่อาจเป็นวิธีที่ดีในการแนะนำพวกเขาเกี่ยวกับรูปแบบการเข้ารหัสการทำงาน? การเขียนโค้ดจำนวนมากที่เราทำได้นั้นสามารถย่อให้สั้นลงได้ถ้าเราทำตามหน้าที่การใช้งานสำหรับกรณีเฉพาะของเรา ฉันได้รับการนำเสนอสองสามรายการเกี่ยวกับกระบวนทัศน์การทำงานและการเข้ารหัสแล้ว น่าเสียดายที่เราไม่ได้ใช้ภาษาการเขียนโปรแกรมที่เหมาะสมเช่น Haskell (โดยทั่วไปคือรหัสดั้งเดิมคือ C, C ++, Java) ดังนั้นเราต้องทำทุกอย่างที่มีอยู่กับสิ่งเหล่านี้

1
โปรแกรมเมอร์กราฟิกจะจัดการกับการแสดงจุดยอดที่ไม่เปลี่ยนภาพได้อย่างไร
ดังนั้นชื่อค่อนข้างอึดอัดใจ ฉันจะให้พื้นหลังแล้วถามคำถามของฉัน ความเป็นมา : ฉันทำงานเป็นนักพัฒนาแอปพลิเคชั่นเว็บGISแต่ในเวลาว่างฉันเล่นกับการเรนเดอร์แผนที่และปรับปรุงรูปแบบการแลกเปลี่ยนข้อมูล ฉันทำงานในพื้นที่ 2D เท่านั้น ปัญหาที่น่าสนใจอย่างหนึ่งที่ฉันได้พบก็คือเมื่อคุณแสดงรูปหลายเหลี่ยมในขนาดเล็ก (ซูมออก) จุดยอดเยี่ยมจำนวนมากซ้ำซ้อนกัน กรณีที่รุนแรงคือคุณมีรูปหลายเหลี่ยมที่มี 500,000 จุดยอดที่ใช้พิกเซลเดียวเท่านั้น หากคุณกำลังส่งข้อมูลนี้ไปยังเบราว์เซอร์มันจะเป็นการไม่เหมาะสมที่จะละเว้นจุดยอดเหล่านั้น ~ 499,999 วิธีหนึ่งที่เราสามารถทำได้คือการแสดงภาพบนเซิร์ฟเวอร์และส่งเป็น PNG: voila มันเป็นประเด็น อย่างไรก็ตามบางครั้งเราต้องการข้อมูลที่ส่งไปยังเบราว์เซอร์ซึ่งสามารถแสดงผลด้วย SVG (หรือแคนวาสหรือผ้าใบหรือ webgl) เพื่อให้สามารถโต้ตอบได้ ปัญหา : ปรากฎว่าการใช้ชุดข้อมูลทางภูมิศาสตร์สมัยใหม่มันง่ายเกินความสามารถในการแสดงผลของ SVG ในความพยายามที่จะรับมือกับข้อ จำกัด เหล่านั้นฉันพยายามที่จะหาวิธีลดขนาดข้อมูลที่ตั้งไว้ตามขนาดและขอบเขตของแผนที่ (และถ้าจำเป็นสำหรับความกว้างและความสูงของพิกเซลแผนที่ที่ทราบ) ฉันลดขนาดข้อมูลลงอย่างมากเพียงแค่ใช้อัลกอริทึม Douglas-Peuckerและฉันเชื่อว่าฉันสามารถทำให้รูปหลายเหลี่ยมเป็นจริงได้ภายในหนึ่งพิกเซล แต่น่าเสียดายที่ Douglas-Peucker ไม่รักษาโทโพโลยีดังนั้นจึงเปลี่ยนวิธีการแสดงเส้นขอบระหว่างรูปหลายเหลี่ยม ฉันไม่สามารถหาอัลกอริทึมอื่น ๆ เพื่อทดลองและปรับให้เข้ากับวัตถุประสงค์ได้อย่างง่ายดาย แต่ฉันมีพื้นหลัง CS / อัลกอริทึมไม่มากและอาจจำไม่ได้ถ้าฉันเห็นพวกเขา

4
ปัจจุบันมีการทดสอบความถนัดทันสมัยและเป็นมาตรฐานสำหรับวิศวกรรมซอฟต์แวร์หรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา พื้นหลัง ฉันเป็นวิศวกรซอฟต์แวร์ที่ทำงานอยู่ในระหว่างการหาสัญญาใหม่สำหรับปีถัดไปหรือมากกว่านั้น ในการค้นหาของฉันฉันยั่งยืนสัมภาษณ์หลายเทคนิคไร้สาระตามที่ระบุโดยคำถามนี้เป็นที่นิยมผมถามก่อนหน้านี้ในวันนี้ แม้ว่าคำถามที่ฉันถูกถามไม่ได้ไร้สาระเกือบทุกครั้ง แต่ฉันก็คงจะเหนื่อยที่จะตอบคำถามเหล่านี้หลายต่อหลายครั้งเพื่อโอกาสในการทำสัญญาที่หลากหลาย ดังนั้นสิ่งนี้ทำให้ฉันคิดว่าการสอบแบบมาตรฐานที่ผู้เชี่ยวชาญด้านซอฟต์แวร์สามารถใช้งานได้จะจัดทำดัชนีชี้วัดทั่วไปที่ผู้อ้างอิงสามารถอ้างอิงแทนคำถามสัมภาษณ์ทางเทคนิคที่ไร้สาระ คำถาม มีการทดสอบความถนัดทางวิศวกรรมซอฟต์แวร์ที่เป็นมาตรฐาน (SEAT ??) สำหรับมืออาชีพในการทำงานหรือไม่? หากไม่มีการสอบเช่นนั้นคำถามหรือหัวข้อใดที่ควรครอบคลุม ความคิดเพิ่มเติม โปรดจำไว้ว่าหากเสนอคำถามหรือหัวข้อเพื่อมุ่งเน้นคำถามหรือหัวข้อที่เกี่ยวข้องกับแนวทางการพัฒนาร่วมสมัยและความต้องการที่เป็นจริงในพนักงานซึ่งจะเป็นจุดทดสอบความถนัดแบบมาตรฐาน กล่าวอีกนัยหนึ่งไม่มีคำถามการเดินทางข้ามตัวตลก

4
รูปแบบการออกแบบสำหรับการจัดการการตอบสนอง
ส่วนใหญ่เวลาที่ฉันเขียนโค้ดบางอย่างที่จัดการการตอบสนองสำหรับการเรียกใช้ฟังก์ชันบางฉันได้รับโครงสร้างรหัสต่อไปนี้: ตัวอย่าง: นี่คือฟังก์ชันที่จะจัดการการรับรองความถูกต้องสำหรับระบบเข้าสู่ระบบ class Authentication{ function login(){ //This function is called from my Controller $result=$this->authenticate($username,$password); if($result=='wrong password'){ //increase the login trials counter //send mail to admin //store visitor ip }else if($result=='wrong username'){ //increase the login trials counter //do other stuff }else if($result=='login trials exceeded') //do some stuff }else if($result=='banned ip'){ …

2
วิธีปฏิบัติที่ดีที่สุดสำหรับการเริ่มต้นสมาชิกคลาสใน php
ฉันมีรหัสจำนวนมากเช่นนี้ในตัวสร้างของฉัน: - function __construct($params) { $this->property = isset($params['property']) ? $params['property'] : default_val; } มันจะดีกว่าที่จะทำเช่นนี้แทนที่จะระบุค่าเริ่มต้นในการกำหนดคุณสมบัติ? คือpublic $property = default_valอะไร บางครั้งมีตรรกะสำหรับค่าเริ่มต้นและค่าเริ่มต้นบางอย่างมาจากคุณสมบัติอื่นซึ่งเป็นสาเหตุที่ฉันทำเช่นนี้ในตัวสร้าง ฉันควรใช้ตัวตั้งค่าเพื่อแยกตรรกะทั้งหมดสำหรับค่าเริ่มต้นหรือไม่

2
จุดอ่อนของการรักษาความปลอดภัย 3-Strike
ฉันได้อ่านวรรณกรรมเกี่ยวกับความปลอดภัยโดยเฉพาะการรักษาความปลอดภัยด้วยรหัสผ่าน / การเข้ารหัสและมีสิ่งหนึ่งที่ฉันสงสัยว่า: กฎ 3-Strike เป็นโซลูชั่นที่สมบูรณ์แบบสำหรับความปลอดภัยของรหัสผ่านหรือไม่? นั่นคือถ้าจำนวนครั้งของการพยายามใช้รหัสผ่านถูก จำกัด ไว้ที่จำนวนเล็กน้อยบางส่วนหลังจากที่การร้องขอการรับรองความถูกต้องทั้งหมดจะไม่ได้รับเกียรตินั่นจะไม่ปกป้องผู้ใช้จากการบุกรุกหรือไม่ ฉันรู้ว่าการเข้าถึงหรือควบคุมบางสิ่งไม่ได้หมายความว่าจะผ่านระบบการตรวจสอบสิทธิ์เสมอไป แต่คุณสมบัตินี้ไม่ได้ทำให้การโจมตีแบบพจนานุกรม / การโจมตีแบบเดรัจฉานล้าสมัยหรือไม่ มีบางอย่างที่ฉันขาดหายไปหรือไม่?
10 security 

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