คำถามติดแท็ก language-agnostic

แท็กนี้มีไว้สำหรับคำถามที่ไม่เฉพาะกับภาษาการเขียนโปรแกรมหรือสภาพแวดล้อม

7
ออกแบบ: โทรกลับไปที่ชั้นผู้ปกครอง
เมื่อสร้างแบบจำลองวัตถุกับเด็ก ๆ เป็นเรื่องปกติที่จะรวมเด็ก ๆ ผ่านการจัดองค์ประกอบในฐานะสมาชิกของชั้นผู้ปกครอง บางครั้งเด็ก ๆ ต้องบอกบางสิ่งกับผู้ปกครองพวกเขาจำเป็นต้องเรียกใช้ฟังก์ชันของผู้ปกครอง วิธีนี้สามารถทำได้โดยใช้ C ++ ตัวเลือกบางอย่างคือ: ทำให้คลาส parent ระดับโลกดังนั้นวัตถุลูกจะสามารถเรียกฟังก์ชันสมาชิกของวัตถุแม่ได้ ฉีดวัตถุแม่เป็นตัวชี้หรือการอ้างอิงลงในวัตถุลูกทุก จากนั้นเมื่อเด็กต้องการบอกวัตถุแม่บางอย่างก็สามารถทำได้เพราะมันมีตัวแปรสมาชิกที่สามารถใช้ วิธีอื่นในการทำเช่นนี้คืออะไร? มีลวดลายหรือชื่อการออกแบบทั่วไปสำหรับสิ่งนี้หรือไม่? โปรดทราบว่าฉันสนใจในแนวคิดและวิธีแก้ปัญหาใน C ++ เนื่องจากรายละเอียดจะแตกต่างกันในภาษาเชิงวัตถุอื่น ๆ ตัวอย่างเช่นจุดที่ 2 ด้านบนกล่าวถึง 'ตัวชี้หรือการอ้างอิง' และทั้งสองจะเป็นไปได้ใน C ++ เท่านั้น C ++ มีฟีเจอร์ภาษาที่ไม่ปรากฏในภาษาอื่นดังนั้นการใช้งานโซลูชันเพื่อแก้ไขปัญหาอาจรวมฟีเจอร์ภาษาเหล่านี้ซึ่งทำให้โซลูชันแตกต่างจากสิ่งที่อาจมีในภาษาอื่น

3
วิธีทั่วไปในการจัดการการมองเห็นในไลบรารีคืออะไร?
คำถามนี้เกี่ยวกับเวลาที่จะใช้ส่วนตัวและเมื่อใดควรใช้การป้องกันในชั้นเรียนทำให้ฉันคิด (ฉันจะขยายคำถามนี้ไปยังคลาสและวิธีการขั้นสุดท้ายเนื่องจากมีความเกี่ยวข้องฉันกำลังเขียนโปรแกรมใน Java แต่ฉันคิดว่านี่เกี่ยวข้องกับทุกภาษา OOP) คำตอบที่ได้รับการยอมรับ: กฎง่ายๆคือทำทุกอย่างให้เป็นส่วนตัวที่สุด และอีกหนึ่ง: ทำให้คลาสทั้งหมดจบลงเว้นแต่ว่าคุณจะต้องการคลาสย่อยเหล่านั้นในทันที ทำให้วิธีการทั้งหมดเป็นขั้นสุดท้ายเว้นแต่ว่าคุณจะต้อง subclass และแทนที่พวกเขาทันที ทำพารามิเตอร์เมธอดทั้งหมดให้เป็นที่สุดเว้นแต่คุณจำเป็นต้องเปลี่ยนพารามิเตอร์ภายในเนื้อความของเมธอดซึ่งค่อนข้างน่าอึดอัดใจเกือบทุกครั้ง ค่อนข้างตรงไปตรงมาและชัดเจน แต่ถ้าฉันส่วนใหญ่เขียนไลบรารี่ (Open Source บน GitHub) แทนที่จะเป็นแอพพลิเคชั่น ฉันสามารถตั้งชื่อห้องสมุดและสถานการณ์มากมายได้ที่ไหน ห้องสมุดได้ขยายออกไปอย่างที่นักพัฒนาไม่เคยคิดมาก่อน สิ่งนี้จะต้องทำด้วย "class loader magic" และแฮ็กอื่น ๆ เนื่องจากข้อ จำกัด ในการมองเห็น ไลบรารี่ถูกนำไปใช้ในวิธีที่พวกเขาไม่ได้สร้างขึ้นมา ไม่สามารถใช้ไลบรารีเนื่องจากปัญหาเล็ก ๆ (ข้อผิดพลาดฟังก์ชันการทำงานที่ขาดหายไปพฤติกรรม "ผิด") ที่ไม่สามารถเปลี่ยนแปลงได้เนื่องจากการมองเห็นลดลง ปัญหาที่ไม่สามารถแก้ไขได้นำไปสู่การแก้ไขปัญหาขนาดใหญ่ที่น่าเกลียดและบั๊กกี้ซึ่งการแทนที่ฟังก์ชั่นที่เรียบง่าย และฉันก็เริ่มตั้งชื่อเหล่านี้จนกระทั่งคำถามยาวเกินไปและฉันตัดสินใจที่จะลบออก ฉันชอบความคิดที่ว่าไม่มีโค้ดเกินความจำเป็นการมองเห็นได้มากกว่าที่จำเป็นและสิ่งที่เป็นนามธรรมมากกว่าที่จำเป็น และสิ่งนี้อาจใช้ได้เมื่อเขียนแอปพลิเคชันสำหรับผู้ใช้ปลายทางโดยที่รหัสจะถูกใช้โดยผู้ที่เขียนเท่านั้น แต่สิ่งนี้จะเกิดขึ้นได้อย่างไรหากผู้พัฒนารายอื่นใช้โค้ดนี้ในกรณีที่เป็นไปไม่ได้ที่ผู้พัฒนาดั้งเดิมจะนึกถึงกรณีการใช้งานที่เป็นไปได้ล่วงหน้าและการเปลี่ยนแปลง / การสร้างซ้ำนั้นยาก / เป็นไปไม่ได้ เนื่องจากไลบรารีโอเพ่นซอร์สขนาดใหญ่ไม่ใช่สิ่งใหม่อะไรคือวิธีที่พบได้บ่อยที่สุดในการจัดการการมองเห็นในโครงการดังกล่าวด้วยภาษาเชิงวัตถุ

4
มีการแสดงข้อมูลเดียวที่ทำงานกับทุกสกุลเงิน (แม้จะแตกต่างจากสกุลเงินดอลลาร์ยูโรและปอนด์)
ฉันสามารถค้นหาคำถามมากมายเกี่ยวกับห้องสมุดเพื่อใช้แทนจำนวนเงินในบางสกุลเงิน และเกี่ยวกับปัญหาเรื่องอายุว่าทำไมคุณไม่ควรเก็บสกุลเงินเป็นเลขทศนิยม IEEE 754 แต่ฉันไม่สามารถหาอะไรเพิ่มเติมได้ แน่นอนว่ายังมีอะไรอีกมากให้รู้เกี่ยวกับสกุลเงินในการใช้งานจริง ฉันสนใจเป็นพิเศษในสิ่งที่คุณจำเป็นต้องรู้เพื่อนำเสนอในการใช้งานจริง (เช่นด้วยดอลลาร์คุณไม่มีความแม่นยำน้อยกว่า $ 0.01 ซึ่งอนุญาตให้แสดงเป็นจำนวนเต็มเซ็นต์) แต่มันยากที่จะตั้งสมมติฐานเกี่ยวกับความหลากหลายของโปรแกรมของคุณเมื่อสกุลเงินเดียวที่คุณรู้จักคือสกุลเงินตะวันตกที่เป็นที่นิยม (เช่นดอลลาร์ยูโรและปอนด์) อะไรคือความรู้ที่เกี่ยวข้องในมุมมองเชิงโปรแกรมอย่างหมดจด? ฉันไม่ได้กังวลเกี่ยวกับหัวข้อของการแปลง โดยเฉพาะอย่างยิ่งเราต้องรู้อะไรบ้างเพื่อให้สามารถเก็บค่าในสกุลเงินบางส่วนและพิมพ์ออกมาได้

3
ต้นกำเนิดของ“ วิธีการหนึ่งควรส่งคืนค่าหรือมีผลข้างเคียง แต่ไม่ใช่ทั้งสองวิธี”
ฉันอ่านหนึ่งครั้งว่าวิธีการอย่างใดอย่างหนึ่งควรมีค่าตอบแทน (และมีความโปร่งใสในการอ้างอิง) หรือมีผลข้างเคียง แต่ไม่ใช่ทั้งสองอย่าง ฉันไม่พบการอ้างอิงถึงกฎนี้ แต่ต้องการเรียนรู้เพิ่มเติมเกี่ยวกับกฎนี้ ต้นกำเนิดของคำแนะนำนี้คืออะไร? มันเกิดขึ้นจากบุคคลหรือชุมชนใด? เครดิตเพิ่มเติม: ประโยชน์ที่ได้รับจากการทำตามคำแนะนำนี้คืออะไร?

5
การเสริมความแข็งแกร่งโค้ดด้วยการจัดการข้อยกเว้นที่ไร้ประโยชน์อาจเป็นไปได้
เป็นวิธีปฏิบัติที่ดีที่จะใช้การจัดการข้อยกเว้นที่ไร้ประโยชน์หรือไม่ในกรณีที่ส่วนอื่นของรหัสไม่ได้เข้ารหัสอย่างถูกต้อง? ตัวอย่างพื้นฐาน คนที่เรียบง่ายดังนั้นฉันจึงไม่สูญเสียทุกคน :) สมมติว่าฉันกำลังเขียนแอพที่จะแสดงข้อมูลของบุคคล (ชื่อที่อยู่ ฯลฯ ) ข้อมูลที่ถูกแยกออกจากฐานข้อมูล สมมติว่าฉันเป็นผู้เขียนส่วน UI และคนอื่นกำลังเขียนรหัสแบบสอบถาม DB ทีนี้ลองจินตนาการว่าข้อมูลจำเพาะของแอพของคุณบอกว่าถ้าข้อมูลของบุคคลนั้นไม่สมบูรณ์ (สมมติว่าชื่อหายไปในฐานข้อมูล) ผู้ที่เข้ารหัสแบบสอบถามควรจัดการสิ่งนี้โดยส่งกลับ "NA" สำหรับฟิลด์ที่หายไป เกิดอะไรขึ้นถ้าแบบสอบถามมีการเข้ารหัสไม่ดีและไม่จัดการกรณีนี้ จะเป็นอย่างไรถ้าคนที่เขียนข้อความค้นหาจัดการกับผลลัพธ์ที่ไม่สมบูรณ์และเมื่อคุณพยายามที่จะแสดงข้อมูลทุกอย่างก็ขัดข้องเพราะรหัสของคุณไม่ได้เตรียมที่จะแสดงสิ่งที่ว่างเปล่า? ตัวอย่างนี้เป็นพื้นฐานมาก ฉันเชื่อว่าพวกคุณส่วนใหญ่จะพูดว่า "ไม่ใช่ปัญหาของคุณคุณไม่ต้องรับผิดชอบต่อความผิดพลาดนี้" แต่ก็ยังคงเป็นส่วนหนึ่งของรหัสของคุณที่ขัดข้อง ตัวอย่างอื่น สมมติว่าตอนนี้ฉันเป็นคนเขียนแบบสอบถาม ข้อกำหนดไม่ได้พูดเหมือนกับข้างต้น แต่คนที่เขียนแบบสอบถาม "แทรก" ควรตรวจสอบให้แน่ใจว่าเขตข้อมูลทั้งหมดจะเสร็จสมบูรณ์เมื่อเพิ่มบุคคลในฐานข้อมูลเพื่อหลีกเลี่ยงการแทรกข้อมูลที่ไม่สมบูรณ์ ฉันควรจะปกป้องแบบสอบถาม "เลือก" ของฉันเพื่อให้แน่ใจว่าฉันให้ข้อมูลที่สมบูรณ์เกี่ยวกับ UI หรือไม่ คำถาม ถ้าข้อมูลจำเพาะไม่ได้พูดอย่างชัดเจนว่า "คนนี้เป็นคนที่รับผิดชอบในการจัดการสถานการณ์นี้"? ถ้าบุคคลที่สามใช้แบบสอบถามอื่น (คล้ายกับแบบสอบถามแรก แต่ใช้ฐานข้อมูลอื่น) และใช้รหัส UI ของคุณเพื่อแสดง แต่ไม่จัดการกรณีนี้ในรหัสของเขา ฉันควรทำสิ่งที่จำเป็นเพื่อป้องกันความผิดพลาดที่อาจเกิดขึ้นแม้ว่าฉันจะไม่ใช่คนที่ควรจัดการกับคดีที่ไม่ดี? ฉันไม่ได้มองหาคำตอบเช่น "(s) เขาเป็นคนรับผิดชอบต่อความผิดพลาด" เนื่องจากฉันไม่ได้แก้ไขข้อขัดแย้งที่นี่ฉันอยากรู้ว่าฉันควรป้องกันโค้ดของฉันจากสถานการณ์ที่ไม่ใช่ความรับผิดชอบของฉันหรือไม่ …

6
คุณตั้งชื่อการควบคุม GUI ของคุณได้อย่างไร?
มันเป็นโดยทั่วไปถือว่าการปฏิบัติที่ดีที่จะใช้สัญกรณ์ฮังการีแต่เป็นเรื่องธรรมดาที่จะหาการควบคุม GUI ชื่อและuserNameTextBoxuserNameLabel คุณใส่ประเภทการควบคุมลงในชื่อหรือไม่ นี่เป็นสัญกรณ์ฮังการีไม่ใช่หรือ

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

7
เหตุใดโรงเรียนจึงไม่ครอบคลุม debuggers [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว หลังจากยังบ้านอีกคำถามในดังนั้น ดูเหมือนว่านักเรียนส่วนใหญ่ไม่มีความรู้ว่า debugger คืออะไรหรือจะใช้งานอย่างไร ฉันรู้สึกว่าการรู้วิธีใช้ดีบักเกอร์นั้นสำคัญพอ ๆ กับการเขียนโปรแกรมพื้นฐานอื่น ๆ คำถามไม่ควรทำการดีบั๊กและวิธีการใช้เครื่องมือการดีบักที่ทันสมัยได้รับการสอนควบคู่กับพื้นฐานการเขียนโปรแกรม? ถ้าไม่ใช่เพราะอะไร

5
การเขียนโปรแกรมฟังก์ชั่นแตกต่างกันไปหรือเป็นจริงที่ยากขึ้นจริงหรือ
การเขียนโปรแกรมฟังก์ชั่นแตกต่างกันไปหรือเป็นจริงที่ยากขึ้นจริงหรือ บอกคนที่ไม่เคยเรียนรู้การเขียนโปรแกรมมาก่อนและสอนการเขียนโปรแกรมที่ใช้งานได้ เทียบกับคนที่ไม่เคยเรียนรู้การเขียนโปรแกรมมาก่อนและสอนการเขียนโปรแกรมที่จำเป็น ซึ่งเขาจะหายากขึ้น? หรือเหมือนกัน คำถามของฉัน: พูดว่าปัญหาตอนนี้คือการป้อนข้อมูลอูฐกรณี เช่นนั้นqwe_asd_zxc_rty_fgh_vbnจะกลายเป็นqweAsdZxcRtyFghVbn วิธีการขั้นตอนคือ: แยกมันตาม _ วนรอบอาร์เรย์ที่กระโดดข้ามรายการแรก สำหรับแต่ละรายการเราใช้อักษรตัวแรกเป็นตัวพิมพ์ใหญ่ เข้าร่วมผลลัพธ์ด้วยกัน วิธีการทำงานคือ: หากไม่พบ_ผลตอบแทนinput ตัดinputพร้อมแรก_(เช่นที่เราได้รับqweและasd_zxc_rty_gfh_cvb) ใช้อักษรตัวแรกของheadและตกลงด้วยตัวพิมพ์ใหญ่ที่มีf(tail) ตกลงถ้าคุณมีพื้นหลังการใช้งานและมีประสบการณ์มากมายในการเขียนโปรแกรมเชิงกระบวนงานฉันอยากถามว่า: คุณจะต้องใช้เวลามากขึ้นในการคิดหาวิธีการหรือไม่หรือจะใช้เวลานานกว่านี้ หากคุณมีพื้นฐานของขั้นตอนการทำงานแต่มีประสบการณ์หลายปีในการใช้งานฟังก์ชั่นการเขียนโปรแกรมฉันอยากจะถามคำถามเดียวกันนี้: คุณจะต้องใช้เวลานานกว่านี้ในการหาวิธีการดำเนินการหรือจะใช้เวลานานกว่า วิธี?

7
ในภาษาที่มุ่งเน้นวัตถุวัตถุควรทำการดำเนินการกับตัวเองเมื่อใดและควรจะดำเนินการกับวัตถุเมื่อใด
สมมติว่ามีPageคลาสซึ่งแสดงชุดคำสั่งสำหรับตัวแสดงผลหน้า และสมมติว่ามีRendererคลาสที่รู้วิธีแสดงหน้าบนหน้าจอ เป็นไปได้ที่จะจัดโครงสร้างโค้ดด้วยวิธีที่ต่างกันสองวิธี: /* * 1) Page Uses Renderer internally, * or receives it explicitly */ $page->renderMe(); $page->renderMe($renderer); /* * 2) Page is passed to Renderer */ $renderer->renderPage($page); ข้อดีและข้อเสียของแต่ละวิธีคืออะไร เมื่อใดจะดีกว่า คนอื่นจะดีกว่าเมื่อไหร่? พื้นหลัง เมื่อต้องการเพิ่มพื้นหลังเพิ่มเติมเล็กน้อย - ฉันค้นหาตัวเองโดยใช้วิธีการทั้งสองในรหัสเดียวกัน ฉันกำลังใช้ห้องสมุดของบุคคลที่ 3 รูปแบบไฟล์ PDF TCPDFที่เรียกว่า บางแห่งในรหัสของฉันฉันต้องมีสิ่งต่อไปนี้เพื่อให้การแสดงผล PDF ทำงานได้ $pdf = new TCPDF(); $html = "some …

3
เป็นไปได้หรือไม่ที่จะใช้ตารางแฮชแบบกระจายโดยไม่ต้องใช้ตัวดำเนินการ%
ฉันต้องการใช้ตารางแฮชที่กระจายอย่างรวดเร็วใน C # ฉันมีปัญหาในการเลือกฟังก์ชั่นแฮช จำกัด ของฉันที่ใช้รหัสแฮชตามอำเภอใจและ "จำกัด " มันเพื่อให้สามารถใช้สร้างดัชนีถังได้ มีสองตัวเลือกที่ฉันเห็น: ในมือข้างหนึ่งคุณสามารถตรวจสอบให้แน่ใจว่าถังของคุณมีองค์ประกอบจำนวนมากเสมอและเพื่อ จำกัด การแฮชคุณเพียงแค่ปรับค่าตามจำนวนถัง นี่คือความจริงแล้วพจนานุกรมของ. NET ทำอะไร ปัญหาของวิธีนี้คือการใช้% ช้ามากเมื่อเทียบกับการปฏิบัติการอื่น ถ้าคุณมองไปที่ตารางการเรียนการสอน Agner ตัดหมอก , idiv(ซึ่งเป็นรหัสการชุมนุมที่ได้รับการสร้างขึ้นสำหรับ%) มีการเรียนการสอนแฝง ~ 25 รอบสำหรับโปรเซสเซอร์ Intel ใหม่ เปรียบเทียบนี้เพื่อรอบ 3 mulหรือ 1 สำหรับ Ops บิตเช่นand, หรือorxor ในทางกลับกันคุณสามารถมีจำนวนของถังเสมอได้ 2 คุณยังจะต้องคำนวณโมดูลัสของแฮชดังนั้นคุณจึงไม่ได้พยายามทำดัชนีนอกอาร์เรย์ แต่คราวนี้มันจะมีราคาไม่แพง . เนื่องจากกำลังของ 2 % Nเป็นเพียง& (N - 1)ข้อ จำกัด …

3
ทำไมภาษาควรเยื้องมากกว่าเครื่องหมายที่ชัดเจนสำหรับบล็อก?
ฉันกำลังเรียนรู้ Haskell และฉันกำลังมองหาเครื่องมือการเยื้องอัตโนมัติ ฉันไม่ได้ดูมากนักและเรียนรู้ว่าใน Haskell (เช่นเดียวกับใน Python) การเยื้องนั้นหมายถึงบล็อก ด้วยเหตุนี้ฉันเดาว่าเป็นไปไม่ได้ที่จะสร้างเครื่องมือการจัดรูปแบบอัตโนมัติที่แข็งแกร่งเช่นเดียวกับในภาษาอื่น ๆ ในตระกูล C ที่ใช้ตัวระบุที่ชัดเจนเช่น {} (เครื่องหมายปีกกา) หรือbegin endคำหลัก ฉันไม่สนใจภาษาที่บังคับให้ย่อหน้าเพื่อให้อ่านได้ แต่ฉันไม่สามารถเข้าใจถึงประโยชน์ของทั้งการบังคับใช้การเยื้องและมีเครื่องหมายระบุชัดเจนเพื่อให้เครื่องมืออัตโนมัติสามารถเข้าใจสิ่งที่อยู่ในบล็อกนั้น หากการตั้งค่าการเยื้องเป็นตัวทำเครื่องหมายบล็อกเป็นเพื่อให้รหัสดูดีขึ้นแล้วฉันยังไม่เข้าใจความได้เปรียบ เนื่องจากแท็บและช่องว่างมีการแสดงแตกต่างกันในเครื่องมือแก้ไขและแบบอักษรที่แตกต่างกัน (แบบอักษรช่องว่างเดียวเช่น look tidier) จึงไม่สามารถคาดหวังว่าโปรแกรมเมอร์จะแสดงรหัสอย่างเหมาะสม เครื่องมือที่สามารถพิจารณาโปรแกรมแก้ไขข้อความปัจจุบันจะเหมาะสมกว่าในการจัดรูปแบบรหัสอย่างถูกต้อง เหตุใดนักออกแบบภาษาจึงเลือกการเยื้องผ่านตัวทำเครื่องหมายบล็อกอย่างชัดเจน

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; } …

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

3
สุ่มสร้างกราฟกำกับบนตาราง
ฉันพยายามที่จะสร้างกราฟกำกับแบบสุ่มเพื่อจุดประสงค์ในการสร้างเกมไขปริศนาคล้ายกับปริศนาเลื่อนน้ำแข็งจากโปเกมอน นี้เป็นหลักสิ่งที่ฉันต้องการที่จะสามารถสร้างแบบสุ่ม: http://bulbanews.bulbagarden.net/wiki/Crunching_the_numbers:_Graph_theory ฉันต้องสามารถ จำกัด ขนาดของกราฟในมิติ x และ y ได้ ในตัวอย่างที่ให้ไว้ในลิงค์มันจะถูก จำกัด ไว้ที่ตาราง 8x4 ปัญหาที่ฉันพบคือการสร้างกราฟแบบสุ่ม แต่สร้างกราฟแบบสุ่มซึ่งฉันสามารถแมปพื้นที่ในพื้นที่ 2 มิติได้อย่างเหมาะสมเนื่องจากฉันต้องการบางสิ่ง (เช่นก้อนหิน) ที่อยู่ฝั่งตรงข้ามของโหนดเพื่อทำให้เกิด มองเห็นได้ชัดเจนเมื่อคุณหยุดเลื่อน ปัญหาเกี่ยวกับเรื่องนี้คือบางครั้งก้อนหินจะสิ้นสุดลงในเส้นทางระหว่างสองโหนดอื่น ๆ หรืออาจเกิดขึ้นกับโหนดอื่นเองซึ่งทำให้กราฟทั้งหมดแตกหัก หลังจากพูดคุยปัญหากับคนไม่กี่คนที่ฉันรู้จักเรามาถึงข้อสรุปที่อาจนำไปสู่การแก้ปัญหา รวมถึงอุปสรรคในตารางเป็นส่วนหนึ่งของกราฟเมื่อสร้างมัน เริ่มต้นด้วยกริดที่เต็มไปอย่างสมบูรณ์และเพียงแค่วาดเส้นทางสุ่มและลบบล็อกที่จะทำให้เส้นทางนั้นทำงาน จากนั้นปัญหาก็จะกลายเป็นสิ่งที่คนที่จะลบเพื่อหลีกเลี่ยงการแนะนำเส้นทางเพิ่มเติมที่สั้นกว่า เรายังคิดว่าอัลกอริทึมการเขียนโปรแกรมแบบไดนามิกอาจเป็นประโยชน์แม้ว่าเราไม่มีใครมีฝีมือเกินไปในการสร้างอัลกอริทึมการเขียนโปรแกรมแบบไดนามิกจากอะไร แนวคิดหรือการอ้างอิงใด ๆ เกี่ยวกับปัญหาที่เรียกว่าเป็นทางการ (หากเป็นปัญหากราฟอย่างเป็นทางการ) จะเป็นประโยชน์มากที่สุด นี่คือตัวอย่างบางส่วนของสิ่งที่ฉันประสบความสำเร็จจนถึงเพียงแค่วางบล็อกแบบสุ่มและสร้างกราฟการนำทางจากจุดเริ่มต้น / สิ้นสุดที่เลือก แนวคิด (ตามที่อธิบายไว้ในลิงค์ก่อนหน้า) คือคุณเริ่มที่สีเขียว S และต้องการไปที่สีเขียว F. คุณทำสิ่งนี้โดยเลื่อนขึ้น / ลง / ซ้าย / ขวาและคุณดำเนินการต่อในทิศทางที่เลือกจนกว่าคุณจะตี …

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