之前我们在自己的用户群中做过一次调研,主要是1-5年编程经验的工程师,有应届生、有小厂的程序员,有大厂的程序员,也有经验不错的技术经理。
其中60%的人都认为数据结构和算法脱离实际工作的知识,基本用不到。
但是有过大厂经历的工程师,基本一致的认为数据结构和算法对于程序员来讲最重要的基本功。
为何他们说数据结构是程序员最重要的基本功?
01
不会数据结构和算法,大厂面试真的会拖后腿
很多大公司,比如 BAT、Google、Facebook,面试的时候都喜欢考算法、让人现场写代码。国内外的一线互联网公司,都会把数据结构和算法作为入门门槛,甚至 90% 的面试时间都是围绕数据结构和算法。
有些人虽然技术不错,但每次去面试都会“跪”在算法上,很是可惜。那你有没有想过,为什么这些大公司都喜欢考算法呢?
校招的时候,参加面试的学生通常没有实际项目经验,公司只能考察他们的基础知识是否牢固。社招就更不用说了,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。相比短期能力,他们更看中你的长期潜力。
2015年,Homebrew的作者去google面试,但不幸的是他被google拒绝了。Homebrew大家应该都听说过,它是Mac平台的安装包管理工具,全世界大大小小互联网公司的程序员可能都在用这个工具。这足以说明Homebrew作者的技术实力了吧?可他还是被拒绝了,当时他发了条twiiter吐槽。
google回应:“我们90%的工程师都在使用你写的Homebrew工具,你却不能白板编程一个二叉树的翻转,所以请滚蛋吧”。
你可能要说了,我不懂数据结构与算法,照样找到了好工作啊。那我是不是就不用学数据结构和算法呢?当然不是,你别忘了,我们学任何知识都是为了“用”的,是为了解决实际工作问题的,学习数据结构和算法自然也不例外。
02
不能做一辈子的CRUD boy
如果是做业务开发的工程师,平时多数用的都是已经封装好的现成的接口、类库来堆砌、翻译业务逻辑,很少需要自己实现数据结构和算法。
但是,不用不代表不需要懂。
作为业务开发,我们会用到各种框架、中间件和底层系统,比如 Spring、RPC 框架、消息中间件、Redis 等等。在这些基础框架中,一般都揉和了很多基础数据结构和算法的设计思想。
在平时的工作中,数据结构和算法的应用到处可见。我来举一个你非常熟悉的例子:如何实时地统计业务接口的 99% 响应时间?
你可能最先想到,每次查询时,从小到大排序所有的响应时间,如果总共有 1200 个数据,那第 1188 个数据就是 99% 的响应时间。很显然,每次用这个方法查询的话都要排序,效率是非常低的。但是,如果你知道“堆”这个数据结构,用两个堆可以非常高效地解决这个问题。
03
实现“高性能代码”
如果你所开发的产品用户量很少,需要处理的数据量也很少,开发中不需要考虑那么多性能的问题,至于是否在编码时考虑数据结构,意义并不大。但是你真的想“十年如一日”地做一样的工作吗?
久而久之,十年的积累可能跟一年的积累没有任何区别。这样的人,怎么不会被行业淘汰呢?
如果你所开发的产品有几百万上千万的用户,性能几乎是开发过程中时刻都要考虑的问题。一个简单的 ArrayList、Linked List 的选择问题,就可能会产生成千上万倍的性能差别。这个时候,数据结构和算法的意义就完全凸显出来了。
如果你想掌握大厂数据结构和算法的面试技巧,同时也想掌握一些框架、中间件和底层系统的底层原理,那么下面这门课程可能是你的不二之选。
从程序员到架构师到技术经理樊延欣老师,前后花了6年时间用各种工作方式来扎实数据结构与算法。在这门课程中分享了互联网公司面试中至少50%数据结构与算法方面的知识,而且都是面试实战中必考项。
讲解的过程中,不仅会给出实现结果,更会对每道题目的分析思路进行详细地讲解,不论是面试还是实战,都能让你有的放矢地学习应该要掌握好的数据结构和算法。
让我们和樊延欣老师一起,死磕数据结构,跳过代码陷阱,尽快完成数据结构的通关,实现向更好工作机会的晋升。