实习总结

前言

7-17 – 8.31 39天(无一天请假,每天工作八小时以上),总的来说是一段非常愉快的实习经历,公司氛围很好,带我的leader非常非常Nice,教给我很多技术上知识,日常也很照顾我,实习时间不长,但收获满满。

所用技术栈

系统:CentOS 8
开发工具:C++(CLion),Git,conan,Cmake,

团队协作工具

GitLab(代码管理) confluence(文档协作) jira(需求跟踪)

工作日志

7.17
调研学习memory_order
编写基础库函数 itoa(int, char*) 实现各整型转字符串,并编写配套test(验证正确性)和benchmark(性能测试)
熟悉代码风格(googel-style)
7.22
1 测试boost multi_nidex性能 4个索引
7.27
写一个数据流,从系统到服务,再到数据库和从数据库到系统 db_manager
完善multi_index的benchmark
7.28
调研sqlite多线程安全问题
db-manger测试
–> 数据库会插入相同数据-> 设置主键
7.31
考虑逻辑代码 --> 检查自成交
8.3
柜台风控模块 risk_manager
8.6
调研系统集成部署方式
8.7
编写柜台测试系统 console_trader console_trader_executor + console_trader_terminal
8.10
解决risk_manager精度问题
调研mongodb
8.19
完善mock_td 柜台模拟程序 增加下单处理情况,撤单,数据存储
测试iguana功能 序列化和反序列化
8.24
修改数据库存储 mongodb

需求总结

1 itoa基础函数

功能

实现整型转字符串,并返回长度,解决标准库函数to_string会用到堆造成效率较低问题

注意事项

注意内存分配(堆栈)
使用模板函数,优化代码风格
除法开销较大,优化除法
benchmark注意编译器优化,防止语句不执行
CLion用release测试更符合实际性能

实现

实习总结_第1张图片
实习总结_第2张图片

2 数据库服务

功能

在柜台程序完成数据库存储,用于柜台重启后数据恢复和其他需要。

注意事项

高速告诉写服务
存储4key
注意多进程安全

实现

对于写操作,通过进程通信发送给写服务,异步完成。读操作直接对数据库进行读取。
数据库选择
sqlite和sqlorm
优点:实现简单,存储高效,orm好用。
缺点:文件存储,扩展性低
mongdb和iguana
优点:使用方便,不需要orm,序列化存储,适用复杂数据

3 柜台风控模块

功能

检测自成交,提供下单数撤单数等

注意事项

处于下单流程,性能高
考虑柜台重启数据恢复
处理精度误差

实现

对实体账号的instrument通过map对应一个结构体,结构体存放两个map(分别是买单/卖单价格对应订单数)和下单数、撤单数等风控数据,在下买单时直接查询对应卖单最低价(利用map有序性,但买单价格大于卖单价格时交易所会撮合订单成交)O(1)实现自成交检测,在订单下出(不在关键路径)之后O(logn)完成数据维护

4 柜台测试系统

功能

termianl交易终端,用于对柜台程序测试调试,手动撤单和平仓等操作。

注意事项

支持初始化查单操作
下单/撤单逻辑
打印回报

实现

分为两部分
console_trader_termial程序,用来实现用户交互,通过gflags和终端实现数据输入
console_trader_executor动态库,通过继承现有执行器,接收 console_trader_termial执行请求,实现下单,撤单,查询等操作,并输出数据信息。

5 完善柜台模拟程序

功能

用来模拟柜台,测试执行器或者柜台测试系统(测试真是一个复杂的事情,为了测试执行器,要写一个模拟柜台,为了测试柜台,要写一个模拟执行器,模拟柜台又可以用来测试模拟执行器)

注意事项

对于下单操作不再是直接返回全成交,而是判断是否涨跌停板,半成交,拒绝等,并根据合约类型返回不同回报
支持重启功能(数据存储)
支持查单,撤单操作

你可能感兴趣的:(学习总结)