1.目录
目标坚持周更,即每周总结一篇算法&数据结构,在这篇序章中将算法大纲序列整理如下,然后在到目录下方谈谈自己开这个系列博客的理由,不为别的,保持目标驱动、自我更新、学以致用。
《01:数组和链表》
《02:栈与队列》
《03:排序算法》
2.为什么要学数据结构和算法
IT开发工作中,大部分人是从业务开发为出发点的,而业务开发首要的是需求、功能的实现。在项目的里程碑、发版deadline等目标的驱动下,开发同学们往往挣扎于业务苦海,少有时间去思考性能优化和底层调用,往往一套框架和工具拿来即用,CURD不要太舒服。这样的结果就是一方面,第三方API和框架工具的使用大大提升了开发人员的开发效率,但是另一方面,许多开发人员对底层原理和数据结构知之甚少,一旦工具调用出问题则一脸懵B,所谓的开发工程师,无非是API调用工程师。
工作多年,我经历了多次线上生产的性能问题,这些经历生产上一些性能问题往往都是开发同学在对代码细节上考虑不周引起的,而这些操作往往都是对底层逻辑不熟悉导致的,掌握好这些基础写出更加优秀的程序,排查问题时也知道所以然,这是我考虑到学习算法的原因之一。同时,随着CS语言的进化和服务架构的变迁,总有一些不变的思想和精华历久弥新,比如设计模式和算法,这些功力的习得虽然耗时(手写一个算法的不见得比一个curd程序来的容易),但是一旦技能Get到手便可以融会贯通更多的技术栈。万丈高楼平地起,要想建摩天大厦,便需要过硬的基础知识,从现在开始重拾算法和数据结构。
3.为什么要用Go实现
从语法特性上来说,Go语言语法简单上手也快,集成了类C风格和Python的易用性,对新人来说是友好的一门语言,从语言的进化历史来看,Go语言可能也将是后台和区块链领域的主流语言,并且这个趋势越来越显著。评判一门语言的好坏和是否流行要看几个标准:1、开发社区力量,2、杀手级应用,3、学习曲线、4、语言生态等等,对比下go来看这些点,
- 1.Java和C的社区是十分强大,目前Go语言在中美两国的开发社区的热度已经愈来愈高。
- 2.Go目前已经出现了Docker、K8S、以太坊之类的现象级应用了,现在go在服务端中间件已经区块链底层系统构件上成为了标准
- 3.Go 语言有 Google 这个世界一流的技术公司在后面,并且解决了并发编程和写底层应用开发效率的痛点
因此,Go语言目前作为高并发与分布式系统领域炙手可热的语言,值得我们去学习,在算法的实现上抱着熟练一门编程语言的目的,我选择了Golang的实现方式,当然也完全可以采用别的语言实现一遍。
4.怎么做?看什么书?
无它唯熟尔,保持“刻意练习”!
解算法题、学数据结构不同于写业务上的CURD,心急求快的心态下去学算法往往不得要领,光看不想、光想不做往往都会陷入“转头空”,只有自己思考了用代码实现过了一遍才能真正掌握,戒骄戒躁,互勉!
算法书单列举如下:
- 趣味书:《算法帝国》,《数学之美》,《算法之美》
- 入门级:《大话数据结构》,《算法图解》
- 教科书:《数据结构和算法分析》
- 面试题:《编程之美》,《剑指Offer》,《编程珠玑》
- 殿堂级:《算法导论》,《算法》
- 骨灰级:《计算机程序设计艺术》
推荐极客时间上的两门课程,我的学习也是从这两门课程中的实战训练而来:《数据结构与算法之美》、《算法面试通关40讲》
《GO语言、DOCKER 和新技术》
《go语言实现数据结构与算法》
《LEETCODE 编程训练》
《数据结构与算法之美》
网友评论