编程语言:熟悉C/C++基础语法(指针与引用、构造函数、拷贝构造函数、赋值运算符函数、析构函数、const与static)、面向对象编程特性(虚函数、虚表、重载与重写)、C++11新特性(移动语义、智能指针、std::function与std::bind)、STL标准库(常用容器的使用与实现原理、迭代器、空间配置器、常用算法);
了解函数模板、类模板、变参模板
数据结构:熟悉常用数据结构(顺序表、链表、队列、二叉树、哈希表)、排序算法(冒泡、插入、选择、快速、归并、堆、希尔、基数排序)、查找算法(二分、哈希查找)
操作系统:熟悉Linux操作系统常用命令;熟悉常用文件IO操作(UNIX通用系统调用、标准IO库函数、缓冲区、文件流、目录操作);熟悉进程(虚拟内存布局、进程的创建与终止、进程池)、POSIX线程(线程的取消,线程间同步与互斥、线程池);熟悉socket网络编程(TCP通信过程)、IO多路复用机制(select/poll/epoll)、并发服务器模型(Reactor);熟悉常见网络协议(TCP/IP、HTTP)
设计模式:熟悉singleton单例模式(优缺点及应用场景、单例对象自动释放的方法、线程安全问题、饿加载和懒加载、单例模板实现方法)、factory工厂模式、observer观察模式;了解proxy代理模式、adapter适配器模式
数据库:熟悉MySQL与Redis数据库的基本原理和使用;熟悉常用SQl语句
第三方库:tinyxml2、log4cpp、nlohmann/json、cppjieba、nginx、redis++
常用工具:gcc/g++、makefile、gdb、gitee、vim、XShell、WireShark、VMware、StarUML、valgrind Qt
研发扫地机器人
技术要点:线程池、qt 、内存共享
开发平台:C++、gcc/g++7.5.0、ubuntu22.04
项目功能:
1) 实时显示机器人位姿、传感器数据(激光雷达点云、里程计等)、地图构建过程
2) 动态修改PID控制参数、运动速度等,并立即观察控制效果,极大提升了调试效率
3) 可视化记录与回放机器人运行日志,用于问题定位和算法分析
中英文网页混合检索与关键词联想系统
技术要点: Reactor、线程池、偏移库、倒排索引、simhash、TF-IDF、最小编辑距离、余弦相似度、LRU、json、
Redis、多线程缓存系统,内核定时器、线程局部存储,日志系统
开发平台:C++11、gcc/g++7.5.0、ubuntu18.04
项目功能:
4) 基于Reactor模型,利用线程池与cpoll多路复用技术,实现的高性能、高并发的检索系统
5) 利用cppjieba开源库对语料进行分词,过滤停用词,建立词典库
6) 利用tinyxml2开源库与std::regex解析xmI语料文件,建立网页库和偏移库
7) 利用simhash算法进行网页去重,根据TF-IDF算法求出所有单词权重、建立倒排索引库
8) 利用最小编辑距离算法,根据用户输入的关键词,求出编辑距离较小的联想词发送给用户,实现关键词联想功能
9) 利用余弦相似度算法,对用户输入的检索词进行解析,求出相似度较高的网页,并为每篇网页生成摘要信息后发送给用户,实现网页检索功能
10) 利用nlohmann/json开源库,将查询结果经json序列化后再发送给客户端
11) 利用Redis作为关键词联想模块的缓存系统,优化关键词查询效率
12) 利用LRU算法和线程局部存储机制,为工作线程分配两级LRUCache作为网页检索模块的缓存系统,并使用内核定时器timerfd实现Cache数据的更新、同步、持久化
13) 利用log4cpp开源库实现简易日志系统