实习年终总结
关于Git:
第二个月接触变多,第一个月只有最开始拉了一次分支,然后中途暂存了一次,使用add和commit可以提交到本地,会有本地备份,可以作为写代码的参考和方便回滚。任务一完成后合并分支到主干,要考虑变基(rebase),因为拉下来后写的太久,主干上已经提交了新的节点,用merge已经无法合并,每次智慧合并都会失败,然后使用Beyond Compare+Git可视化工具,手动找不同点,把不是我写的都rollback。以前没接触过大型项目,只会写玩具,确实没发掘git的强大。第二个月处理接口任务需要不断切换分支,所以用的比较频繁。
关于CPP:
(不能说的太具体,说点基础概念吧)
绕不开的单元测试(抗重构/挺符合我干的业务场景的),单元测试跑过代表新写的代码没有低级错误(维护功能不会回退),能通过特例,但是不能保证没有逻辑错误。单元测试存在于项目内部,不宜写的冗长,讲究性价比。我在debug的时候写了一堆,因为要测试每种类型的逻辑,我就kuku写了一堆烂代码,也没想到把一些基础的坐标系参数等数据抽出来,全堆在函数内部了。
模板元编程。大佬们真的很喜欢模板和写新特性,见到了很多 std::enable_if 和 constexpr,在运算符重载和结构体中疯狂用,对于非基础类型可以写模板特化,对于没写的我只能搞类型转换,又写了一堆烂代码。
宏定义。链接导入导出的宏,标志操作系统下操作的宏...
绕不过去的指针/智能指针,首先把返回值用引用类型的参数,构建无数个回调函数是常见用法,对于特定的坐标数组(例),用指针+长度的方式也不错,题外话:在序列化的时候碰到了void*类型,设计出现问题,没有配套给出size_t size,不知道stream的时候流多少合适,向其它基础类型可以直接根据字节数量流入流出。继续:关于智能指针的转换,如何用普通指针接收unique_ptr...
强制转换也用的很多,最优美的地方是子类对象向基类对象的向上转换,很多逻辑上的xx类型,通过获得基类对象再去做其它数学运算,其它就是类型转换,什么时候用类型检查的static_cast,什么时候用运行时检查的dynamic_cast(通过模板对类类型做转换),然后有时候指针转换不能类型检查,保证逻辑正确的情况下,直接无检查的类型转换。
作用域using,这和设计的类型封装思想结合了,结合实际。
其它就是设计逻辑上的学习,内核 -> 应用。内核的层级划分。
关于调试,动态链接静态链接,如何改CMakeList,要链接哪些文件...
我自己在完成任务的时候也做了一些小设计,第二个月之后哈,前面确实有点懵。包括抽出Local函数,添加static保证只能在当前文件使用,泛型的函数参数设计等。总之挺走运的,之前的实习生一直在写脚本,我干的还是接触项目了。
关于业务:
也学了一点皮毛,后续不想接触,也不想做这个,感觉基础太差太薄弱,想跑。具体是什么不说了,现在还不想被开盒。
关于打算:
到目前还保持了每日一题hot100的任务,现在进度36/100,预计3月份能刷完,很多之前都做过,我觉得还是想一下思路,然后看题解记住解题方法比较好,适合短时间速成者。看了阿秀推荐的《Effective C++》目前刚看一章,想过年的时候看完,留个印象。然后实习结束后可能补一下数据库和QT的技术栈,侧重在数据库和中间件,秋招先冲,春招再求稳。