作业五

作业五是当前最后一次电梯作业,也是我们第一次接触到多线程编程,输入方式也由之前的一次性输入变为了实时输入,其中涉及到大量的同步和冲突,其中学习多线程的使用也花了大量的时间,但总的来说为以后的作业打下了基础。

类图

代码分析


从上述分析来看,此次作业仍然存在God类,究其原因主要是因为第一次接触多线程,使用不熟练,导致对电梯使用多线程时不敢将太多逻辑置于电梯类中,从而导致了大量逻辑代码都留在了调度类中,但调度类中的方法较之于之前已经更加详细具体了,方法之间已经尽量做到了高内聚低耦合。

总结

由于从第一次做电梯作业开始,我就是使用的模拟的方式,所以程序整体的逻辑上没有进行大的修改,但由于此次多线程的使用,尤其是多台电梯之间捎带和请求分配之间的问题,依然存在着不小的问题,所以到最后提交时,依然存在着bug————调度类中逻辑较为复杂,而且由于多线程控制不到位,对于请求队列没有完全实现线程安全,导致会出现多个电梯同时分到同一个请求的情况发生。但由于修改量的巨大,所以未能完成修改,而测试者也将为完成的修改造成的bug找了出来。

除此之外,此次作业的时间控制也不够精确,此次作业没有考虑到程序执行带来的大量误差,直接采用了sleep(3000)的方式,导致随着程序的运行,误差会越来越大,以至于超过误差限度。
但此次作业也第一次采用了构建一个State类的方式,将常用到的状态量定义为常量,极大的提高了代码整体的可阅读性。

作业六

作业六是要求实现一个简单的ifttt,将我们所学内容与实际运用结合了起来,但由于对于文件操作的不熟练,在编写代码时也遇到了不小的问题。

类图

代码分析


此次作业代码量和风格的控制较于第五次作业有了较大的提升,同时对于多线程也能够较为熟练的运用了,此次作业的自由度较之于之前的作业也有所提高,故readme的书写也应该被逐渐重视起来。

此次作业被找出了一个bug,但严格意义上来说并不能算是bug————在编写代码的时候发现一个问题,如果对于两个除了名称其余完全相同的文件,如a,b,如果在两次扫描周期中我们将b重命名为c,将a重命名为b,对于程序来说其实并不好判断其究竟是上述操作还是直接将a重命名为了c,所以我在readme中定义如果发现有重命名,而且有多个符合要求的文件,那么我会随机选一个视为修改,对于其他的,例如路径移动也是同理。但测试者可能因为没有仔细阅读我的readme,所以报了几个bug,全部都是因为这个原因。同时我测试的同学也考虑到了类似的事情,但他的readme中定义方式为对于上述这种情况,不能在同一个周期内同时操作两个除了文件名其余属性均相同的文件。代码中实现方式为将上一次扫描中没有出现的文件作为修改后的文件,可以说完全杜绝了这种情况的发生。在最后考虑到自己在readme中定义的是出现了某种情况应该怎么解释,而不是如何避免出现这种容易导致矛盾的操作,所以我最后也同意留下一个bug。

总的来说,此次作业是比较熟练地使用了多线程编程,但仍有一些没有考虑充分的地方,在以后的作业中也可以多注意一下这一块。

作业七

类图

这次作业是第一次出租车作业,相对于之前的几个线程,此次直接将出租车数量提高到了100个,对于此我是采用了开了100个出租车线程来解决,但同时也带来了内存占用巨大的结果,也有同学采用伪多线程的方式(如我测试的同学),采用循环来执行这100个出租车。对于此种方式我认为也算是一种解决问题的方式,但也难以锻炼自己多线程编程的能力,尤其是对于线程安全的控制,所以在以后的作业中我依然会采用100个出租车线程的方式。

代码分析


此次作业的代码风格算是这么多次作业以来最好的一次,加之此次也较为强调代码规范问题,所以整体来看代码基本能实现一看就懂的程度了。

但此次作业也是最不甘心的一次,但是可能是因为eclipse的bug,我最后一次提交时,本地显示已经提交了,但git上并没有提交,所以最后互测的时候交的是一个错误的版本,导致了此次作业的bug都是原本能够避免的。同时由于此次作业最开始没有发现自己的代码没有成功上传,所以在互测时测试者发现的bug在我这完全不能复现,甚至让我怀疑对方是在恶意找bug,不过好在最后发现及时(就没来得及进行代码层面以外的交流了)但也给我提醒了以后在上传了代码以后最好能够再下载一遍以确认是否正确。

此次作业做得比较好的一点(虽然最后代码没传上去)是时间控制,我一直都采用的系统时间,没有进行假时间的操作,所以此次在State类中我可以说是自己定义了一系列新的时间方法,例如sleep时首先将当前时间进行计算,计算出真实的需要sleep的时间后再执行,可以说此次作业在时间上的误差是严格限制在了误差范围之类的。

心得体会

这几次作业都是多线程作业,随着几次作业的进行,我对于多线程的运用也逐渐熟悉了起来,同时代码风格和规范也得到了不小的提升,像之前作业中的每次新的作业基本都要重写一遍代码的情况可以说基本也不会再出现了。希望自己在后面的学习中能够得到更大的提升。

第八次oo作业的更多相关文章

  1. 北航oo作业第四单元小结

    1.总结本单元两次作业的架构设计 在我动手开始总结我的设计之前,我看了其他同学已经提交在班级群里的博客,不禁汗颜,我是真的偷懒.其他同学大多使用了新建一个类,用以储存每一个UMLelemet元素的具体 ...

  2. oo作业总结(四)

    测试与正确性论证 测试是通过构造一系列测试数据,通过对比程序的实际运行结果和预期输出结果来判断程序是否有bug的一种手段.同时,在测试的时候是默认看不到程序的具体实现的,即进行黑盒测试,例如每次OO作 ...

  3. oo作业总结(二)

    概述 和前三次作业相比,这几次作业最大的不同是难度的飞跃.遗憾的是在这难度的变化面前,我自己却没有做好充分的准备,错误的低估了作业难度导致给自己带来了很多不必要麻烦和损失.接下来我将对它们进行说明(度 ...

  4. oo作业总结(一)

    概述 经历了三次oo作业的洗礼,让我对java语言的强大以及面向对象编程有了初步的理解(当然,我是小白).本文接下来就将对自己这三次作业的代码进行分析以及分享自己的心路历程. 基础知识点考核 针对前三 ...

  5. oo作业总结报告

    oo第一次博客 以前从未真正的写过Java代码,接触Java也只是寒假的时候简单的看了看语法,不懂该如何面向对象,但没事,心里不惧,想着什么都是可以学的(直到真正开始写工程的时候,才发现自己还是太天真 ...

  6. 北航oo作业第一单元小结

    前言 在经过了三次艰辛的oo作业后,oo课程的第一单元告一段落,这一单元,我作为一个oo小白,开始了解oo的编程思想,也有了自己的一点心得体会.把笔粗成字,不当之处,还请各位大佬多多指教. 一.分析程 ...

  7. 《你说对就队》第八次团队作业:Alpha冲刺 第五天

    <你说对就队>第八次团队作业:Alpha冲刺 第五天 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 团队名称 <你说对就队> ...

  8. #《你们都是魔鬼吗》第八次团队作业:第五天Alpha冲刺

    <你们都是魔鬼吗>第八次团队作业:Alpha冲刺 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 完成最 ...

  9. 《你们都是魔鬼吗》第八次团队作业:第三天Alpha冲刺

    <你们都是魔鬼吗>第八次团队作业:Alpha冲刺 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 完成最 ...

随机推荐

  1. C#-命名空间(十五)

    概念 命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式 在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突 命名空间的定义是有一定的规范,避免引起不必要的麻烦 命名 ...

  2. 回调函数的原理及PHP实例

    背景:在最近的一个开发项目中,用户要先调用服务才能开始进行一系列的查询活动,想了好久,经同事提醒, 用回调函数即可解决该问题.在这里,对PHP下回调函数的原理及实现分别做一下讲解. 1 什么是回调 软 ...

  3. LeetCode算法题-Pascal's Triangle(Java实现)

    这是悦乐书的第170次更新,第172篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第29题(顺位题号是118).给定非负整数numRows,生成Pascal三角形的第一个 ...

  4. 聚类——WKFCM

    聚类——认识WKFCM算法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考文献:Shen H, Yang J, Wang S, et al. At ...

  5. SpringCloud之初识Hystrix熔断器 ----- 程序的保护机制

    在上一篇的-负载均衡Robbin中,我们简单讲解到负债均衡的算法和策略.负载均衡就是分发请求流量到不同的服务器,以减小服务器的压力和访问效率,但是当负载均衡的某个服务器或是服务挂掉之后,那么程序会出现 ...

  6. JavaScrip 入门第一课

    一.代码引入的三种方式 1.直接在head中书写 在head标签里面可以写,在body标签里面也可以写,放到head标签里面和放到body标签里面到底有什么区别,我们后续在讲~ <head> ...

  7. 在 Linux 中自动配置 IPv6 地址

    在 Linux 中自动配置 IPv6 地址 在本文中,我们将学习如何为 ULA 自动配置 IP 地址. 何时使用唯一本地地址 唯一本地地址unique local addresses(ULA)使用 f ...

  8. docker swarm:Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable

    环境:cetos7 描述:创建完docker swarm,想把node主机加入swarm中,执行以下命令时,报错 无法连接! 原因是:防火墙!!!!!!!没关!!!! 解决办法是:关闭防火墙

  9. 字符编码ASCII,Unicode 和 UTF-8

    一直对编码的概念很模糊,今天抽空突然想了解下,就找到了这个文章,看完真的豁然开朗,必须感谢阮一峰先生. 一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit) ...

  10. [HEOI2016/TJOI2016]字符串

    嘟嘟嘟 今天复习一下SAM. lcp固然不好做,干脆直接翻过来变成后缀.首先答案一定满足单调性,所以我们二分lcp的长度\(mid\),然后判断\(s[d \ldots d + mid - 1]\)是 ...