|
|
|
|
=========================================================
|
bug或者难点
|
|
1、客户端
|
界面卡顿的问题
|
其实就是主线程被阻塞了,被耗时任务阻塞了
|
解决--把耗时的业务、任务放到子线程中去执行
|
再将结果以信号槽的方式和界面主线程进行交互
|
--描述时,要结合具体的模块来展开--最好结合自己负责的模块
|
【只要把大数据量的操作放到子线程中就行】
|
|
实时展示:多点--单点;
|
每个单点存的数据固定了长度,当长度满了之后,再来新数据
|
最新的放后面,最老的删掉
|
使用哪个容器更加效率:vector list deque
|
|
|
|
2、服务端
|
网络通信: tcp长连接--心跳检测--能做到断线重连
|
粘包处理--加数据头--包含包长--按长度收包解包
|
安全问题--更改-校验:CRC、MD5校验
|
安全: 敏感数据[密码、核心数据] 加密处理
|
用双向非对称加解密算法--RSA算法[随机密钥]
|
数据库:安全问题--防注入--对SQL语句进行校验
|
|
日志-- 单例模式--线程安全--异步写入--文件翻滚
|
|
性能问题:想办法从同步--升级为异步处理
|
网络通信调用业务API的时候,解耦收包、解包处理
|
单一线程--升级为线程复用--线程池
|
|
数据库连接--复用--连接池
|
-----------------------------------------
|
核心业务:
|
AI相关的--拟合问题--过拟合、欠拟合的解决
|
说白了就是提升模型精度的问题--就是去控制图片的质量和数量
|
想办法降噪、去干扰、使图片高清等手段
|
|
数据库查询--单表数据量很大--SQL语句优化:加索引、避免全表扫描、分表等操作
|
==========================================================
|
所有的难点或者bug一定要结合你负责的模块来展开描述
|
描述时,要先说现象,再说解决的方案
|
----------------------------------------------------------
|
|
1、总结一下自己负责的模块,都还有哪些难点,罗列出来
|
|
注册登录:
|
难点 :密码明文传输
|
现象:LoginReq 结构体直接通过 strcpy 将明文密码写入网络包,网络抓包可直接获取用户密码,严重安全漏洞。
|
解决方案:服务端存储密码哈希值而非明文;
|
|
权限管理:
|
难点 :权限修改无二次确认
|
现象:点击“修改权限”按钮后直接发送请求,无用户确认弹窗,误操作导致权限配置错误,影响系统安全。
|
解决方案:
|
在 按钮槽中添加 QMessageBox::warning() 二次确认。
|
|
实时大屏显示
|
难点:内存无限增长
|
现象:EnvInfoShow::showEnvDataSlot() 将每个监测点数据存入 QMap<QString, QList<EnvInfoReq>> m_nameDatas,仅限制单点 100 条,监测点数量动态增加时,m_nameDatas 内存持续增长。
|
解决方案:
|
设置全局最大监测点数量,超限时移除最旧监测点;
|
|
历史查询分析:
|
难点:长时间运行后,历史查询响应变慢
|
现象:全局粘包缓冲区 g_allBuffer 只增不减;
|
解决方案:
|
不把未解析的数据存起来,利用 QTcpSocket 的内部缓冲区,按需读取完整包。
|
|
警报管理:
|
难点:阈值输入框接受非法字符
|
现象:
|
在“最大温度”输入框中输入字母 abc 或留空,点击“修改温度”,程序不报错,但发送了无效值
|
解决方案:在阈值输入框初始化时,统一设置 QDoubleValidator 限制输入范围,禁止字母、符号或空值,从源头杜绝非法输入。
|