00:00
同学们,我们来看一下scna语言的数据结构和算法,那以前呢,也讲过这个数据结构和算法,但是呢,他用的语言不是SC纳的,我们以前用的是像Java版的,C版的会多一点,SC版的这种数据结构和算版呢很少,而且一般呢来说呢,也不是原生的,就是它不是原生态的这种,呃,数据结构和算法一般都是用那种集合来操作的,看不到它的一个结构,我们现在呢,来用SC拉语言给大家讲一个数据结构和算法。首先我们先来简单的说一下这个数据结构的介绍啊,数据结构介绍同学们呢,很多同学哈,虽然说呃不是科班出身的,但是呢,多多少少也知道这个数据结构的概念。什么叫数据结构呢?数据结构,它是一门研究算法的学科。
01:02
OK,自从有了编程语言,也就有了数据结构,这就好比这么一种感觉,就说我们人呢,人有结构对吧,人体有结构的。你要是结构,结构长得好是吧,那就是长得特别漂亮,是不是,你要结构长得不好是吧,那这个也好不到哪去,你看那个运动员对不对,你看这个结构就很健美运动员是吧?啊,结构就很好啊,模特那么学好数据结构呢,可以让我们编辑出更加漂亮的,更加有效率的代码,其实这个地方我感觉呢,可以这样再加一句话,加上哪一句话就是下面这句话,就是数据结构有了过后呢,可能你没有感觉到说诶,我学完一个数据结构,好像跟你们学一个哈豆或者Spark那样,就感觉好像我能做什么事了,但是呢,他却可以让我们在解决一些比较复杂的问题时,给了你一个思路。
02:00
他就给了一个思路,我我们以前在学数据结构的时候呢,诶,当时那个老师他就说了一句话,我觉得还是挺有道理得分享一下啊,当时我们学数据结构呢,呃,是那个杨为明老师讲啊,为明老师他这个呃有个C,他C还是加家的特别有名,好多大学用的是他那个那个书。说吧王长城用户来时还想是吧。啊,看过他的视频,看看数据结构是吗?听懂了吗?呃,听不懂就对了,我们也听不懂啊,但是我们也听不懂,但是他讲了一句话,我觉得他说这个数据结构呢,就好比我们一个足球运动员,这个足球足球运动员一个什么能力呢?就是这个运球的能力,这运球能力你说他能干什么?他又不能得分,他得不了分,那确实得不了分,因为你光运球,你不能把球直接个带到你,带到你球门里面去,你最还要凌空一脚,但是有个问题,如果你不能把球带到禁区,对吧,你是踢不进去的,就有点这种感觉,是基本功一样。基本功一样,就是作为一个程序员来讲,如果没有数据结构、算法支撑,其它它是比较飘的,至少多少要知道一些。
03:07
不然的话你是很飘的,就好像呃,说你到一个呃。学学一学一个武术,你学了很多招式,对吧,降龙十八掌。你每招都都学的像模像样,结果你打出去,人家微微一笑。啊,这是干嘛呢,你在对吧,你打出去的没有力量。没有力量,好数据结构就是干这个事情的,他可以用数据结构解决很多生活的问题。如果你没有数据结构的话呢,你如果纯靠我们这种最基本的这种int类型集合,你很难解决。它就是解决问题,那么我们经常说程序等于数据结构加算法,数据结构呢和算法还是有一点区别。什么区别呢?就数据结构,它更看重的是这种结构,就是这个数据,比如说是个队列还是一个站。还是一个链表,但是你用这个术语结构要解决事情,你还要有思想在里面,你打个比方,我们说一个小孩围成一圈。
04:07
围成一圈是不是很形象。如果是有链表。环形链表是不是一下就把这个,把你的问题和你的数据结构,把你的程序结合起来了,如果你没有链表,你就得想怎么做,你突然感觉到没思路了,说数据结构它更多可以结合一些实际问题来解决一个具体的需求。那这个需求里面呢,还会融入一些算法,所以我们先说程序就数据加算法,好,我们再看第二句话,数据结构是和算法是什么关系呢?简单的聊两句。我简单聊两句,算法是程序的灵魂。啊,就是为什么有些网站在高并发海量吞吐情况下依然坚如磐石。或者说你们将来学的是帕。为什么Spark会快?它比那个map快,大家可能会说,诶,他用了服务器集群。
05:02
读写分离,缓存等等,或者用了red,那么我们如果再深入的讨论这些优化的技术又是怎么被这些高手设计出来的呢?大家都想,那你们可能说,诶,他们用,他们又优化了,他们用读写分离用。这个缓存了,那这些人家用什么做出来的呢。哎,你要这么去问,你就想的更多一点了,好,这就是。有数据结构和算法的支撑,就是底层支撑你这个东西。就好像你有一一个汽车跑得很快,它关键是发动机。第二个,请大家再思考一个问题。而为是什么让不同的人写出代码?从功能上看,实际上的效率却有天壤之别。比如你写了一段代码去计算一个,完成一个计算任务,别人呢,也写了一段代码去完成任务,为什么他的速度会很快?啊,你比如说我就用我的一个经历来跟大家分享,以前呢,我做过服务器啊,当然其实按按理说我当时的一个资格呢,是没有资格做服务器的,为什么呢?因为你刚刚毕业没多久,服务器一般来讲是公司的一个核心,而且里面有很多重要的信息。
06:14
你还得可信。你看以前那个到银行,你们你你们有同学在银行工作吧。银行那个银行也要做这个系统的,银行一般招什么人,直接招应届生。啊,一一招应届生,招我们当时去的时候,我不是给你们讲过吗?对吧,没有跟你讲过算了,对不对,当时我那次啊,不讲这个事,就是当时我是大学刚刚毕业,大学毕业的时候,其实我很想回到四川。建设大西南的啊,建设大西,因为我是,其实我是不愿意待在北方的,北北方都是气候干对吧,因为我四川人嘛,成都那个地方你也知道美女很多对吧,那个小伙子是大重庆的,我们就很多,而且我去了过后呢,刚好就那个时候零三年啊,零三年的时候,零三年那个国家号召西那个西南西部大开发,你们听说这个,那你们没听过,你们都说这还没出生呢,都啊啊那个时候,然后我们特别想回去,刚好建设银行中四川建设银行总部就到清华来招人啊招人了诶就招四个。
07:17
啊招四个,一个学水利,一个学金融,还有一个学计算机的,还有一个学外语的,那把我挑上了,然后我去了,过后呢,把我选上,他说一千千八年。我说签八年也没问题,后面为什么没去呢?一检查说我身体有问题啊,说我身体有问题,我说算了,这这个什么问题我就不讲了啊,反正后面检查出来是没毛病啊,后面我就那当时就说我们做这个服务器的时候,后边我为什么没去呢?后面我按理说。没有资格在下家公司做服务器,因为公司没人了,就十来个人,他们一帮从新浪拉出来了一帮19个人,那些人技术很牛,都在搞业务,没人做服务器,这个时候就看到,诶,那小韩你来做,叫我做,那我做这个服务器呢,当时我用的还是unix,他要支撑上千万人在线,至少他产品设计上是导致数据的稳定传送,服务器上线前在内测一切OK,但是一上线服务器马上瘫了,都不知道为什么,哎,当时这个我们有一个。
08:16
这个是真实的经历啊,当时这个这个这个CTOCTO因为人很少,虽然C他叫CTO,但是就好像我们组长一样,因为没几个词对吧,没几个,所以他就直接对我进行指导,他说那个这个代码有问题,当时我们用的是C和C和C加加写啊,当时就Java那个时候不流行。啊,Java在中国那个时候还不怎么流行啊,001年02年大部分程序员都是靠C吃饭,我们那个时候毕业的同学基本是要么C,要么C加加,要么VC加话用的很少。还有那个时候大型机都是do VB。啊,就那个语言,还有DY啊,这语言特别牛啊,Java没听过,Java不知道是干啥的啊,大数据不知道干啥的啊,没有啊,当时那个我我服务器一上去就瘫了,瘫了我很我很紧张,这个CPU就来了,说你你别着急,我那么优化,他把代码拿出来过后,我他看了一下,我觉这个代码有问题,他给你分析了几点,啪啪啪说你这个。
09:17
关键点是在哪个地方,你你有一个这个在线用户支撑不了,他就把这个代码拿出来过后,写了一个数据结构,当时就用了一个什么,很简单,他就用了一个,用了一个就是自己写的一个呃刷是个结构体,这个结构体他做了一个优化的一个链表。然后呢,用那个地址来找他,把所有不该入库的全部就是需要频繁变化。但是又不重要,数据直接写到这个内存里面去,做了一个小缓存,哇,速度一上去,给我撑着要起来。啊,这个就就觉得我靠这个怎么这么厉害啊,怎么这么厉害,这哥们说,这个哥们说你要写代码写那么多年,就说这个时候你你就认识到一点,就说程序不同的人他真的是不一样,你以为对你们来说,可能大家都认为啊差不多,其实程序他的灵魂就算法,如果你不去想这个问题,那你永远都是代码功能,这是肯定的,那么你要去研究这个算法呢。
10:14
大家随时都可以,因为这个并不需要说要很高深的数学。其实不要求,我不是讲过吗?的确数学用到了,你会去看大学的,大学的看不懂你看高中的看,高中看不懂你推到初中再看。老说初中都看不懂,看小学啊,所以说我们这呢,重点就讲这个数据结构的基石,好这个算法的一个,呃,基本介绍我们先写到这,我把这个板书一下,然后呢,我们就来看它的实际应用,好今天我们重点讲一些实用的数据结构,不实用的我们就不讲了。好吧,同学们,我们来看一下,首先刚才的老师说了一下数据结构和算法,然后呢,我先做了一个关于数据结构的基本介绍。
11:04
OK。呃,那我介绍了什么呢?我首先给同学们说一下数据结构的特点啊,它是干什么的,对吧?你得首先要有兴趣想学习,这是第一步,然后呢,我在这里呢,要结合自己的工作,就是我自个儿的一个经历呢,给大家说了一下数据结构和算法的关系,其实说白了就是呃,用数据结构来编写有效的算法。哎,这样子就更好理解了,那么我这里整理了有三句话对吧?诶,慢慢的大家就会越来越重视这个东西啊,所以结构你们可以现在看,其他的可以。缓一缓,好,我先截取一段。
我来说两句