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

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

16
FizzBuzz - จริงเหรอ? [ปิด]
เมื่อพูดถึง "คำถามสัมภาษณ์" คำถามของ FizzBuzz มักจะเกิดขึ้น นอกจากนี้ยังมีโพสต์สยองขวัญการเข้ารหัสเกี่ยวกับมัน ตอนนี้ถ้าคุณรบกวนเว็บไซต์ที่อ่านเช่นนี้คุณอาจจะมีความเป็นไปได้น้อยกว่าที่จะอยู่ในกลุ่มประชากรของโปรแกรมเมอร์ที่จะพบว่า FizzBuzz มี แต่เรื่องเล็ก ๆ น้อย ๆ แต่มันเป็นความจริงหรือไม่ที่ 99% ของโปรแกรมเมอร์จะต้องต่อสู้กับมัน จริงๆ? มีหลักฐานอะไรที่จะสนับสนุนสิ่งนี้? ตัวอย่างชีวิตจริงบางอย่างมีประโยชน์มากในการตอบคำถามนี้
60 interview 

14
ประวัติการใช้“ foo” และ“ bar” ในซอร์สโค้ดคืออะไร?
ทำไมตัวอย่างโค้ดจำนวนมากโดยเฉพาะบทช่วยสอนใช้ชื่อ "Foo" และ "Bar" บ่อยครั้ง มันเกือบจะเป็นมาตรฐาน ตัวอย่างเช่น: void foo(char* bar) { printf("%s", bar); }

4
ในฐานะนักพัฒนา แต่เพียงผู้เดียว (ตอนนี้) ฉันจะใช้ Git ได้อย่างไร [ปิด]
ฉันมีหลายโครงการใน Git ที่ในที่สุดฉันก็ต้องการนำคนอื่นเข้ามา อย่างไรก็ตามตอนนี้มันเป็นเพียงฉันและฉันใช้ Git และ GitHub อย่างง่าย ๆ : ไม่มีสาขาและโดยทั่วไปเพียงแค่ใช้คอมมิทเป็นข้อมูลสำรองในไฟล์ในเครื่องของฉัน บางครั้งฉันจะย้อนกลับไปดูไฟล์รุ่นก่อนหน้าของฉันเพื่ออ้างอิง แต่ฉันไม่จำเป็นต้องย้อนกลับไปที่จุดนี้แม้ว่าฉันจะชื่นชมตัวเลือกที่ฉันต้องการในอนาคต ในฐานะนักพัฒนาเพียงผู้เดียวคุณสมบัติของ Git หรือ GitHub ที่ฉันสามารถใช้ประโยชน์จากสิ่งนี้จะเป็นประโยชน์ต่อฉันในตอนนี้? เวิร์กโฟลว์ของฉันควรเป็นอย่างไร นอกจากนี้ยังมีวิธีปฏิบัติใดเป็นพิเศษที่ฉันต้องเริ่มทำเมื่อมีความคาดหมายในการเพิ่มผู้อื่นในโครงการของฉันในอนาคตหรือไม่

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

5
ประกาศเกี่ยวกับลิขสิทธิ์ / การปฏิเสธความรับผิดชอบในไฟล์ต้นฉบับ
มันเป็นเรื่องธรรมดาที่จะประกาศเกี่ยวกับลิขสิทธิ์การสละสิทธิ์ตามกฎหมายต่าง ๆ และบางครั้งแม้แต่ข้อตกลงการอนุญาตใช้สิทธิ์ฉบับเต็มในแต่ละไฟล์ต้นฉบับของโครงการโอเพ่นซอร์ส สิ่งนี้จำเป็นสำหรับโครงการโอเพ่นซอร์ส (1) และ (2) โครงการโอเพนซอร์สหรือไม่ คุณพยายามทำอะไรหรือป้องกันโดยการวางประกาศเหล่านี้ในไฟล์ต้นฉบับ? ฉันเข้าใจว่ามันเป็นคำถามทางกฎหมายและฉันสงสัยว่าเราจะได้รับคำตอบที่สมบูรณ์แบบที่โปรแกรมเมอร์ (สำหรับผู้เขียนโปรแกรมใช่ไหม?) สิ่งที่น่าสนใจที่จะได้ยินคือเมื่อคุณใส่สิ่งที่ถูกกฎหมายไว้ในไฟล์ต้นฉบับของคุณ เป็นเพราะ "ทุกคนทำ" หรือคุณได้รับคำแนะนำทางกฎหมาย? อะไรคือเหตุผล

2
การเขียนการทดสอบสำหรับรหัสที่ฉันไม่เข้าใจ
ฉันเพิ่งเสร็จสิ้นการปรับโครงสร้างกล่องดำ ฉันไม่สามารถเช็คอินได้เพราะฉันไม่สามารถทดสอบวิธีการได้ ในระดับสูงฉันมีคลาสที่การกำหนดค่าเริ่มต้นเกี่ยวข้องกับการคว้าค่าจากคลาส B บางคลาสถ้า "ว่าง" จะสร้างค่าเริ่มต้นที่สมเหตุสมผล ฉันแยกส่วนนี้เป็นวิธีการเริ่มต้นคลาส B เป็นค่าเริ่มต้นเดียวกัน ฉันยังไม่ได้ระบุวัตถุประสงค์ / บริบทของชั้นเรียนหรือวิธีการใช้ ดังนั้นฉันไม่สามารถเริ่มต้นวัตถุจากคลาส B ที่ว่างเปล่าและตรวจสอบว่ามันมีค่าที่ถูกต้อง / ทำสิ่งที่ถูกต้อง ความคิดที่ดีที่สุดของฉันคือการเรียกใช้รหัสเดิมฮาร์ดโค้ดในผลลัพธ์ของวิธีการสาธารณะขึ้นอยู่กับสมาชิกเริ่มต้นและทดสอบรหัสใหม่กับที่ ฉันไม่สามารถพูดได้อย่างชัดเจนว่าทำไมฉันถึงรู้สึกไม่สบายใจกับความคิดนี้ มีการโจมตีที่ดีกว่าที่นี่ไหม?

7
การครอบคลุมรหัสเน้นวิธีที่ไม่ได้ใช้ - ฉันควรทำอย่างไร
ฉันได้รับมอบหมายให้เพิ่มรหัสครอบคลุมของโครงการ Java ที่มีอยู่ ฉันสังเกตเห็นว่าเครื่องมือครอบคลุมรหัส ( EclEmma ) ได้เน้นวิธีการบางอย่างที่ไม่เคยเรียกจากที่ใดก็ได้ ปฏิกิริยาเริ่มต้นของฉันคือไม่เขียนการทดสอบหน่วยสำหรับวิธีการเหล่านี้ แต่เพื่อเน้นพวกเขาไปยังผู้จัดการสายงาน / ทีมของฉันและถามว่าทำไมฟังก์ชันเหล่านี้ถึงเริ่มต้นด้วย วิธีการที่ดีที่สุดจะเป็นอย่างไร เขียนการทดสอบหน่วยสำหรับพวกเขาหรือตั้งคำถามว่าทำไมถึงมี

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

5
คอมพิวเตอร์จะพยายามหารด้วยศูนย์หรือไม่
เราทุกคนรู้0/0เป็นUndefinedและกลับข้อผิดพลาดถ้าผมจะใส่ลงในเครื่องคิดเลขและถ้าผมจะสร้างโปรแกรม (ใน C อย่างน้อย) OS จะยุติมันเมื่อฉันพยายามที่จะหารด้วยศูนย์ แต่สิ่งที่ฉันสงสัยคือถ้าคอมพิวเตอร์พยายามแบ่งเป็นศูนย์หรือว่ามี "การป้องกันในตัว" ดังนั้นเมื่อมัน "เห็น" 0/0มันจะส่งกลับข้อผิดพลาดก่อนที่จะพยายามคำนวณ

3
การออกแบบสถาปัตยกรรมทำได้อย่างไรในสภาพแวดล้อมที่คล่องตัว
ฉันได้อ่านหลักการสำหรับสถาปนิกว่องไวที่พวกเขานิยามหลักการต่อไป: หลักการ # 1 ทีมที่ใช้รหัสออกแบบระบบ หลักการ # 2 สร้างสถาปัตยกรรมที่ง่ายที่สุดที่อาจเป็นไปได้ หลักการ # 3 เมื่อมีข้อสงสัยรหัสมันออกมา หลักการ # 4 พวกเขาสร้างมันพวกเขาทดสอบ หลักการ # 5 ยิ่งระบบยิ่งใหญ่ หลักการ # 6 สถาปัตยกรรมของระบบคือการทำงานร่วมกันของบทบาท หลักการ # 7 ไม่มีการผูกขาดกับนวัตกรรม บทความกล่าวว่าการออกแบบสถาปัตยกรรมส่วนใหญ่เสร็จสิ้นในระหว่างขั้นตอนการเข้ารหัสและการออกแบบระบบก่อนหน้านั้นเท่านั้น นั่นเป็นเรื่องปกติ ดังนั้นการออกแบบระบบทำได้อย่างไร? ใช้ UML หรือเปล่า หรือเอกสารที่กำหนดอินเทอร์เฟซและบล็อกหลัก อาจจะเป็นอย่างอื่น?

11
สามารถใช้เลขอาถรรพ์ในการทดสอบหน่วยได้หรือไม่หากตัวเลขไม่ได้มีความหมายอะไรเลย?
ในการทดสอบหน่วยของฉันฉันมักจะโยนค่าโดยพลการที่รหัสของฉันเพื่อดูว่ามันทำอะไร ตัวอย่างเช่นถ้าฉันรู้ว่าfoo(1, 2, 3)ควรจะคืน 17 ฉันอาจเขียนนี้: assertEqual(foo(1, 2, 3), 17) ตัวเลขเหล่านี้เป็นกฎเกณฑ์โดยธรรมชาติและไม่มีความหมายที่กว้างกว่า (ตัวอย่างเช่นมันไม่ใช่เงื่อนไขขอบเขตแม้ว่าฉันจะทำการทดสอบกับสิ่งเหล่านั้นเช่นกัน) ฉันจะพยายามหาชื่อที่ดีสำหรับตัวเลขเหล่านี้และการเขียนอะไรทำนองconst int TWO = 2;นั้นก็ไม่ได้ช่วยอะไรเลย มันโอเคที่จะเขียนแบบทดสอบนี้หรือฉันควรแยกตัวเลขออกเป็นค่าคงที่หรือไม่? ในทุกหมายเลขมายากลถูกสร้างขึ้นเหมือนกันหรือไม่ เราได้เรียนรู้ว่าตัวเลขเวทมนตร์นั้นใช้ได้ถ้าความหมายนั้นชัดเจนจากบริบท แต่ในกรณีนี้ตัวเลขนั้นไม่มีความหมายเลย

14
ทำไมกลไกการป้องกันการฉีด SQL ถึงวิวัฒนาการไปในทิศทางของการใช้คิวรีแบบพารามิเตอร์
วิธีที่ฉันเห็นการโจมตีด้วยการฉีด SQL สามารถป้องกันได้โดย: คัดกรองกรองเข้ารหัสการป้อนข้อมูลอย่างระมัดระวัง (ก่อนแทรกลงใน SQL) การใช้คำสั่งที่เตรียมไว้ / แบบสอบถามแบบใช้พารามิเตอร์ ฉันคิดว่ามีข้อดีข้อเสียสำหรับแต่ละข้อ แต่เหตุใด # 2 จึงถูกถอดออกและได้รับการพิจารณาว่ามีวิธีการป้องกันการฉีดยามากหรือน้อย มันปลอดภัยกว่าและมีแนวโน้มที่จะเกิดข้อผิดพลาดน้อยลงหรือมีปัจจัยอื่น ๆ อีกหรือไม่? ตามที่ฉันเข้าใจถ้าใช้ # 1 อย่างถูกต้องและข้อควรระวังทั้งหมดได้รับการดูแลมันจะมีประสิทธิภาพเท่ากับ # 2 ฆ่าเชื้อโรคกรองและเข้ารหัส มีความสับสนในส่วนของฉันระหว่างสิ่งที่เป็นฆ่าเชื้อ , การกรองและการเข้ารหัสความหมาย ฉันจะบอกว่าสำหรับวัตถุประสงค์ของฉันทั้งหมดข้างต้นสามารถพิจารณาตัวเลือก 1. ในกรณีนี้ผมเข้าใจว่าการฆ่าเชื้อและการกรองมีศักยภาพในการแก้ไขหรือยกเลิกการป้อนข้อมูลในขณะที่การเข้ารหัสจะเก็บรักษาข้อมูลตามที่เป็นแต่ถอดรหัส อย่างถูกต้องเพื่อหลีกเลี่ยงการโจมตีของการฉีด ฉันเชื่อว่าการหลีกเลี่ยงข้อมูลถือได้ว่าเป็นวิธีการเข้ารหัส พารามิเตอร์การสืบค้นเทียบกับการเข้ารหัสห้องสมุด มีคำตอบที่แนวคิดของparameterized queriesและencoding librariesที่ได้รับการปฏิบัติแทนกันได้ แก้ไขฉันถ้าฉันผิด แต่ฉันรู้สึกว่าแตกต่างกัน ความเข้าใจของฉันคือว่าencoding librariesไม่ว่าพวกเขาจะมีศักยภาพในการปรับเปลี่ยน SQL "โปรแกรม" ได้ดีเพียงใดเพราะพวกเขากำลังทำการเปลี่ยนแปลง SQL เองก่อนที่มันจะถูกส่งไปยัง RDBMS Parameterized queries ในอีกทางหนึ่งส่งโปรแกรม SQL …

10
แสดงดีกว่า () + ซ่อน () หรือ SetVisible (มองเห็นบูล) หรือไม่
ดีกว่าอะไรและเพราะอะไร (จากมุมมองของการออกแบบอินเตอร์เฟส): a) มีสองShow()และHide()ฟังก์ชั่น b) การมีSetVisible(bool visible)ฟังก์ชั่นเดียว แก้ไข: ตัวอย่างเช่นวัตถุบางอย่างมีสถานะการมองเห็นและฟังก์ชั่นนี้จะใช้ในการเปลี่ยนแปลง ค) มีทั้งสามShow(), Hide(), SetVisible(bool visible)ฟังก์ชั่น
59 java  c++  interfaces 

3
** ชื่ออะไรในไพ ธ อน?
บางครั้งฉันเขียนโปรแกรม Python **เพื่อทำการแปลง ฉันเข้าใจสิ่งที่มันทำ แต่ฉันกำลังจัดการกับโครงสร้างข้อมูลอะไร? A dictและอื่น ๆ คืออะไร? array? มีชื่อสำหรับ**ผู้ประกอบการหรือไม่?

16
ทำไมต้องใช้! boolean_variable มากกว่า boolean_variable == false
ความคิดเห็นเกี่ยวกับคำถามนี้: การตรวจสอบว่าวิธีการส่งกลับเท็จ: กำหนดผลลัพธ์ให้กับตัวแปรชั่วคราวหรือทำให้วิธีการภาวนาโดยตรงในเงื่อนไข? บอกว่าคุณควรใช้!booleanแทนboolean == falseเมื่อทดสอบเงื่อนไข ทำไม? สำหรับฉันนั้นboolean == falseเป็นธรรมชาติมากขึ้นในภาษาอังกฤษและชัดเจนยิ่งขึ้น ฉันขอโทษถ้านี่เป็นเพียงเรื่องของสไตล์ แต่ฉันสงสัยว่ามีเหตุผลอื่นอีก!booleanหรือไม่สำหรับการตั้งค่านี้

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