后记
写这一系列文章是从两年前就开始构思的,2019年中旬开始动笔吧。
讲讲一些故事:
故事1:想起大学还没毕业的时候,2015年,在广州去一家还是用老式办公桌的公司面试,面试官问我知道什么数据结构,我说链表,然后有树和图,面试官说话很难听,他觉得我什么都不会,半挂子,然后面到一半他就生气直接走了,等了很久后HR说你可以回去了。我在想,我也是学计算机科学的,大学里面都有教呀,面试官为什么这样呢,语气这么差,一点宽容的心都没有,以为我什么都不会?我只是站在不一样的角度看问题。链表,树和图也是数据结构呀,面试官非得说二叉排序树,队列才是数据结构,然后也不给我机会去讲,我就被鄙视了一把。
故事2:然后到了2017年,腾讯微视的面试官,不知去哪里捞我的简历,那天是刚工作完,晚上七点多,收到了一个电话就说要面试,一脸懵逼,说是微视的,然后我就说你问吧,大哥就开始背诵题目,电话里面开始问Letcode题,我每一条回答他都不满意,然后突然就问你知道单链表吧,我糊涂了,什么是单链表,大学没教呀,我就说有前驱和后驱节点,一个个链接起来?大哥可能觉得我low,感觉有点生气就挂了我电话,留下我凌乱。后来我去百度了一下,哦,是单向链表。汗颜,我确实是学计算机科学的,对不起,我给人造成了假象,我连单链表都不会。
故事3:然后到了2018年,我去北京面试一家小公司,做比特币期货系统的,问我快速排序的时间复杂度是多少,我说logN,然后面试官问了三次真的吗,我说是呀,然后面试官直接甩身离场而去,留下我一脸懵逼,然后HR通知我可以走了。我在想,这些人怎么火气这么大,问数据结构,有问题你讲啊,你不考察其他的经验啥的吗?
故事4:然后到了2019年,字节跳动开始要求翻转二叉树了,真的,你脑袋一脸空白,这种需要用到的时候才翻下书的东西,现场基本社死。
于是:
既然面试的时候,面试官需要问这些,你就需要比面试官懂得更多,更细,于是我就想开始体系化的写文章,并且按照我自己的体会,简单到复杂写出我的理解。
因为工作也比较轻松,有大量的空闲时间,于是每天上班的时候就写一点,一般一个知识点写一两天,包括代码都有实现。不知不觉,我就觉得,哎,也就那样了,哪有什么难的,这不就是大学学一个学期的知识吗,只不过大学我没有去整理,教材也比较烂,有些教材甚至都是错的,比如那本考研的C数据结构,你很难去体会一下中国应试教育带来的摧残。要想更深入,还是要自己上手。
写了半年的时间吧,就写完了上部分,直接从基本数据结构,续到了红黑树。每一个章节都是自成一章,可以分别食用。
本来开始写更有趣的图论,比如深度搜索和广度搜索,这种走迷宫的算法,最小生成树还有最短路径啥的。
但感觉这些知识太深了,而且工程上一般用不到,面试也基本不问,然后我自己也不能保证写得好,因为这部分内容就都是算法了,可能体系很大。
于是,我就不继续往下写了,想学习图论的,可以看看算法导论。
因为每个数据结构或者算法基本都是独立的,所以要贡献分享新的数据结构或算法,欢迎大家来参与写作,提PR就可以了,感谢大家。