一、总论
1.1 直观理解
Unit2 的问题以电梯作为题目背景出题,刚做题的时候很容易就把这个单元的任务当成了处理多线程,当我全部完成这些作业以后,发现仅仅将 U2 概括为多线程,是一个十分片面的直观理解。
我觉得应该这么理解,U2 要完成的东西有(当然可以不完成):
- 多线程设计:这比原来的处理多线程要难一些,处理多线程类似于能跑就行了,但是多线程设计偏向于跑的好,除了比较基础的生产者消费者模型,如果能再次基础上应用 Furture 、Balk、Work-Thread 等模式,可以做到一个更好的优化,此外,限制线程的种类,优化资源管理,这些东西都要比“抄一个多线程模型”要难很多。
- 面向对象设计:面向对象是一种管理代码的方式,只有代码量激增的时候,面向对象对代码的管理能力才能超越面向过程。因此这个其实是一个可选项,因为如果采用一些思路的话,代码量很少,只有采用及其牛逼的调度器策略的时候,才有代码量激增的情况。
- 数据结构设计:这是这次新题目的新难题,因为虽然题还是那个题,但是原来只有一栋楼,现在是 15 栋楼或者是 50 个坐标,总之如何处理这些请求的位置,就成了一个难题。我个人做的就极其繁复,会把每一层每一个方向单独作为一个集合,但是其实把所有请求不加分类的放进一个一维的集合中,似乎可维护性和可拓展性都会强很多。
- 运筹:这回的题目最大的特点就是优化是永无止境的,而且是没有方向的,我们只知道一件事:我们不知道怎么优化。电梯调度算法其实是一个研究很深的问题,在运筹学上专门有一章去讲这个,似乎叫“电梯群控理论”。我翻了一些论文,感觉不仅我不知道怎么优化,似乎写论文的人也不知道怎么优化。但是估计他们也有ddl,所以估计应付应付就交了。