0.自我介绍
各位面试官,大家好:
- 介绍毕业院校专业,大学成绩怎么样
- 工作经历
2.1 金星
1.试用期学习Qt,并且使用Qt开发一套样品前处理软件,主要就是通过modbus控制下游IO设备按照一定时序控制IO设备开闭,完成样品前处理业务,对上位机开发业务初具分层思想。
2.主导公司LIBS激光测量产品需求分析、架构设计、软件开发、bug修正、后续优化
3.提炼出一套通用上位机框架,包括通讯层、设备层、指令层、控制层、控制面板层等各层的接口和相应实现,借鉴依赖注入思想,配置优先原则,不同配置生成不同的业务流,使用工厂模式实现对象的创建、单例模式管理对象、指令模式封装业务、异常抛出实现业务中断。
4.使用Blazor框架开发出一套的远程数据看板程序
5.建模算法移植Liunx研究;斜光测距算开发、从matlab移植到C++
2.2.谱育科技工作经历:
(1)近红外光谱建模平台开发:
背景:已有大量化学法分析的样本数据,公司仪器需要快速,定性地判断某些水质/土壤污染物的浓度,建模业务复杂且专业性强
方案设计:
1.平台.NetCore3.1,ui界面选择winfrom(wpf触摸屏有问题),数据管理使用json序列化工具
2.建模业务可分为数据前处理和建模
3.前处理功能分为异常样本剔除、谱图前处理(去噪,求导,浊度扣除)、波段选择,前处理抽象为数据处理管道,将一批样本数据传入后,依序流进不同数据处理模块,返回最终前处理结果,使用scootplot控件呈现每一步处理后的数据变化,向导式建模,用户只需要选择相应参数后点击下一步即可。
4.建模分为pls和神经网络,输入预处理后的数据到相应的建模算法,返回模型精度参数。比较不同的建模参数建立的模型精度,选择最优模型保存
5.使用rpc提供预测服务,快速拓展现有数采仪
难点:
1.数据管理,数据库太复杂,前期迭代较快,数据格式经常修改,使用json反序列化为内存对象,易于修改,相当于轻量化数据存储,提高灵活性
2.样本数据需要编辑修改,使用csv格式直接在excel中操作,减少开发量
3.数据处理过程中如何保证算法的准确性,测试驱动开发,创建大量测试用例和测试数据,保证每一步算法的准确性,同时重构起来更流畅。
4.谱图前处理(平滑,求导,浊度去除)需要选择不同的算法组合探索出合适的前处理组合,前处理管道如何重建?建立统一数据处理接口,使用JObject存储相应键值数据,保存对应算法名称和参数,后续通过反射获取所有前处理算法,在预测时读取Json数据进行前处理管道重建,完成预测功能
(2)水质总磷总氮/氨氮检测仪上位机
负责两款软件软件需求分析,代码开发,功能迭代
总磷总氮毕业第一个项目,项目正在开发前期,在导师的指导下进行项目开发,主要就是在主界面编辑、下发样品数据、下位机启动测量流程、化学反应结束后读取光谱仪数据、测量结束通知下一个工位进行相应处理。
氨氮和总磷总氮类似
难点:
1.原有代码主界面代码过多,功能模块不清晰(数据保存、光谱仪读数、数据采集分析、报警码处理)耦合在一起,通过提炼函数,独立模块等方法将原有近3000行主流程代码精简至1000行左右。分离出数据采集、数据分析、报警码处理等多个模块,利用反射+特性缩减了大量的if/else语句,添加新成员时也减少了改动。
2.在添加站点检测控制模块时,使用观察者模式分离与主模块的逻辑,降低耦合
3.功能迭代时软件的错误难以快速排查,抽象下位机设备接口,实现该接口,实现模拟数据调试,快速发现修改缺陷
4.多线程与主界面UI使用Invork复杂,且容易出现bug,升级到Net4.6使用async/asait简化多线程交互
5.展示给用户的数据列表需要经常修改,利用反射+特性+xml文件编写了DGV表头绑定、自由配置表头的工具
(3)巨一自动化
新能源电芯电压采集、装配过程数据收集、保存、上传软件,使用opc完成和plc通讯,使用scip控制安捷伦电压采集仪器
环状分布字符检测项目
定位字符、寻找展开特征、特征增强、展开图像、获取单个字符、算法检测
1.遇到过的挑战
- 在一个月内使用不熟悉的开发语言(Qt)开发出一套适用新的应用场景产品软件,并且调试成功上线运行。通过将原有业务分解为样品前处理和检测业务,二者独立运行,通过modbus交互,检测部分使用现有软件,前处理部分新开发一套软件。在新软件中使用通讯层、设备层、业务层分离原则,通过QDebug()日志输出调试软件,最终项目成功交付。
- 如何开发出一款兼容多种型号的设备,通过封层思想,抽象出通用的modbus、发布/订阅、请求/应答等接口,并对对应的物理实现按业务需求实现,将业务中所用到通讯都以接口调用;抽象出出设备层,对激光器、光谱仪、电机导轨等核心设备等提炼抽象基类,对不同品牌的设备进行具体实现,上层调用基类;抽象出指令层,对测量业务分别封装进单个指令中,激光器开关、光谱仪采谱、电机转动等封装进指令,通过配置文件读取生成指令流,每个指令流则是一个完整的测量流程。
- 一个人负责公司现有LIBS产品软件的重构(重写?)项目,使用同一份软件兼容多系列设备,在需求分析、架构确立、后期测试部分、都遇到了支持不足的问题。于是就自己调试、使用老软件、组织现场使用人员开会收集需求,自己在设备上进行功能测试、稳定性测试。其中几个印象深刻的问题,内存泄漏、软件莫名闪退问题、Qt反射和工厂模式。
- 一个半月开发出一套视觉字符识别系统、在调研了paddle ocr、tesseract等视觉识别框架后,发现要想到达客户要求的识别精度,必须要建立齐一套深度学习识别流程,学习特定的训练集才行,觉得自己在这方面没有丰富的经验,就让项目外包了。
2.最享受什么
- 写出的软件有人用,另外还会和你一起讨论,提出优化意见
- 发现并且解决前人的bug
- 学习使用新的技术来完成当前任务时
- 对当前业务想到了一个更好的解决方案时,最好还有人和你一起分享这份喜悦
3.如何处理冲突
- 尝试沟通,听取别人的意见并且说出自己的想法
- 理清任务的重要程度,最紧急的任务先做
- 只要是站在平等、互相尊重的基础上沟通,出现冲突都是很好解决的