程序员的进阶课-架构师之路(1)-数据结构与算法简介

现在市面上的数据结构与算法的教程也都不少,但有两个问题,第一是泛泛而谈,第二是基本都是c语言实现,而java作为第一主流语言,理应有它自己的独到之处。这也是我写这些博客的初衷,我会讲解java实现的数据结构和算法。

至于说为什么要学习数据结构和算法,我相信大家都应该清楚。大家平时的工作,敲的业务代码,都属于外功,可以帮你轻松地完成老板交待的工作,每个月能挣到属于自己的那份钱。但我不知道小伙伴们有没有这样的困境,工作三到五年,项目做了很多,但自己的能力始终处于二流水平,写业务代码,没点问题;想跳槽面试,发现面试官问的问题都很底层,跟自己平时的工作风马牛不相及。为什么会出现这样的情况呢?

是因为我们的底子薄了,平时积累的也不够。很多人都这样举例:编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程。但是如果一个开车的人懂变速箱的原理,比如降低速度来获得更大的牵引力,或者通过降低牵引力来获得更快的行驶速度。那么爬坡时使用1档,便可以获得更大的牵引力;下坡时便使用低档限制车的行驶速度。回到编程而言,比如将一个班级的学生名字要临时存储在内存中,你会选择什么数据结构来存储,数组还是ArrayList,或者HashSet,或者别的数据结构。如果不懂数据结构的,可能随便选择一个容器来存储,也能完成所有的功能,但是后期如果随着学生数据量的增多,随便选择的数据结构肯定会存在性能问题,而一个懂数据结构和算法的人,在实际编程中会选择适当的数据结构来解决相应的问题,会极大的提高程序的性能。

我想,如果你懂数据结构和算法,那你的薪资必然是要比不懂的朋友或同行要高的,因为当他还在面向百度编程的时候,你已经直指了问题的核心,你会用更底层更优雅的方式去解决你所面对的问题。这就是数据结构和算法的魅力,也是我接下来要跟大家聊的内容。

曾经一位哲人说过:程序=数据结构+算法。

数据结构是程序的骨架,算法是程序的灵魂。那我们就从骨架和灵魂来开始我们的程序之旅吧。

一、数据结构

百度百科:数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法索引技术有关。

1.数据结构的基本功能

  ①如何插入一条新的数据项

  ②如何寻找某一特定的数据项

  ③如何删除某一特定的数据项

  ④如何迭代的访问各个数据项,以便进行显示或其他操作

2.数据结构的分类

3.关于几种数据结构的优缺点,来个网络图

这些数据结构我们在后面都会讲到,请朋友们不要着急。

二、算法

百度百科:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

在我们的java中,算法通常都是由类来实现的,前面给大家列举的数据结构,除了数组(注意,数组很特殊,后面会单独讲),都是由类来实现的,算法解决了什么问题呢?

算法解决的就是如何更快速、更有效地对数据结构进行操作的问题。为什么我们有些数据结构查找快,而有些数据结构新增删除快,这都是由实现这些数据结构的算法决定的。

1.算法的特征

    ①有穷性(Finiteness)
        算法的有穷性是指算法必须能在执行有限个步骤之后终止;
    ②确切性(Definiteness)
        算法的每一步骤必须有确切的定义;
    ③输入项(Input)
        一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
    ④输出项(Output)
        一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
    ⑤可行性(Effectiveness)
        算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。

2.算法的设计原则

其实没那么多废话,就一条:最短时长,最短路径。

具体而言,我们设计的算法,应该是要么满足高效率,要么满足低存储。二者不可得兼。

有些时候,我们会拿时间换空间,有时又是以空间换时间。

具体应该怎么设计,要具体情况具体分析,哲人说过,没有最好的算法,只有最合适的算法。至于这个哲人是谁,还是请各位看官自己去想吧。

以上,就是我对数据结构和算法的概述,我会用大概30篇的章节给大家进行讲解,争取讲到讲透,也谢谢看官老爷们的支持。我们一起努力。


我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!

参考文章:

  1. https://www.cnblogs.com/ysocean/p/7889153.html
  2. https://blog.csdn.net/weixin_43802541/article/details/89204221

参考书籍:参考书籍:《Java数据结构和算法》(请支持正版)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
一、程优势本程有陈敬雷老师的清华大学出版社配套书籍教材《分布式机器学习实战》人工智能科学与技术丛书,新书配合此实战程结合学习,一静一动,互补高效学习!本程由互联网一线知名大牛陈敬雷老师全程亲自授,技术前沿热门,是真正的互联网工业级实战项目。二、简介       大数据和算法类的系统和传统的业务系统有所不同,一个是多了离线计算框架部分,比如Hadoop集群上的数据处理部分、机器学习和深度学习的模型训练部分等,另一个区别就是大数据和算法类系统追求的是数据驱动、效果驱动,通过AB测试评估的方式,看看新策略是否得到了优化和改进。所以在系统架构上,需要考虑到怎么和离线计算框架去对接,怎么设计能方便我们快速迭代的优化产品,除了这些,像传统业务系统那些该考虑的也照样需要考虑,比如高性能、高可靠性、高扩展性也都需要考虑进去。这就给架构师非常高的要求,一个是需要对大数据和算法充分了解,同时对传统的业务系统架构也非常熟悉。        本节就对当前几个热门的大数据算法系统架构(推荐系统架构设计、个性化搜索引擎架构设计、用户画像系统架构设计)做一个深度解析!1.个性化推荐算法系统 是一个完整的系统工程,从工程上来讲是由多个子系统有机的组合,比如基于Hadoop数据仓库的推荐集市、ETL数据处理子系统、离线算法、准实时算法、多策略融合算法、缓存处理、搜索引擎部分、二次重排序算法、在线web引擎服务、AB测试效果评估、推荐位管理平台等。如下就是我们要讲的个性化推荐算法系统架构图,请大家仔细欣赏、品味:      这节我们就对推荐系统的整体架构和各个子系统做了详细的讲解,解开个性化推荐算法系统神秘的面纱!2.个性化搜索引擎 和个性化推荐是比较类似的,这个架构图包含了各个子系统或模块的协调配合、相互调用关系,从部门的组织架构上来看,目前搜索一般独立成组,有的是在搜索推荐部门里面,实际上比较合理的应该是分配在大数据部门更好一些,因为依托于大数据部门的大数据平台和人工智能优势可以使搜索效果再上一个新的台阶。下面我们来详细的讲一下整个架构流程的细节。如下就是我们要讲的个性化搜索架构图,请大家仔细欣赏、品味:这节我们就对个性化搜索的整体架构和各个子系统做了详细的讲解,解开搜索引擎神秘的面纱! 3.大数据用户画像系统 用户画像是一个非常通用普遍使用的系统,从我们的架构图中可以看出,从数据计算时效性上来讲分离线计算和实时计算。离线计算一般是每天晚上全量计算所有用户,或者按需把用户数据发生变化的那批用户重新计算。离线计算主要是使用Hive SQL语句处理、Spark数据处理、或者基于机器学习算法来算用户忠诚度模型、用户价值模型、用户心理模型等。实时计算指定的通过Flume实时日志收集用户行为数据传输到Kafka消息队列,让流计算框架Flink/Storm/SparkStreaming等去实时消费处理用户数据,并触发实时计算模型,计算完成后把新增的用户画像数据更新搜索索引。个性化推荐、运营推广需要获取某个或某些用户画像数据的时候直接可以毫秒级别从搜索索引里搜索出结果,快速返回给调用方数据。这是从计算架构大概分了两条线离线处理和实时。下面我们从上到下详细看下每个架构模块。如下就是我们要讲的大数据用户画像架构图,请大家仔细欣赏、品味:这节我们就对大数据用户画像系统的整体架构和各个子系统做了详细的讲解,解开用户画像系统神秘的面纱!三、老师介绍陈敬雷  充电了么创始人,CEO兼CTO陈敬雷,北京充电了么科技有限公司创始人,CEO兼CTO,十几年互联网从业经验,曾就职于用友、中软、凡客、乐蜂网(唯品会)、猎聘网、人民日报(灵思云途)、北京万朝科技,曾任架构师、首席技术官、首席科学家等职务,对业务领域B端、C端、电商、职场社交招聘、内容文娱、营销行业都有着丰富的经验,在技术领域,尤其在大数据和人工智能方向有丰富的算法工程落地实战经验,其中在猎聘网任职期间主导的推荐算法系统项目获得公司优秀项目奖,推荐效果得到5倍的提升。陈敬雷著有清华大学出版社两本人工智能书籍,分别是《分布式机器学习实战(人工智能科学与技术丛书)》、《自然语言处理原理与实战(人工智能科学与技术丛书)》。目前专注于大数据和人工智能驱动的上班族在线教育行业,研发了充电了么app和网站,用深度学习算法、nlp、推荐引擎等技术来高效提升在线学习效率。 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十步杀一人_千里不留行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值