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)电梯到最后的多部 ...
随机推荐
- 修改vim的颜色主题 及显示行号
1.打开vim窗口,输入命令:color 或者colorscheme后回车查看当前颜色主题. 2. 输入:colorscheme <主题> 即可设置当前vim的颜色主题. sample: ...
- react的this.setState没有触发render
一.浅比较 出现情况: 明明改变了值, 并且回调函数也触发了, 但是就是不触发render import React, { PureComponent } from 'react' import { ...
- Linux 搭建批量网络装机
- 关于Struts2的通配方法、转发重定向
1.通配符 在配置struts.xml文件的时候,需要很多action,这时可以用到通配符找到与之对应的方法和类,当然实际开发中很少用到这种方法 struts.xml: <!--通配方法 *_* ...
- T2027 蜈蚣
传送门 思路: 设 f[ i ][ j ] 为第 i 节,切到第 j 段的最大恶心值. 枚举 左端点 j ,右端点 i ,段数 k → 转移: f [ i ][ k ] = max ( f [ i ...
- js for 循环示例
//for 循环 ,,,,,,]; ; i < array.length; i++) { console.log(i,array[i]); } //for in ,,,,,,]; for(let ...
- Apache和Nginx的区别
Nginx 轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源 抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apa ...
- deep learning的一些知识点
softmax loss: softmax: softmax的作用,将fc的输出映射成为(0,1)的概率,并将其差距拉大. cross entropy loss: y是样本的真实标签,为1 ...
- Adobe Photoshop安装
Photoshop cc2018安装 Adobe 软件套装已不再以 (Creative Suite) CS命名,而是改成 (Creative Cloud) CC,主推云服务!Adobe CC 套装中总 ...
- Java 使用jxl对Excel进行操作
一个作业需要对excel数据进行离散化,想起好像可以用java对excel数据进行处理,因此学习使用, 在网上也有很多人对这个内容解释,但是还是觉得有些杂,就自己整理了一些别人写的内容. /***** ...