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

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

1
ต้องมีการระบุแหล่งที่มารองรับ GPL หรือไม่
สามารถรหัสใบอนุญาตภายใต้ประโยคเช่นนี้: Redistribution of this work, with or without modification, is permitted if Bob Joe is attributed as the original author or licensor of this work, but not in any way that suggests that Bob Joe endorses you or your use of the work. สามารถใช้ในโครงการที่ใช้ GPL หรือทำให้สิ่งนี้ขัดกับ GPL หรือไม่
11 licensing  gpl 

4
IDE หรือตัวแก้ไขใดที่ บริษัท เช่น Google, Apple, IBM และอื่น ๆ ใช้ [ปิด]
เป็นการยากที่จะบอกสิ่งที่ถูกถามที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือโวหารและไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน7 ปีที่ผ่านมา แม้ว่าฉันจะมีประสบการณ์ในการใช้เครื่องมือต่าง ๆ บ้าง แต่ฉันก็ไม่สามารถตัดสินใจได้ว่าฉันจะชอบใช้ IDE หรือเครื่องมือแก้ไขแบบง่าย ๆ สำหรับการแก้ไขโค้ด IDEs ส่วนใหญ่ที่ฉันมีประสบการณ์เขียนด้วย Java (เช่น Eclipse) ซึ่งทำให้ช้าและใหญ่ สิ่งที่ดีสำหรับพวกเขาก็คือมันมีเครื่องมือมากมาย ในทางกลับกันบรรณาธิการมักจะเร็วมาก พวกเขาสามารถขยายให้คล้ายกับ IDEs ได้มากกว่า แต่โดยทั่วไปแล้วฉันไม่ทำเช่นนั้น อย่างไรก็ตามมีSublime Text 2ซึ่งมีบางส่วนของโค้ดพื้นฐานในตัว คำถามของฉันคือ บริษัท ส่วนใหญ่เช่น Google, Apple, IBM และอื่น ๆ (ยกเว้น Microsoft เพราะพวกเขามี AMAZING IDE ซึ่งฉันคิดว่าใช้โดยนักพัฒนา MS) บังคับให้พนักงานใช้ IDE และใช้ตัวแก้ไขธรรมดาด้วยเครื่องมือภายนอกหรือไม่ คิดว่าไม่เป็นมืออาชีพ? PS ไม่ได้พูดถึงกรณีเช่นการพัฒนา …

1
ทำไมสกาล่าจำเป็นต้องใช้ฟังก์ชั่นที่มีประเภทผลตอบแทนชัดเจน?
ฉันเพิ่งเริ่มเรียนรู้การเขียนโปรแกรมในสกาล่าและมันสนุกมาก ฉันชอบความสามารถในการประกาศฟังก์ชั่นภายในฟังก์ชั่นอื่นซึ่งดูเหมือนว่าจะใช้งานได้ง่าย หนึ่งโกรธสัตว์เลี้ยงฉันมีเกี่ยวกับสกาล่าคือความจริงที่สกาล่าต้องพิมพ์กลับที่ชัดเจนในการทำงานของมัน และฉันรู้สึกว่านี่เป็นอุปสรรคต่อการแสดงออกของภาษา นอกจากนี้ยังเป็นเรื่องยากที่จะเขียนโปรแกรมตามข้อกำหนดนั้น อาจเป็นเพราะฉันมาจาก Javascript และ Ruby comfort zone แต่สำหรับภาษาอย่างสกาล่าซึ่งจะมีฟังก์ชั่นเชื่อมต่อมากมายในแอปพลิเคชันฉันไม่สามารถเข้าใจได้ว่าฉันจะระดมสมองในหัวของฉันได้อย่างไรว่าฟังก์ชั่นเฉพาะที่ฉันเขียนควรกลับมาพร้อมการเรียกซ้ำ ข้อกำหนดของการประกาศชนิดส่งคืนอย่างชัดเจนในฟังก์ชันนี้ไม่รบกวนฉันสำหรับภาษาเช่น Java และ C ++ การเรียกซ้ำใน Java และ C ++ เมื่อเกิดขึ้นมักจะถูกจัดการด้วยฟังก์ชันสูงสุด 2 ถึง 3 ฟังก์ชัน ไม่เคยมีฟังก์ชั่นหลายอย่างเชื่อมโยงเข้าด้วยกันเหมือน Scala ดังนั้นฉันเดาฉันสงสัยว่ามีเหตุผลที่ดีว่าทำไมสกาล่าควรมีความต้องการของฟังก์ชั่นที่มีประเภทผลตอบแทนที่ชัดเจน?

12
ฉันจะอธิบายการเขียนโปรแกรมเชิงวัตถุให้กับผู้ที่มีรหัสเฉพาะใน Fortran 77 ได้อย่างไร
แม่ของฉันทำวิทยานิพนธ์ที่วิทยาลัยใน Fortran และตอนนี้ (มากกว่าทศวรรษต่อมา) จำเป็นต้องเรียนรู้ c ++ สำหรับการจำลองสถานการณ์ของไหล เธอสามารถเข้าใจการเขียนโปรแกรมขั้นตอนทั้งหมด แต่ไม่ว่าฉันจะพยายามอธิบายวัตถุให้ยากแค่ไหนมันก็ไม่ติด (ฉันทำงานกับ Java มากฉันรู้ว่าวัตถุทำงานอย่างไร) ฉันคิดว่าฉันอาจอธิบายได้ในระดับสูงเกินไปดังนั้นจึงไม่สมเหตุสมผลกับคนที่ไม่เคยทำงานกับพวกเขาเลยและเติบโตขึ้น ขึ้นในยุคของการเขียนโปรแกรมขั้นตอนอย่างหมดจด มีวิธีง่าย ๆ ที่ฉันสามารถอธิบายให้เธอฟังซึ่งจะช่วยให้เธอเข้าใจหรือไม่?

4
การใช้ชื่ออักขระสากลในตัวระบุใน C ++ คืออะไร
c ++ มาตรฐาน (ผมสังเกตเห็นมันในหนึ่งใหม่ แต่มันก็มีอยู่แล้วใน C ++ 03) ระบุชื่อตัวละครสากลเขียนเป็น\uNNNNและ\UNNNNNNNNคิดเป็นตัวละครที่มี codepoints Unicode /NNNN NNNNNNNNสิ่งนี้มีประโยชน์กับตัวอักษรสตริงโดยเฉพาะอย่างยิ่งเนื่องจากมีการกำหนดตัวอักษรสตริง UTF-8, UTF-16 และ UCS-4 อย่างชัดเจน อย่างไรก็ตามอนุญาตให้ใช้ตัวอักษรสากลได้ในตัวระบุ แรงจูงใจเบื้องหลังคืออะไร? เห็นได้ชัดว่าไวยากรณ์นั้นไม่สามารถอ่านได้อย่างสมบูรณ์ตัวระบุอาจถูกจับคู่กับลิงเกอร์และมันก็ไม่เหมือนกับว่ามีฟังก์ชั่นมาตรฐานใด ๆ ในการดึงสัญลักษณ์ตามชื่ออย่างไรก็ตาม ดังนั้นทำไมทุกคนจะใช้ตัวระบุที่มีตัวอักษรสากลในนั้น แก้ไข: เนื่องจากมีอยู่จริงใน C ++ 03 แล้วคำถามเพิ่มเติมจะเป็นอย่างไรถ้าคุณเห็นรหัสที่ใช้จริงหรือไม่
11 c++  c++11 

2
ระบบเสนอราคาโฆษณาของ Facebook ทำงานอย่างไร
เมื่อคุณสร้างโฆษณาบน Facebook คุณจะได้รับช่วง " ราคาเสนอที่แนะนำ " (เช่น $ 0.90 - $ 2.15 USD) ตามหน้านี้ : ช่วงการเสนอราคาที่แนะนำอยู่ที่นั่นเพื่อช่วยคุณเลือกการเสนอราคาสูงสุดเพื่อให้โฆษณาของคุณประสบความสำเร็จ ขึ้นอยู่กับจำนวนผู้โฆษณารายอื่นที่แข่งขันกันเพื่อแสดงโฆษณาของตนต่อผู้ชมเดียวกันกับคุณ ฉันสนใจที่จะเข้าใจสิ่งที่เกิดขึ้นจริง (ทางเทคนิค) ภายใต้ประทุนที่นี่ บอกผู้ใช้ว่าเข้าสู่ Facebook บนฝั่งเซิร์ฟเวอร์จะมีการร้องขอ HTTP ที่เบราว์เซอร์ของผู้ใช้ที่ส่ง (เป็นส่วนหนึ่งของการเข้าสู่ระบบ) ได้รับการจัดการและเซิร์ฟเวอร์จำเป็นต้องทราบว่าโฆษณาใดที่จะแสดงกลับไปยังผู้ใช้ ฉันคิดว่านี่เป็นสิ่งที่ระบบ "การเสนอราคา" เข้ามาเล่น สมมติว่าจากข้อมูลประชากรของผู้ใช้รายนี้และจากการกำหนดเป้าหมายผู้ชมที่ผู้โฆษณาคู่แข่งหลายรายออกแบบแคมเปญด้วยเราสมมติว่า Facebook เห็นกลุ่มโฆษณาที่แตกต่างกัน 20 รายการที่สามารถส่งคืนได้ ระบบการเสนอราคานี้ช่วยให้ Facebook ระบุได้อย่างไรว่าโฆษณา 20 รายการใดที่มันกลับไปยังฝั่งไคลเอ็นต์ ฉันคาดเดาว่าผู้โฆษณาที่ "เสนอราคามากกว่า" จะได้รับความสำคัญมากกว่าผู้ที่ "เสนอราคาน้อยลง" แต่การเสนอราคานี้จะเกิดขึ้นเมื่อใด ผู้โฆษณาต้องการเสนอราคาซ้ำบ่อยครั้งเพียงใด การเสนอราคามีผลผูกพันนานเท่าใด เมื่อฉันเข้าใจแนวคิดเกี่ยวกับการใช้งานเหล่านี้ที่อยู่เบื้องหลังโฆษณามันอาจจะเห็นได้อย่างชัดเจนว่า "กลยุทธ์การเลือก" ซึ่งแบ็กเอนด์ใช้ดังต่อไปนี้: …

5
นักพัฒนาซอฟต์แวร์รายอื่นรู้สึกว่าเมื่อพวกเขาดีขึ้นมันจะยากที่จะได้งานหรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน7 ปีที่ผ่านมา เมื่อฉันเริ่มต้นมันดูเหมือนว่าฉันมีเวลามากขึ้นที่จะได้รับการสัมภาษณ์และผ่านพวกเขา แต่ตอนนี้ฉันมีประสบการณ์มากขึ้นฉันพบว่าการหางานทำได้ยากขึ้น นักพัฒนาคนอื่น ๆ รู้สึกแบบเดียวกันหรือไม่? ฉันจะให้คุณตัวอย่าง ฉันสัมภาษณ์เมื่อวันพุธที่ผ่านมา มันเป็นการเริ่มต้นเล็ก ๆ กับวิศวกรคนอื่นและซีอีโอคนเดียว พวกเขาบินฉันมาจากโอไฮโอ (พวกเขาใช้ฐาน SF) เมื่อฉันไปถึงที่นั่นพวกเขาให้ฉันเขียนลิงก์ลัดให้พวกเขาซึ่งใช้เวลาประมาณ 10 นาทีในการเขียน ฉันควรจะอยู่ที่นั่นตลอดทั้งวันทำสิ่งนี้ เมื่อฉันเสร็จมันเร็วผู้สัมภาษณ์ดูเหมือนจะตกใจ หลังจากนั้นเราก็คุยกันและฉันถามเขาว่าพวกเขาใช้เก็บข้อมูลอะไร เขาบอก Mongo ฉันถามว่าทำไมเขาถึงเลือกใช้ mongo จากนั้นเขาก็พูดตะกุกตะกักและพึมพำคำตอบของเขาซึ่งโดยทั่วไปแล้วต้มลงไปที่ "เราใช้มันเพราะ Mongo เป็นเทคโนโลยีฐานข้อมูลที่ทันสมัยและเราไม่ต้องการถูกทิ้ง" ซึ่งฉันพบว่าเป็นเหตุผลที่พบบ่อยที่สุด คนใช้ NoSQL วันนี้ ผู้สัมภาษณ์จบการสัมภาษณ์อย่างรวดเร็วและผลักฉันออกไปนอกประตู ฉันควรจะทานอาหารกลางวันกับ CEO แต่ฉันเตะเขาออกไปก่อนที่ฉันจะมีโอกาส ผู้สอดแนมไม่ได้หมายถึงหรือหยาบคาย (และไม่ใช่ฉัน) หลังจากกลับถึงโอไฮโอฉันได้รับอีเมลจากพวกเขาว่า "ฉันไม่เหมาะ" …
11 interview 

3
การเขียนโปรแกรมเดสก์ท็อปข้ามแพลตฟอร์ม: C ++ vs. Python [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา เอาล่ะฉันจะมีประสบการณ์ในฐานะโปรแกรมเมอร์ Obj-C / Cocoa และ Ruby w / Rails มือสมัครเล่น สิ่งเหล่านี้ยอดเยี่ยม แต่ก็ไม่ค่อยมีประโยชน์สำหรับการเขียนแอปพลิเคชันข้ามแพลตฟอร์ม (หวังว่า GNUStep จะเสร็จสมบูรณ์ในวันแรกสำหรับแพลตฟอร์มหลายแพลตฟอร์ม แต่วันนั้นไม่ใช่วันนี้) C ++ จากสิ่งที่ฉันสามารถรวบรวมได้นั้นเป็นพลังที่ยิ่งใหญ่ แต่ก็เป็นพฤติกรรมที่น่าเกลียดขนาดใหญ่ที่ใช้เวลาครึ่งทศวรรษหรือมากกว่านั้นในการควบคุม ฉันยังได้อ่านด้วยว่าคุณสามารถถ่ายภาพตัวเองได้อย่างง่ายดายไม่เพียงแค่ถ่ายภาพเท้าของคุณเองเท่านั้น เห็นได้ชัดว่าทั้งหมดนี้ค่อนข้างน่ากลัว ถูกต้องหรือไม่ Python ดูเหมือนจะให้พลังมากที่สุดของ C ++ และง่ายต่อการรับด้วยความเร็ว การเสียสละครั้งนี้ใหญ่แค่ไหน? มันมีความหมายหรือสามารถเพิกเฉยได้? ฉันจะเขียนแอปพลิเคชั่นที่รวดเร็วเสถียรและมีความน่าเชื่อถือสูงในระยะเวลาที่เหมาะสมได้อย่างไร นอกจากนี้จะเป็นการดีกว่าถ้าใช้ Qt สำหรับ UI ของคุณหรือรักษาการแยกส่วนหน้าเนทีฟแบบดั้งเดิมสำหรับแต่ละแพลตฟอร์มแทน แก้ไข: เพื่อความชัดเจนเป็นพิเศษมีแอพพลิเคชั่นสองประเภทที่ฉันต้องการเขียน: หนึ่งคือ frontend ฐานข้อมูลที่เป็นมิตรและสะดวกมากและอีกอันหนึ่งซึ่งไม่ต้องสงสัยเลยว่าจะเกิดขึ้นในภายหลัง

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

4
กระบวนการหรือเธรดของซอมบี้คืออะไร
กระบวนการหรือเธรดของซอมบี้คืออะไรและสร้างขึ้นมาอย่างไร ฉันเพิ่งจะฆ่าพวกเขาหรือฉันจะทำอะไรบางอย่างเพื่อรับการวินิจฉัยเกี่ยวกับวิธีการที่พวกเขาตาย?

5
Continous Integration (CI) คืออะไรและมีประโยชน์อย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา บางคนสามารถอธิบายแนวคิดของการบูรณาการอย่างต่อเนื่องกับฉันได้อย่างไรมันทำงานอย่างไรในวิธีที่เข้าใจง่าย และทำไม บริษัท จึงควรใช้ CI ในขั้นตอนการจัดส่งโค้ด ฉันเป็นนักพัฒนาและ บริษัท ของฉัน (ส่วนใหญ่เป็นทีมงานสร้าง) ใช้ Team City ในฐานะนักพัฒนาฉันทำการเช็คเอาต์อัปเดตและส่งมอบรหัสให้กับ SVN แต่ไม่จำเป็นต้องกังวลเกี่ยวกับ TeamCity หรือ CI โดยทั่วไป ดังนั้นฉันอยากจะเข้าใจว่า CI มีประโยชน์อย่างไร? CI เป็นส่วนหนึ่งของระเบียบวิธี Agile หรือไม่?

5
โดยทางโปรแกรมแล้วการหาสัญกรณ์กุ๊บ (สัญกรณ์ Big O หรือ Theta) ของอัลกอริทึม?
ฉันเคยค้นหาสัญกรณ์ Landau (Big O, Theta ... ) ของอัลกอริทึมของฉันด้วยมือเพื่อให้แน่ใจว่าพวกเขาได้รับการปรับให้เหมาะสมที่สุดเท่าที่จะเป็นไปได้ แต่เมื่อฟังก์ชั่นมีขนาดใหญ่และซับซ้อนจริงๆ เวลามากเกินไปที่จะทำด้วยมือ นอกจากนี้ยังมีแนวโน้มที่จะเกิดข้อผิดพลาดของมนุษย์ ฉันใช้เวลากับ Codility (แบบฝึกหัดการเข้ารหัส / อัลโก) และสังเกตว่าพวกเขาจะให้สัญกรณ์ Landau สำหรับการแก้ปัญหาที่คุณส่ง (ทั้งในเวลาและการใช้หน่วยความจำ) ฉันสงสัยว่าพวกเขาทำได้อย่างไร ... คุณจะทำอย่างไร มีวิธีอื่นนอกเหนือจากการวิเคราะห์คำศัพท์หรือการแยกรหัส? คำถามนี้เกี่ยวกับ PHP และหรือ JavaScript เป็นหลัก แต่ฉันเปิดรับทุกภาษาและทุกทฤษฎี

4
วิธีที่ดีที่สุดในการจัดการผู้จัดการที่ไม่ใช่ด้านเทคนิคที่ผิดพลาดและยังคงทำงานที่ดีได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน7 ปีที่ผ่านมา คำถามนี้อาจถูกพิจารณาว่าเป็นอัตนัย (ฉันได้รับคำเตือน) และถูกปิด แต่ฉันจะเสี่ยงเพราะฉันต้องการคำแนะนำ / ประสบการณ์ที่ดีเกี่ยวกับเรื่องนี้ ฉันอ่านต่อไปนี้ที่หน้า'เกี่ยวกับ'ของFog Creek Softwareบริษัท ที่Joel Spolskyก่อตั้งขึ้นและเป็น CEO ของ: ย้อนกลับไปในปี 2000 ผู้ก่อตั้ง Fog Creek, Joel Spolsky และ Michael Pryor กำลังมีปัญหาในการหาที่ทำงานที่โปรแกรมเมอร์มีสภาพการทำงานที่ดีและมีโอกาสได้ทำงานที่ยอดเยี่ยมโดยไม่ต้องหยุดงาน ทาง บริษัท เทคโนโลยีชั้นสูงทุกคนอ้างว่าพวกเขาต้องการโปรแกรมเมอร์ที่ยอดเยี่ยม แต่พวกเขาจะไม่เอาเงินของพวกเขาไปที่ปาก มันเริ่มต้นด้วยสภาพแวดล้อมทางกายภาพ (ที่มีหลายสิบ cubicles ติดอยู่ในห้องมืดเสียงดังที่พนักงานขายตะโกนบนโทรศัพท์ทำให้เป็นไปไม่ได้สำหรับนักพัฒนาที่จะมีสมาธิ) แต่มันลึกกว่านั้นมาก ผู้จัดการที่หวาดกลัวต่อการเปลี่ยนแปลงได้ปฏิบัติต่อความคิดใหม่ ๆ ว่าเป็นไวรัสที่แปลกประหลาดที่ถูกกักกัน ผู้จัดการจูเนียร์ที่มีความซับซ้อนของนโปเลียนยืนยันว่าสิ่งต่าง ๆ จะเกิดขึ้นอย่างแน่นอนหรือคุณถูกไล่ออก …

3
ฉันจะหลีกเลี่ยงการหยุดชะงักแบบกระจายในระหว่างการเชื่อมต่อซึ่งกันและกันระหว่างสองโหนดได้อย่างไร
สมมติว่าเรามีเพียร์สองโหนด: โหนดแรกสามารถส่งการร้องขอการเชื่อมต่อไปยังหนึ่งที่สอง แต่ยังที่สองที่สามารถส่งการร้องขอการเชื่อมต่อไปยังที่หนึ่ง จะหลีกเลี่ยงการเชื่อมต่อสองครั้งระหว่างสองโหนดได้อย่างไร เมื่อต้องการแก้ไขปัญหานี้มันจะเพียงพอที่จะทำให้การดำเนินการตามลำดับสำหรับการสร้างการเชื่อมต่อ TCP ขาเข้าหรือขาออก ซึ่งหมายความว่าแต่ละโหนดควรประมวลผลการดำเนินการสร้างการเชื่อมต่อใหม่ตามลำดับทั้งสำหรับการเชื่อมต่อขาเข้าและสำหรับการเชื่อมต่อขาออก ด้วยวิธีนี้การดูแลรักษารายการของโหนดที่เชื่อมต่อก่อนที่จะยอมรับการเชื่อมต่อขาเข้าใหม่จากโหนดหรือก่อนที่จะส่งการร้องขอการเชื่อมต่อไปยังโหนดก็จะเพียงพอที่จะตรวจสอบว่าโหนดนี้มีอยู่แล้วในรายการ เพื่อให้การดำเนินการสร้างการเชื่อมต่อเป็นลำดับมันก็เพียงพอที่จะทำการล็อคในรายการของโหนดที่เชื่อมต่อ: อันที่จริงแล้วสำหรับการเชื่อมต่อใหม่แต่ละครั้งตัวระบุของโหนดที่เชื่อมต่อใหม่จะถูกเพิ่มเข้าไปในรายการนี้ อย่างไรก็ตามฉันสงสัยว่าวิธีการนี้สามารถทำให้เกิดการหยุดชะงักแบบกระจายได้หรือไม่ : โหนดแรกสามารถส่งการร้องขอการเชื่อมต่อไปยังโหนดที่สอง โหนดที่สองสามารถส่งการร้องขอการเชื่อมต่อไปยังโหนดแรก สมมติว่าคำขอการเชื่อมต่อสองรายการนั้นไม่ตรงกันทั้งสองโหนดจะล็อกการร้องขอการเชื่อมต่อขาเข้าใด ๆ ฉันจะแก้ปัญหานี้ได้อย่างไร อัปเดต:อย่างไรก็ตามฉันยังต้องล็อครายการทุกครั้งที่มีการสร้างการเชื่อมต่อใหม่ (ขาเข้าหรือขาออก) เนื่องจากเธรดอื่นอาจเข้าถึงรายการนี้ดังนั้นปัญหาการหยุดชะงักจะยังคงอยู่ ปรับปรุง 2:ตามคำแนะนำของคุณฉันเขียนอัลกอริทึมเพื่อป้องกันการยอมรับคำขอเข้าสู่ระบบ เนื่องจากแต่ละโหนดเป็นเพียร์จึงอาจมีไคลเอ็นต์รูทีนเพื่อส่งการร้องขอการเชื่อมต่อใหม่และรูทีนเซิร์ฟเวอร์เพื่อยอมรับการเชื่อมต่อขาเข้า ClientSideLoginRoutine() { for each (address in cache) { lock (neighbors_table) { if (neighbors_table.contains(address)) { // there is already a neighbor with the same address continue; } …

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

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