代码改变世界

OO第二单元总结

2019-04-20 21:44  ilatei  阅读(146)  评论(0)    收藏  举报

一、基于度量来分析自己的程序结构

第一次作业

第一次作业是傻瓜电梯,一次只带一位乘客,FIFO策略,使用static final队列保存请求,每次取出一个,如果没有请求那么就wait,直到有输入。如果输入结束且队列为空且电梯已经送完人那么就结束电梯线程,结束程序。

第二次作业

第二次作业电梯基本思路与第一次作业一致,只是加入了捎带。

第三次作业

第三次作业我还是沿用了第二次电梯的设计,调度器负责所有的调度计算,电梯只负责输出。所以只改变了调度算法,和电梯的数量,但是由于三部电梯的速度不一样,设计三部电梯各自获取请求在这个设计下比较麻烦,所以我让每部电梯都完成一次运行后,才生成下一步的调度,就是让快电梯等慢电梯。

 

二、分析BUG

第一次作业比较简单,没有什么bug。

第二次作业问题出在捎带的判断算法上,有时会出现无法捎带的情况,从而导致tle。

第三次作业我没有考虑性能,简化了设计所以也没出现什么bug。

三、发现别人程序bug所采用的策略

自己先根据自己写代码过程中出现的问题构造基础的测试集对其他人进行测试,然后使用大佬写的自动测试机去测试,如果没有发现bug,就去阅读代码,理解别人的调度算法。

总结

第二单元的内容主要是电梯、多线程程序的线程安全,一个难点是如何保证线程安全,另一个难点是设计出较好的调度算法,在实际写代码的过程中由于第一次作业比较简单,所以花费的时间并不多。我觉得难点在第二次作业,如何保证线程安全、程序能正常运行、结束。特比是多线程的debug只能使用print()的方法,不能使用断点,为发现bug带来了困难,另一方面,许多bug是难以复现的,发现都困难,更别提修改了。虽然写了三次电梯作业,但我对多线程编程的理解并不深刻,也没有很好的掌握多线程测试方法,希望能在之后的学习中加深理解。