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

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

6
ทำให้การค้นหารหัสโดยใช้รหัสข้อความที่ไม่ซ้ำกันทั่วโลก
รูปแบบทั่วไปสำหรับการค้นหาจุดบกพร่องตามสคริปต์นี้: สังเกตความแปลกประหลาดเช่นไม่มีเอาต์พุตหรือโปรแกรมหยุดทำงาน ค้นหาข้อความที่เกี่ยวข้องในบันทึกหรือผลลัพธ์ของโปรแกรมเช่น "ไม่พบ Foo" (ข้อมูลต่อไปนี้เกี่ยวข้องเฉพาะในกรณีที่เป็นเส้นทางที่ใช้ในการค้นหาจุดบกพร่องหากการติดตามสแต็กหรือข้อมูลการดีบักอื่น ๆ พร้อมใช้งานนั่นเป็นอีกเรื่องหนึ่ง) ค้นหารหัสที่ข้อความถูกพิมพ์ ตรวจแก้จุดบกพร่องรหัสระหว่างสถานที่แรกที่ Foo ป้อน (หรือควรป้อน) รูปภาพและที่พิมพ์ข้อความ ขั้นตอนที่สามนั้นเป็นขั้นตอนที่กระบวนการดีบั๊กมักจะหยุดชะงักเนื่องจากมีหลายสถานที่ในรหัสที่พิมพ์ "ไม่พบ Foo" (หรือสตริงเทมเพลตCould not find {name}) ในความเป็นจริงการสะกดผิดหลายครั้งช่วยให้ฉันค้นหาตำแหน่งจริงได้เร็วกว่าที่ฉันคาดไว้ - ทำให้ข้อความที่ไม่ซ้ำกันในทั้งระบบและบ่อยครั้งทั่วโลกส่งผลให้เครื่องมือค้นหาที่เกี่ยวข้องเข้าชมทันที ข้อสรุปที่ชัดเจนจากสิ่งนี้คือเราควรใช้รหัสข้อความที่ไม่ซ้ำกันทั่วโลกในรหัสการเข้ารหัสอย่างหนักเป็นส่วนหนึ่งของสตริงข้อความและอาจตรวจสอบว่ามีการเกิดขึ้นเพียงครั้งเดียวของแต่ละ ID ในฐานรหัส ในแง่ของการบำรุงรักษาชุมชนนี้คิดว่าอะไรคือข้อดีและข้อเสียที่สำคัญที่สุดของวิธีการนี้และคุณจะใช้งานวิธีนี้อย่างไรหรือจะทำให้แน่ใจได้อย่างไรว่าการดำเนินการนั้นไม่จำเป็นเลย (สมมติว่าซอฟต์แวร์

8
การแปลงคำสั่ง IF
ดังนั้นฉันจึงเขียนโปรแกรมมาหลายปีแล้วและเพิ่งเริ่มใช้ ReSharper มากขึ้น สิ่งหนึ่งที่ ReSharper แนะนำให้ฉันเสมอคือ "กลับด้าน" ถ้า "คำสั่งเพื่อลดการซ้อน" สมมติว่าฉันมีรหัสนี้: foreach (someObject in someObjectList) { if(someObject != null) { someOtherObject = someObject.SomeProperty; } } และ ReSharper จะแนะนำให้ฉันทำสิ่งนี้: foreach (someObject in someObjectList) { if(someObject == null) continue; someOtherObject = someObject.SomeProperty; } ดูเหมือนว่า ReSharper จะแนะนำให้ฉันย้อนกลับ IFs ไม่ว่าจะทำรังมากแค่ไหนก็ตาม ปัญหานี้คือฉันชอบทำรังในสถานการณ์อย่างน้อยบางครั้ง สำหรับฉันนั้นดูเหมือนง่ายต่อการอ่านและเข้าใจว่าเกิดอะไรขึ้นในบางสถานที่ นี่ไม่ใช่กรณีเสมอไป แต่ฉันรู้สึกสะดวกสบายในการทำรังในบางครั้ง คำถามของฉันคือ: …

3
เหตุใดฉันจึงควรใช้“ การทำงานตามหน้าที่” แทนการวนซ้ำ
for (Canvas canvas : list) { } NetBeans แนะนำให้ฉันใช้ "การทำงานตามหน้าที่": list.stream().forEach((canvas) -> { }); แต่นี่คือเหตุผลที่แนะนำ ? ถ้ามีอะไรมันยากที่จะอ่านและเข้าใจ คุณโทรstream()แล้วใช้การแสดงออกแลมบ์ดากับพารามิเตอร์forEach() canvasฉันไม่เห็นว่าเป็นอย่างไรดีกว่าforลูปในตัวอย่างแรก เห็นได้ชัดว่าฉันกำลังพูดถึงสุนทรียภาพเท่านั้น อาจมีข้อได้เปรียบทางเทคนิคที่นี่ที่ฉันหายไป มันคืออะไร? เหตุใดฉันจึงควรใช้วิธีที่สองแทน

7
การแปลข้อมูลภายนอกเป็นภาษาที่คุณกำลังตั้งโปรแกรม
ฉันไม่แน่ใจว่าจะทำอย่างไรกับสิ่งต่อไปนี้: เราใช้ข้อมูลจากเครื่องมือภายนอกภายในเครื่องมือของเราเอง ข้อมูลนี้เขียนเป็นภาษาดัตช์ เรากำลังเขียนโค้ด Java ของเราเป็นภาษาอังกฤษ เราควรแปลภาษาดัตช์นี้เป็นภาษาอังกฤษหรือแปลเป็นภาษาดัตช์ ตัวอย่างเช่นเรามี 2 แผนกคือ Bouw (ก่อสร้างเป็นภาษาอังกฤษ) และ Onderhoud (บำรุงรักษาเป็นภาษาอังกฤษ) มันจะเป็นตรรกะในการสร้าง: public enum Department { BOUW, ONDERHOUD } หรือ: public enum Department { CONSTRUCTION, MAINTENANCE } หรือแม้กระทั่ง: public enum Afdeling { BOUW, ONDERHOUD } (ผู้ที่สนใจคือแผนกในภาษาดัตช์)
39 naming  translate 

13
การใช้พารามิเตอร์บูลีนผิดพลาดหรือไม่
ตามที่มันเป็นความผิดที่จะใช้พารามิเตอร์แบบบูลเพื่อตรวจสอบพฤติกรรม? ฉันรู้ถึงความสำคัญของการหลีกเลี่ยงการใช้พารามิเตอร์บูลีนเพื่อกำหนดพฤติกรรมเช่น: รุ่นเดิม public void setState(boolean flag){ if(flag){ a(); }else{ b(); } c(); } เวอร์ชั่นใหม่: public void setStateTrue(){ a(); c(); } public void setStateFalse(){ b(); c(); } แต่วิธีการเกี่ยวกับกรณีที่พารามิเตอร์บูลีนจะใช้ในการกำหนดค่าแทนพฤติกรรม? เช่น: public void setHint(boolean isHintOn){ this.layer1.visible=isHintOn; this.layer2.visible=!isHintOn; this.layer3.visible=isHintOn; } ฉันกำลังพยายามกำจัดการตั้งค่าสถานะ isHintOn และสร้าง 2 ฟังก์ชันที่แยกกัน: public void setHintOn(){ this.layer1.visible=true; this.layer2.visible=false; this.layer3.visible=true; } public …

6
สตริง Hardcoding ที่จะไม่มีวันเปลี่ยนแปลง
ดังนั้นในความพยายามของฉันในการเขียนโปรแกรมเพื่อผันคำกริยา (อัลกอริทึมไม่ใช่ผ่านชุดข้อมูล) สำหรับภาษาฝรั่งเศสฉันเจอปัญหาเล็กน้อย อัลกอริธึมที่จะผันคำกริยานั้นง่ายมากสำหรับกรณีของคำกริยา 17- หรือ - และในรูปแบบเฉพาะสำหรับแต่ละกรณี; ดังนั้นการผันคำต่อท้ายสำหรับ 17 ชั้นเรียนเหล่านี้เป็นแบบคงที่และจะ (ไม่น่าจะ) เปลี่ยนแปลงเร็ว ๆ นี้ ตัวอย่างเช่น: // Verbs #1 : (model: "chanter") terminations = { ind_imp: ["ais", "ais", "ait", "ions", "iez", "aient"], ind_pre: ["e", "es", "e", "ons", "ez", "ent"], ind_fut: ["erai", "eras", "era", "erons", "erez", "eront"], participle: ["é", "ant"] }; …
39 design  strings 

3
ทำไมหลามจึงไม่มีฟังก์ชั่น“ เรียบ” สำหรับรายการ?
Erlang และ Ruby ทั้งสองมาพร้อมกับฟังก์ชั่นสำหรับอาร์เรย์ที่แบนราบ ดูเหมือนว่าเป็นเครื่องมือที่ง่ายและมีประโยชน์ในการเพิ่มภาษา เราสามารถทำได้: >>> mess = [[1, [2]], 3, [[[4, 5]], 6]] >>> mess.flatten() [1, 2, 3, 4, 5, 6] หรือแม้กระทั่ง: >>> import itertools >>> mess = [[1, [2]], 3, [[[4, 5]], 6]] >>> list(itertools.flatten(mess)) [1, 2, 3, 4, 5, 6] ใน Python ผู้ใช้จะต้องพบกับปัญหาในการเขียนฟังก์ชั่นเพื่อให้อาร์เรย์เรียบตั้งแต่เริ่มต้น เรื่องนี้ดูจะโง่สำหรับฉัน มันเหมือนกับการต้องเขียนฟังก์ชั่นที่กำหนดเองเพื่อเชื่อมสองอาร์เรย์ ฉันได้ …

12
เหตุใดภาษาการเขียนโปรแกรมส่วนใหญ่จึงมีคำหลักหรือไวยากรณ์พิเศษสำหรับการประกาศฟังก์ชั่น [ปิด]
ภาษาโปรแกรมส่วนใหญ่ (ทั้งภาษาแบบไดนามิกและแบบคงที่) มีคำหลักพิเศษและ / หรือไวยากรณ์ที่มีลักษณะแตกต่างจากการประกาศตัวแปรสำหรับฟังก์ชั่นการประกาศ ฉันเห็นฟังก์ชั่นเช่นเดียวกับการประกาศเอนทิตีที่มีชื่ออื่น: ตัวอย่างเช่นใน Python: x = 2 y = addOne(x) def addOne(number): return number + 1 ทำไมจะไม่ล่ะ: x = 2 y = addOne(x) addOne = (number) => return number + 1 ในทำนองเดียวกันในภาษาเช่น Java: int x = 2; int y = addOne(x); int addOne(int x) { return …

5
ปัญหาเกี่ยวกับการหลีกเลี่ยงการเรียนการตั้งชื่อ Smurf กับ namespaces
ฉันดึงคำว่า smurf ตั้งชื่อจากที่นี่ (หมายเลข 21) ในการบันทึกทุกคนที่ไม่คุ้นเคยปัญหาที่ Smurf การตั้งชื่อคือการกระทำของ prefixing พวงของการเรียนที่เกี่ยวข้องกับตัวแปรอื่น ๆ ที่มีคำนำหน้าร่วมกันเพื่อให้คุณจบลงด้วยการที่ " SmurfAccountViewผ่านSmurfAccountDTOไปSmurfAccountController" ฯลฯ วิธีแก้ปัญหาที่ฉันเคยได้ยินโดยทั่วไปคือการสร้าง smurf namespace และวางคำนำหน้า smurf โดยทั่วไปฉันใช้งานได้ดี แต่ฉันพบปัญหาสองอย่าง ฉันทำงานกับห้องสมุดที่มีConfigurationชั้นเรียน มันอาจจะได้รับการเรียกWartmongerConfigurationแต่ก็ใน namespace Wartmonger Configurationจึงเรียกว่าเพียงแค่ ฉันก็มีConfigurationคลาสที่สามารถเรียกSmurfConfigurationได้ แต่มันอยู่ในเนมสเปซ Smurf เพื่อที่จะซ้ำซ้อน มีสถานที่ในรหัสของฉันที่Smurf.Configurationปรากฏอยู่ด้านข้างWartmonger.Configurationและพิมพ์ชื่อที่ผ่านการรับรองครบถ้วนแล้วเป็น clunky และทำให้โค้ดอ่านน้อยลง มันจะดีกว่าที่จะจัดการกับSmurfConfigurationและ WartmongerConfiguration(ถ้ามันเป็นรหัสและไม่ห้องสมุดของฉัน) ฉันมีคลาสที่เรียกว่าServiceในเนมสเปซ Smurf ซึ่งอาจเรียกได้ว่าSmurfServiceเป็น Serviceเป็นส่วนหน้าของห้องสมุด Smurf ที่ซับซ้อนซึ่งดำเนินงาน Smurf SmurfServiceดูเหมือนชื่อที่ดีกว่าเพราะServiceไม่มีคำนำหน้า Smurf เป็นเรื่องธรรมดาอย่างไม่น่าเชื่อ ฉันยอมรับได้ว่าSmurfServiceชื่อสามัญไร้ประโยชน์อยู่แล้วและการกำจัด smurf ทำให้สิ่งนี้ชัดเจนยิ่งขึ้น แต่มันจะได้รับการตั้งชื่อRunner, …

12
เอกสารใน OOP ควรหลีกเลี่ยงการระบุว่า“ ผู้ได้รับ” ทำการคำนวณใด ๆ หรือไม่?
โปรแกรม CS ของโรงเรียนของฉันหลีกเลี่ยงการกล่าวถึงการเขียนโปรแกรมเชิงวัตถุดังนั้นฉันจึงต้องอ่านด้วยตัวเองเพื่อเสริม - โดยเฉพาะการสร้างซอฟต์แวร์เชิงวัตถุโดย Bertrand Meyer เมเยอร์ชี้ให้เห็นซ้ำ ๆ ว่าคลาสควรซ่อนข้อมูลเกี่ยวกับการนำไปปฏิบัติให้มากที่สุดเท่าที่จะทำได้ โดยเฉพาะเขาให้เหตุผลซ้ำ ๆ ว่าแอตทริบิวต์ (เช่นคุณสมบัติแบบคงที่และไม่คำนวณของคลาส) และรูทีน (คุณสมบัติของคลาสที่สอดคล้องกับการเรียกใช้ฟังก์ชัน / โพรซีเดอร์) ไม่สามารถแยกกันได้ ตัวอย่างเช่นถ้าคลาสPersonมีคุณสมบัติageเขายืนยันว่ามันเป็นไปไม่ได้ที่จะบอกจากสัญลักษณ์ไม่ว่าจะPerson.ageสอดคล้องภายในกับสิ่งที่ชอบreturn current_year - self.birth_dateหรือเรียบง่ายreturn self.ageที่self.ageได้รับการกำหนดเป็นแอตทริบิวต์คงที่ เรื่องนี้ทำให้รู้สึกถึงฉัน อย่างไรก็ตามเขายังคงเรียกร้องต่อไปนี้: เอกสารไคลเอนต์มาตรฐานสำหรับคลาสที่เรียกว่ารูปแบบสั้น ๆ ของคลาสจะถูกคิดขึ้นใหม่เพื่อไม่ให้เปิดเผยว่าคุณลักษณะที่กำหนดเป็นคุณลักษณะหรือฟังก์ชัน (ในกรณีที่อาจเป็นได้) กล่าวคือเขาอ้างว่าแม้แต่เอกสารสำหรับชั้นเรียนควรหลีกเลี่ยงการระบุว่า "ผู้เอา" ทำการคำนวณใด ๆ นี่ฉันไม่ทำตาม เอกสารไม่ใช่ที่เดียวที่ควรแจ้งให้ผู้ใช้ทราบถึงความแตกต่างนี้หรือไม่ ถ้าฉันต้องออกแบบฐานข้อมูลที่เต็มไปด้วยPersonวัตถุมันจะไม่สำคัญที่จะรู้ว่าPerson.ageการโทรที่มีราคาแพงหรือไม่ดังนั้นฉันจึงสามารถตัดสินใจได้ว่าจะใช้แคชบางประเภทหรือไม่ ฉันเข้าใจผิดในสิ่งที่เขาพูดหรือเขาเป็นเพียงตัวอย่างที่ยอดเยี่ยมที่สุดของปรัชญาการออกแบบ OOP หรือไม่?

3
วิธีการฝึกอบรมโปรแกรมเมอร์รุ่นเยาว์สำหรับสภาพแวดล้อมบนเว็บในปัจจุบัน (ซับซ้อน)?
ปัจจุบัน บริษัท ของเราพัฒนาแอพพลิเคชั่นที่ประกอบด้วยเวลาส่วนใหญ่ใน Ruby on Rails เว็บเซิร์ฟเวอร์และไคลเอนต์ REST ที่แตกต่างกันตั้งแต่ระบบ kiosk ใน Java ไปจนถึงอุปกรณ์ฝังตัวใน C / C ++ (นอกเหนือจากอินเตอร์เฟสสำหรับเว็บเบราว์เซอร์มาตรฐาน) เราจำเป็นต้องขยายทีมของเราและเมื่อล้มเหลวในการหาโปรแกรมเมอร์อาวุโสที่ดีเราตัดสินใจที่จะใช้ความพยายามในการฝึกอบรมโปรแกรมเมอร์อาวุโสที่จะเติบโตไปด้วยกันกับ บริษัท เราได้มอบหนังสือ Ruby และ Rails ให้พวกเขาแล้วและขอให้พวกเขาสร้างโปรแกรมของเล่นบางส่วน แต่ตอนนี้ฉันรู้แล้วว่าเส้นโค้งการเรียนรู้ที่สูงชันสำหรับสถานะของการเขียนโปรแกรมเว็บในปัจจุบันเป็นอย่างไร เมื่อฉันเริ่มเขียนโปรแกรม 15 ปีที่แล้วฉันใช้เฉพาะ Delphi และ Source Safe และสามารถผลิตซอฟต์แวร์ที่ใช้ได้ตั้งแต่ต้น ทั้งสองเป็นเครื่องมือง่าย ๆ และง่ายต่อการเจาะลึกถึงผลงานภายในของสิ่งแวดล้อม ช้าฉันเริ่มใช้เฟรมเวิร์กของบุคคลที่สามได้เปลี่ยนเป็น CVS, SVN และ Git ในที่สุดได้เรียนรู้สิ่งต่าง ๆ ที่ทำให้เว็บของวันนี้เช่น HTTP, JavaScript, CSS, REST และอื่น …

13
ในภาษาที่ไม่อนุญาตขีดล่างในค่าคงที่จำนวนเต็มเป็นวิธีปฏิบัติที่ดีในการสร้างค่าคงที่ 1 พันล้านหรือไม่
ในภาษาที่ไม่อนุญาตขีดล่างเป็นตัวอักษรจำนวนเต็มคุณควรสร้างค่าคงที่ 1 พันล้านหรือไม่ เช่นใน C ++: size_t ONE_BILLION = 1000000000; แน่นอนว่าเราไม่ควรสร้างค่าคงที่สำหรับตัวเลขขนาดเล็กเช่น 100 แต่ด้วยค่าศูนย์ 9 มันเป็นเรื่องง่ายที่จะละทิ้งศูนย์หรือเพิ่มรหัสพิเศษในโค้ดดังนี้: tv_sec = timeInNanosec / 1000000000; tv_nsec = timeInNanosec % 1000000000;

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

6
ความแตกต่างระหว่างการพัฒนาและการวิจัยและพัฒนาคืออะไร?
ฉันถูกเพื่อนร่วมงานขอให้อธิบายอย่างชัดเจนถึงความแตกต่างระหว่างการพัฒนาปกติกับการวิจัยและการพัฒนา (R & D) และไม่สามารถทำได้ หลังจากอ่าน Wikipedia ฉันยังไม่มีคำตอบที่ชัดเจน ตามที่Wikipedia (แก้ไขเล็กน้อย): มีสองรุ่นหลักคือ: หนึ่งในรูปแบบฟังก์ชั่นหลักคือการพัฒนาผลิตภัณฑ์ใหม่ ; ในรูปแบบอื่น ๆ หน้าที่หลักคือการค้นพบและสร้างความรู้ใหม่เกี่ยวกับหัวข้อทางวิทยาศาสตร์และเทคโนโลยีเพื่อจุดประสงค์ในการเปิดเผยและเปิดใช้งานการพัฒนาผลิตภัณฑ์กระบวนการและบริการใหม่ที่มีคุณค่า รุ่นแรกกำลังสับสน มันหมายความว่าการพัฒนา (ไม่ใช่การวิจัยและพัฒนา) ประกอบด้วยการเพิ่มคุณสมบัติใหม่ให้กับผลิตภัณฑ์การแก้จุดบกพร่องและทำการบำรุงรักษาหรือไม่? จะเกิดอะไรขึ้นถ้าสิ่งที่เคยพัฒนาเป็นคุณสมบัติใหม่มาก่อนจะกลายเป็นผลิตภัณฑ์ที่แยกต่างหาก รุ่นที่สองมีความสับสนน้อยกว่า แต่ยังคงวิธีการที่จะมีคุณสมบัติว่าสิ่งที่เป็นความรู้ใหม่หรือความรู้ที่มีอยู่ซึ่งเพิ่งค้นพบ? ต่อมา Wikipedia เสริมว่าการพัฒนาตามปกตินั้นแตกต่างจากการวิจัยและพัฒนาเพราะ: เกือบจะทันทีกำไรหรือปรับปรุงทันที มันยังไม่ชัดเจนเพียงพอ จะมีคุณสมบัติอย่างไร "เกือบจะได้กำไรทันที"? เกิดอะไรขึ้นถ้างานมีผลกำไรทันที แต่ต้องวิจัยหนัก หรือถ้ามันเป็นพื้นฐาน แต่มีกำไรที่ไม่แน่นอนเช่นการบังคับใช้สไตล์สามัญเหนือ codebase? ตัวอย่างเช่นมันเป็นของการพัฒนาหรือการวิจัยและพัฒนาเพื่อ: พัฒนาเครื่องมือที่สรุปการเข้าถึงฐานข้อมูลลดความซับซ้อนของรหัสแอปพลิเคชันอื่น ๆ (ที่มีอยู่หรือที่จะเขียนในอนาคต) ซึ่งควรจะเข้าถึงฐานข้อมูลหรือไม่ สร้างสถาปัตยกรรมที่มุ่งเน้นบริการใหม่สำหรับองค์กรทั้งหมดของทรัพยากรของ บริษัท เพื่อย้ายจากแอปพลิเคชันที่แยกจากกันและเป็นอิสระไปเป็นชุดของเว็บเซอร์วิสที่มีการจัดระเบียบและเชื่อมโยงถึงกันอย่างดี ออกแบบโปรโตคอลการสื่อสารใหม่เพื่อให้สามารถจำลองข้อมูลได้เร็วขึ้นระหว่างศูนย์ข้อมูลสองแห่งของ บริษัท คิดการทดสอบซอฟต์แวร์รูปแบบใหม่ขณะที่ทำงานกับผลิตภัณฑ์เฉพาะโดยรู้ว่าการทดสอบประเภทนี้จะปรับปรุง / ทำให้กระบวนการทดสอบง่ายขึ้น? พิสูจน์ว่าการตั้งโปรแกรมฟังก์ชั่นเหมาะสมกว่า OOP …

4
เก็บค่า Null ไว้ที่ไหนหรือเก็บไว้ที่ไหน?
ฉันต้องการเรียนรู้เกี่ยวกับค่า Null หรือการอ้างอิง Null ตัวอย่างเช่นฉันมีคลาสที่เรียกว่า Apple และฉันสร้างอินสแตนซ์ของมัน Apple myApple = new Apple("yummy"); // The data is stored in memory จากนั้นฉันกินแอปเปิ้ลนั้นและตอนนี้มันต้องเป็นโมฆะดังนั้นฉันตั้งมันเป็นโมฆะ myApple = null; หลังจากสายนี้ฉันลืมว่าฉันกินมันและตอนนี้ต้องการตรวจสอบ bool isEaten = (myApple == null); ด้วยการโทรนี้การอ้างอิง myApple อยู่ที่ไหน เป็นค่าตัวชี้พิเศษหรือไม่ ถ้าเป็นเช่นนั้นถ้าฉันมีวัตถุ 1,000 NULL พวกเขาครอบครองพื้นที่หน่วยความจำวัตถุ 1,000 หรือ 1,000 พื้นที่หน่วยความจำ int ถ้าเราคิดว่าประเภทตัวชี้เป็น int?
39 memory  null 

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