# C++强化训练 **Repository Path**: NoGameNoLife1234_admin/c-intensive-training ## Basic Information - **Project Name**: C++强化训练 - **Description**: C++强化训练,主要是用于学习和交流 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-09-28 - **Last Updated**: 2023-10-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # C++强化训练 #### 介绍 用于C++强化训练的代码仓库,一共四十多道题。 #### 题目详情 1. 实现string 2. 实现array(可变数组)以及双向链表 3. ring buffer,要支持buffer size不够时自动扩展大小,以及空余过大时收缩大小 4. 通过stack push pop,call的方式(类似lua)调用类的成员函数,要支持返回值 5. 实现简单八叉树 6. 实现跳表 7. 实现对JSON文件的序列化及反序列化 8. 实现命令行参数解析以及分发action(类似ts的commander) 9. tcp socket练习:写两个exe,一个server,一个client,client和server互相发送消息,接收并打印出来,要求多线程接收发送或者异步接收发送,不能主线程同步接 10. 基于格子的位置管理:将地图划分为指定大小格子,一个格子中会有多个人物位置信息,根据选定人物的位置查找周围格子(九宫格)的所有位置信息(进阶要求:格子数量超大的时候内存使用要少) 11. 压缩数据表:读取数据表,将所有表数据存到一个连续buffer中(内存使用尽量少),同时提供查询接口(通过key查找整行数据) 12. 敏感词匹配(进阶要求:内存使用尽量少) 13. 运行时进行“绑定”,能够通过名字可以查找成员变量,还能调用成员函数或者调用静态函数等,实现简单的反射系统 14. Export 15. 在虚幻内实现海盗读表(需要了解宏以及模板特化) 16. 阅读虚幻的反射系统,输出笔记 17. 了解动态链接库(dll)以及静态链接库的区别,通过名字查找动态链接库中的函数(会使用系统api以及了解原理就行) 18. 运行时打印成员变量以及函数地址,打印静态变量以及函数地址(包括虚函数地址) 19. 调用系统api打印函数symbol信息,能够打印堆栈信息 20. 实现new和delete 21. 实现可在栈上分配内存的array,实现后阅读虚幻FArray关于栈上分配内存部分(提示InAllocatorType),并改造成即可支持栈上分配又可支持堆上分配内存的array 22. 通过实现自定义malloc和free来统计内存,并能够查找所有内存,只能自己内建数据结构(注意要处理自己内部分配的内存) 23. 通过实现自定义malloc和free来监视内存 24. 阅读虚幻的Malloc,实现可自定义扩展的内存分配器 25. 学习网上的gc机制与策略,输出学习笔记 26. 通过显示调用“ref”与“unref”,书写简单的自动gc机制(至少两种gc策略) 27. 改造“了解内存”系列中的反射系统,去掉上面题中的ref和unref,使用自定义new,做到自动gc 28. 阅读虚幻的gc系统,输出笔记 29. 实现智能指针 30. object池,要使用placement new 31. 简单内存池,要包含页管理等策略,要处理内部管理时的内存分配问题 32. 学会vs的数据断点功能 33. 自己书写工具,当内存写越界时崩溃并输出堆栈信息,要能检测出修改静态变量 34. 无锁队列 35. "实现一个基本的线程池。你需要实现以下功能: 36. 初始化线程池并启动指定数量的线程。 37. 向线程池提交一个任务。 38. 线程池中的线程应该能够并发地执行这些任务。 39. 实现一种机制来等待线程池中的所有任务完成。" 40. "在 37 题的基础上,这个线程池需要支持以下要求 向线程池提交一个任务,指定任务可以在一定时间后执行 可以取消未执行的延迟任务" 41. "针对于 38 的线程池,作如下优化: 线程池要尽可能地高效,以减少线程开销。 线程池应该能够适应高并发情况,并尽可能地利用现有的 CPU 资源。 线程池应该支持任务依赖,以便更好地利用现有的 CPU 资源。 你需要测试你的线程池,并记录下你的性能数据,以便进行比较。" 42. 了解 C++ 高性能计算,了解 SIMD 和 GPU 适合解决什么问题 43. 编写一个 C++ 程序,计算两个长度为 1,000,000 的浮点数数组的点积。使用 SIMD 指令集以提高计算效率。 44. 编写一个 C++ 程序,使用 GPU 计算一个长度为 1,000,000 的整数数组的总和。请在 C++ 中使用 OpenCL 实现 GPU 计算,并与串行计算进行比较。