惊艳!腾讯微软内部 5 大算法文档 + 源码,大厂 offer 拿到手软
不 BB,直接上干货,非科班出生,毕业工作后才开始学算法,到目前学了 4 年 !!!
为了让你对数据结构和算法能有个全面的认识,我画了一张图,里面几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点。
这里面有10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
掌握了这些基础的数据结构和算法,再学更加复杂的数据结构和算法,就会非常容易、非常快。
这张图最主要的目的是用来对于数据结构与算法进行相应的梳理,毕竟数据结构考察变数有点大,大家可以在这张图上根据自己的理解进行补充
而现在各大厂,面试的过程中,都会对于数据结构与算法进行一定的考察,而像腾讯、字节这样的公司对于算法的考察更是重点,那在面试之前该怎么准备呢?
除了上面的思维导图之外,我再推荐一些算法书籍的选择给大家参考一下。我会从入门、基础、面试三个层次进行整理
入门系列
入门的同学,我建议你不要过度追求上去就看经典书。
不要一来就拿着《算法导论》开始啃,初学就去啃这些书肯定会很费劲。你一旦啃不下来,挫败感就会很强。
然后就放弃学算法了。
所以,入门的同学,我建议你找一些比较容易看的书来看,比如《大话数据结构》和《算法图解》。
不要太在意书写的深浅,重要的是能不能坚持看完。
《大话数据结构》 这本书最大的特点是,它把理论讲得很有趣,不枯燥。而且每个数据结构和算法,作者都结合生活中的例子进行了讲解, 能让你有非常直观的感受。
虽然这本书有 400 多页,但是花两天时间读完,应该是没问题的。
如果你之前完全不懂数据结构和算法,可以先从这本书看起。
《算法图解》 跟《大话数据结构》走的是同样的路线,就像这本书副标题写的那样,“像小说一样有趣的算法入门书”,主打“图解”,通俗易懂。它只有不到 200 页,所以内容比较少。
作为入门,看看这本书,能让你对数据结构和算法有个大概的认识。
当然,这些入门书共同的问题是,缺少细节,不够系统,也不够严谨。
所以,如果你想要系统地学数据结构和算法,看这两本书肯定是不够的。
需要这份数据结构与算法资料的,关注公众号:Java架构师联盟,即可查看免费获取方式
基础系列
通过基本入门算法书的调教,你已经逐渐体会到了算法的魅力,现在正是时候踏入基础系列算法的领域!!!
这些书籍需要你费点心思去阅读。
很多同学在学习的过程中,看到一篇算法科普文章经常会有这样的想法。
哎呀,要是文章的代码是 Java 语言就好了呀。
哎呀,要是文章的代码是 Python 语言就好了呀。
虽然代码并不会很严重影响阅读,但还是有很多强迫症的同学喜欢看到文章的解释代码是自己擅长的。
我这里推荐《数据结构和算法分析》,这本书非常系统、全面、严谨,而且又不是特别难,适合对数据结构和算法有所了解,并且掌握了至少一门编程语言的同学。而且,这个作者也很用心。
他用了三种语言,写了三个版本,分别是:《数据结构与算法分析 :C 语言描述》《数据结构与算法分析:C++ 描述》《数据结构与算法分析:Java 语言描述》。
这里我看的是关于Java语言版本的,因为C啥的,大学之后基本就还给老师了
需要这份数据结构与算法资料的,关注公众号:Java架构师联盟,即可查看免费获取方式
面试实战系列
大家都知道,对于程序员来说很大程度上算法就是为了应付面试的。
所以,推荐三本有益于面试的书籍,分别是:《剑指 offer》《编程珠玑》《编程之美》。
《剑指 offer》
《剑指 offer》这本书的目的非常明确,就是为了面试。
这本书几乎包含了所有常见的、经典的面试题。如果能搞懂这本书里的内容,应付一般公司的面试应该不成问题
而对于面试,不是写实现怎么可以,所以这里我除了面试题之外,源码也一起奉上
第1章介绍面试的流程。通常整个面试过程可以分为电话面试、共享桌面远程面试和现场面试3个阶段,每轮面试又可以分为行为面试、技术面试和应聘者提问3个环节。本章详细讨论了面试中每个环节需要注意的问题。其中,1.3.2节深入讨论了技术面试中的5个要素,是全书的大纲
第2章梳理应聘者在接受技术面试时需要用到的基础知识。本章从编程语言、数据结构及算法3个方面总结了程序员面试的知识点。
第3章讨论应聘者在面试时写出高质量代码的3个要点。通常面试官除了期待应聘者写出的代码能够完成基本的功能,还能应对特殊情况并对非法输入进行合理的处理。读完这一章,读者将学会如何从规范性、完整性和鲁棒性3个方面提高代码的质量。
第4章总结在编程面试中解决难题的常用思路。如果在面试过程中遇到复杂的难题,那么应聘者最好在写代码之前形成清晰的思路。读者在读完这一章之后,将学会如何用画图、举例和分解这3种思路来解决问题。
第5章介绍如何优化代码的时间效率和空间效率。如果一个问题有多种解法,那么面试官总是期待应聘者能找到最优的解法。读完这一章,读者将学会优化时间效率及用空间换时间的常用算法。
第6章总结面试中的各项能力。在面试过程中,面试官会一直关注应聘者的学习能力和沟通能力。除此之外,有些面试官还喜欢考察应聘者的知识迁移能力、抽象建模能力和发散思维能力。
第7章是两个面试案例。在这两个案例中,读者将看到应聘者在面试过程中的哪些举动是不好的行为,而哪些表现又是面试官所期待的行为。
文章篇幅原因,下面两本书我就直接截取书中部分内容进行展示
需要这份数据结构与算法资料的,关注公众号:Java架构师联盟,即可查看免费获取方式
《编程之美》
本书收集了大约60道微软技术面试题,作者试图通过书中妙趣横生的问题和详细的解说,面试者的各种小故事,告诉读者微软需要什么样的技术人才,重视什么样的能力,如何甄别人才。但它更深层的意义在于引导读者思考,帮助读者重拾通过编程探索未知世界的乐趣。
第1章游戏之乐—游戏中碰到的题目
第2章数字之魅--数字中的技巧
第3章结构之法字符串及链表的探索
第4章数学之趣--数学游戏的乐趣
《编程珠玑》
这本书比较简单,这里就给大家稍微展示一下吧,大家有兴趣可以看一下
需要这份数据结构与算法资料的,关注公众号:Java架构师联盟,即可查看免费获取方式
学习数据结构和算法的过程,是非常好的思维训练的过程,所以,千万不要被动地记忆,要多辩证地思考,多问为什么。
如果你一直这么坚持做,你会发现,等你学完之后,写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。
你的编程内功就真正得到了修炼。
版权声明: 本文为 InfoQ 作者【小Q】的原创文章。
原文链接:【http://xie.infoq.cn/article/2252f753dbd2f2093a1b3a73f】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
评论