总结一下这个学期

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rsy56640/article/details/80177989

这学期我个人的工作算是到此结束了,这里总结一下。之后就去准备期末的各种事宜了。

这几个月以来对工程的兴趣可以说是从微不足道到乐在其中,起因是上个学期末开始看《Effective C++》,然后寒假又精读了一遍,对于底层系统和框架方面产生了极大的兴趣。之后又结合算法导论,把一些经典算法以工程化的手法封装成库,收获颇大。

又看了《More Effective C++》、《深度探索C++对象模型》(这个还没看完),与之相对的《Effective Java》和《深入理解Java虚拟机》虽然挺有兴趣,不过目前没有打算看。

学期初先是封装了线段树,这个应该算是个人风格的成型之作吧。
不过学期初没有太抓紧时间,做的工作不是很多。
做了一些POJ上的算法题,然后又和同学去参加了省赛(划水拿铜奖)。
之后写了个个人认为不错的组件:基于红黑树的map。不过有一点美中不足:刚开始写红黑树的时候没有想到后来会写map,所以没有做一些 特化 和 抽象 的准备工作,导致我写的map要求用户自定义类型拥有默认构造函数。然而我看MSVC的标准库里,(常见map接口里)只有std::map::operator[]需要默认构造函数。这个的确算是个瑕疵了。(所以说一开始设计的时候应该疯狂抽象才好)
还写了一个KMP模板,感觉越写越有样子了。
(不过还是有点担心,如果自己拘泥于自己的风格,有可能闭塞,还是要看看别人的源码啊)
接着五一封装了B树,中间写的快崩溃,不过最后还是勉强写完了。但是,应该是不能用的:一是有内存泄漏,因为我一开始sb了,想着把东西存到磁盘上,结果那个一直空着没有写,早知道一开始就写一个in-memory的B树了。二是删除函数可能出现错误,这个地方书上没有给出伪代码,我一天写完写到删除函数的时候已经懵逼了,而且还要考虑磁盘读写的位置,所以最后比较混乱。
以后有机会一定写一个Bplus树。

其实一开始我是打算写一个分布式的LSM框架的,但是时间原因,只写了一些核心组件,以后读LevelDB源码的时候顺便再搞一搞。
现在还没写的核心组件也就是 hash 和 skiplist(跳表,这个感觉可有可无) 了,
hash目前有两个实现的想法:
1. 取模散列,每个桶里放一棵红黑树,这样即使是最坏情况,也是一棵红黑树了。
2. Cuckoo Hash,之前参考了一下CMU的论文,感觉很有趣,据说效率也很高。
3. 还有一个小问题,就是concurrent(并发机制),这个到时候再了解一下C++11线程库std::thread,(我猜实现并发hash应该不算困难,好像只要每个桶上锁就ok了?)

还有一个东西:智能指针(和引用计数)我也很想写,而且还需要了解一下jvm的GC机制。(据说现在openJDK10里好像用rust重写了jvm,然后GC可以压缩到几十ms???)

STL源码倒是读了一些,对于内存管理的手法(空间置配器) 和 型别技术(traits泛型萃取) 都略有了解。

…………………………………………………………………………………………………………………….

最后,感觉目前状态奇好,对于 算法、工程、计算机理论 这三个方面都充满兴趣。
深感兴趣才是最大的动力啊。

目前对于下学期的计划是:统计算法,即机器学习。
话说我的数学水平在国软应该属于无敌了,不过这个环境也不好,导致我大学两年都没怎么学数学,在某些方面可能还不如高中时期的巅峰水平(几何,数论,组合?)。到现在连泛函都不会。。。(其实连拓扑结构都不怎么懂),更别说测度理论了。


最后再总结一下之后关于工程方面的计划:

扫描二维码关注公众号,回复: 3107576 查看本文章

首先,代码水平还是要保持一下,万一学一学期算法全忘了,
之后还是要偶尔做一做 LeetCode (POJ) 暖暖手。

然后是工程源码和书籍:
计划之内的书:《深入探索C++对象模型》(继续读完),《Effective STL》(略读),《Effective Modern C++》(精读?),《设计模式》(略读,这个其实已经没什么意义了,一是简单,二是不如一些范式来得好用),《算法导论》(目前重要的部分几乎都看完了,还有一些可以看一看,顺便练练POJ),《深入理解计算机系统CSAPP》(精读!!!,话说下学期好像有这门课)

源码:LevelDB(有时间必看),redis / boost.asio / nginx(都不错,候选),STL源码(找机会再渗透一下,学一些low coupling方面的手法,主要是泛型设计),facebook.folly(这玩意太恐怖,但是以后看Modern Cpp的时候可以参考),Linux内核源码(偶尔参考一下还行,不过目前手头资料也很多,主要还是了解一下架构)

2018-6-5
想起来两本好书,随手记一下:
OOP with ANSI C
CS from the Bottom Up

猜你喜欢

转载自blog.csdn.net/rsy56640/article/details/80177989