oo第二次博客作业
多线程协同与同步控制总结
- 第五次作业-多线程电梯
本次作业是我第一次接触多线程,建立了请求模拟器、调度器和电梯运行三种线程。请求模拟器负责在输入后识别有效请求;调度器在扫描有效请求后将新的请求加入请求队列,并扫描三部电梯的信息,最后遍历请求队列中的请求进行调度,并根据得到的信息进行请求状态和请求队列的更新;电梯运行线程则根据得到的信息进行运动,同时改编电梯信息。实现多线程功能中最大的挑战是实现共享数据的安全、避免冲突(一开始没有加synchronized修饰符导致出现很多bug),因此在与同学讨论后,采用了将所有方法都加上synchronized修饰符的方法来避免数据冲突(当然这样也一定会导致一些bug)。
- 第六次作业-IFTTT
第六次作业是文件及文件夹的监控与管理。遵循“将每一个新的监控变成一个新的线程”的原则,很多个线程不断的扫描,如果有满足监控条件的触发情况,则完成触发,同时更新快照以便下一次判断。考虑到file的不安全性,设置线程安全的safefile类,并对于所有方法都上锁。
- 第七次作业-出租车系统
本次作业的线程主要分为三类:出租车、调度器、输入。首先是100个出租车线程,考虑到安全问题,对于其中的快照信息进行加锁。其次是调度器线程,通过扫描得到出租车的快照,然后遍历请求对列,判断出租车是否符合规定的信息,得到最后的信息后则更新出租车及队列的状态。输入线程则循环接受输入,检查有效与同质信息并输出指定信息。队列及请求类的所有方法都上锁以确保线程安全。
度量分析 (由于eclipse原因,暂时无法度量分析)
- 第一次作业·多线程电梯
类图:

自我点评:
第二次作业·IFTTT
类图:

第三次作业·出租车系统
类图:

BUG分析
- 第一次作业·多线程电梯
公测&互测:对方未进行测试
调试:由于是第一次写多线程,所以导致没有思路,迟迟没有开工,一开始忘记加锁导致出现许多难以预料的问题。最终对线程进行加锁处理,实现了信息的相互传递,才得以顺利完成。
测试程序:本次作业分配到的作业为无效作业,输入任何请求都显示输出格式错误。
- 第二次作业·IFTTT
公测:关于目录下的一系列测试没有通过
互测:无
分析:本次作业是自己对于指导书的理解不够透彻,在关于目录的一些操作都会报错而不是按照要求进行移动。
测试程序:本次测试任务有非常多的bug,对于一般的请求都会报错和crash,难以进行测试。但对于某些简单样例能够通过。
- 第三次作业·出租车系统
公测:全部通过
互测:对于输入的不合理请求没能报错,反而导致了crash。最终分析是由于正则表达式没有写好的原因(暴打自己狗头一万遍)。
调试:测试太麻烦,没有进行很好的测试,所以才会出现低级错误。据可爱的助教说,我的程序出现了gui会跳的问题,所以之后应该会进行改动。
测试程序:本次测试任务总体来说还算可以,但是对于出租车的抢单没有处理好,导致在多个出租车抢单时没能选择信用值最高的那个,而且也没有输出位置信息。
心得体会
这三次作业的难度比起前几次可谓难度上了一层楼,前几次大概还在“1+1=2”,这几次就到了求导,写第五次作业时完全没有思路,急的嘴角都攒起了泡,不过最后还是有惊无险,同舍友一起渡劫。由于对方没有给我公测和互测,对于我第五次作业的bug也没有一个很好的认识。但就自己之后的调试和反思,第五次作业程序代码太过冗杂而无法修改,形成了牵一发而动全身的状态,这是自己之前没有写好导致的。第六次作业是自己认为最难的一次作业,指导书的难以理解度已经超出了我的想象,所以也导致了不理解下的很多bug。
纵观这三次作业,难就难在不好调试,第五次作业还好,输出信息一目了然,但第六次作业对于深度和广度的遍历实在是太痛苦了,本人又没有扎实的c语言功底,只能自己手动构建文件夹,真是不堪回首的一段记忆……至于第七次作业那就更是玄学了,出租车肆意乱跑,也就胡乱调试了一下……
黑眼圈已经重到媲美眼影的程度,还好有假期能休息一下23333好好阅读指导书,阅读指导书的日子让我不由想起了传说中的甲方的种种要求啊!总体来说,苟活下来就是胜利。
oo第二次博客作业的更多相关文章
- OO第二次博客作业——电梯调度
OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变 ...
- OO第二次博客作业—17373247
OO第二次博客作业 零.写在前面 OO第二单元宣告结束,在这个单元里自己算是真正对面向对象编程产生了比较深刻的理解,也认识到了一个合理的架构为编程带来的极大的便利. (挂三次评测分数 看出得分接近等差 ...
- OO第二次博客作业(第二单元总结)
在我开始写这次博客作业的时候,窗外响起了希望之花,由此联想到乘坐自己写的电梯FROM-3-TO--1下楼洗澡,然后······ 开个玩笑,这么辣鸡的电梯肯定不会投入实际使用的,何况只是一次作业.还是从 ...
- OO第二次博客作业--第二单元总结
第一次作业 1. 设计策略 第一次作业,一共三个线程,主线程.输入线程和电梯线程,有一个共享对象--调度器(队列). 调度的策略大多集中到了电梯里,调度器反而只剩下一个队列. 2. 基于度量的分析 类 ...
- [BUAA OO]第二次博客作业
第五次作业 这次作业是电梯系列作业的终极版,要求是使用多线程实现三部电梯的运行.这次作业的难点在于第一次运用多线程技术,对于线程中的行为并不了解,以及电梯功能的实现(如果之前作业采取的是扫描指令队列预 ...
- Java第二次博客作业
Java第二次博客作业 时间过的很快啊,在不知不觉中这门课程的学习也就快要过去一半了,现在就来总结一下在这个第二个月的学习当中存在的问题以及得到的心得. 1.前言 第四次题目集和第五次题目集给我的感觉 ...
- 第二周博客作业 <西北师范大学| 周安伟>
一,本周助教小结 逐步开始适应助教工作,对学生发布的博客进行点评,查看学生对软件工程前期的准备情况. 二,助教本人博客 https://home.cnblogs.com/u/zaw-315/ 三,学生 ...
- C语言第二次博客作业---分支结构
一,PTA实验作业 题目1.计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.实验代码 double x,result; scanf("%lf",&x); if( ...
- C语言第二次博客作业——分支结构
一.PTA实验作业 题目1:计算分段函数 1.实验代码 #include<stdio.h> #include<math.h> int main(void) { double x ...
随机推荐
- 剑指Offer——回溯算法解迷宫问题(java版)
剑指Offer--回溯算法解迷宫问题(java版) 以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍.设计程序,对任意设定的迷宫,求出从入口到出口的所有通路. 下面我们来详细讲一 ...
- 高仿QQ头像截取
花费了半天时间,把 仿QQ头像截取的方法整理了下,并制作了一个demo以供大家参考,基本上实现了qq中我的资料界面上(包括背景透明化,上滑标题栏显示,下拉隐藏等)的大致效果,先上图看效果吧: 支持的功 ...
- Servlet中的跳转(redirect和forward)
Forward是通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法来实现的 ...
- 05 Activity 现场保护
我们接电话然后返回的 Activity将会被毁了重新创建 所以我们需要在摧毁记录一些信息还原Activity 摧毁时: //在Activi被摧毁的调用此方法 @Override protected v ...
- (一一四)使用FMDB操作SQLite数据库
上节介绍了用系统自带的C语言库操作SQLite的方法,比较繁琐,使用FMDB会大幅度简化,并且是面向对象的,使用十分方便. 使用步骤如下: 先从github下载FMDB框架,然后把它导入工程. ①导入 ...
- ajax post请求request.getParameter("")取值为null
今天在写提交一个json数据到后台,然后后台返回一个json数据类型.但是发现后台通过request.getParamter("")取到的值为null. 于是写一个简单的ajax ...
- input事件--->按键事件的基本实现
本程序基于TINY4412开发板,程序已经验证过,完全正确: 那么,如何来写这样的一个驱动程序呢? 1.分配一个input_dev结构体 2.设置 3.注册 4.硬件相关的代码,比如中断,定时器,休眠 ...
- JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤
JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...
- (八十六)使用系统自带的分享框架Social.framework
使用Social.framework十分简单,能够便捷的分享到主流的社交框架. ①导入主头文件 #import <Social/Social.h> ②以新浪微博为例,首先判断服务是否可用, ...
- 存储那些事儿(五):BTRFS文件系统之Btree结构详解
Btree数据结构可以说是BTRFS文件系统的基础.它提供了一个通用的方式去存储不同的数据类型.它仅仅存储3个数据类型:key, item和block header. btrfs_header的定义如 ...