项目小结及难点复盘

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 项目小结及难点复盘1、程序总体框架结构计算程序属于客户端,与服务端建立socket连接并实时获取需要计算的数据。计算程序结果写入oracle数据库对应的表中,供前台界面读取并显示结果。

项目小结及难点复盘

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中,由于没有进行入口处的初始化操作,导致

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


相关文章
|
2月前
|
安全 测试技术
测试团队的一次复盘实践
测试团队的一次复盘实践
167 0
|
2月前
|
缓存 前端开发 JavaScript
前端项目重构的一些思考和复盘
前端项目重构的一些思考和复盘
94 1
|
2月前
|
安全 测试技术
面试题2:测试人员何时参与需求分析,并且要分析需求的哪些方面?
面试题2:测试人员何时参与需求分析,并且要分析需求的哪些方面?
面试题2:测试人员何时参与需求分析,并且要分析需求的哪些方面?
|
10月前
|
存储 运维 架构师
经验教训:微服务设计时的五条宝贵经验
在著名软件著作《人月神话》中提到,软件世界没有“银弹”,这句话当然适用于架构领域,随着从单体架构过渡到微服务架构,因为将原有系统打散,给系统增加了许多不稳定因素。
69 0
|
2月前
|
监控 架构师 算法
|
10月前
|
移动开发 前端开发 JavaScript
金九银十,带你复盘大厂常问的项目难点(一)
金九银十,带你复盘大厂常问的项目难点
180 0
|
10月前
|
数据采集 缓存 前端开发
金九银十,带你复盘大厂常问的项目难点(二)
金九银十,带你复盘大厂常问的项目难点
215 0
|
10月前
|
前端开发 JavaScript 小程序
金九银十,带你复盘大厂常问的项目难点(四)
金九银十,带你复盘大厂常问的项目难点
66 0
|
10月前
|
存储 缓存 前端开发
金九银十,带你复盘大厂常问的项目难点(三)
金九银十,带你复盘大厂常问的项目难点
67 0
|
10月前
|
缓存 负载均衡 监控
如何攻克项目难点
如何攻克项目难点