项目小结及难点复盘

项目小结及难点复盘

1、程序总体框架结构

计算程序属于客户端,与服务端建立socket连接并实时获取需要计算的数据。

计算程序结果写入oracle数据库对应的表中,供前台界面读取并显示结果。

2、计算模块所处的位置及功能

完成数据socket通信、数据接收、数据解析、计算、结果写数据库操作。

3、使用技术

socket通信、线程同步、OTL、Oracle数据库查询、STL。

3、遇到的技术难点

1)Socket通信简单协议实现

实现中很像当年的中兴捧月的比赛题目,三次握手、保活连接&通信。

最终选择socket recv循环阻塞接收,数据通过结构体实现,定义好包头head和body,

包头中包含body的个数。

2)包解析

这个也是2年前参加工作遇到的问题。即:积累了包一定大小后再解析。

究竟积累了多大再去解析呢?

实现中发现:如果设定值4K或者8K,会很容易出现解析错位导致错或者串一个字节都会导致程序崩溃。

自己实现循环监视Buffer,解析多少就去掉多少,记录新起点值和剩余Buffer大小。

后面改成通过先进先出双端队列进行管理,即:

入队:来一个包就入队;

解析:积累10个包就解析(根据包大小自己设定的值),避免出现字节剩余现象。

一旦偏移或者出错,解析到的数据就会异常或者越界。

出队:解析完一个包就出队。

实现方式:deque push_back、pop、empty、size函数。

3)多线程同步

进程即主线程负责对解析完后的数据进行计算,并将结果通过OTL写入Oracle数据库中。

子线程负责从Socket接收数据并进行解析。

主线程和子线程存在同步关系,通过Event实现。

子线程接收完、解析完毕后主线程才能执行计算、写入操作。先接受解析、再计算写数据库。

同时主进程写入完毕后通知子线程继续解析。

4)vector清理操作

由于程序循环执行,每次结果都push_back vector中,由于没有进行入口处的初始化操作,导致

程序越往后执行的循环次数越多。直至报错。

2014-6-2 am5:07 思于北京酒店床上

作者:铭毅天下

转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/46322759

如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!

时间: 2024-12-28 00:29:27

项目小结及难点复盘的相关文章

arm、linux、qt项目小结

QT资源文件 1.新建文件或工程 -> qt资源2.添加,资源名称(Image),选择路径,完成3,打开Image.qrc, 添加后缀,一般就是 /4.添加文件,添加图片5. 调用 (:/11.png) 转http://blog.sina.com.cn/s/blog_5c70dfc80100r257.html 在Qt中处理图片一般都要用到QImage类,但是QImage的对象不能够直接显示出来,要想能看到图片,初步发现有两种方法. 一.QImage转QPixmap,然后用QLabel::setP

一个WPF小项目小结

一:缘起 在10月中旬的时候在学校BBS上看到有人有做PC桌面客户端的需求,做的是能耗的计算和评估,要算能耗,就有很多环节,最后对这些环节数据进行一些简单计算.我想要是做的话就用比较熟的wpf,就去聊了下,对方给了1张比较复杂的Excel表格(其实对方的需求并不是很清楚,最后大概10来张EXcel表格),说是要做成软件呈现的形式,也没要求数据库,反正只要有功能,界面他们也没概念,给了个98年的老软件作为参考,最后EXcel表格弄懂结构后不复杂,计算都是加减乘除.我就答应了,这个软件算起来大概花了

项目小结一:在项目中使用 IScroll 所碰到的那些坑

最近做了个 WEB APP 项目,用到了大名鼎鼎的 IScroll,滚动的效果的确很赞,但是坑也是特别多,下面总结一下,希望自后来者有帮助. 该项目现已开源在 github 上,https://github.com/ansiboy/ChiTuStore 一. 使用 abstract 定位 顶栏和底栏最好不要使用 fixed 定位,应该使用 abstract 定位.我最初使用的是 fixed 定位,页面从右往左呈现的时候,经常会出现两个问题:1.顶栏时不时地会消失掉,2.新页面在移动的过程中,顶栏

第八周项目小结

小结: 第八周了,是时候对自己的项目流程做一个简单的阐述和总结了. 我负责数据库的编写和java与数据库的连接JDBC这块,用MVC三层架构写图书馆管理系统,模型层可直接向数据库传递SQL语句,控制层调用模型层,视图层调用控制层,展示最后结果,用户可在视图层输入信息,视图层将信息传给控制层,控制层通过控制模型层向数据库传递SQL语句来对数据库中的信息增删改查,需要输出结果的操作,在数据库获得信息后,就可依次通过模型层,控制层最后呈现在视图层上. 已经能实现基本的增删改查功能,前两天还只是停留在程

在oneAPM参加第一个项目小结

从12月15日开始加入进入oneAPM的第二个项目,也是我真正近距离接触项目的一次吧,到今天差不多接近尾声了,很高心能和大家一起共同改造这个项目,虽然说我做的贡献并不大,但是身临项目真的会收获很多体会很多,会发现合作和团结的力量,会感激小伙伴们的帮助和鼓励,会知道自己的不足和欠缺,从而找到继续前进的方向. 当然其中的心得体会我还是需要唠唠的,本周项目交工,希望能趁着本周空闲把这个小结写完.首先,不得不说当初拿到这个任务时,我真真正正觉得Oh,My God! 嗯,第一次挑起大梁(项目里就我一个前端

使用elementui树形控件写项目小结

使用tree pagination serch table 实现功能 项目难点主要解析后台传递的代码,线性转树形,这儿加上一个大神的解析 https://blog.csdn.net/dandanzmc/article/details/46700107 项目遇到的坑 在使用tree控件上的@node-click时,会对传入的data数据进行修改 点击左边文件夹 右边同步显示文件 点击单个文件 右边显示单个文件,用到的是spalice切割数组,但是splice会修改原数组,后用parse,strin

第一次搭建springboot+dubbo+zookeeper项目小结

第一次用IDEA搭建springboot+dubbo+zookeeper项目中碰到了一些问题,现在记录下来, 第一步:项目准备工作 工具IDEA,先下载安装zookeeper和dubbo   Zookeeper下载地址:https://zookeeper.apache.org/releases.html,我下载最新的release 3.5.7 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是

【项目小结-2015年7月11号】--进入外包的工作的小结(一)

说到自己,带着一种很复杂的心情,开始了自己的外包工作生活.怎么讲,有时好恨自己,感觉这段时间对于我来讲,发生很多很多的事情,也渐渐失去我生命中最重要的人,我想挽回,但有时真的感到很无力,很无奈,总想着有些事情能够触手可及,但是我真的很笨,我像一个傻子,明知道你的城市在下雨,明知道你没有带伞,我却像个傻子依然拨通你的电话问你有没有带伞,我是不是很傻,自己总是走不出这道坎,自己总是不想失去,不想去认输,我该如何去做,你能告诉我吗? 我始终认为人和人在一起要相互坦然,相互信任,我也知道你是一个天使,我

项目小结二:APP 小红点中数字的处理

小红点,是 APP 中最常见的一个功能,我们先来看一下面的案例,下图中,待评价的商品有 2 个,点击“评价晒单”按钮进行评价后,那么待评价数量应该变成 1,那么这个功能是如何去实现的呢? 一般来说,实现的方法有三种: 一.刷新整个页面的数据 就是说,每显示一次,都重新从服务端把数据拉下来,这种方法虽然简单,但是,加大了服务端的负荷,并且由于要整页刷新,用户体验不好. 二.利用事件实现 比如说:增加一个名为 评价晒单 的事件,个人中心页面监听这个事件,而在用户进行评价晒单操作时,服务端返回待评价数