软件开发之数据结构和算法

1、计算机是怎么解决问题的

        要了解数据结构和算法的重要性,首先要搞明白咱们软件开发在计算机里面的是怎么运用的。

        那我们看看计算机解决问题的步骤:

软件开发之数据结构和算法_第1张图片

        这个过程中,能够产生的优秀工程师、数学家、程序员。如果你不会数学建模,不会算法,你就成不了一个优秀的程序员。

        可以说 数据结构是待处理问题的数学模型,算法则是处理问题的策略。作为一个优秀的程序员除了要对现实问题有很好的理解与把控外,还要深谙数据结构与算法才能找到合适的数学模型与算法,从而才能有后续的工作。由此数据结构与算法的重要性可见一斑。

        语言是程序的一种表达方式,你可以使用c++书写,也可以使用java书写。不管使用哪种语言,都是对数据结构和算法的一种具体化的表达。只不过c++具有天然优势(高性能、系统层代码),相比其他语言更适合做数据结构和算法。

2、数据结构、算法与职场

2.1 面试

        进入一家企业首先要过的是面试关。那么,企业如何判断一个经验比较少的面试者是否符合岗位需要呢?只能通过算法和数据结构来进行考察经验比较少的开发者!

  • 数据结构能够考察抽象建模能力
  • 算法能够考察逻辑思维能力
  • 数据结构和算法的组合运用能够考察处理实际问题的能力

        统计数据显示,90%以上的企业在对1-3年开发经验者进行面试时都会考察数据结构和算法知识。

下表中的知识是面试中经常会考到的:

数据结构

算法

数组与链表:单 / 双向链表、跳舞链

排序算法:快速排序,归并排序,计数排序

栈与队列

搜索算法:回溯,递归,剪枝技巧

树与图:最近公共祖先、并查集

图论:最短路,最小生成树,网络流建模

哈希表

动态规划:背包问题,最长子序列,计数问题

堆:大 / 小根堆、可并堆

基础技巧:分治,倍增,二分,贪心

字符串:字典树、后缀树

字符串:字典树、后缀树

        此外,一些大企业(比如:阿里、华为、腾讯、百度、字节等等)都会有好几轮面试,并且面试过程中一定会考察面试者的数据结构和算法知识,并根据这些面试结果来定岗定级。

        面试相当重要,这是面试官考察一个人逻辑思维能力的非常重要的手段!

2.2职位晋升

  • 开发中能够显著提升开发效率

        1、能够在开发中根据使用场景选择适合的数据结构,例如(Array:读快改慢 Linked改快读慢 Hash处于两者之间 )。

        2、当有一些复杂需求时,可能需要自己定义数据结构,那么,你就能根据学过的数据结构知识进行组合运用以解决问题。

        3、算法在开发中会经常使用,熟练使用各种常用算法可以高效提升开发效率。

  • 为什么资深程序员要精通数据结构和算法呢

        1、企业当中的需求往往比较复杂,往往需要使用多种数据结构来进行定义,甚至还需要自己来实现一个符合当前应用场景的数据结构类型。那么,这就需要程序员对数据结构的知识非常了解。

        2、性能是一个程序好坏非常关键的指标。性能的好坏就与算法、数据结构息息相关。

例如常用的JSON解析库:

软件开发之数据结构和算法_第2张图片

软件开发之数据结构和算法_第3张图片

        这里每个json解析库的序列化和反序列化性能不一样,其实他们实现的方式也不一样,所以消耗的内存也会不一样。当你处理小的json文件时可能感觉不到差距,当json文件比较大的时候,并且有大量并发的时候,吃内存和吃cpu就要有个取舍,结合项目的实际情况来选择合适的方案。

        3、架构师、技术总监需要非常熟悉数据结构和算法相关知识。因为他们承担着构建开发框架、维护企业公共库、攻克性能问题等工作。这些工作都需要数据结构和算法的支撑,否则,某个环节的数据问题或者性能问题可能就导致整个项目的失败。基础框架中,一般都揉和了很多基础数据结构和算法的设计思想。

        4、DBA也需要熟悉数据结构和算法,因为任何数据库系统都是数据结构+算法的程序系统。你输入每行sql语句都是对存储的数据进行各种算法操作,并最终返回结果给你。一个懂数据结构和算法的DBA能够设计出性能更好的数据库,并且能够指导程序员优化sql脚本的性能。

3、开发实例

        前面已经讲过一个json库的例子,这就是数据结构和算法的综合运用。其中fastjson就是阿里巴巴针对自己公司业务需求而开发的库。

        时间和空间往往是一个悖论,我们经常会为了提升性能需要使用更多内存。

        案例一:由hashmap引发的效率下降,由于开发人员对hashmap的了解不够,当数据量很大时,导致hashcode出现大量重复,从而导致查询效率下降。

        案例二:公钥加密(借助数论算法),计算机生物学(动态规划来测量基因组的相似性)。

        案例三:底层开发需要大量数据结构和算法知识,比如系统开发(华为EMUI-号称2年使用不卡顿)

        案例四:游戏开发中场景就是一个树形结构,里面使用的大量的链表、map等数据结构。游戏中物理碰撞检查就是数据结构和算法的综合运用,为了提高检测性能,需要设计符合场景需求的数据结构和算法。

        案例五:数据结构和算法最经典的作品:Redis、Mysql,里面使用的大量的链表、二叉树、哈希表等数据结构。sql语句中的排序、求和、统计等函数都是一次次的算法调度。索引依赖于平衡二叉树的数据结构。

        数据结构和算法是计算机科学的基石;软件开发都是借助数据结构和算法来实现各自行业的实际需求!

你可能感兴趣的:(c++程序设计,其他,数据结构,算法等,面试,java,职场和发展)