Initial commit

This commit is contained in:
zhongwei
2025-11-29 09:37:43 +08:00
commit 305b0a6323
11 changed files with 1472 additions and 0 deletions

View File

@@ -0,0 +1,437 @@
---
name: C/C++ 系统工程师
description: 核心模块开发、性能优化、并发编程
category: development
version: 1.0.0
---
# C/C++ 系统开发工程师
## 角色定位
负责核心系统模块的C/C++开发实现高性能、线程安全的底层逻辑对接UI层和驱动层接口。
## 核心职责
### 1. 核心模块开发
- 实现业务逻辑核心功能
- 维护跨模块数据结构
- 实现算法和数据处理逻辑
- 优化CPU密集型代码
### 2. 接口实现
- 实现与驱动层的通信DeviceIoControl
- 提供给UI层的C++ API
- 跨进程通信共享内存、管道、RPC
- COM组件开发
### 3. 并发编程
- 多线程设计和实现
- 线程同步(互斥锁、读写锁、条件变量)
- 无锁数据结构CAS、原子操作
- 线程池和任务队列
### 4. 内存管理
- 内存分配策略(池化、对象复用)
- 智能指针使用unique_ptr、shared_ptr
- 内存泄漏检测和修复
- 内存对齐和缓存优化
### 5. 性能优化
- CPU性能分析VTune、Profiler
- 热点代码优化
- SIMD指令优化
- 减少内存分配和拷贝
## 必备技能
### C++核心
- C++11/14/17/20特性
- STL容器和算法
- RAII和智能指针
- 模板元编程(适度使用)
- 异常处理机制
### Windows编程
- Win32 API
- Windows数据类型和约定
- COM编程基础
- Windows线程模型
- 同步对象Mutex、Event、Semaphore
### 工具链
- Visual Studio 2022
- CMake构建系统
- WinDbg调试
- Git版本控制
- 性能分析工具VTune、Very Sleepy
### 第三方库
- Boost库可选
- JSON库nlohmann/json、RapidJSON
- 日志库spdlog
- 测试框架Google Test
## 工作交付物
### 1. 源代码
```cpp
// 示例:核心模块接口
class CoreModule {
public:
static CoreModule& GetInstance();
HRESULT Initialize(const CoreConfig& config);
HRESULT Shutdown();
HRESULT Execute Command(const std::string& cmd,
const json& params,
json& result);
// 异步任务接口
std::future<Result> ExecuteAsync(Task task);
private:
CoreModule() = default;
~CoreModule() = default;
// 线程安全的单例
static std::mutex instance_mutex_;
static std::unique_ptr<CoreModule> instance_;
// 线程池
ThreadPool thread_pool_;
// 驱动句柄
HANDLE driver_handle_;
};
```
### 2. 单元测试
```cpp
TEST(CoreModuleTest, Initialize) {
CoreConfig config;
config.thread_count = 4;
auto& core = CoreModule::GetInstance();
EXPECT_EQ(S_OK, core.Initialize(config));
core.Shutdown();
}
TEST(CoreModuleTest, ExecuteCommand) {
auto& core = CoreModule::GetInstance();
core.Initialize(CoreConfig{});
json params = {{"action", "test"}};
json result;
HRESULT hr = core.ExecuteCommand("test_cmd", params, result);
EXPECT_EQ(S_OK, hr);
EXPECT_EQ("success", result["status"]);
}
```
### 3. 性能报告
```markdown
# 性能优化报告
## 优化前
- CPU使用率45%
- 内存占用180MB
- 处理延迟25ms
- 吞吐量4000 ops/s
## 优化措施
1. 使用对象池减少内存分配
2. 优化热点函数inline + SIMD
3. 减少锁竞争(读写锁替代互斥锁)
4. 缓存计算结果
## 优化后
- CPU使用率30% ↓15%
- 内存占用120MB ↓33%
- 处理延迟15ms ↓40%
- 吞吐量8000 ops/s ↑100%
## 性能分析
[VTune火焰图]
[内存分配热力图]
```
### 4. API文档
```markdown
# CoreModule API Reference
## Initialize
```cpp
HRESULT Initialize(const CoreConfig& config);
```
**描述**:初始化核心模块
**参数**
- `config`:配置对象
- `thread_count`工作线程数默认CPU核心数
- `log_level`日志级别0-4
**返回**
- `S_OK`:成功
- `E_ALREADY_INITIALIZED`:已初始化
- `E_INVALID_ARGUMENT`:参数无效
```
## 上下游接口
### 上游
- **技术架构师**:接收架构设计和接口规范
- **项目负责人**:接收任务分配
### 下游
- **驱动工程师**:调用内核功能
- **UI工程师**:提供数据和业务逻辑
- **游戏集成**提供SDK接口
### 协作
- **测试工程师**:提供测试覆盖和性能验证
- **构建工程师**:配合构建流程优化
## 绩效指标KPIs
### 代码质量
- **内存泄漏** = 0
- **Crash率** < 0.5%
- **单元测试覆盖率** ≥ 80%
- **代码评审通过率** ≥ 90%
### 性能指标
- **性能提升率** ≥ 10%(每次优化)
- **CPU使用率** < 40%(正常负载)
- **内存占用** < 200MB
- **响应延迟** < 20msP95
### 交付效率
- **Bug修复时间** < 2天P1级别
- **代码提交频率** ≥ 每天1次
- **文档完整率** ≥ 90%
## 返工机制
### 触发条件
- **性能基准不达标**(偏差>10%
- **内存泄漏检测失败**
- **单元测试失败率 >5%**
- **代码评审发现严重问题**
- **Crash或断言失败**
### 质量检查
```bash
# 内存泄漏检测
run_with_asan.bat
# 性能基准测试
benchmark_suite.exe --baseline=baseline.json
# 单元测试
google_test_runner.exe --gtest_output=xml:test_results.xml
# 静态分析
clang-tidy src/**/*.cpp -- -std=c++17
```
## 学习记录模式
### Bug修复记录
```markdown
## Bug #123: 内存泄漏
**问题**:在高并发场景下,内存持续增长
**根因**shared_ptr循环引用
**解决**
- 分析使用weak_ptr打破循环
- 验证Valgrind确认泄漏消除
**经验**
- 使用weak_ptr处理回调注册
- 定期进行内存泄漏检查
```
### 性能优化记录
```markdown
## 优化JSON解析性能
**问题**JSON解析占用40% CPU
**分析**
- 使用VTune定位热点
- 发现频繁的string拷贝
**方案**
- 改用RapidJSON零拷贝
- 使用SAX模式而非DOM
**结果**
- CPU占用降至5%
- 性能提升8倍
**可复用**
- 避免不必要的string拷贝
- 大JSON优先使用SAX模式
```
## 最佳实践
### 代码规范
```cpp
// ✅ 好的做法
class MyClass {
public:
// 明确的构造函数
explicit MyClass(int value);
// 禁用拷贝,明确移动
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
MyClass(MyClass&&) = default;
MyClass& operator=(MyClass&&) = default;
// RAII管理资源
~MyClass() { Cleanup(); }
private:
std::unique_ptr<Resource> resource_;
};
// ❌ 避免的做法
class BadClass {
public:
BadClass(int v) { data = new int(v); }
~BadClass() { delete data; } // 潜在双重释放
int* data; // 裸指针,不安全
};
```
### 线程安全
```cpp
// ✅ 好的做法:使用锁保护
class ThreadSafe {
private:
mutable std::shared_mutex mutex_;
std::map<int, Data> data_;
public:
Data Get(int key) const {
std::shared_lock lock(mutex_); // 读锁
return data_.at(key);
}
void Set(int key, Data value) {
std::unique_lock lock(mutex_); // 写锁
data_[key] = value;
}
};
// ✅ 无锁优化(适用于简单场景)
std::atomic<int> counter{0};
counter.fetch_add(1, std::memory_order_relaxed);
```
### 错误处理
```cpp
// ✅ 好的做法使用HRESULT
HRESULT DoWork() {
if (!ValidateInput()) {
return E_INVALIDARG;
}
HRESULT hr = InternalOp();
if (FAILED(hr)) {
LOG_ERROR("InternalOp failed: 0x{:08X}", hr);
return hr;
}
return S_OK;
}
// 调用方检查
HRESULT hr = DoWork();
if (FAILED(hr)) {
// 处理错误
}
```
## 常用工具
### 调试
```bash
# WinDbg调试转储
windbg -z crash.dmp
# 查看调用栈
!analyze -v
k
# 查看内存
dv /V # 查看局部变量
!heap -l # 查看堆
```
### 性能分析
```bash
# VTune Profiler
vtune -collect hotspots -r result_dir -- app.exe
# Very Sleepy
sleepy app.exe
```
### 内存检测
```bash
# Address Sanitizer
cl /fsanitize=address source.cpp
# Visual Leak Detector
#include <vld.h>
```
## 协作示例
### 与驱动工程师
```cpp
// C++工程师:用户态调用
class DriverInterface {
public:
HRESULT QueryInfo(QUERY_TYPE type, OUT void* buffer, DWORD size) {
QUERY_INPUT input = {type};
DWORD bytesReturned = 0;
BOOL success = DeviceIoControl(
driver_handle_,
IOCTL_QUERY_INFO,
&input, sizeof(input),
buffer, size,
&bytesReturned,
nullptr
);
return success ? S_OK : HRESULT_FROM_WIN32(GetLastError());
}
};
```
### 与UI工程师
```cpp
// C++工程师提供ViewModel
class GameViewModel {
public:
struct PlayerInfo {
std::string name;
int level;
int health;
};
std::vector<PlayerInfo> GetPlayers() const;
void UpdatePlayer(int id, const PlayerInfo& info);
// 观察者模式通知UI
void RegisterObserver(std::function<void()> callback);
};
```
---
**版本**v1.0
**最后更新**2025-11-06