赵磊
(c/c++开发)
技术栈
- 熟练掌握c/c++,理解和掌握最新标准,熟练c++面向过程,面向对象,泛型,函数式等编程范式。熟练使用 cmake gcc/gdb/msvc/clang系列 doxygen 等c++工具链做开发。熟练使用c++
各种常见库的使用,例如:stl,单元测试库gtest,日志库 quill,http库 drogon 等。
- 熟悉基本的数据结构和算法。
- 熟练掌握c++ qt库,对qt库(包含gui,log,qtest等)有全面的掌握。
- 熟练掌握linux开发和部署,日常使用linux opensuse系统。
- 熟练掌握软件工程OOA、OOD,设计模式等。
- 擅长devops,熟悉docker,从项目深度集成git,到自动测试,自动发布(成品和文档)有良好的实践(github 项目)
- 熟练掌握web 全栈开发。从后端(http server+数据库) 到前端(html+css+js+vue)全面掌握
- 熟练使用pgsql,sql server,mysql,sqlite等关系型数据库,timescaledb 时序数据库,redis 缓存key-value数据库,mongodb 文档数据库。
- 擅长使用常见脚本语言做测试和自动化工作,bash,python,lua 等。python有爬虫经验。
- 熟悉 tcp/ip,udp,http,websocket,mqtt,opc-ua 等传输协议。
- 日常使用vim/neovim和vscode做开发。
我拥有非常全面的技术栈,解决过大量的复杂偏僻问题,我喜欢c++,是因为c++的技术起点更高。我热爱编程,我所热爱的正好是我的工作,我的个人网站是:
https://zerlei.cn
项目经历(部分)
解决问题:
一般的后台管理系统,通常使用browser-server 架构,此时,想要打印网页内容,只能通过浏览器手动点击打印选项,没法自动化。使用此工具可以通过一个http 请求或一条websocket 信息来自动打印一个网页。
技术亮点:
综合的软件开发素质,成品软件包含http server,websocket
server/client,chromium内核等模块,此外还提供一个vue3开发的前端页面。具体实现:通过http或者websocket交互,chromium渲染网页至pdf,qt printer模块实现打印机连接。
技术细节:
- c++最新标准: c++23开发(移动语义,lamda,concept等)
- 使用 stl 和 qt库(qtlog qttest,qtwebenginer等)
- 使用sqlitedb做数据存储
- 配置了详尽的clangd,clang-tidy项,做代码提示,质量分析。
- 主要功能单元测试保证,集成到cmake(ctest .)
- 使用doxygen,生成基于规范化代码注释和markdown文档的html成品作为使用手册。doxygen 配置了plantuml和自主开发了merimaidjs 图形生成支持。
- 借助github action,实现CI/CD。git tag -> 推送 -> 跨平台成品发布(Linux 和windows)和文档发布https://wpp.zerlei.cn。linux
版本包含glibc,各个发行版可直接使用,windows版本需要最新vc++运行时(win 7专业版以上)。
- 使用nix flake 管理所有依赖。linux 环境下,一行命令复现(nix develop):gcc,qt库,cmake,doxygen 等所有依赖。
- 前端工具项目和主项目,使用 git 子仓库分开。
2. (公司项目)机器辅机采集程序 (2023-03)
我的作用:单人solo开发
解决问题:
设备运行时产生数据,低复杂度设备,只能通过串口rs 485通信。想要把设备产生的数据存储到服务器。1. 最终要通过网线传输到服务器。2. 要使用rs 485与设备通信。
技术亮点:
现场交换机网口数量受限,但存在一台pc。通过开发pc上的可执行程序,借助pc上的usb端口与设备通信,最终使用pc作为中转站将设备数据传输到服务器。
技术细节:
- 使用qt c++开发
- modbus rs 485通信协议
- windows 注册表程序自动启动
3. (公司项目) IM即时通信客户端(仿qq) 2020-1 ~ 2020-4
我的作用:单人solo开发
技术亮点:
使用qt (c++11)开发。单文件安装,可在线更新。实现了好友管理,富文本发送,截图,录屏,文件传输,历史消息查看等功能。
技术细节:
- 自定义安装、卸载、升级工具。静态编译qt库,文件压缩库,所有文件压缩后,借助qt resource
system编译成一个exe,区别于使用一般windows安装包制作工具,拥有自定义安装卸载界面。通过对比使用服务器-客户端版本文件,在客户端主程序启动时,预先启动升级程序来实现在线升级。所有静态资源通过http
传输。
- 传输协议使用http 和 websocket json 格式,富文本使用html表达。
4. (公司项目) 金融交易终端开发(参考同花顺pc版客户端) 2020-1 ~ 2021-4
我的作用:
负责k线图绘制,技术选型图形绘制以及其它界面开发,服务后台数据处理。
技术亮点:
旧有MFC c++ 系统的移植,新版使用qt c++开发。
技术细节:
- 使用visual studio + qt tool开发。
- 使用qtcharts 模块,界面主要使用qt widgets,部分使用qml。
- 后台 c++ 处理数据,提供python api
解决问题:
一些企业级的后台服务,还在使用.net framework 4.8,它只能托管在windows server 上。此类项目通常业务密集,代码量庞大,但现阶段没有办法重写。这给使用现代的devops 带来很大障碍。
技术亮点:
通过对比发布服务器和测试服务器或正式服务器的文件差异,打包上传最新版本的文件,并做记录。数据库(sql server)同步借助sqlpackage 实现。与git hook集成,完成了windows 服务
CI/CD的最后一公里。
技术细节:
- 使用c# asp.net 开发
- 可与git 深度集成,当合并main 分支或者git push --tags 时,触发git hook 实现程序的自动编译,成品发布
- 程序本身,使用现代的devops 设施发布。
- 有完善的单元测试用例
解决问题:
vitepress 的目标是做一个上手即用的文档网站,但有时候会感觉缺少一些开箱即用的功能。我的职业是做c++开发,不过任何一个好的项目,都离不开好的文档,懂前端知识很有帮助。
技术亮点:
基于vitepress做了深度定制。增加了标签,分类,搜索等功能,使用git hook,配合bash js脚本 与git 功能深度集成,从编写文档到发布,一个多余的步骤都没有。
技术细节:
- 框架项目和子项目仓库拆分,良好配置的git hook 脚本
- 虚拟滚动条
- 图箱,merimaidjs plantuml等文档绘图集成等
工作经历
河南海弘软件技术有限公司|软件工程师
2022.2 - 2025.2
团队角色:
团队新开发框架的主要构建者和负责人,推动技术框架更新迭代和devops实践,负责解决非常规问题
工作内容:
- linux c++ 边缘计算模块开发 (qt界面,mqtt modbus opcua 时序数据库)
- web 全栈开发
工作亮点:
长期作为团队内唯一linux c++开发者,解决边缘计算场景问题。推动了技术框架的迭代升级,和devops的落地实践
博商云(郑州)科技有限公司|软件工程师
2021.4 - 2021.12
工作内容:
- 使用c++ 配合硬件对接运营商语音电话,包含后台管理软件的开发,和边缘模块的二次开发。
- erp系统附属硬件的驱动开发(c/c++),例如扫描仪,扫码机与erp系统的交互模块
- erp系统全栈开发(asp.net sql server html/css/javascript jquery vue)
和信证券投资顾问有限公司|c++开发工程师
2020.6 - 2021.3
工作内容:
- 维护公司旧有的使用 MFC开发的 PC端软件
- 使用 qt开发 IM系统(仿qq),远程控制系统(向日葵远程桌面二次开发)
- c++ qt 金融终端客户端开发(参考同花顺pc端),c++后台服务数据处理,提供python api
北京国遥新天地信息技术有限公司|c++开发工程师
2019.3 - 2019.12
工作内容:
- 使用qt做军工行业的GIS系统开发,根据客户需求调整软件功能。
- 使用vs + qt tool作为开发工具,主要使用qtwidgets 组件和公司自有组件
- 数据库设计、各种文本数据格式,包含xml 等,qss样式调整,鼠标 event事件捕捉绘图等。
- 与客户沟通需求,参与软件测试。
河南森源电气股份有限公司|研发员
2017.7 - 2018.07
教育背景
河南科技大学,电气工程及其自动化专业,本科学历和学士学位(高考过一本线20分左右)。通过兴趣和自学,成为了一个程序员。
个人总结
我认同我的职业。我信奉要做复杂、困难的事情,或者做简单的事情,能感觉到艺术。个人网站
https://zerlei.cn