- 2025/09/01 - 2028/07/01专业硕士 北京理工大学 计算机技术专业
- 2021/09/01 - 2025/07/01工学学士 北京理工大学 软件工程专业CET-6 525
- 2023/10 - 2023/12ICPC 区域赛(西安、合肥)银奖
- 2023/10 - 2023/12CCPC 区域赛(深圳)银奖
- 编程语言:熟悉 C/C++,了解 Rust、Python
1. 较熟练使用 C++ 语言,了解 C++ 11 的一些新特性,如右值引用、智能指针、模板元编程、自动类型推导等
2. 熟悉 C++ 的常用 STL 容器,如 map、unordered_map、vector
3. 了解 C++ 的并发编程,包括互斥、锁、共享锁、条件变量、线程闩、线程卡等
4. 熟悉常见的数据结构和算法,如顺序表、链表、栈、堆、二叉树、递归、归并、快排、动态规划
- 专业知识:了解图形学基础知识
了解光栅化渲染的基本流程,如基础的矩阵变换
项目描述:
在实时游戏场景中,传统 OOP 架构难以应对实体的并行计算需求,存在数据局部性差、线程竞争激烈等性能瓶颈,需构建新型数据驱动架构
ECS 是一种用于游戏开发和高性能应用的架构模式,将数据(Component)与行为(System)分离,Entity 作为 Component 的容器。这样设计有利于优化缓存、提高性能和灵活性,便于并行处理和代码解耦
项目亮点:
1. 使用稀疏集合 SparseSet 紧密存储某一类 Component,实现 O(1) 的删除和查询操作,提升缓存命中率。外层使用 unordered_map 进行 O(1) 的实体 ID 到稠密索引的映射
2. 使用了 C++ 模板元编程相关技术,如类型萃取、万能引用、引用转发、变参表达式等,来处理并查询 Entity 与 Component
3. 使用 C++ 的 Name mangling 机制在编译期获得每个组件的唯一 typeid
4. 尽量使用编译期计算,例如使用类型萃取相关技术在编译期判断元组中的 Component 类型是否重复。使用编译期 for 循环或者折叠表达式、index_sequence等来判断多个元组中的 Component 类型是否重复
5. 实现了简单的 System 调度器,可以手动建立 System 的依赖关系 DAG,并使用基础的 C++ 并发编程,包括互斥、锁、条件变量、future 等,实现了简单的线程池,支持按照依赖关系并发执行 System。其中使用基于条件变量的任务唤醒机制,降低线程空转率
6. 使用虚位节点方法实现了基于细粒度锁的线程安全的命令队列 CommandQueue