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

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

2
ตัวอย่างของความต่อเนื่องที่ไม่ได้นำไปใช้เป็นขั้นตอนคืออะไร?
การสนทนาที่น่าสนใจเกี่ยวกับความแตกต่างระหว่างการเรียกกลับและการดำเนินการต่อบน SO ได้กระตุ้นคำถามนี้ ตามคำนิยามความต่อเนื่องเป็นตัวแทนของตรรกะที่จำเป็นในการคำนวณให้เสร็จสมบูรณ์ ในภาษาส่วนใหญ่สิ่งนี้แสดงให้เห็นว่าเป็นหนึ่งในขั้นตอนการโต้แย้งที่คุณผ่านสิ่งที่มีค่าต้องการการประมวลผลอย่างต่อเนื่อง ในภาษาที่ใช้งานได้อย่างหมดจด (ที่ทุกฟังก์ชั่นล้วน แต่เป็นพลเมืองชั้นหนึ่ง) ฉันคิดว่าความต่อเนื่องอาจเป็นรูปแบบที่สมบูรณ์ นี่คือท้ายที่สุดแล้วที่ฉันได้เข้าใจถึงการสืบเนื่องถึงจุดนี้มาก่อน อย่างไรก็ตามโลกที่เต็มไปด้วยรัฐ (ถอนหายใจ .. ) และดังนั้นคำจำกัดความทั่วไปไม่จำเป็นต้องให้สถานะโปรแกรมจับภาพต่อเนื่อง - มันต้องการเพียงความตั้งใจ เพื่อช่วยในการทำความเข้าใจฉันสามารถให้ตัวอย่างเป็นภาษาที่ใช้งานได้ซึ่งความต่อเนื่องถูกแสดงออกในรูปแบบที่เป็นนามธรรมมากกว่าฟังก์ชั่นหรือไม่? ฉันรู้ว่า Scheme ช่วยให้คุณสามารถคว้าความต่อเนื่องในปัจจุบันในรูปแบบของคลาส (call / cc) แต่ถึงกระนั้นดูเหมือนว่าขั้นตอนการโต้แย้งหนึ่งที่ส่งผ่านไปยัง call / cc นั้นจะได้รับความต่อเนื่องในปัจจุบันในรูปแบบของอีกแบบหนึ่ง ขั้นตอนการโต้แย้งที่ฟังก์ชั่นการโทร / cc'd สามารถใช้ผลของมัน

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

10
เราควรฝากรายละเอียดการติดต่อไว้ในซอร์สโค้ดหรือไม่?
ฉันมักจะปล่อยให้ที่อยู่อีเมลของฉันเป็นมารยาทในกรณีที่มีคนต้องการถามฉันเกี่ยวกับเรื่องนี้ในภายหลัง คนอื่น ๆ ปล่อยให้ข้อมูลมากไปหรือน้อยไปกว่านั้น? ไม่มีใครฝากหมายเลขโทรศัพท์หรือไม่?

16
คุณใช้การย้อนกลับสตริงเพื่ออะไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ใน PHP เป็นของstrrev()Rails .reverseแต่ภาษาส่วนใหญ่ไม่มีฟังก์ชั่นการย้อนกลับสตริง บางคนมีฟังก์ชั่นย้อนกลับอาร์เรย์ที่สามารถใช้กับตัวละคร ฉันคิดว่ามันต้องเป็นการกำกับดูแลที่สำคัญ แต่แล้วมันก็เกิดขึ้นกับฉันคุณจะใช้สายอักขระย้อนกลับเพื่ออะไร ครั้งเดียวที่ฉันคิดได้ว่าฉันได้เห็นมันเป็นการสาธิตและบทเรียนเพื่อเปลี่ยน "Hello World!" เป็น "! dlroW olleH" คำถามของฉันคือ; มีการใช้สำหรับการย้อนกลับสตริงหรือมันไม่มีจุดหมายอย่างสมบูรณ์? . ภาคผนวก มีคำตอบเพิ่มเติมที่ฉันคาดไว้และไม่ใช่ทั้งหมดที่เป็นวิชาการ ฉันจะใส่เงินที่ไม่มีใครสามารถมาด้วยตัวอย่างที่ถูกกฎหมาย ฉันก็ไม่คิดว่าฉันจะได้เรียนรู้อะไรใหม่ ๆ แต่คำแนะนำ regex ของ Mark Canlas นั้นยอดเยี่ยมมากและฉันหวังว่าจะได้มีโอกาสพิสูจน์มัน ขอบคุณทุกคน.

2
การนอนด้ายทำงานอย่างไร
เมื่อคุณนอนหลับสิ่งที่เกิดขึ้นจริงคืออะไร? ผมเห็นว่าการนอนหลับหัวข้อ"หยุดเธรดปัจจุบันเป็นระยะเวลาที่กำหนดของเวลา" แต่มันทำงานอย่างไร ตามที่Thread.sleep () ทำงานภายในและThread.sleep ทำงานอย่างไรจริง ๆ : ระยะเวลาสลีปจะขึ้นอยู่กับความละเอียดเฉพาะของระบบ การนอนหลับกำลังปิดกั้น เธรดออกจาก CPU และหยุดการทำงาน เธรดไม่ใช้เวลา CPU ในขณะหลับ ฉันไม่เข้าใจกลไกภายในและพื้นฐานของความหมายทั้งหมดนี้ ฉันเข้าใจว่ามีบางสิ่งที่เรียกว่าตัวกำหนดตารางเวลาที่รับผิดชอบในการสลับระหว่างเธรด ดูเหมือนแหล่งที่มาจะบ่งบอกว่าสิ่งนี้จะแตกต่างกันไปตามระบบปฏิบัติการ (หรือฮาร์ดแวร์?) และเธรดส่วนใหญ่จะได้รับ 1ms - 60ms หรือมากกว่านั้นเพื่อดำเนินการบางอย่างก่อนที่ CPU จะเปลี่ยนไปใช้เธรดอื่น แต่เมื่อเธรดหลับ (เช่นหลายวินาที) มันจะทำงานต่อได้อย่างไร? ฉันคาดเดาว่าตัวจับเวลามีส่วนเกี่ยวข้องอย่างใดอย่างหนึ่งมันเป็นนาฬิกาของเมนบอร์ดหรือไม่ มันเกี่ยวข้องกับอัตราสัญญาณนาฬิกาของ CPU หรือไม่ และแม้ว่าจะมีการจับเวลาก็ตามซีพียูรู้ได้อย่างไรว่าถึงเวลาที่ต้องใส่ใจกับเธรดอีกครั้ง มันจะไม่ต้องตรวจสอบในด้ายอย่างต่อเนื่องเพื่อดูว่ามันพร้อมหรือไม่ ไม่ได้ที่มีประสิทธิภาพการลงคะแนนเลือกตั้งและดังนั้นจึงชนิดของการจะใช้เวลานาน CPU? กำลังนอนหลับภาษาเฉพาะของเธรดหรือระบบปฏิบัติการรับผิดชอบหรือไม่หรือเป็นสิ่งที่จำเพาะกับ CPU ใครช่วยอธิบายสิ่งนี้ให้ฉันด้วยคำอธิบายพื้นฐานของสิ่งต่าง ๆ เช่นตัวกำหนดตารางเวลาและซีพียูกำลังทำอะไรอยู่ในระหว่างนี้?

4
จำเป็นต้องมีการรวบรวมขยะหรือไม่สำหรับการดำเนินการปิดอย่างปลอดภัยหรือไม่?
ฉันเพิ่งเข้าร่วมหลักสูตรออนไลน์เกี่ยวกับภาษาการเขียนโปรแกรมซึ่งมีการนำเสนอการปิด ฉันเขียนสองตัวอย่างที่ได้รับแรงบันดาลใจจากหลักสูตรนี้เพื่อให้บริบทก่อนถามคำถาม ตัวอย่างแรกคือฟังก์ชัน SML ที่สร้างรายการตัวเลขจาก 1 ถึง x โดยที่ x คือพารามิเตอร์ของฟังก์ชัน: fun countup_from1 (x: int) = let fun count (from: int) = if from = x then from :: [] else from :: count (from + 1) in count 1 end ใน SML REPL: val countup_from1 = fn : int …

4
เหตุใดจึงเรียกว่า 'เอกสารที่นี่'
(แจ้งให้เราทราบหากนี่คือ SE ที่ไม่ถูกต้องสำหรับเรื่องนี้) เหตุใดเอกสารที่นี่ (หรือ Heredoc) จึงเรียกสิ่งนี้ว่า Wikipediaไม่มีอะไรจะพูดในเรื่องนั้น ฉันพบเอกสารยูนิกซ์ที่อธิบายว่า "นี่คือเอกสาร" นั่นคือรูปแบบดั้งเดิมหรือไม่

5
เหตุใดฉันจึงเห็นโครงสร้าง (;;) มากมาย [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา สำหรับวิธีคิดของฉัน a สำหรับลูปถูกใช้เพื่อวนซ้ำในช่วงที่รู้จักหรือกำหนดได้ String[] names = //something; for ( int i = 0; i < names.length; i++ ) { //do stuff } ซึ่งเทียบเท่า (การกำหนดขอบเขตของฉันออกไป) เพื่อ: String[] names = //something; int i = 0; while (i < names.length ) { // do stuff …

12
คำนำหน้าประเภทและขอบเขตมีประโยชน์หรือไม่
เมื่อเร็ว ๆ นี้เริ่มงานแรกของฉันในฐานะนักพัฒนาซอฟต์แวร์ฉันถูกโยนลงมาเล็กน้อยเพื่อบอกว่าฉันไม่ต้องทำตามอนุสัญญาการตั้งชื่อใด ๆ ในรหัสของฉัน รหัสที่เขียนโดยกลุ่มที่ทำงานในโครงการอื่น ๆ โครงการขนาดใหญ่ตามอนุสัญญาการตั้งชื่อ แต่เนื่องจากฉันถูกนำเข้ามาเขียนแอปพลิเคชั่นใหม่สแตนด์อะโลนความรู้สึกคือว่ามันไม่สำคัญเลย มันเป็นความกังวลครั้งสุดท้ายของฉันดังนั้นฉันแค่ทำตามแบบแผนเดิมที่มีอยู่แล้วก็วิ่งไปด้วย int nTickCount bool bConnected object[] m_aItems fSum += fWeight * fValue class cManager enum etSystemStates etSystemStates eState cManager.cs แต่มันคุ้มค่าจริงหรือ ฉันคิดว่ามันยากที่จะตัดสินผลกระทบสุทธิว่าการทำตามแบบแผนการตั้งชื่อแบบนี้มีความเข้าใจและการตรวจจับข้อผิดพลาด แต่จากการมองเห็นมันก็ดูน่าเกลียด นอกจากนี้การมีทุกคลาสและไฟล์ทั้งหมดในโครงการที่เรียกว่า cSomething ดูเหมือนว่าจะไม่ค่อยสวย ฉันไม่ได้อยู่ภายใต้ภาพลวงตาว่าเป็นเรื่องใหญ่ระยะไกลเมื่อเปรียบเทียบกับสิ่งที่สร้างความแตกต่างอย่างชัดเจนเช่นอัลกอริธึมและสถาปัตยกรรมที่คุณใช้ แต่การประชุมใด ๆ ที่มีผลต่อรหัสทุกบรรทัดที่ฉันเขียนดูเหมือนว่าคุ้มค่า คุณคิดว่ารูปแบบการตั้งชื่อที่หรูหราและมีประสิทธิภาพที่สุดคืออะไรหากจำเป็นต้องใช้เลย? มันแสดงถึงประเภทและ / หรือขอบเขตหรือไม่?

4
คุณสามารถ TDD สำหรับข้อบกพร่องที่สามารถทดสอบได้หลังจากที่ได้รับการแก้ไขแล้วเท่านั้น?
นี่คือตัวอย่างหนึ่ง: เว็บแอปพลิเคชันของฉันมีองค์ประกอบที่สามารถลากได้ เมื่อลากองค์ประกอบเบราว์เซอร์จะสร้าง "ภาพผี" ฉันต้องการลบ "อิมเมจโกสต์" เมื่อลากแล้วเขียนการทดสอบสำหรับพฤติกรรมนี้ ปัญหาของฉันคือตอนแรกฉันไม่รู้ว่าจะแก้ไขข้อผิดพลาดนี้ได้อย่างไรและวิธีเดียวที่ฉันสามารถเขียนการทดสอบคือหลังจากที่ฉันแก้ไขแล้ว ในฟังก์ชั่นง่าย ๆ เช่นlet sum = (a, b) => a - bคุณสามารถเขียนการทดสอบว่าทำไมsum(1, 2)ไม่เท่ากัน3ก่อนที่จะเขียนโค้ดใด ๆ ในกรณีที่ฉันอธิบายฉันไม่สามารถทดสอบได้เพราะฉันไม่ทราบว่าการตรวจสอบคืออะไร (ฉันไม่รู้ว่าการยืนยันควรเป็นอย่างไร) วิธีแก้ไขปัญหาที่อธิบายคือ: let dataTransfer = e.dataTransfer let canvas = document.createElement('canvas'); canvas.style.opacity = '0'; canvas.style.position = 'absolute'; canvas.style.top = '-1000px'; dataTransfer.effectAllowed = 'none'; document.body.appendChild(canvas); dataTransfer.setDragImage(canvas, 0, 0); ฉันไม่สามารถรู้ได้ว่านี่เป็นวิธีแก้ปัญหา ฉันไม่สามารถเขียนแบบทดสอบได้หลังจากหาวิธีแก้ปัญหาออนไลน์เพราะวิธีเดียวที่ฉันจะรู้ได้ถ้ามันใช้งานได้จริงก็คือการเพิ่มรหัสนี้ลงใน …

7
มีรูปแบบสำหรับวิธีการ "เพิ่มความเป็นธรรมชาติ" ในการเพิ่มรายการลงในคอลเลกชันหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันคิดว่าวิธีทั่วไปในการเพิ่มบางอย่างลงในคอลเลกชันคือการใช้Addวิธีการบางอย่างที่คอลเลกชันมีให้: class Item {} var items = new List<Item>(); items.Add(new Item()); และไม่มีอะไรผิดปกติเกี่ยวกับเรื่องนั้น ฉันสงสัยว่าทำไมเราไม่ทำแบบนี้: var item = new Item(); item.AddTo(items); มันดูเป็นธรรมชาติมากกว่าวิธีแรกเลย นี้จะมี andvantange ว่าเมื่อItemชั้นมีคุณสมบัติเช่นParent: class Item { public object Parent { get; private set; } } คุณสามารถทำให้สุนัขเซทเทอร์เป็นส่วนตัวได้ ในกรณีนี้แน่นอนคุณไม่สามารถใช้วิธีการขยายได้ แต่บางทีฉันผิดและฉันไม่เคยเห็นรูปแบบนี้มาก่อนเพราะมันผิดปกติเหรอ? คุณรู้หรือไม่ว่ามีรูปแบบดังกล่าวหรือไม่ ในC#วิธีการขยายจะเป็นประโยชน์สำหรับการที่ public static T …

6
การจัดการโดยไม่ทราบชื่อพารามิเตอร์ของฟังก์ชันเมื่อคุณเรียกใช้
นี่คือปัญหาการเขียนโปรแกรม / ภาษาที่ฉันต้องการจะได้ยินความคิดของคุณ เราได้พัฒนาข้อตกลงที่โปรแกรมเมอร์ส่วนใหญ่ (ควร) ปฏิบัติตามซึ่งไม่ได้เป็นส่วนหนึ่งของไวยากรณ์ภาษา แต่ให้บริการเพื่อทำให้โค้ดอ่านง่ายขึ้น แน่นอนว่าสิ่งเหล่านี้เป็นเรื่องของการถกเถียงอยู่เสมอ แต่อย่างน้อยก็มีแนวคิดหลักบางประการที่โปรแกรมเมอร์ส่วนใหญ่เห็นด้วย การตั้งชื่อตัวแปรของคุณอย่างเหมาะสมตั้งชื่อโดยทั่วไปทำให้บรรทัดของคุณไม่ยาวเกินเหตุหลีกเลี่ยงการใช้งานที่ยาวนานห่อหุ้มสิ่งต่าง ๆ อย่างไรก็ตามมีปัญหาที่ฉันยังไม่พบใครแสดงความคิดเห็นและอาจเป็นหนึ่งในกลุ่มที่ใหญ่ที่สุด มันเป็นปัญหาของการโต้แย้งที่ไม่ระบุตัวตนเมื่อคุณเรียกใช้ฟังก์ชัน ฟังก์ชันมาจากคณิตศาสตร์โดยที่ f (x) มีความหมายชัดเจนเพราะฟังก์ชั่นมีคำจำกัดความที่เข้มงวดมากขึ้นซึ่งมักจะใช้ในการเขียนโปรแกรม ฟังก์ชั่นที่บริสุทธิ์ในคณิตศาสตร์สามารถทำอะไรได้น้อยกว่ามากในการเขียนโปรแกรมและพวกเขาเป็นเครื่องมือที่สง่างามกว่ามากพวกเขามักจะโต้แย้งเพียงครั้งเดียว หากฟังก์ชั่นนั้นมีหลายอาร์กิวเมนต์มันมักจะเป็นเพียงมิติเพิ่มเติมของโดเมนของฟังก์ชัน กล่าวอีกนัยหนึ่งอาร์กิวเมนต์ไม่สำคัญกว่าอีกอาร์กิวเมนต์ พวกเขาได้รับคำสั่งอย่างชัดเจนแน่นอน แต่นอกจากนั้นพวกเขาไม่มีการจัดลำดับความหมาย ในการเขียนโปรแกรมเรามีอิสระในการกำหนดฟังก์ชั่นและในกรณีนี้ฉันจะเถียงว่ามันไม่ได้เป็นสิ่งที่ดี สถานการณ์ทั่วไปคุณมีฟังก์ชั่นที่กำหนดเช่นนี้ func DrawRectangleClipped (rectToDraw, fillColor, clippingRect) {} ดูคำจำกัดความถ้าฟังก์ชั่นเขียนอย่างถูกต้องมันชัดเจนว่ามันคืออะไร เมื่อเรียกใช้ฟังก์ชั่นนี้คุณอาจมีเวทย์มนตร์ intellisense / code ที่เกิดขึ้นใน IDE / โปรแกรมแก้ไขที่จะบอกคุณว่าอาร์กิวเมนต์ต่อไปควรเป็นอย่างไร แต่เดี๋ยวก่อน. หากฉันต้องการสิ่งนั้นเมื่อฉันกำลังเขียนการโทรจริงๆไม่มีสิ่งที่เราขาดหายไปที่นี่หรือไม่ คนที่อ่านรหัสไม่ได้รับประโยชน์จาก IDE และถ้าพวกเขาข้ามไปที่คำจำกัดความพวกเขาไม่มีความคิดที่สี่เหลี่ยมสองอันที่ผ่านมาเป็นอาร์กิวเมนต์ใช้สำหรับอะไร ปัญหายิ่งไปกว่านั้น หากข้อโต้แย้งของเรามาจากตัวแปรท้องถิ่นบางอย่างอาจมีสถานการณ์ที่เราไม่รู้ด้วยซ้ำว่าข้อโต้แย้งที่สองคืออะไรเพราะเราเห็นชื่อตัวแปรเท่านั้น ยกตัวอย่างบรรทัดโค้ดนี้ DrawRectangleClipped(deserializedArray[0], deserializedArray[1], deserializedArray[2]) …

9
เขียนใหม่แอสเซมบลี IBM + COBOL ใน C ++
ฉันทำงานเป็นตัวแทน / ผู้จัดการการเช่าสำหรับ บริษัท รถเช่าที่ใช้ระบบเช่าซึ่งเขียนขึ้นในปี 1972 ฉันตัดสินใจว่าอาจถึงเวลาสำหรับการอัพเดท สำหรับพื้นหลังเล็กน้อยนี่คือตัวอย่างสั้น ๆ ของความบ้าคลั่งที่เราต้องจัดการกับโปรแกรมนี้ทุกวัน: ตัวแทนการเช่าต้องจำไว้ว่าการพิมพ์บนหน้าจอหนึ่งใช้ "MXC" ในฟิลด์ ACT (ทุกอย่างอิงตามรหัสย่อ) ซึ่งย่อมาจาก "MaXimum display on a contract" ในขณะที่อีกหน้านั้นต้องใช้ PR (for PRint) ใน ฟิลด์ ACTION แต่หน้าจอหลายจอใช้ Y ในฟิลด์ PT (สำหรับ PrinT) แต่หน้าจออื่นใช้ Y ในฟิลด์ PRT (สำหรับ PRinT) แต่หน้าจออื่นต้องการให้ผู้ใช้กด Enter (แต่ไม่ใช่การป้อนถัดจาก ตัวอักษรเนื่องจากเป็นอักขระบรรทัดใหม่นั้นจะต้องป้อนบนแป้นตัวเลข) และจากนั้น F8 หน้าจออื่นที่เกี่ยวข้อง แต่ต้องใช้เพียง F8 หน้าจอบางหน้ามีเขตข้อมูล …

5
TDD การทดสอบใหม่ในขณะที่ยังไม่มีการใช้งาน
ฉันกำลังทดลองกับการพัฒนาโดยใช้การทดสอบและฉันพบว่าฉันมักจะเกิดสถานการณ์ต่อไปนี้: ฉันเขียนการทดสอบสำหรับการใช้งาน X การทดสอบเหล่านั้นล้มเหลว ในขณะที่พยายามใช้งาน X ฉันเห็นว่าฉันต้องใช้คุณลักษณะบางอย่าง Y ในเลเยอร์ที่ต่ำกว่าของรหัสของฉัน ดังนั้น... ฉันเขียนการทดสอบสำหรับ Y ตอนนี้การทดสอบทั้ง X และ Y ล้มเหลว เมื่อฉันมีคุณสมบัติ 4 อย่างในโค้ดเลเยอร์ต่าง ๆ ที่ใช้งานได้ในเวลาเดียวกันและฉันก็สูญเสียความสนใจในสิ่งที่ฉันกำลังทำจริง ๆ (การทดสอบจำนวนมากล้มเหลวในเวลาเดียวกัน) ฉันคิดว่าฉันสามารถแก้ปัญหานี้ได้โดยใช้ความพยายามมากขึ้นในการวางแผนงานของฉันก่อนที่ฉันจะเริ่มเขียนข้อสอบ แต่ในบางกรณีฉันไม่ทราบว่าฉันจะต้องไปให้ลึกกว่านี้เพราะเช่นฉันไม่รู้จัก API ของเลเยอร์ที่ต่ำกว่าเป็นอย่างดี ฉันควรทำอย่างไรในกรณีเช่นนี้? TDD มีคำแนะนำใด ๆ หรือไม่?

2
คุณจะทำให้คลัสเตอร์ทำงานเพียงครั้งเดียวได้อย่างไร
หากคุณมีงานที่คุณต้องการเรียกใช้เพียงครั้งเดียวในคลัสเตอร์ของเซิร์ฟเวอร์ในช่วงเวลาปกติสิ่งที่จะเป็นวิธีที่ดีที่สุดในการบรรลุเป้าหมายนี้ นิยามของคลัสเตอร์ในกรณีนี้คือเซิร์ฟเวอร์ที่เหมือนกัน 2 ตัวขึ้นไปที่มีเซสชันแบบกระจายซึ่งนั่งอยู่ด้านหลังตัวโหลดบาลานซ์ ใช้กรณี:คุณมีงานที่มีราคาแพงในการทำงานที่ควรรันเพียงครั้งเดียวต่อหนึ่งชั่วโมง X งานนี้สามารถทำซ้ำได้หลายระเบียนและอัพเดทสถานะของพวกเขา สถานการณ์กรณีที่เลวร้ายที่สุดคือการให้งานรันสองครั้งทำให้ข้อมูลของคุณไม่ถูกต้อง สถานการณ์กรณีที่ดีที่สุดคืองานใช้ทรัพยากรในเซิร์ฟเวอร์ของคุณทั้งหมด สรุปความต้องการ: งานจะต้องยังคงทำงานแม้ว่าหนึ่งในโหนดจะไม่ทำงาน งานต้องถูกเรียกใช้หนึ่งครั้งต่อหนึ่งตารางเวลาเท่านั้น หากมีการกำหนดเวลางานหลายงานในเวลาเดียวกันหรือในเวลาที่ทับซ้อนกันจำนวนงานที่รันจะถูกกระจายระหว่างเซิร์ฟเวอร์อย่างเท่าเทียมกัน เครื่องจะต้องมีรหัสฐานเดียวกันและจะทำข้อมูลให้ตรงกันผ่าน NTP การกำหนดค่าอาจแตกต่างกันระหว่างโหนดและโหนดโดยตัวแปรสภาพแวดล้อม งานต้องเริ่มตรงเวลาหรือภายในช่วงเวลาที่กำหนดของเวลาที่กำหนด (เช่นพูด 5 นาที) การแก้ปัญหาที่เป็นไปได้ ตั้งค่าหนึ่งโหนดเป็นโหนดหลักซึ่งจะไม่ทำงานเนื่องจากมีการละเมิด 1 ด้านบน สร้างคำร้องขอให้ load balancer สร้างยอดคงเหลือเพื่อเริ่มต้นงาน น่าเสียดายที่นี่มีผลข้างเคียงที่ถ้าคุณมีงานหลายงานที่ทำงานในเวลาเดียวกันพวกเขาทั้งหมดอาจถูกเรียกใช้โดยเครื่องเดียวกัน สิ่งนี้จะต้องทำงานใน Java ในภาชนะ servlet อย่างไรก็ตามมันไม่ได้เข้ารหัสงานที่ฉันกำลังมองหา แน่นอนว่านี่เป็นปัญหาที่แก้ไขแล้วด้วยทางออกที่ดีที่สุดที่รู้จัก คำถามที่เกี่ยวข้อง /programming/5949038/schedule-job-executes-twice-on-cluster สิ่งนี้ไม่ซ้ำกันเนื่องจากโซลูชันไม่เพียงพอตามข้อกำหนด 5 ข้อที่ระบุด้านบน วิธีแก้ปัญหาที่ upvote มากที่สุดนั้นเกิดจากปัญหาการแข่งขันและวิธีที่สองนั้นเป็นการละเมิดข้อกำหนด 3

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