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

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

3
จำกัด ขนาดของคลัสเตอร์ด้วยโมดูลที่ปิดในโปรแกรมมิฉะนั้นเป็นโอเพ่นซอร์ส
ฉันทำงานในสถาบันการศึกษาเชิงวิชาการขึ้นอยู่กับการใช้คอมพิวเตอร์ประสิทธิภาพสูง ในช่วง 10 ปีที่ผ่านมาเราได้พัฒนารหัส Fortran ของเราเองซึ่งได้รับการยกย่องอย่างดีและสามารถทำงานในกลุ่มที่มีขนาดใหญ่มาก เพื่อให้ชุมชนนักวิจัยได้รับประโยชน์มากขึ้นจากรหัสเรากำลังพิจารณาที่จะทำให้มันเป็นโอเพ่นซอร์ส อย่างไรก็ตามเนื่องจากเงินทุนของเรานั้นขึ้นอยู่กับการวิจัยที่เราสามารถทำได้ด้วยรหัสเราจึงเป็นคนที่ชอบยิงตัวเอง หนึ่งในแนวคิดคือการ จำกัด จำนวน CPU ที่โค้ดสามารถทำงานได้เช่น CPU สูงสุด 1,000 ตัวแทนที่จะเป็น 100,000 ที่เราใช้ ด้วยวิธีนี้ชุมชนการวิจัยระดับโลกจะได้รับประโยชน์จากรหัส แต่เราจะได้รับประโยชน์จากขนาดของปัญหาที่เราสามารถเรียกใช้ได้ คุณลักษณะดังกล่าวเป็นไปได้หรือไม่ และคุณลักษณะดังกล่าวจะนำไปใช้อย่างไร โดยพื้นฐานแล้วเราต้องการโอเพ่นซอร์สโค้ดที่สมบูรณ์ แต่ จำกัด การขนาน (ใช้ MPI) กับจำนวนเธรด MPI ที่แน่นอนตัวอย่างเช่นการใช้โมดูล (ปิดแหล่งที่มา)

2
วัตถุคำขอ HTTP / ตอบสนองควรจะไม่เปลี่ยนรูป?
ฉันคิดว่ามันปลอดภัยที่จะบอกว่าเว็บแอปพลิเคชั่นส่วนใหญ่มีพื้นฐานมาจากกระบวนทัศน์คำขอ / การตอบสนอง PHP ไม่เคยมีสิ่งที่เป็นนามธรรมของวัตถุเหล่านี้ กลุ่มหนึ่งพยายามแก้ไขสิ่งนี้: https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md อย่างไรก็ตามพวกเขาได้รับการติดตามด้านการเปลี่ยนแปลงไม่ได้ ในอีกด้านหนึ่งวัตถุขอ / ตอบสนองโดยทั่วไปต้องการการเปลี่ยนแปลงเพียงเล็กน้อยระหว่างวงจรชีวิตของพวกเขา ในทางกลับกันวัตถุตอบสนองโดยเฉพาะอย่างยิ่งมักจะต้องการส่วนหัว HTTP ที่จะเพิ่ม นอกจากนี้ความไม่สามารถเปลี่ยนแปลงได้นั้นไม่เคยเกิดขึ้นในดินแดนของ PHP ผู้คนเห็นประโยชน์อะไรในการใช้ออบเจ็กต์คำขอ / การตอบสนองที่ไม่เปลี่ยนแปลง สมมติว่าคุณส่งคืนวัตถุ json $response = new JsonResponse($item); ดีและเรียบง่าย แต่ปรากฎว่าการร้องขอนั้นเป็นการร้องขอ Cross-Origin Resource Sharing (CORS) รหัสที่สร้างการตอบสนองไม่ควรสนใจ แต่บางแห่งดาวน์สตรีมเป็นกระบวนการที่จะเพิ่มส่วนหัวควบคุมการเข้าถึงที่จำเป็น มีข้อได้เปรียบใด ๆ ในการรักษาการตอบกลับดั้งเดิมและสร้างขึ้นใหม่ด้วยส่วนหัวเพิ่มเติมหรือไม่ หรือเป็นคำถามเกี่ยวกับสไตล์การเขียนโปรแกรมอย่างเคร่งครัด วัตถุคำขอมีความน่าสนใจขึ้นอีกเล็กน้อย มันเริ่มต้นเหมือนกัน: $request = new Request('incoming request information including uri and headers'); ไม่จำเป็นต้องเปลี่ยนข้อมูลเริ่มต้น …

1
ฉันควร subclass ข้อยกเว้นใน Python เมื่อใด
ในรหัสของฉันมีประมาณเจ็ดแห่งที่ฉันแจ้งข้อยกเว้น ข้อยกเว้นเหล่านี้ทั้งหมดจะได้รับการปฏิบัติเช่นเดียวกัน: พิมพ์ข้อผิดพลาดไปยังล็อกไฟล์คืนสถานะซอฟต์แวร์กลับเป็นค่าเริ่มต้นและออก ในระหว่างการตรวจสอบรหัสวิศวกรอาวุโสของฉันซึ่งฉันให้ความสำคัญมากบอกว่าฉันควรคลาสย่อยทั้งหมดยกเว้น เหตุผลของเขาคือในอนาคตเราอาจต้องการจัดการกับข้อยกเว้นต่างกันและจะง่ายขึ้น ข้อโต้แย้งของฉันคือตอนนี้มันจะถ่วงโค้ดของเราเท่านั้นและเนื่องจากเราไม่รู้ว่าเราจะจัดการกับข้อยกเว้นต่างกันหรือไม่เราควรปล่อยให้รหัสย่อและถ้าเมื่อเวลามาแล้วเราควรจะพิมพ์ย่อย . ฉันต้องการฟังอาร์กิวเมนต์สำหรับแต่ละกรณี

4
ทำไมตัวสร้างไพ ธ อนและฟังก์ชั่นจึงใช้คำสั่ง“ def” ร่วมกัน?
พิจารณาสิ่งต่อไปนี้: def some_function(): return 1 def some_generator(): yield 1 ในรหัสข้างต้นsome_functionเป็นฟังก์ชั่นในขณะที่some_generatorเป็นเครื่องกำเนิดไฟฟ้า พวกมันดูคล้ายกันมาก ปัญหาที่ฉันมีเมื่ออ่านโค้ดคือฉันต้องสแกนผ่านทุกบรรทัดใน "ฟังก์ชั่น" เพื่อค้นหาyieldคำหลักก่อนที่ฉันจะสามารถตรวจสอบได้ว่ามันเป็นฟังก์ชั่นหรือเครื่องกำเนิดไฟฟ้าจริง ๆ ! สำหรับฉันดูเหมือนว่าการใช้คำหลักที่แตกต่างกันสำหรับเครื่องกำเนิดไฟฟ้าจะทำให้เข้าใจได้ง่ายขึ้นเช่น: gen some_generator(): yield 1 อะไรคือข้อดีของการใช้defคำหลักสำหรับเครื่องกำเนิดไฟฟ้าและฟังก์ชั่น? ทำไมคำหลักใหม่ไม่ได้ถูกนำมาใช้กับฟังก์ชั่นและเครื่องกำเนิดไฟฟ้าแยกกัน?

1
วิธีหลีกเลี่ยงอินเตอร์เฟสแบบช่างพูด
พื้นหลัง: ฉันกำลังออกแบบแอปพลิเคชันเซิร์ฟเวอร์และสร้าง dll แยกต่างหากสำหรับระบบย่อยที่แตกต่างกัน เพื่อให้สิ่งต่าง ๆ ง่ายขึ้นสมมติว่าฉันมีระบบย่อยสองระบบ: 1) Users2)Projects ส่วนต่อประสานสาธารณะของผู้ใช้มีวิธีการดังนี้: IEnumerable<User> GetUser(int id); และส่วนต่อประสานสาธารณะของโครงการมีวิธีการดังนี้: IEnumerable<User> GetProjectUsers(int projectId); ตัวอย่างเช่นเมื่อเราต้องการแสดงผู้ใช้สำหรับโครงการบางอย่างเราสามารถเรียกGetProjectUsersและจะให้วัตถุกลับมาพร้อมข้อมูลที่เพียงพอที่จะแสดงใน DataGrid หรือคล้ายกัน ปัญหา: ตามหลักแล้วProjectsระบบย่อยไม่ควรเก็บข้อมูลผู้ใช้และควรเก็บรหัสผู้ใช้ที่เข้าร่วมในโครงการ ในการให้บริการGetProjectUsersจำเป็นต้องมีการเรียกGetUserใช้Usersระบบสำหรับแต่ละ id ผู้ใช้ที่เก็บไว้ในฐานข้อมูลของตัวเอง อย่างไรก็ตามสิ่งนี้ต้องการการGetUserเรียกที่แยกจากกันจำนวนมากทำให้เกิดคิวรี่ SQL แยกต่างหากมากมายภายในUserระบบย่อย ฉันไม่ได้ทดสอบสิ่งนี้จริงๆ แต่การมีการออกแบบช่างพูดนี้จะส่งผลกระทบต่อความสามารถในการขยายระบบ ถ้าฉันแยกระบบย่อยออกจากกันฉันสามารถเก็บข้อมูลทั้งหมดไว้ใน schema เดียวที่สามารถเข้าถึงได้โดยทั้งสองระบบและProjectsสามารถทำได้เพียงJOINเพื่อให้ผู้ใช้โครงการทั้งหมดได้รับแบบสอบถามเดียว Projectsจะต้องรู้วิธีการสร้างUserวัตถุจากผลการสืบค้นด้วย แต่นี่เป็นการแยกการแยกซึ่งมีข้อดีหลายประการ คำถาม: ทุกคนสามารถแนะนำวิธีการแยกออกจากกันในขณะที่หลีกเลี่ยงการGetUserโทรบุคคลเหล่านี้ในระหว่างGetProjectUsersหรือไม่ ตัวอย่างเช่นสิ่งหนึ่งที่ฉันคิดว่าเป็นสำหรับผู้ใช้ในการให้ความสามารถแก่ระบบภายนอกในการ "แท็ก" ผู้ใช้ที่มีคู่ค่าป้ายกำกับและเพื่อขอผู้ใช้ด้วยค่าที่แน่นอนเช่น: void AddUserTag(int userId, string tag, string value); IEnumerable<User> GetUsersByTag(string tag, …

1
กลยุทธ์การส่งเสริมการพึ่งพา: siled หรือ orchestrated
เรามีแอพพลิเคชั่นและบริการบนเว็บมากมาย (ผลิตภัณฑ์สาธารณะบางผลิตภัณฑ์, ภายในและส่วนหนึ่งของ "แบ็กเอนด์" ส่วนตัว) ที่พึ่งพาซึ่งกันและกัน แต่ละองค์ประกอบเหล่านี้มี 4 สภาพแวดล้อม (กลุ่มของเซิร์ฟเวอร์ / โหนดที่ให้บริการตามวัตถุประสงค์เฉพาะ): ที่ไม่ใช่การผลิต DEV- สภาพแวดล้อมการพัฒนาแบบบูรณาการที่ CI สร้างการเปลี่ยนแปลงแบบพุช มีประโยชน์สำหรับวิศวกรในการแก้ปัญหาข้อบกพร่องที่หายากที่ไม่สามารถทำซ้ำได้ QA - แยก QA / สภาพแวดล้อมการทดสอบ DEMO - สภาพแวดล้อมของ UAT ที่เสถียรสำหรับผู้มีส่วนได้เสีย การผลิต LIVE - สภาพแวดล้อมสด / การผลิตของเรา รหัสโปรโมชั่ไป: LOCAL(เครื่องของนักพัฒนา) => DEV=> QA=> =>DEMOLIVE บอกว่าเรามีโปรแกรมที่เรียกว่าmyappที่มีการสนับสนุนจากบริการเว็บ RESTful เรียกว่าmywsที่ตัวเองได้รับการสนับสนุนโดย DB mydbที่เรียกว่า ขณะนี้เรามีสิ่งที่ผมจะเรียกว่า " บงการ " …

3
อาร์คพิเศษในฐานข้อมูลคืออะไรและทำไมมันถึงชั่วร้าย?
ฉันอ่านข้อผิดพลาดในการออกแบบฐานข้อมูลที่พบบ่อยที่สุดโดยนักพัฒนาถามและตอบเกี่ยวกับ stackoverflow ที่คำตอบแรกมีวลีเกี่ยวกับส่วนโค้งพิเศษ: อาร์คเอกสิทธิ์เป็นข้อผิดพลาดทั่วไปที่โต๊ะถูกสร้างขึ้นโดยมีกุญแจต่างประเทศตั้งแต่สองปุ่มขึ้นไปโดยที่หนึ่งและหนึ่งในนั้นเท่านั้นที่สามารถไม่ใช่ค่าว่างได้ ความผิดพลาดครั้งใหญ่. สำหรับสิ่งหนึ่งมันกลายเป็นเรื่องยากที่จะรักษาความสมบูรณ์ของข้อมูล ท้ายที่สุดแม้จะมี Referential Integrity แต่ก็ไม่มีอะไรที่ป้องกันไม่ให้มีการตั้งค่าคีย์ต่างประเทศเหล่านี้ตั้งแต่สองตัวขึ้นไป (ข้อ จำกัด การตรวจสอบที่ซับซ้อนแม้จะมี) ฉันไม่เข้าใจจริงๆว่าเพราะเหตุใดอาร์คเอ็กซ์คลูซีฟจึงชั่วร้าย อาจเป็นเพราะฉันไม่เข้าใจพื้นฐานของมัน มีคำอธิบายที่ดีเกี่ยวกับส่วนโค้งพิเศษหรือไม่?

2
ทำไมคอมไพเลอร์ Scala ไม่สามารถให้คำเตือนการจับคู่รูปแบบสำหรับคลาส / คุณลักษณะที่ไม่ได้ปิดผนึกได้
ถ้าฉันใช้un unผนึกtraitหรือabstract classใน Scala จากนั้นใช้การจับคู่รูปแบบฉันสงสัยว่าคอมไพเลอร์ไม่ทราบเวลาที่คอมไพล์สำหรับ patternmatch นี้โดยเฉพาะการใช้งานที่เป็นไปได้ของคุณลักษณะ / คลาสนี้มีอยู่หรือไม่ ดังนั้นถ้าเป็นเช่นนั้นมันจะไม่เตือนรูปแบบการจับคู่แม้ว่าtrait/ abstract classไม่ได้ถูกปิดผนึกเพราะเขารู้ว่าสามารถใช้ประเภทใดได้โดยตรวจสอบการอ้างอิง / การนำเข้าที่เป็นไปได้ทั้งหมดหรือไม่ เช่นถ้าฉันมีOption[A]และฉันจับคู่รูปแบบเฉพาะสำหรับSome[A]แต่ไม่ได้สำหรับNoneคอมไพเลอร์จะบ่นเพราะOptionถูกปิดผนึก หากคอมไพเลอร์ไม่สามารถรู้ / แก้ปัญหานั้นทำไมเขาถึงทำไม่ได้? และถ้าคอมไพเลอร์ (ตามหลักวิชา) สามารถทำเช่นนั้นได้เหตุผลอะไรที่มันไม่ได้ใช้ใน Scala? มีภาษาอื่นที่สนับสนุนพฤติกรรมแบบนั้นหรือไม่?

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

1
Message Queue สำหรับ RTOS สำหรับไมโครคอนโทรลเลอร์
ฉันกำลังเขียน RTOS สำหรับไมโครคอนโทรลเลอร์ สิ่งทั้งหมดเขียนใน C ++ 11 - ถ้าใครสนใจและลิงค์ไปยังที่เก็บอยู่ด้านล่าง ขณะนี้ฉันกำลังเขียนคลาสที่เป็นคิวข้อมูลแบบง่ายสำหรับการส่งวัตถุระหว่างเธรด (หรือระหว่างตัวจัดการอินเตอร์รัปต์และเธรดหรือตัวจัดการอินเตอร์รัปต์และตัวจัดการอินเตอร์รัปต์อื่น) โดยปกติฉันพยายามติดตาม API ทั่วไปที่พบในโครงการอื่น ๆ แต่ฉันไม่พบตัวอย่างของคิวที่เกิดขึ้นพร้อมกันที่มีemplace()ฟังก์ชันและรองรับการหมดเวลา "ปัญหา" ทั่วไปของฉันคือฉันไม่สามารถตัดสินใจระหว่างสองอินเตอร์เฟส: ( std::chrono::duration<Rep, Period>เป็นเทมเพลตฉันละเว้นเทมเพลตสำเร็จรูปเพื่อความชัดเจน) รุ่นแรก: template<typename T> class FifoQueue { public: ... template<typename... Args> int tryEmplaceFor(std::chrono::duration<Rep, Period>, Args&&... args); int tryPopFor(T&, std::chrono::duration<Rep, Period>); int tryPushFor(const T&, std::chrono::duration<Rep, Period>); int tryPushFor(T&&, std::chrono::duration<Rep, Period>); ... …

3
ควรจัดการลิงก์พึ่งพาส่วนตัวใน setup.py อย่างไร
ที่ทำงานเราใช้เซิร์ฟเวอร์ pypi ส่วนตัว เซิร์ฟเวอร์ pypi นี้มีการระบุไว้เป็นลิงค์พึ่งพา: ... from setuptools import setup config = ConfigParser.ConfigParser() rc = os.path.join(os.path.expanduser('~'), '.pypirc') config.read(rc) dependency_links = [ 'https://{}:{}@<private_url>'.format( config.get('dc', 'username'), config.get('dc', 'password'))] setup( dependency_links=dependency_links, ...) สิ่งนี้ใช้ได้ดีในกรณีส่วนใหญ่ของเรา อย่างไรก็ตามเมื่อไม่นานมานี้เราต้องติดตั้งแพ็คเกจบนเซิร์ฟเวอร์ลูกค้า สำหรับสิ่งนี้เราต้องคัดลอกที่ถูกต้อง.pypircก่อนที่เราจะสามารถติดตั้งแพ็คเกจใด ๆ รหัสข้างต้นก็รู้สึกเหมือนแฮ็คสกปรก วิธีที่เหมาะสมในการระบุลิงค์พึ่งพาอย่างปลอดภัยโดยไม่ต้องใช้ข้อมูลประจำตัว hardcoding คืออะไร?
10 python 

2
แยกรายงานการครอบคลุมรหัสสำหรับการทดสอบหน่วยและการรวมหรือหนึ่งรายงานสำหรับทั้งสอง?
ควรมีรายงานการครอบคลุมรหัสแยกต่างหากสำหรับการทดสอบหน่วยและการรวมหรือหนึ่งรายงานการครอบคลุมรหัสสำหรับทั้งสองหรือไม่ ความคิดที่อยู่เบื้องหลังนี้คือการครอบคลุมรหัสทำให้เราสามารถมั่นใจได้ว่ารหัสของเราได้รับการครอบคลุมโดยการทดสอบเท่าที่จะทำได้ (เท่าที่เครื่องจะสามารถทำได้) การมีรายงานแยกต่างหากนั้นสะดวกกว่าสำหรับเราที่จะรู้ว่าสิ่งใดไม่ได้รับการคุ้มครองโดยการทดสอบหน่วยและสิ่งที่ไม่ได้รับการครอบคลุมจากการทดสอบการรวม แต่วิธีนี้เราไม่สามารถเห็นเปอร์เซ็นต์ความครอบคลุมโดยรวมได้

1
อุตสาหกรรมเกมใช้การทดสอบอัตโนมัติสำหรับส่วนภาพของเกม / การเรนเดอร์หรือไม่? อย่างไร?
บางส่วนของเกมนั้นง่ายต่อการทดสอบในวิธีอัตโนมัติ (ตรรกะ, คณิตศาสตร์, การจัดการอินพุต); แต่ยังมีอีกมากที่มองเห็นได้อย่างหมดจดและไม่สามารถทดสอบได้ง่าย ฉันจะแปลกใจหากอุตสาหกรรมเกมปล่อยให้การทดสอบด้วยตัวเองหมดไป มีเงินมากพอที่ฉันจะเดาได้ว่าความพยายามนั้นได้ถูกนำไปทดสอบการถดถอยอย่างน้อยที่สุดก็เป็นภาพของเกม มันเป็นเรื่องจริงเหรอ? ถ้าเป็นเช่นนั้นจะมีวิธีใดบ้างที่การทดสอบการเรนเดอร์เกมสามารถทำได้? การจับภาพเอาต์พุตและภาพเปรียบเทียบ (สิ่งนี้จะเชื่อถือได้หรือไม่?) ดักข้อมูลจากการ์ดกราฟิกในระดับต่ำหรือไม่ บันทึกข้อมูลจุดสุดยอด (ฯลฯ ) ไปยังการ์ดกราฟิกหรือไม่ ดูเหมือนว่ามีความเป็นไปได้มากมาย แต่ฉันไม่สามารถหาข้อมูลเกี่ยวกับเรื่องนี้ :( หมายเหตุ: คำถามนี้ถูกทำเครื่องหมายว่าเป็นดักฟังของคำถามนี้แต่ฉันไม่ได้ถามเกี่ยวกับเทคโนโลยี / กรอบ / เครื่องมือเฉพาะเกี่ยวกับวิธีการทำสิ่งนี้ แต่จะครอบคลุมแนวคิดเกี่ยวกับการปฏิบัตินี้และวงกว้างของอุตสาหกรรมเกมจริง (ถ้า พวกเขาทำเลย)

3
ทำความสะอาดรหัสและวัตถุไฮบริดและความอิจฉาของคุณสมบัติ
ดังนั้นฉันเพิ่งทำ refactorings สำคัญบางอย่างกับรหัสของฉัน หนึ่งในสิ่งสำคัญที่ฉันพยายามทำคือแยกชั้นเรียนออกเป็นวัตถุข้อมูลและวัตถุผู้ปฏิบัติงาน สิ่งนี้ได้รับแรงบันดาลใจเหนือสิ่งอื่นใดตามมาตราของClean Code นี้ : ผสมผสาน ความสับสนนี้บางครั้งนำไปสู่โครงสร้างข้อมูลแบบไฮบริดที่โชคร้ายนั่นคือวัตถุครึ่งหนึ่งและโครงสร้างข้อมูลครึ่งหนึ่ง พวกเขามีฟังก์ชั่นที่ทำสิ่งที่สำคัญและพวกเขายังมีตัวแปรสาธารณะหรือสาธารณะ accessors และ mutators ที่สำหรับทุก intents และวัตถุประสงค์ทำให้ตัวแปรส่วนตัวสาธารณะสาธารณะดึงดูดฟังก์ชั่นภายนอกอื่น ๆ ที่จะใช้ตัวแปรเหล่านั้นวิธีที่โปรแกรมขั้นตอนจะใช้ โครงสร้างข้อมูล. ลูกผสมดังกล่าวทำให้ยากที่จะเพิ่มฟังก์ชั่นใหม่ แต่ก็ทำให้มันยากที่จะเพิ่มโครงสร้างข้อมูลใหม่ พวกเขาเลวร้ายที่สุดของทั้งสองโลก หลีกเลี่ยงการสร้างพวกเขา พวกเขาบ่งบอกถึงการออกแบบที่ยุ่งเหยิงซึ่งผู้เขียนไม่แน่ใจหรือแย่กว่านั้นไม่รู้ว่าพวกเขาต้องการการปกป้องจากฟังก์ชั่นหรือประเภทใด เมื่อเร็ว ๆ นี้ฉันกำลังดูรหัสไปยังหนึ่งในวัตถุงานของฉัน (ที่เกิดขึ้นกับรูปแบบผู้เข้าชม ) และเห็นสิ่งนี้: @Override public void visit(MarketTrade trade) { this.data.handleTrade(trade); updateRun(trade); } private void updateRun(MarketTrade newTrade) { if(this.data.getLastAggressor() != newTrade.getAggressor()) { this.data.setRunLength(0); …

2
JVM จัดการข้อยกเว้นที่เกิดจากวิธีหลักอย่างไร
ฉันเข้าใจข้อยกเว้นขว้างพวกมันจัดการพวกมันและแพร่กระจายมันไปยังวิธีที่ต่ำกว่าใน call stack (เช่นthrows) สิ่งที่ฉันไม่เข้าใจคือ: public static void main(String[] args) throws Exception { ... } ตอนนี้ฉันคิดว่าในกรณีที่mainมีการโยนExceptionJVM จัดการ (ถูกต้อง?) หากเป็นเช่นนั้นคำถามของฉันคือ: JVM จัดการข้อยกเว้นที่ส่งออกมาmainอย่างไร มันทำอะไร?
10 java  exceptions  jvm 

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