OO第二单元的总结
三周复三周,一轮又一轮,我似乎已经将OO是为我的生活必须品了。在与同学吐槽者身负-3楼与20楼重任的A电梯君,以及我们都是上一层下两层不用电梯的五号青年的等等欢声笑语中结束了第二轮的OO作业。当然这次也是收获颇丰,我通过电梯了解了线程的工作原理,认识到了线程安全的重要性,下面我将对自己 的三次作业进行一下总结。
一、基于度量的程序结构分析
作业一
(1)总结
第一次电梯还是比较简单的,所以我采用生产者消费者模式就很容易的解决了。
(2)耦合度
可以看出电梯线程还是承担了太多的事情,不易维护。
第二次
(1)结构
第二次作业我依然采用两个线程的方法,输入进来以后便在调度器里维护两个有序队列,分别是上楼队列和下楼对列,当电梯为空时,就选取一个request当做主请求,之后每一层都要判断是否可以进行捎带,当主请求完成以后如果电梯里还有其他乘客,就要更新主请求,如此循环。
(2)耦合度
可以看出第一次的问题第二次依然存在。
第三次
(1)结构
第三次我在电梯方面没有太大改动,知识增加了人数的限制,我是从乘客的属性来下手,我采用了如下的一个四元组
这个四元组可以记录下这个乘客现在可以上那部电梯,是否需要下电梯换乘,换乘的话要去几楼换乘,采用这种方法可以轻松的解决换乘问题而不用修改电梯属性。
(2)耦合度
由于这次在调度器中做了大量操作,就使得controller线程十分臃肿,难以验证其全面性。
二、bug分析
此次作业的发现bug的难度与策略都与之前的作业不是一个级别的。
其实,这次作业只要肯花时间去对自己的程序进行大量测试集的覆盖测试就能找出大部分的bug。
这次的bug大致分为两类,就是线程问题,和乘客边界问题。线程问题只要没有暴力轮询就不会产生可复现的问题,而乘客边界问题只要测试集做的充分覆盖就可以保证没有问题。
而寻找bug时也是采用数据集的大规模测试法。
三、心得体会
电梯问题可以说是我对线程的初了解,使用线程可以大大增加程序的执行效率。但是毕竟我是第一次接触线程,很多安全类的事情都没有很好的理解,但是经过三周的训练,我已经有了基本的理解,当然这只是起步,再接下来的学习中肯定也少不了线程的身影,我还需要继续加强自己的面向对象功底。
OO第二单元的总结的更多相关文章
- oo第二单元作业总结
oo第二单元博客总结 在第一单元求导结束后,迎来了第二单元的多线程电梯的问题,在本单元前两次作业中个人主要应用两个线程,采用“生产者-消费者”模式和共享数据变量的方式解决问题.在第三次作业中加入多个电 ...
- OO第二单元优化博客
OO第二单元优化博客 第五次作业没有性能分,但是,我在这一单元的宗旨就是写一个日常生活中 最常见的那种电梯,所以第五次我没有写傻瓜电梯,而是直接写了个\(look\),和第六次基本相同. 总计一下lo ...
- 【OO学习】OO第二单元作业总结
OO第二单元作业总结 在第二单元作业中,我们通过多线程的手段实现了电梯调度,前两次作业是单电梯调度,第三次作业是多电梯调度.这个单元中的性能分要求是完成所有请求的时间最短,因此在简单实现电梯调度的基础 ...
- OO第二单元小结
OO第二单元小结 一.三次作业代码分析. 1.第一次作业 第一次作业是单部电梯的傻瓜调度,由于其过分傻瓜,所以第一次作业我只有两个类,一个main,一个电梯,main类负责不断从输入流中读取命令,如果 ...
- OO第二单元多线程电梯总结
OO第二单元多线程电梯总结 第一次作业 设计思路 Input为输入线程,负责不断读取请求并将读到的请求放入调度器中. Dispatcher为调度器,是Input线程和Elevator线程的共享对象,采 ...
- 电梯也能无为而治——oo第二单元作业总结
oo第二单元作业总结 一.设计策略与质量分析 第一次作业 设计策略 在第一次作业之前,我首先确定了生产者--消费者模式的大体架构,即由输入线程(可与主线程合并)充当生产者,电梯线程充当消费者,二者不直 ...
- 2020北航OO第二单元总结
2020北航OO第二单元总结 前言 本单元考察基于多线程的电梯调度问题,成功让我从一个多线程小白到了基本掌握了使用锁来控制线程安全的能力,收获颇多(充分体验了迷茫地de一个又一个死锁bug的痛苦). ...
- OO第二单元——多线程(电梯)
OO第二单元--多线程(电梯) 综述 第二单元的三次联系作业都写电梯,要求逐步提高,对于多线程的掌握也进一步加深.本次作业全部都给出了输入输出文件,也就避免了正则表达式判断输入输出是否合法的问题. 第 ...
- OO第二单元作业总结【自我反思与审视】
第二单元作业的完成史,就是一部心酸的血泪史…… 多线程的出现为我(们)打开一片广阔的天地,我也在这方天地摸爬滚打,不断成长!如果说第一单元之前还对Java语法有所了解的话,那么这单元学习多线程则完全是 ...
- OO第二单元(电梯)单元总结
OO第一单元(求导)单元总结 这是我们OO课程的第二个单元,这个单元的主要目的是让我们熟悉理解和掌握多线程的思想和方法.这个单元以电梯为主题,从一开始的最简单的单部傻瓜调度(FAFS)电梯到最后的多部 ...
随机推荐
- [IoC容器Unity]第一回:Unity预览
1.引言 高内聚,低耦合成为一个OO架构设计的一个参考标准.高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单. 拿咱国家举例来说,假如你是中国人 ...
- python_requests官方文档中文版
http://cn.python-requests.org/zh_CN/latest/
- 关于Struts2的通配方法、转发重定向
1.通配符 在配置struts.xml文件的时候,需要很多action,这时可以用到通配符找到与之对应的方法和类,当然实际开发中很少用到这种方法 struts.xml: <!--通配方法 *_* ...
- printf打印输出
int PrintVal = 9; /*按整型输出,默认右对齐*/ printf("%d\n",PrintVal); /*按整型输出,补齐4位的宽度,补齐位为空格 ...
- LeetCode--032--最长有效括号(java)
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度. 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()&quo ...
- Monkey工具
Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey. Monkeyrunner.benchmark.其它test too ...
- Confluence 6 升级完成后的检查
这个页面中的文章将会为 Confluence 管理员为 Confluence 升级完成后 提供检查列表以确保 Confluence 的升级顺利完成.这个检查列表没有包含所有需要检查的错误,但是将会检查 ...
- Django的admin相关
自定义admin展示的内容 根据之前已经创建好了的models from django.db import models class Person(models.Model): name = mode ...
- selenium自动化定位方式
自动化定位方式 1.String Xpath = String.format("//*[@id=\"saveFileKeyWordsBtnHand\"]/../../.. ...
- 九度1456胜利大逃亡【BFS】
时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:4432 解决:1616 题目描述: Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.魔王住在一个城堡 ...