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

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

3
เชื่อมต่อโดยตรงกับคอมพิวเตอร์เครื่องอื่นที่รู้เพียงที่อยู่ MAC?
จากความเข้าใจของฉัน ARP จะแปลที่อยู่ IP เป็นที่อยู่ MAC จากนั้นคอมพิวเตอร์จะใช้ที่อยู่ MAC เพื่อสร้างการเชื่อมต่อโดยตรง หากฉันรู้ที่อยู่ MAC ของคอมพิวเตอร์ที่ฉันต้องการเชื่อมต่ออยู่จะสามารถเชื่อมต่อโดยตรงได้หรือไม่ (โดยไม่ต้องมีเราเตอร์) มีตัวอย่างของสิ่งนี้หรือไม่?
13 networking 

2
ทำไมการพิมพ์ย่อยย่อยแบบพฤติกรรมไม่สามารถตัดสินใจได้?
งานของ Liskov ในพื้นที่นี้มุ่งเน้นไปที่พฤติกรรมย่อยซึ่งนอกเหนือจากประเภทความปลอดภัยของระบบที่กล่าวถึงในบทความนี้ยังต้องการให้ชนิดย่อยรักษาค่าคงที่ทั้งหมดที่รับประกันโดย supertypes ในสัญญาบางอย่าง [3] คำจำกัดความของการพิมพ์ย่อยนี้โดยทั่วไปไม่สามารถระบุได้ดังนั้นจึงไม่สามารถตรวจสอบได้โดยตัวตรวจสอบชนิด จาก: http://www.wikiwand.com/en/Subtyping#/Function_types

1
Open Data Protocol (odata) ได้รับการยอมรับอย่างกว้างขวางจากชุมชนการพัฒนาหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว แก้ไข: ในกรณีที่คุณไม่คุ้นเคยกับ odata ไปเลย ฉันกำลังพยายามที่จะตรวจสอบว่ามันคุ้มค่าที่จะเรียนรู้เทคโนโลยีนี้หรือว่ามันเป็นสิ่งที่จะไม่ติด สถานที่ตั้งเป็นที่น่าสนใจและในฐานะผู้พัฒนา API ดูเหมือนว่าเป็นวิธีที่ดีในการมอบความยืดหยุ่นให้กับผู้พัฒนาที่ใช้งานพวกเขา น่าเสียดายที่ฉันไม่เห็น "ฉวัดเฉวียน" มากเกี่ยวกับ Open Data Protocol ในช่วงสองสามปีที่ผ่านมาดังนั้นเพียงแค่พยายามที่จะประเมินว่ามันมีโอกาสที่จะอยู่ใกล้ ๆ เมื่อฉันเรียนรู้ ขอบคุณล่วงหน้า.


3
อย่างชัดเจน DAG แทน Vector Clocks สำหรับการซิงโครไนซ์
ฉันเริ่มดูวิธีการซิงโครไนซ์ข้อมูลระหว่างกลุ่มเพื่อน คนรอบข้างต้องสามารถทำงานได้ในวิธีที่ไม่ได้เชื่อมต่อและจากนั้นประสานกันเพื่อรวมการเปลี่ยนแปลงในท้องถิ่นของพวกเขา ทำเนียบควรจะสามารถที่จะผสานการปรับปรุงในท้องถิ่นด้วย"สามวิธีผสาน" ดังนั้นในการทำข้อมูลให้ตรงกันควรรู้ว่าข้อเท็จจริงใดเป็นข้อมูลล่าสุด แต่เมื่อไม่มีคำสั่งที่เข้มงวดพวกเขาควรจะสามารถรวมข้อเท็จจริงเข้าด้วยกันตามรากที่พบบ่อย เมื่อเพื่อนร่วมงานอิสระทำการเปลี่ยนแปลงพวกเขาสามารถ "ประทับเวลา" ด้วย "นาฬิกา" ฉันใช้คำว่า "นาฬิกา" และ "การประทับเวลา" แต่ฉันไม่ได้หมายถึงนาฬิกาเวลาติดผนัง ฉันหมายถึงการเรียงลำดับบางส่วนของเหตุการณ์ที่ทำให้เกิดความชัดเจน มันเป็นความสัมพันธ์"ที่เกิดขึ้นก่อนหน้า"ระหว่างเหตุการณ์ที่เกิดขึ้นในรูปแบบ acyclic graph (DAG) ดูเหมือนว่าวิธีที่ "ปกติ" ที่จะทำนี้สร้างการสั่งซื้อบางส่วนโดยใช้นาฬิกาเวกเตอร์ อย่างไรก็ตามสิ่งเหล่านี้อาจมีขนาดใหญ่มาก การพัฒนาล่าสุดเช่นนาฬิกาต้นไม้ช่วงเวลาจะช่วยให้การจัดเก็บเวลามีขนาดกะทัดรัดยิ่งขึ้น สิ่งที่ฉันไม่ชัดเจนเลยก็คือทำไมโปรโตคอลการซิงโครไนซ์ไม่ "เพียงแค่" เก็บ DAG อย่างชัดเจน (หรือพวกเขา?) เพียร์สามารถสร้างการประทับเวลาอย่างอิสระโดยการสุ่มสร้าง UUID (หรือโดยวิธีอื่น ๆ เช่น<peer-name> + <local-monotonically-increasing-counter>) การเรียงลำดับของการประทับเวลานี้มีความชัดเจนต่อเพื่อนคนนั้น เมื่อเพื่อน 2 คนซิงค์กันพวกเขาสามารถตกลงในการประทับเวลาใหม่ การเรียงลำดับของการประทับเวลานี้อีกครั้งชัดเจนสำหรับทั้งสองคน ขณะนี้มีความต้องการที่จะผ่านสิ่งที่เกิดขึ้นก่อน DAG ระหว่างเพื่อน แต่การจัดเก็บและข้อกำหนดแบนด์วิดท์ของเรื่องนี้มีขนาดเล็ก จุดเวลาคือกราฟจุดสุดยอด ด้วยเหตุนี้จึงมีขอบขาเข้า 1 หรือ …

2
วิธีรับการแจ้งเตือนแบบเรียลไทม์เมื่อมีการเปลี่ยนแปลงฐานข้อมูล (แทรกอัปเดตลบ)?
ฉันกำลังสร้างแดชบอร์ดซึ่งควรตรวจสอบตารางฐานข้อมูล ฉันมีการเข้าถึงฐานข้อมูลเท่านั้น (ไม่มีเลเยอร์แอปพลิเคชัน) ตารางมีขนาดค่อนข้างใหญ่ (10 ล้านแถว) แต่ไม่เปลี่ยนแปลงอย่างรวดเร็ว (100 เม็ด / อัปเดตต่อนาที) ฉันจะทราบได้อย่างไรว่าตารางมีการเปลี่ยนแปลงอย่างไร ฉันจะพยายามที่จะตีฐานข้อมูลทุกวินาที แต่ดูเหมือนว่าวิธีการดุร้ายกำลัง ... ฐานข้อมูล: MySQL / Postgres

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

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

3
จัดเก็บค่าลบที่เซ็นชื่ออย่างไร
ฉันกำลังดูวิดีโอนี้เกี่ยวกับค่าสูงสุดและต่ำสุดของจำนวนเต็มที่ลงนามแล้ว นำตัวอย่างของค่าที่มีเครื่องหมายบวก - 0000 0001 บิตแรกแสดงว่าจำนวนเป็นค่าบวกและ 7 บิตสุดท้ายเป็นตัวเลขเอง ดังนั้นจึงตีความได้ง่ายว่า +1 ทีนี้ลองดูตัวอย่างค่าลบที่มีเครื่องหมาย - 1,000 0000 ซึ่งออกมาเป็น -8 โอเคคอมพิวเตอร์สามารถเข้าใจได้ว่ามันเป็นค่าลบเพราะบิตแรก แต่มันเข้าใจได้อย่างไรว่า 000 0000 หมายถึง -8? โดยทั่วไปแล้วค่าจัดเก็บข้อมูลเชิงลบที่เก็บ / ตีความในคอมพิวเตอร์เป็นอย่างไร

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

4
การย้าย repo SVN หลาย GB ไปยัง Git
ปัจจุบัน บริษัท ของฉันมี Visual Studio solation ใน repo SVN ที่จัดเป็นดังนี้: SolutionFolder (~3.5 GB) |-> SolutionName.sln |-> .. Some source code folders... (~250 MB) |-> ThirdParty (~3 GB) |-> Tools | -> Tool1 | -> Tool2 Tool1 และ Tool2 เป็นบิลด์อิสระ (มีโซลูชันของตัวเอง) แต่สร้างไฟล์ปฏิบัติการที่ใช้ในบิลด์หลัก โฟลเดอร์ ThirdParty มีการขึ้นต่อกันทั้งหมดของโครงการรวมถึงไฟล์. lib ขนาด 100+ MB ที่รวบรวมไว้ล่วงหน้าและไลบรารี่ขนาดใหญ่เช่นบูสต์ มันสะดวกที่จะมีทุกอย่างใน …

2
อะไรคือวิธีที่ดีที่สุดในการเลิกทำการผสาน Git ที่ลบไฟล์ออกจาก repo
ดังนั้นจินตนาการต่อไปนี้เกิดขึ้น (และเราทุกคนใช้ SourceTree): พวกเราทุกคนล้วนทำงานจากแหล่งกำเนิด / พัฒนา ฉันไปพักผ่อนวันหยุดเป็นเวลาหนึ่งสัปดาห์ เพื่อนร่วมงานของฉันทำงานในพื้นที่หลายวันที่ผ่านมาโดยไม่ต้องผสานแหล่งกำเนิด / พัฒนากลับไปที่สาขาพัฒนาท้องถิ่นของเขา เขาพยายามที่จะผลักดันได้รับการบอกว่าเขาจะต้องรวมก่อนแล้วจึงดึง เขาได้รับความขัดแย้งหยุดการคอมมิทอัตโนมัติหลังจากดำเนินการต่อ สมมติว่า Git เป็นเหมือน SVN เพื่อนร่วมงานของฉันจะทิ้งไฟล์ "ใหม่" ในสำเนาการทำงานของเขาและจากนั้นคอมมิวนิตี้ผสาน - เช็ดไฟล์ "ใหม่" เหล่านั้นจากหัวต้นทาง / พัฒนา การทำงานสัปดาห์ที่มีค่าของการพัฒนาดำเนินต่อไป ฉันกลับมาจากวันหยุดและพบว่างานของฉันหายไปหลายวัน พวกเราทุกคนใหม่มากสำหรับ Git (นี่เป็นโครงการแรกของเราที่ใช้มัน) แต่สิ่งที่ฉันทำเพื่อแก้ไขคือ: เปลี่ยนชื่อ "พัฒนา" เป็น "develop_old" ผสาน develop_old เข้ากับสาขาใหม่ "develop_new" รีเซ็ตสาขา develop_new เป็นคอมมิชชันล่าสุดก่อนการผสานที่ไม่ดี เชอร์รี่เลือกแต่ละการกระทำตั้งแต่นั้นมาแก้ไขความขัดแย้งด้วยตนเอง กด develop_old และ develop_new ไปยังจุดเริ่มต้น เมื่อถึงจุดนี้ develop_new …
13 git 

2
การเปรียบเทียบแอปพลิเคชัน TCP / IP กับแอปพลิเคชัน HTTP [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันสนใจที่จะพัฒนาเว็บไซต์ขนาดใหญ่ที่ผู้ใช้งานเขียนด้วยภาษาจาวา สำหรับการออกแบบฉันคิดว่าการพัฒนาบริการแบบแยกส่วนอิสระที่สามารถทำหน้าที่เป็นผู้ให้บริการข้อมูลกับเว็บแอปพลิเคชันหลักของฉัน สำหรับการเขียนบริการแบบแยกส่วน (ผู้ให้บริการข้อมูล) ฉันสามารถใช้ประโยชน์จากเฟรมเวิร์กที่มีอยู่เช่น Spring และพัฒนาบริการเหล่านี้ตามรูปแบบการออกแบบ RESTful และเปิดเผยทรัพยากรผ่าน HTTP ด้วยรูปแบบข้อความเช่น JSON ... หรือฉันสามารถใช้ประโยชน์จากเครือข่ายที่มีอยู่ เฟรมเวิร์กเช่น Netty ( http://netty.io/ ) และรูปแบบการทำให้เป็นอนุกรมเช่น Protobufs ( https://developers.google.com/protocol-buffers/docs/overview ) และพัฒนาเซิร์ฟเวอร์ TCP ที่ส่งกลับมาแบบอนุกรม น้ำหนักบรรทุก เมื่อใดที่คุณควรเลือกรายการอื่น จะมีประโยชน์ใด ๆ จากการใช้รูปแบบการทำให้เป็นอันดับเช่น Protobufs และการส่งกระแสข้อมูลของไบต์ผ่านสาย จะมีค่าใช้จ่ายในการใช้ JSON หรือไม่ มีค่าใช้จ่ายเท่าไรในการใช้ TCP / IP และ HTTP …
13 java  rest  http  serialization  tcp 

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

1
การตรวจสอบสิทธิ์ API โทเค็น VS โทเค็นแบบไดนามิกครั้งเดียว
เรากำลังทำงานในโครงการใหม่เราเป็นผู้นำในการพัฒนาสองคนและได้ข้ามทางไปถึงวิธีการใช้โทเค็นเพื่อรักษาความปลอดภัยการสื่อสารระหว่างเซิร์ฟเวอร์และไคลเอนต์ คำแนะนำแรก: (โทเค็น AKA แบบคงที่หนึ่งครั้ง) ลูกค้าร้องขอโทเค็นหลักโดยการส่งชื่อผู้ใช้และรหัสผ่านและ current_time (ตัวแปรนี้จะถูกบันทึกไว้ในฐานข้อมูลของเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ด้วย) ไปยัง api เซิร์ฟเวอร์ตีความอินพุตและแสดงโทเค็นที่ถูกแฮช (เช่น: 58f52c075aca5d3e07869598c4d66648) บันทึกไว้ในฐานข้อมูลและส่งคืนไปยังไคลเอนต์ ตอนนี้ไคลเอนต์จะบันทึกโทเค็นหลักและสร้างโทเค็นแฮชใหม่โดยใช้โทเค็นหลัก + ตัวแปร current_time ที่ส่งในคำขอการตรวจสอบสิทธิ์ (ให้เรียกโทเค็นใหม่นี้ว่า main_token) ด้วยเซิร์ฟเวอร์ทำเหมือนกันและสร้างโทเค็นเดียวกัน . ทุกครั้งที่ลูกค้าสอบถามเซิร์ฟเวอร์ API มันจะส่ง main_token ไปยังเซิร์ฟเวอร์ตอนนี้เซิร์ฟเวอร์จะเปรียบเทียบโทเค็นที่สร้างในนั้นโดยที่ main_token ส่งมาจากลูกค้าหากตรงกับมันหมายความว่าผู้ใช้เป็นของจริง คำแนะนำที่สอง: (โทเค็นไดนามิก) ไคลเอนต์สร้างสองคีย์สุ่ม ($ key1 = rand (10,000,90000); $ key2 = แรนด์ (10,000,90000);) ในแต่ละคำขอบน API ลูกค้าจะสร้างแฮชโดยใช้ประเภทคิวรีและสองคีย์ด้วย อัลกอริทึมที่ซับซ้อนและส่งสองคีย์เหล่านี้ + แฮชไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์ที่ใช้อัลกอริทึมเดียวกับที่ใช้ในไคลเอนต์สร้างแฮชและเปรียบเทียบกับเซิร์ฟเวอร์ที่ส่งโดยไคลเอนต์หากตรงกับเซิร์ฟเวอร์จะจัดการกับแบบสอบถาม …
13 security  api 

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