编程语言与核心基础
Python:熟悉基于Python的AI开发,掌握LangChain、RAG、Agent相关技术,善于利用Agent辅助开发。
C/C++:掌握C++11标准,理解面向对象三大特性(封装、继承、多态)、函数重载、智能指针等;熟悉STL主要容器(vector、list、map等)及底层实现原理。
数据结构:熟练掌握顺序表、链表、栈、队列、二叉树、堆、哈希表、红黑树、图等常用结构。
算法:熟悉希尔排序、堆排序、快速排序、归并排序等经典排序算法。
Linux系统编程
环境与工具:熟练使用Linux常用命令,以及vim、git、gdb、Makefile等开发调试工具。
核心概念:理解程序地址空间、进程控制、基础I/O、进程间通信(IPC)、进程信号等。
并发与同步:熟悉Linux下的同步互斥机制(互斥锁、条件变量、读写锁等),掌握生产者-消费者模型、多线程编程、线程安全及线程池技术。
Linux网络编程
基础编程:掌握Socket套接字编程,了解select、poll、epoll三种I/O多路复用模型。
TCP/IP协议:熟悉TCP三次握手与四次挥手、流量控制、拥塞控制;了解OSI七层模型及TCP/IP四层体系结构,熟悉TCP、UDP等常见协议。
数据库与中间件
数据库:熟悉PostgreSQL,具备数据库写入与基本操作能力。
消息队列:了解Kafka的基本使用。
其他中间件:了解RCF(远程调用框架)、nanomsg、mDNS等服务发现与通信技术。
嵌入式开发
STM32平台:基于STM32VET6开发智能扎气球小车(超声波、红外寻迹模块);基于STM32C8T6实现激光追踪(视觉、PID算法、舵机云台控制)。
网络设备与配置
了解华为交换机、路由器的基本配置。
项目经验
一、水声声呐数据采集软件(实习项目)
公司:北京中科海迅科技股份有限公司
岗位:C++研发工程师
时间:2025年1月 – 2025年6月
项目简介
参与水声声呐相关数据采集软件的研发,该系统涵盖数据采集、状态管理、任务管理、数据存储等多个模块。我主要负责任务管理模块中项目整体执行逻辑的开发,具体工作包括:
负载均衡与任务调度:设计并实现任务分配策略,保障多任务下系统资源的合理利用。
数据采集与心跳监控:实现数据采集任务的状态统计与心跳检测,及时发现异常任务。
任务故障转移:设计故障转移机制,当节点或任务异常时自动迁移任务,提升系统可靠性。
数据库写入:将任务信息持久化到 PostgreSQL 数据库。
网络与服务发现:使用 RCF(远程调用框架)、nanomsg、mDNS 实现模块间通信与服务自动发现。
消息队列集成:利用 Kafka 实现任务状态的高吞吐传输。
并发与设计模式:采用单例模式、多线程技术保证模块的高效与安全。
网络设备配置:了解并参与华为交换机、路由器的基本配置,保障网络环境稳定。
涉及技术
RCF、Kafka、PostgreSQL、nanomsg、mDNS、单例模式、多线程、华为交换机与路由器配置。
二、无锁内存池(个人项目)
项目简介
参考 tcmalloc 的设计思想,实现了一个适用于多线程环境的高并发内存池,通过三层缓存结构显著降低多线程频繁申请内存时的锁竞争问题。
Thread Cache(线程缓存)
每个线程独享,用于分配小于 256KB 的内存。线程从此层申请内存无需加锁,实现无锁化分配,提升并发性能。
Central Cache(中心缓存)
为 Thread Cache 分配内存,并在适当时机回收 Thread Cache 中的空闲对象。通过桶锁(细粒度锁)控制竞争,避免单个线程占用过多内存,实现多线程间的内存均衡调度。
Page Cache(页缓存)
从系统以页为单位分配大块内存,并切割为固定大小的小块提供给 Central Cache。回收 Central Cache 中满足条件的 Span 对象,并合并相邻的物理页以形成更大的连续内存,有效缓解内存碎片问题。
技术亮点
无锁设计(Thread Cache 层)
细粒度锁(桶锁)
内存页合并与碎片管理
三、负载均衡在线OJ(个人项目)
项目简介
采用 MVC 架构,实现了一个支持负载均衡的在线编程判题系统。用户可通过浏览器访问题目列表,在线编写并提交代码,后端自动分配服务器资源,在保证负载均衡的前提下提供高效的代码编译与运行环境。
核心模块
comm(公共模块)
提供通用工具类,包括文件名处理、时间获取、日志记录、字符串处理等基础功能。
compile_server(编译运行模块)
接收代码文件,调用编译器进行编译并执行,返回运行结果。
oj_server(核心服务模块)
负责题目列表获取、题目详情展示、在线编辑界面、负载均衡调度、判题逻辑以及网页渲染。网页前端使用了 HTML/CSS/JS 及 Ace 在线编辑器,后端通过 cpp-httplib 提供 HTTP 服务,并使用 ctemplate 进行动态页面渲染。
负载均衡设计
当用户提交代码时,oj_server 根据后端各编译服务器的实时负载情况(如任务队列长度、响应时间等),动态选择最优节点执行判题任务,确保整体服务的高吞吐与低延迟。
涉及技术
C++ STL、Boost(字符串切割)、cpp-httplib、ctemplate、jsoncpp、多进程、多线程、MySQL C API、Ace 前端编辑器、HTML/CSS/JS/jQuery/Ajax。
# Math Contest 数学竞赛网站 基于 Next.js 14 开发的数学竞赛网站,参考 HMMT(哈佛-MIT 数学竞赛)的内容结构 + College Board Bluebook 的答题界面设计。 --- ## 功能概览 | 模块 |
结构与总体思路: 我们对外提供的是在线oj编译运行服务。那么在线自然通过实现web服务器在浏览器 实现功能(利用前端制作网页,对应web服务器的路由实现功能),后端自然需要提供编译运行服务。 为了更加灵活的控制后端的编译运行服务,我们可以将