数据结构与算法之美-学习心得系列一

本来打算贴上极客时间的目录图片,结果发现图片太长了。影响到阅读,何况我并不是为了宣传极客时间的专栏。

  1. 作为一名软件工程师,为什么要学习数据结构和算法?
    看到这个标题,我打算先不看文章,先自己反思一下。自己写程序多年,发现在做很多项目的时候被算法限制了自己的发挥,很多实现明明知道应该有更好的办法,但是就是无法写成代码。还有很多时候,看别人的源码也会一知半解,甚至要加上断点调试才知道整个实现逻辑。所以,算法在前期可能看上去没那么重要,因为有太多的框架,太多的基础设施提供,而去实现一些中小型的系统,因为负载量一般都不高,很多无需考虑性能问题,就算性能有点问题,一般也会粗暴的增加硬件配置去解决,毕竟现在云服务器、硬件成本越来越低。刚出道的时候,遇到过很多不堪入目的代码,也见过很多有3年左右开发经验的同学同事绕了一大圈写了一堆莫名其妙的的逻辑去解决某个简单问题,一般都是只要实现了业务需求即可,至于性能。呵呵!这种情况出现在asp.net比较多。我的第一家公司是深圳一家外包公司,进去没多久,我们老大就看不下去我们写的各种嵌套if,过去这么多年了,还是印象深刻,他教我们反向思维,在if里面提前return代码,这样就不用一个个的if嵌套下去了,达不到某个条件就直接return了,不用再写个else。
    接下来看看专栏作者,谷歌工程师的解释。
    1. 通关大厂面试,这个对于我这种草根来说,进入大厂感觉是一个遥不可及的梦,哦,不对,做梦也没有想过这个事。
    2. 业务工程师从CRUD boy岗位进阶。基础框架中糅合了很多基础数据结构和算法的设计思想,掌握数据结构和算法对于阅读框架源码,理解其背后的设计思想,有非常大的帮助。
    3. 基础架构研发工程师写出达到开源水平的框架。这个还是岗位与技术的进阶。对于自己来说,各种各样的源码拿来即用,很少去考虑过他们是怎么实现的,我是为了解决问题而解决问题,只考虑当下,以后遇到了又得查资料,这样毫无积累,技术没有任何长进。
    4. 对编程还有追求,不想被行业淘汰。确实现在竞争越来越激烈了,感觉现在遍地都是程序员了,这是一个最好的时代,也是一个最坏的时代。30岁越来越近,不知道何去何从。
    5. 最后掌握了数据结构和算法,你看待问题的深度,解决问题的角度就会完全不一样。好吧,我拭目以待。
  2. 如何抓住重点,系统高效得学习数据结构和算法。
    这正是我学习你这个专栏的原因。
    1. 数据结构指一组数据的存储结构,算法是操作数据的方法。数据库类似于图书馆,存的数据类似于书本,书本分门别类并按照一定规律编号,分类与编号就是书籍这种数据的存储结构。我们去查找某一本书的方法就是算法。这个专栏主要讲一些著名的数据结构和算法,比如队列、堆、栈、二分查找、动态规划等。
    2. 数据结构和算法的关系。数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用再特定的数据结构之上。就像你要去统计人数,如果人站得乱七八糟的东一个西一个,而且没事还要走动一下,你就很难统计出准确的人数出来,如果让人按照10人一队站整齐,,就可以快速准确的统计出人数来。
    3. 学习重点,先掌握最重要概念:复杂度分析。数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,因此,我们需要一个考量效率和资源消耗的方法,这就是复杂度分析方法。20个最常用的、最基础数据结构与算法:
      1. 10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Tried树;
      2. 10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
  3. 一些事半功倍的学习技巧
    1. 边学边练,适当刷题。https://leetcode.com/ 力扣,也有中文版。左耳朵耗子推荐的算法练习网站。
    2. 多问、多思考、多互动。刚好有个朋友做大数据的,算法这块可以多找他请教~~
    3. 打怪升级学习法,给自己设定切实可行的目标。
    4. 知识需要沉淀,不要试图一下子掌握所有。需要多复习。
posted @ 2019-04-20 19:07 toMo 阅读(...) 评论(...) 编辑 收藏