第二单元小结

一 设计策略

1.FAFS电梯

经典的生产者消费者模型,结合单例Handler。

电梯硬编码,30行左右解决。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
2.ALS电梯

仍是生产者消费者模型,但在电梯中加入捎带队列,每层楼进行tray和捎带队列的更新

3.SS电梯

Worker-Thread模式,建立多个电梯线程并对乘客进行选择。

在捎带算法上仍有较大问题,以至于6,7次作业中测都有点没过。之后会根据代码再做修改。

(笔者与人交际甚少,没有讨论的机会,只能学习在git上的开源代码了,至于设计模式,由于参考书上的12种设计模式大多都阅读并完成过,还算比较熟悉。总体而言,对自己这一单元的的学习情况不甚满意。)

二 程序分析

1.FAFS电梯
类图:

第二次博客作业 随笔 第1张

度量分析:

第二次博客作业 随笔 第2张

第二次博客作业 随笔 第3张

BUG分析:

由于电梯硬编码且仅仅是对生产者消费者模型实现,因此没有BUG,且复杂度较低。唯一的问题是ctrl+d模拟结束输入时,需要新添加输入结束标志。

2.ALS电梯
类图:

第二次博客作业 随笔 第4张

度量分析:

第二次博客作业 随笔 第5张
第二次博客作业 随笔 第6张

复杂度有两处较高,原因是每层楼均需要对两个队列进行更新。

由于自己的调度算法出错,公测有一个测试点没过。

3.SS电梯
类图:

第二次博客作业 随笔 第7张

度量分析:

第二次博客作业 随笔 第8张

第二次博客作业 随笔 第9张

由于调度算法缺失(第六次作业的问题尚未解决),仍然采用了FAFS,导致强测超时。

三部电梯互相争抢乘客,并把不符合的乘客放回等待队列。因此workerThread.run方法复杂度较高。

三 心得体会

课下阅读完《图解Java多线程设计模式》并对书中内容进行实践,这本书解决了我大部分的设计问题,但是关于调度算法的问题并没有解决。以至于6,7次作业效果不佳。之后应该会阅读同学在git上开源的代码,解决自己在调度算法上的疑惑。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄