OO第二單元作業小結

總結性博客作業

?

第一次作業

(1)從多線程的協同和同步控制方面,分析和總結自己三次作業的設計策略。

?

第一次作業為單電梯傻瓜調度,可以采用生產者——消費者模型,是一個有一個生產者(標準輸入電梯請求),一個消費者(電梯),中間的托盤共享數據為請求隊列的模型。由于電梯沒有容量限制,因此生產者生產的請求可以實時加入到請求隊列中。消費者(電梯)每次從請求隊列中取出一個請求并執行。只需要保證對請求隊列的操作互斥就可以了。由于elevator的結束條件是input結束并且請求隊列為空,所以elevator需要感知input是否結束,對此采取將input線程作為elevator的一個數據成員,這樣就可以使用input.isAlive()來判斷input線程是否結束。

?

(2)基于度量來分析自己的程序結構度量類的屬性個數、方法個數、每個方法規模、每個方法的控制分支數目、類總代碼規模計算經典的OO度量畫出自己作業的類圖,并自我點評優點和缺點,要結合類圖做分析通過UML的協作圖(sequence diagram)來展示線程之間的協作關系(別忘記主線程)從設計原則檢查角度,檢查自己的設計,并按照SOLID列出所存在的問題

?

(3)分析自己程序的bug分析未通過的公測用例和被互測發現的bug:特征、問題所在的類和方法特別注意分析哪些問題與線程安全相關關聯分析bug位置與設計結構之間的相關性

第一次沒有踩到bug

?

(4)分析自己發現別人程序bug所采用的策略列出自己所采取的測試策略及有效性,并特別指出是否結合被測程序的代碼設計結構來設計測試用例分析自己采用了什么策略來發現線程安全相關的問題分析本單元的測試策略與第一單元測試策略的差異之處

第一次也沒有檢查到別人的bug

?

(5)心得體會從線程安全和設計原則兩個方面來梳理自己在本單元三次作業中獲得的心得體會

只需要對共享數據的操作進行互斥就可以了。

?

第二次作業

(1)從多線程的協同和同步控制方面,分析和總結自己三次作業的設計策略。

?

第二次作業為單電梯ALS調度,仍舊可以采用生產者——消費者模型。

與第一次作業的區別在于:

  1. 電梯到了某一層樓后,需要檢索請求隊列中所有請求,取出其中能夠被電梯捎帶的請求,并放入電梯的loader隊列里面。
  2. 第二次作業對CPU時間進行了限制,所以再采取輪詢的方式獲取請求是不行的。必須使用waitnotify方法。在請求隊列為空并且沒有輸入的時候,讓電梯線程wait,當再次有輸入的時候讓輸入線程去喚醒電梯線程,這樣做有效減少了CPU時間。
  3. inputelevator是兩個平等的對象,將input作為elevator的數據成員是不合理的,因此設置一個共享變量hasInput,初值設置為true,當hasInputtrue的時候,電梯線程就不會結束。只有當Input線程結束,由Input線程將hasInput設置為false,并且當請求隊列為空的時候,電梯線程才能結束。

?

(2)基于度量來分析自己的程序結構度量類的屬性個數、方法個數、每個方法規模、每個方法的控制分支數目、類總代碼規模計算經典的OO度量畫出自己作業的類圖,并自我點評優點和缺點,要結合類圖做分析通過UML的協作圖(sequence diagram)來展示線程之間的協作關系(別忘記主線程)從設計原則檢查角度,檢查自己的設計,并按照SOLID列出所存在的問題

?

(3)分析自己程序的bug分析未通過的公測用例和被互測發現的bug:特征、問題所在的類和方法特別注意分析哪些問題與線程安全相關關聯分析bug位置與設計結構之間的相關性

自己的bug在于elevatorrun方法少寫了一行listout,導致有些人沒有出電梯。

?

(4)分析自己發現別人程序bug所采用的策略列出自己所采取的測試策略及有效性,并特別指出是否結合被測程序的代碼設計結構來設計測試用例分析自己采用了什么策略來發現線程安全相關的問題分析本單元的測試策略與第一單元測試策略的差異之處

測試策略是自己編寫邊界數據。

?

(5)心得體會從線程安全和設計原則兩個方面來梳理自己在本單元三次作業中獲得的心得體會

從第二次作業中,我踩到一個巨坑。那就是不能notify沒有獲得鎖的線程,一旦notify沒有獲得鎖的線程,就會報錯。所以要寫成這樣:

synchronized(共享數據){

notify();

}

?

第三次作業

(1)從多線程的協同和同步控制方面,分析和總結自己三次作業的設計策略。

?

第三次作業為多電梯調度,還是采用生產者——消費者模型。

與第二次作業不同的地方在于,由于是多電梯,不光生產者與消費者對共享數據的操作要互斥,消費者與消費者之間對共享數據的操作也要互斥。

?

請求隊列采用二維Arraylist模型,只有每個一維Arraylist的第一個任務可以被電梯接受,每次電梯執行完一個請求就將它從請求隊列中移除。

?

(2)基于度量來分析自己的程序結構度量類的屬性個數、方法個數、每個方法規模、每個方法的控制分支數目、類總代碼規模計算經典的OO度量畫出自己作業的類圖,并自我點評優點和缺點,要結合類圖做分析通過UML的協作圖(sequence diagram)來展示線程之間的協作關系(別忘記主線程)從設計原則檢查角度,檢查自己的設計,并按照SOLID列出所存在的問題

?

?

(3)分析自己程序的bug分析未通過的公測用例和被互測發現的bug:特征、問題所在的類和方法特別注意分析哪些問題與線程安全相關關聯分析bug位置與設計結構之間的相關性

mainrequest進入電梯導致超載。我的架構是mainrequest獨立于請求隊列而存在,因此主請求進入時電梯人數忘了加1

?

(4)分析自己發現別人程序bug所采用的策略列出自己所采取的測試策略及有效性,并特別指出是否結合被測程序的代碼設計結構來設計測試用例分析自己采用了什么策略來發現線程安全相關的問題分析本單元的測試策略與第一單元測試策略的差異之處

測試策略是猜想哪些地方可能出錯,針對性的編寫邊界測試數據來測試自己程序,debug時采用打印中間信息的方式。

?

(5)心得體會從線程安全和設計原則兩個方面來梳理自己在本單元三次作業中獲得的心得體會

?

由于有些請求不能直達,需要拆分,而拆分的方式又有很多種,而電梯又是根據請求隊列來運行的,所以在請求得到時就要進行拆分,我這里采用了傻瓜拆分策略,先看A能否直達,再依次看BC,再看AB組合,ACBC依次檢索。這里的拆分策略就是一個可以優化的點。

多線程的bug有時候不能復現,所以一組測試數據需要多測幾次。

自己寫的測試程序的時間不一定是標準的,可以采用研討課大佬同學講的標準化時間來輸入。

轉載于:https://www.cnblogs.com/Luocx/p/10755477.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275276.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275276.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275276.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dribbble加速vpn_關于Dribbble設計的幾點思考

dribbble加速vpn重點 (Top highlight)I’d like to start with the following quote from Paul Adam’s “The Dribbbilisation of Design,” a powerful read that examines the superficiality of modern product design portfolios, often containing Dribbble posts that l…

JS Compress and Decompress

<html><head><title>JavaScript字符串之壓縮與還原</title><meta http-equiv"Content-Type"content"text/html; charsetutf-8"/><script type"text/javascript"><!--/** * 壓縮 */functionCompress(strN…

尤雨溪推薦神器 ni ,能替代 npm/yarn/pnpm ?簡單好用!源碼揭秘!

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12想學源碼&#xff0c;極力推薦之前我寫的《學習源碼整體架構系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

如何了解自己的認知偏差_了解吸引力偏差

如何了解自己的認知偏差Let me introduce you the attractiveness bias theory known as cognitive bias.讓我向您介紹稱為認知偏差的吸引力偏差理論。 Think about a person with outstanding fashion. It will draw our attention, and maybe encourage us to interact with…

隱馬爾可夫模型(HMM)及Viterbi算法

HMM簡介 對于算法愛好者來說&#xff0c;隱馬爾可夫模型的大名那是如雷貫耳。那么&#xff0c;這個模型到底長什么樣&#xff1f;具體的原理又是什么呢&#xff1f;有什么具體的應用場景呢&#xff1f;本文將會解答這些疑惑。  本文將通過具體形象的例子來引入該模型&#xf…

尤大直播分享:vue3生態進展和展望

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12前言10月23日&#xff0c;參加了前端早早聊組織的【vue生態專場】&#xff0c;準備寫一波分享方便大家學習。早上有4個話題&#xff1a;volar開發&#xff0c;搭建平臺組件開發…

利用Python查看微信共同好友

思路 首先通過itchat這個微信個人號接口掃碼登錄個人微信網頁版&#xff0c;獲取可以識別好友身份的數據。這里是需要分別登錄兩人微信的&#xff0c;拿到兩人各自的好友信息存到列表中。 這樣一來&#xff0c;查共同好友就轉化成了查兩個列表中相同元素的問題。獲取到共同好友…

女生適合學ux嗎_UX設計色彩心理學,理論與可訪問性

女生適合學ux嗎Colour is an interesting topic, which I feel is often overlooked and sometimes under-appreciated. One of the first things I was taught was the power of colour, how it can have an impact on human emotion, and that there should be purpose behin…

初學者也能看懂的 Vue2 源碼中那些實用的基礎工具函數

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12想學源碼&#xff0c;極力推薦之前我寫的《學習源碼整體架構系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

清除浮動mini版

1&#xff09; 清除浮動mini版(簡約而不簡單).clr:after { content:"";display:table;clear:both;}.clr{zoom:1;} 轉載于:https://www.cnblogs.com/jinbiao/archive/2011/09/26/2191170.html

Fiddler 十分鐘最全使用介紹

Wireshark 、HTTPWatch、Fiddler的介紹 Firebug雖然可以抓包&#xff0c;但是對于分析http請求的詳細信息&#xff0c;不夠強大。模擬http請求的功能也不夠&#xff0c;且firebug常常是需要“無刷新修改”&#xff0c;如果刷新了頁面&#xff0c;所有的修改都不會保存。Wiresha…

視覺測試_視覺設計流行測驗

視覺測試重點 (Top highlight)I often discuss the topic of improving visual design skills with junior and mid-level designers. While there are a number of design principles the designers should learn and practice, one important skill that is not often consid…

如何給開源項目提過 PR 呢?其實很簡單

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12源碼共讀群里有小伙伴聊到如何給開源項目提PR&#xff0c;所以今天分享這篇文章。你有給開源的庫或者框架提過 PR 嗎&#xff1f;如果沒有&#xff0c;那么今天的文章會教你怎么…

一次回母校教前端的經歷

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12已進行了三個月&#xff0c;很多小伙伴都表示收獲頗豐。分享一篇武大畢業的耀耀大佬的文章。有些時候會受限于環境影響&#xff0c;特別是在校大學生。所以要融入到積極上進的環…

設計插畫工具_5個強大的設計師插畫工具

設計插畫工具As Product Designers, most likely, we have come across illustrative work. Visual design is one important element in enhancing the user experience. As many gravitate toward attractive looking products, designers are also adapting to the changing…

如何才能更合理地分配項目獎金?

項目獎金通常情況下都是屬于基本工資之外的一種績效獎勵&#xff0c;也就是說&#xff0c;它在員工的薪酬中&#xff0c;是屬于浮動的那一部分收入&#xff0c;而不是一種固定收入。基于這樣一種認知&#xff0c;跟大家討論下如何才能更合理地進行項目獎金的分配&#xff1f; 首…

Codeforces 741 D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 思路&#xff1a; 樹上啟發式合并 從根節點出發到每個位置的每個字符的奇偶性記為每個位置的狀態&#xff0c;每次統計一下每個狀態的最大深度 為了保證鏈經過當前節點u&#xff0c;我們先計算每個子樹的答案…

figma下載_切換到Figma并在其中工作不必是火箭科學,這就是為什么

figma下載We have seen Elon Musk and SpaceX making Rocket Science look like a child’s play. In the same spirit, should design tools be rocket science that is too hard to master? Not at all.我們已經看到埃隆馬斯克(Elon Musk)和SpaceX使Rocket Science看起來像是…

npm、yarn、cnpm、pnpm 使用操作都在這了

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12有時候想查個命令&#xff0c;或者換個鏡像找了幾篇文章才找到&#xff0c;最近閑著沒事干&#xff0c;干脆整理一篇文檔&#xff0c;以后就不用在網上瞎搜有的還寫不全。Usage…

CAN控制器的選擇

在進行CAN總線開發前&#xff0c;首先要選擇好CAN總線控制器。下面就比較一些控制器的特點。 一些主要的CAN總線器件產品 制造商 產品型號 器件功能及特點 Intel 82526 82527 8XC196CA/CB CAN通信控制器&#xff0c;符合CAN2.0A CAN通信控制器&#xff0c;符合CAN2.0B 擴展…