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

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

6
จะตรวจสอบความถูกต้องของโดเมนที่ผู้ใช้เป็นเจ้าของได้อย่างไร
ฉันกำลังเขียนซอฟต์แวร์ซึ่งส่วนใหญ่จะใช้โดย บริษัท ฉันมีความคิดที่จะให้ บริษัท ลงทะเบียนโดเมนอีเมลของพวกเขาเพื่อให้ผู้ใช้ทุกคนที่ลงทะเบียนด้วยอีเมลของโดเมนที่กำหนดจะถูกใส่ในกลุ่ม บริษัท โดยอัตโนมัติ ฉันรู้ว่า Slack ทำสิ่งนี้และใช้งานได้ แต่มีปัญหาบางอย่าง ... ตัวอย่างเช่นฉันเพิ่งลงทะเบียน "live.it" (เวอร์ชั่นอิตาลี live.com โดย Microsoft) ฉันไม่สามารถสันนิษฐานได้ว่าหากผู้ใช้ตรวจสอบอีเมลด้วยโดเมนที่ระบุแล้วจะปลอดภัยที่จะให้ผู้ใช้ทุกคนมี domain_mail เดียวกันในกลุ่มเดียวกัน ตัวอย่างเช่นถ้าฉันลงทะเบียนกับ me@gmail.com ฉันไม่ต้องการให้ผู้ใช้ลงทะเบียน "gmail.com" มีโดเมนของตัวเอง ฉันต้องการหลีกเลี่ยงการใช้วิธีการเช่น "ใส่ไฟล์ html ในรูทของโดเมน" หรือ "ตั้งค่าระเบียน TXT" ดังนั้นฉันจึงสงสัยว่าฉันควรทำอย่างไร

2
ทำให้กรณีที่ไม่ดีสำหรับการจัดเรียงอย่างรวดเร็วคืออะไร?
ฉันกำลังเรียนรู้เกี่ยวกับ quicksort และต้องการแสดงอาร์เรย์ที่แตกต่างกันซึ่ง quicksort จะมีช่วงเวลาที่ยากลำบาก Quicksort ที่ฉันมีอยู่ในใจไม่มีการสับสุ่มเริ่มต้นทำพาร์ติชัน 2 และไม่คำนวณค่ามัธยฐาน ฉันคิดถึงตัวอย่างสามตัวอย่าง: [1,2,3,4,5,6,7,8,9,10] - when the array is sorted [10,9,8,7,6,5,4,3,2,1] - when the array is reversed [1,1,1,1,1,1,1,1,1,1] - when the array is the same values [1,1,1,2,2,2,3,3,3,3] - when there are few and unique keys ตัวอย่างเช่นฉันไม่แน่ใจเกี่ยวกับสิ่งนี้: [1,3,5,7,9,10,8,6,4,2] ดังนั้นอะไรที่ทำให้อาร์เรย์ที่ quicksort มีความยากลำบากเมื่อเทียบกับที่มันเหมาะ (เกือบ)?

1
รหัสเครื่อง JIT และบิต Execution Disable
รหัสเครื่องที่สร้างจากรันไทม์เป็นอย่างไร (เช่นผลลัพธ์ของ JIT) ซึ่งดำเนินการโดย CPU จริง ๆ ถ้า CPU / OS มีบิต Execution Disable? เท่าที่ฉันทราบตัวประมวลผลและระบบปฏิบัติการที่ทันสมัยหลายตัวรวมถึงการสนับสนุน NX บิต (รวมถึง Intel และ ARM) ซึ่งป้องกันรหัสเครื่องที่เก็บไว้ที่อยู่อื่นนอกเหนือจากส่วนรหัสของไบนารีที่รวบรวมจากการถูกประมวลผล เห็นได้ชัดว่านี่เป็นข้อได้เปรียบด้านความปลอดภัยที่ดีเพราะมันป้องกันการโจมตีการฉีดรหัสเชลล์ แต่เครื่องยนต์ของ JIT เช่น LLVM ซึ่งสร้างรหัสเครื่องจักรแบบไดนามิกได้รับสิ่งนี้ได้อย่างไร
10 machine-code  jit  llvm 

4
เป็นไปตามเงื่อนไขหรือไม่ที่จะมีผลข้างเคียง? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันกำลังเรียนหลักสูตรโครงสร้างข้อมูลระดับกลางเป็นสิ่งที่จำเป็นสำหรับการเข้าสู่โปรแกรม CS MS ที่มหาวิทยาลัยทุกคนในอเมริกาเคยได้ยิน โค้ดหนึ่งบรรทัดที่เขียนในชั้นเรียนจับตาฉัน: if (a > 33 | b++ < 54) {...} สิ่งนี้จะไม่ผ่านการตรวจสอบรหัสที่ทำงานของฉัน หากคุณเขียนโค้ดเช่นนี้ในการสัมภาษณ์นี่จะเป็นการประท้วงครั้งสำคัญกับคุณ (นอกเหนือจากการเป็นเงื่อนไขกับผลข้างเคียงมันก็ฉลาดที่ค่าใช้จ่ายของความชัดเจน) ในความเป็นจริงฉันไม่เคยเห็นเงื่อนไขที่มีผลข้างเคียงและ Googling ก็ไม่ได้ผลมากนักเช่นกัน นักเรียนอีกคนอยู่ข้างหลังเลิกเรียนเพื่อถามเกี่ยวกับเรื่องนี้ด้วยดังนั้นฉันไม่ใช่คนเดียวที่คิดว่านี่แปลก แต่อาจารย์ค่อนข้างแน่วแน่ว่านี่เป็นรหัสที่ยอมรับได้และเขาจะเขียนอะไรทำนองนั้นในที่ทำงาน (งาน FT ของเขาคือ SWE หลักที่ บริษัท คุณเคยได้ยินมา) ฉันไม่สามารถจินตนาการถึงโลกที่บรรทัดของรหัสนี้จะเป็นที่ยอมรับได้ ฉันผิดหรือเปล่า? ตกลงไหม กรณีทั่วไปมากขึ้น: เงื่อนไขกับผลข้างเคียง? เหล่านั้นเคยตกลง?

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

1
เหตุใด GCC จึงเปลี่ยนจากวัวกระทิงเป็นตัวแยกวิเคราะห์แบบสืบซ้ำสำหรับ C ++ และ C
มีการเปลี่ยนแปลงภาษาที่ต้องใช้หรือมีเหตุผลบางอย่างที่ทำไมกระทิงจึงไม่เหมาะสมหรือเหมาะสมที่สุด? ฉันเห็นวิกิพีเดียว่าพวกเขาเปลี่ยนไปอ้างอิงถึงบันทึกย่อประจำรุ่นGCC 3.4และGCC 4.1 สถานะรีลีสโน้ตเหล่านี้: ตัวแยกวิเคราะห์ C ++ purser แบบเขียนซ้ำด้วยมือได้แทนที่ตัวแยกวิเคราะห์ C ++ ที่ได้จาก YACC จาก GCC รุ่นก่อนหน้า parser ใหม่มีโครงสร้างพื้นฐานที่พัฒนาขึ้นอย่างมากซึ่งจำเป็นสำหรับการแยกวิเคราะห์ซอร์สโค้ด C ++ ที่ดีขึ้นการจัดการส่วนขยายและการแยกที่สะอาด (ถ้าเป็นไปได้) ระหว่างการวิเคราะห์ซีแมนทิกส์ที่เหมาะสมและการแยกวิเคราะห์ parser ใหม่แก้ไขข้อบกพร่องมากมายที่พบใน parser เก่า และ: ตัวแยกวิเคราะห์ C และ Objective-C แบบเก่าของ Bison ถูกแทนที่ด้วยตัวแยกวิเคราะห์แบบเรียกซ้ำแบบสืบพันธุ์แบบเขียนด้วยมือที่เร็วขึ้น สิ่งที่ฉันอยากรู้คือปัญหาที่แท้จริงของพวกเขาคืออะไรและทำไมจึงเป็นไปไม่ได้ / วิธีแก้ปัญหาโดยใช้วัวกระทิง
10 c++  c  parsing  compiler 

5
ทำไม“ charset” ถึงมีความหมายว่า“ การเข้ารหัส” ในการใช้งานทั่วไป?
สิ่งที่ทำให้ฉันสับสนมานานคือซอฟต์แวร์จำนวนมากใช้คำว่า "charset" และ "encoding" เป็นคำพ้องความหมาย เมื่อผู้คนอ้างถึงยูนิโค้ด "เข้ารหัส" พวกเขามักจะหมายถึงชุดกฎสำหรับการแสดงอักขระยูนิโค้ดเป็นลำดับของไบต์ - เช่น ASCII หรือ UTF-8 ดูเหมือนว่าสมเหตุสมผลและเป็นธรรมชาติ แนวคิดคือคุณกำลัง "เข้ารหัส" อักขระเหล่านั้นเป็นไบต์โดยใช้ ruleset ที่ระบุ เนื่องจากบางครั้ง rulesets เหล่านั้นให้ความสามารถในการ "เข้ารหัส" เซ็ตย่อยบางส่วนของอักขระยูนิโค้ดทั้งหมดคุณอาจจินตนาการว่า "charset" - ย่อมาจาก 'set of characters' - จะหมายถึงชุดของอักขระ Unicode - โดยไม่คำนึงถึงวิธีการ อักขระเหล่านั้นถูกเข้ารหัส การเข้ารหัสจึงหมายถึงชุดอักขระ (การเข้ารหัสเช่น ASCII ซึ่งมีกฎสำหรับการเข้ารหัสอักขระ 128 ตัวเท่านั้นจะเชื่อมโยงกับชุดอักขระของอักขระ 128 ตัว) แต่ชุดอักขระไม่จำเป็นต้องมีการเข้ารหัส (เช่น UTF-8, UTF -16 และ …

3
ทำไมโครงสร้างที่อัดแน่นจึงไม่ได้เป็นส่วนหนึ่งของภาษา C
คอมไพเลอร์ C ทุกตัวมีตัวเลือกในการ "แพ็ค" โครงสร้าง C (เช่น__attribute__ ((__packed__))หรือ#pragma pack()) ตอนนี้เราทุกคนรู้ว่าจำเป็นต้องมีการบรรจุถ้าเราต้องการส่งหรือเก็บข้อมูลด้วยวิธีที่เชื่อถือได้ สิ่งนี้จะต้องเป็นข้อกำหนดตั้งแต่วันแรกของภาษา C ดังนั้นฉันสงสัยว่าทำไมโครงสร้างที่อัดแน่นจึงไม่ได้เป็นส่วนหนึ่งของข้อกำหนดภาษา C? พวกเขาไม่ได้อยู่ใน C99 หรือ C11 ถึงแม้ว่าความจำเป็นในการมีพวกเขาเป็นที่รู้จักกันมานานหลายทศวรรษแล้วหรือยัง? ฉันกำลังคิดถึงอะไร ทำไมคอมไพเลอร์จึงเจาะจง?
10 c 

6
วิธีการตรวจสอบสิ่งที่ควรได้รับตัวควบคุมที่เกี่ยวข้องของตัวเอง?
ฉันใช้รูปแบบ MVC ในเว็บแอปพลิเคชันของฉันซึ่งสร้างด้วย PHP ฉันมักจะดิ้นรนเพื่อตรวจสอบว่าฉันต้องการตัวควบคุมเฉพาะใหม่สำหรับชุดของการกระทำหรือถ้าฉันควรวางไว้ในตัวควบคุมที่มีอยู่แล้ว มีกฎง่ายๆที่ควรปฏิบัติเมื่อสร้างคอนโทรลเลอร์หรือไม่? ตัวอย่างเช่นฉันสามารถมี: AuthenticationController ด้วยการกระทำ: index() เพื่อแสดงแบบฟอร์มเข้าสู่ระบบ submit() เพื่อจัดการกับการส่งแบบฟอร์ม logout()อธิบายตนเอง หรือ LoginController ด้วยการกระทำ: index() เพื่อแสดงแบบฟอร์มเข้าสู่ระบบ submit() เพื่อจัดการกับการส่งแบบฟอร์ม LogoutController ด้วยการกระทำ: index() เพื่อจัดการการออกจากระบบ หรือ AccountController ด้วยการกระทำ: loginGet() เพื่อแสดงแบบฟอร์มเข้าสู่ระบบ loginPost() เพื่อจัดการกับการส่งแบบฟอร์มเข้าสู่ระบบ logoutGet() เพื่อจัดการการออกจากระบบ registerGet() เพื่อแสดงแบบฟอร์มลงทะเบียน registerPost() เพื่อจัดการกับการส่งแบบฟอร์ม และการกระทำอื่น ๆ ที่เกี่ยวข้องกับบัญชี
10 mvc 

2
ฉันควรใช้ที่เก็บข้อมูลใน Domain Object หรือผลักดัน Domain Object กลับไปที่ Service Layer?
ฉันมาจากโลกแห่งสคริปต์การทำธุรกรรมและฉันเพิ่งเริ่มดู DDD ฉันไม่แน่ใจในวิธีที่ถูกต้องในการรวมการออกแบบ DDD กับการคงอยู่ของฐานข้อมูล นี่คือสิ่งที่ฉันมี: คลาสเซอร์วิสชื่อ OrganisationService ซึ่งอินเตอร์เฟสมีเมธอดสำหรับการดึงและบันทึกอินสแตนซ์ของอ็อบเจ็กต์โดเมนองค์กร องค์กรเป็นรูทรวมและมีข้อมูลอื่น ๆ ที่เกี่ยวข้อง: สมาชิกและใบอนุญาต ฐานข้อมูล EF6 ก่อน DBContext จะใช้ภายใน OrganisationService เพื่อดึงหน่วยงาน OrganisationDB และหน่วยงาน MemberDB และ LicenseDB ที่เกี่ยวข้อง สิ่งเหล่านี้ทั้งหมดได้รับการแปรสภาพเป็นคลาสอ็อบเจ็กต์โดเมนเทียบเท่าเมื่อดึงข้อมูลโดย OrganisationService และโหลดลงในวัตถุโดเมนองค์กร วัตถุนี้ดูเหมือนว่า: public class Organisation { public IList<Member> Members { get; set; } public IList<License> Licenses { get; set; } } ฉันไม่ได้ใช้รูปแบบพื้นที่เก็บข้อมูลใน …

5
มีข้อ จำกัด ทางเทคนิคหรือคุณสมบัติภาษาที่ป้องกันไม่ให้สคริปต์ Python ของฉันเร็วเท่ากับโปรแกรม C ++ ที่เทียบเท่าหรือไม่
ฉันเป็นผู้ใช้ Python มาเป็นเวลานาน ไม่กี่ปีที่ผ่านมาฉันเริ่มเรียนรู้ C ++ เพื่อดูว่ามันสามารถให้อะไรในแง่ของความเร็ว ในช่วงเวลานี้ฉันจะใช้ Python เป็นเครื่องมือในการสร้างต้นแบบต่อไป ดูเหมือนว่านี่เป็นระบบที่ดี: การพัฒนาที่คล่องตัวด้วย Python การดำเนินการที่รวดเร็วใน C ++ เมื่อเร็ว ๆ นี้ฉันใช้ Python มากขึ้นอีกครั้งและเรียนรู้วิธีหลีกเลี่ยงข้อผิดพลาดและรูปแบบการต่อต้านทั้งหมดที่ฉันใช้อย่างรวดเร็วในปีก่อน ๆ กับภาษา ฉันเข้าใจว่าการใช้คุณสมบัติบางอย่าง (รายการความเข้าใจการแจกแจง ฯลฯ ) สามารถเพิ่มประสิทธิภาพได้ แต่มีข้อ จำกัด ทางเทคนิคหรือคุณสมบัติภาษาที่ป้องกันไม่ให้สคริปต์ Python ของฉันเร็วเท่ากับโปรแกรม C ++ ที่เทียบเท่ากันหรือไม่

6
การออกแบบวิธีการที่เกี่ยวข้องกับฐานข้อมูลซึ่งผลตอบแทนที่ดีกว่า: จริง / เท็จหรือแถวได้รับผลกระทบ
ฉันมีวิธีการบางอย่างที่เปลี่ยนแปลงข้อมูลบางอย่างในฐานข้อมูล (แทรกอัปเดตและลบ) ออมฉันใช้การกลับมาแถวรับผลกระทบจากค่า int สำหรับประเภทของวิธีการเหล่านั้น ฉันควรกลับไปที่ "วิธีการของฉัน" เพื่อระบุสถานะความสำเร็จ / ความล้มเหลวของการดำเนินการอย่างไร พิจารณารหัสที่ส่งคืนint: A.1 public int myLowerLevelMethod(int id) { ... int affectedRows = myOrm.deleteById(id) ... return affectedRows; } การใช้งาน: A.2 public void myOtherMethod() { ... int affectedRows = myLowerLevelMethod(id) if(affectedRows > 0) { // Success } else { // Fail } } …

5
มันเป็นประโยชน์หรือไม่ที่จะเรียนรู้พื้นฐานของภาษาหลักที่ผ่านมาเมื่อเป้าหมายหลักคือการพึ่งพากรอบของมัน [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา โปรดจำไว้ว่านี่ไม่ใช่อีก ' ฉันควรรู้[ ภาษาโปรแกรมแทรกที่นี่ ] ก่อนที่จะย้ายไปยัง [ แทรกกรอบงานที่นี่ ] หรือไม่?' สิ่งที่ฉันต้องการทราบคือมีประโยชน์อย่างไรหากเรียนรู้แนวคิดขั้นสูงของภาษาการเขียนโปรแกรมเมื่อความตั้งใจของคุณคือการพึ่งพาเฟรมเวิร์กเป็นส่วนใหญ่ ตัวอย่างเช่นฉันเริ่มใช้ jQuery และใช้เวลาก่อนเพื่อเข้าใจแนวคิดหลักของ Javascript นอกจากนี้ฉันยังมีหนังสือพื้นฐานบางอย่าง (ความลับของ Javascript Ninja เป็นต้น) บนชั้นวางที่เจาะลึกภาษา ในขณะที่ฉันอ่านผ่านหน้าต่างๆ แต่ฉันพบว่ามันค่อนข้างดีพอที่จะทำให้ jQuery ไม่ได้เพราะความตั้งใจหลักของฉันคือการจัดการ DOM เดียวกันสามารถพูดสำหรับ Ruby และ RoR หนังสือเหล่านี้จะทำให้ฉันเป็นโปรแกรมเมอร์ที่ดีขึ้นหรือไม่ อาจ. หัวข้อเหล่านี้ช่วยให้ฉันกลายเป็นกรอบที่ดีขึ้นได้หรือไม่ นั่นคือสิ่งที่ฉันมีความเข้าใจยาก

5
พิมพ์เล็กที่สุดถัดไปจาก 2 ^ i * 5 ^ j โดยที่ i, j> = 0
ฉันถูกถามคำถามนี้ในระหว่างการคัดกรองโทรศัพท์ทางเทคนิคเมื่อเร็ว ๆ นี้และทำไม่ดี คำถามรวมอยู่ด้วยคำต่อคำด้านล่าง สร้าง{2^i * 5^j | i,j >= 0}คอลเลกชันเรียง พิมพ์ค่าที่น้อยที่สุดถัดไปอย่างต่อเนื่อง ตัวอย่าง: { 1, 2, 4, 5, 8, 10...} "เล็กที่สุดถัดไป" ทำให้ฉันคิดว่ามีส่วนเกี่ยวข้องกับกอง - เล็ก ๆ น้อย ๆ แต่ฉันไม่รู้ว่าจะไปจากที่นั่นจริง ๆ และไม่มีการให้ความช่วยเหลือจากผู้สัมภาษณ์ ไม่มีใครมีคำแนะนำเกี่ยวกับวิธีการแก้ปัญหาดังกล่าวหรือไม่?
10 algorithms 

2
ใช้แพ็คเกจ (อัญมณีไข่ ฯลฯ ) เพื่อสร้างสถาปัตยกรรมที่แยกออก
ประเด็นหลัก เห็นการสนับสนุนที่ดีมากที่สุดแพลตฟอร์มการเขียนโปรแกรมที่ทันสมัยมีการบริหารจัดการแพคเกจ (คิดว่าgem, npm, pipฯลฯ ) ไม่ได้ทำให้ความรู้สึกในการออกแบบโปรแกรมหรือระบบจะประกอบด้วยแพคเกจการพัฒนาภายในเพื่อส่งเสริมและสร้างสถาปัตยกรรมคู่หลวม? ตัวอย่าง ตัวอย่างนี้จะสร้างแพคเกจสำหรับการเข้าถึงฐานข้อมูลรวมถึงการตรวจสอบและส่วนประกอบอื่น ๆ ของระบบ แน่นอนว่าใช้แพ็คเกจภายนอกด้วย จากนั้นระบบของคุณจะนำเข้าและใช้แพ็คเกจเหล่านี้แทนที่จะรวมรหัสไว้ในฐานรหัสของตนเอง การพิจารณา สำหรับฉันดูเหมือนว่าสิ่งนี้จะส่งเสริมการแยกรหัสและช่วยให้สามารถบำรุงรักษาได้เกือบจะเป็นแอพพลิเคชั่นบนเว็บเทียบกับเดสก์ท็อป (มีการใช้งานการอัปเดตเกือบอัตโนมัติโดยใช้ฐานรหัสเดียวสำหรับการใช้งานเดียว ดูเหมือนว่าแนวคิดการออกแบบที่สมเหตุสมผลและมีเหตุผลหรือไม่ สิ่งนี้ใช้จริง ๆ แล้วเป็นวิธีมาตรฐานในการสร้างแอพพลิเคชั่นในปัจจุบันหรือไม่?

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