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