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.mzph.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…

尤雨溪推荐神器 ni ,能替代 npm/yarn/pnpm ?简单好用!源码揭秘!

1. 前言大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12想学源码,极力推荐之前我写的《学习源码整体架构系列》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简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳。那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑。  本文将通过具体形象的例子来引入该模型&#xf…

尤大直播分享:vue3生态进展和展望

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12前言10月23日,参加了前端早早聊组织的【vue生态专场】,准备写一波分享方便大家学习。早上有4个话题:volar开发,搭建平台组件开发…

利用Python查看微信共同好友

思路 首先通过itchat这个微信个人号接口扫码登录个人微信网页版,获取可以识别好友身份的数据。这里是需要分别登录两人微信的,拿到两人各自的好友信息存到列表中。 这样一来,查共同好友就转化成了查两个列表中相同元素的问题。获取到共同好友…

女生适合学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. 前言大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12想学源码,极力推荐之前我写的《学习源码整体架构系列》jQuery、underscore、lodash、vuex、sentry、axios、redux、koa、vue-devtools、vuex4、koa-compose、…

视觉测试_视觉设计流行测验

视觉测试重点 (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 呢?其实很简单

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12源码共读群里有小伙伴聊到如何给开源项目提PR,所以今天分享这篇文章。你有给开源的库或者框架提过 PR 吗?如果没有,那么今天的文章会教你怎么…

一次回母校教前端的经历

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12已进行了三个月,很多小伙伴都表示收获颇丰。分享一篇武大毕业的耀耀大佬的文章。有些时候会受限于环境影响,特别是在校大学生。所以要融入到积极上进的环…

设计插画工具_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…

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 使用操作都在这了

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12有时候想查个命令,或者换个镜像找了几篇文章才找到,最近闲着没事干,干脆整理一篇文档,以后就不用在网上瞎搜有的还写不全。Usage…

每次启动项目的服务,电脑竟然乖乖的帮我打开了浏览器,100行源码揭秘!

1. 前言大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,已进行三个月了,大家一起交流学习,共同进步。想学源码,极力推荐之前我写的《学习源码整体架构系列》 包含jQuery、…

初级爬虫师_初级设计师的4条视觉原则

初级爬虫师重点 (Top highlight)Like many UXers, I got into the industry from a non-visual background (in my case it was Business and later on Human Cognition). Even though I found great benefits coming from those backgrounds, it also meant I had no UI/Visua…

开源监控解决方案OpenFalcon系列(一)

OpenFalcon是由小米的运维团队开源的一款企业级、高可用、可扩展的开源监控解决方案,,在众多开源爱好者的支持下,功能越来越丰富,文档更加的完善,OpenFalcon 已经成为国内最流行的监控系统之一。小米、美团、金山云、快…

如何利用 webpack 在项目中做出亮点

大家好,我是若川。最近这几年,在前端代码打包器领域内,webpack 算得上是时下最流行的前端打包工具。它可以分析各个模块的依赖关系,最终打包成我们常见的静态文件:.js 、 .css 、 .jpg 、.png,极大地提升了…

Github 王炸功能!Copilot 替代打工人编程?

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,已进行三个月了,大家一起交流学习,共同进步。大家好,我是皮汤。最近组里在讨论一个有意思的工具 Github Copilot&#xff…

ux和ui_糟糕的UI与UX番茄酱模因

ux和uiAt face value, this meme appears to be a quick and easy tool for educating the general public about what the differences are between UI and UX. You might look at the attractive glass bottle labeled “UI” and understand that UI might have to do more …