00:03
大家好,我是左成云,就是程序员代码面试指南的作者,这个这关于这本书大家可以在京东、当当、淘宝或者亚马逊上啊买到,很多年了,我致力于算法跟数据结构的,比如说培训教学,内容分享,内容提供啊,课程制作啊这样的工作,所以熟悉我的学员可能会知道有很多朋友管我叫佐神是吧,这个这个名头太大啊,你们可以说,但是我不会认啊,我们开这个视频或者说做这一系列的视频的目的是什么呢?其实是想和正在学习算法跟数据结构,或者准备要学习算法跟数据结构的朋友产生一种沟通的一种渠道。比如说大家可能看了我的视频,对于某一个算法跟数据结构的话题感兴趣,就可以在屏幕下方评论区留言是吧,或者是弹幕里,或者是私信告诉我,那么我我本身也会收集读者观众朋友们的一些意见啊,来迭代我。
01:04
自己的这样一种讲述沟通,对于表达这件事情来说是非常有用处的。大家都知道在若干年前,可能是五六年前,或者是更早的时候,其实你进入到比如说互联网公司或者某个it公司工作,并不需要太强的算网的数据结构的能力,因为那个时候呢,其实大家进去主要是写活的嘛,就是干活嘛,就是做业务嘛,那个业务呢,一方面它的这个用户人数较少,还有就是功能比较简单,还有就是它的数据量不是很大,对吧?这样一来呢,其实它不会特别的去在乎算法跟数据结构方面的能力,只是把功能写完可用,更多的是注重一个业务中的功能性的东西,所以它这个早些年去你去应聘,可能你会写一个框架,或者是简单的搭一下数据库,或者是简单的写一些任务流,数据库会用个事物,或者是我们知道spring mvc那些东西你会搞,其实就足以让你找到一份工作了,但是今天我们会发现不行了,是吧?比如说我去大公司或者是稍微好一点的公司去面试,我经常遇到算法跟数据结构的题目,它的考的比重就是之前的公司,好的公司考的算法跟数据结构,它比重也。
02:11
也在上升,原来不考的公司呢,现在也开始考了,这个是为什么是吧?这其实有很很多的原因啊,就是在早期的程序员其实非常在乎算法跟数据结构能力的,比如说我们都知道在这个登月的时候,其实这个阿波罗他们在整个带上这个飞船的内存有多少不超过一兆啊,就很少的,我记得是KB级别的这么一种内存,他就能登月了,那你说那上面有没有程序,有那程序怎么运行呢?当时的那批老派的程序员以极强的算法跟数据结构能力,把有限的资源榨取到极致,那他们充分发挥自己在数学上或者算完数语结构方面的设计感,是吧,或者是这种能力来让很紧很吃紧的资源也能够完成很难的一个任务。还有更早就是没有登月,那么早期就是计算机技术开始发展,包括有一些系统出来的那个时候,那个其实系统程序员也是非常注重算法和数据结构能力的,为什么?因为你是写系统的,系统是跑在硬件上的,对吧?那只有你系统搭好了,用户在用这个系统的时候,才能够完成自己在使用层次方面的工作,那你这个系统的开销如果。
03:11
很大,你一个逻辑如果没写好,你要吃掉大量的资源,或者你使用时间,你运行时间比较长,这样一来你留给用户的就少了,而且当时那个年代,它计算机的这个硬件的这样一种这样一种水平,它不是特别好的,不像今天动辄是吧,内存30多G60多G都有是吧,就很重的,或者是尤其现在越变得越来越轻薄了,然后稍微配置好一点,稍微有点重的机器,其实配置都很高,那当时不是啊,当时它的这个性能很吃紧,那这样一来,我老派的程序员就得想办法让我的系统开销变得很小,让用户使用的时候能够使用到更多的内存,对吗?这个也是它实际的需求。还有就是在若干年之前,其实在美国的算法跟就是程序员面试就几乎只考算法跟数据结构以及系统设计了,别的东西都快不问了,比如说数据库怎么写,Circle网络TCP怎么握手这种东西就不考的,就完全只考算法跟数据结构,诶这是为什么呢?因为大家也都知道,在这个我们人人就是如果你是程序员的话,你准备大公司的。
04:11
也是我我们都有这个过程是吧,那你你比如说你去准备面试的时候,有很多东西是面经,比如你看面经,他有限的一些面经,几个帖子,发现他问的问题你收集一下啊,问语言的若干问题,你收集一下,问系统的若干问题,你收集一下,问网络的,问数据库的等等的,问框架的这些问题你收集一下,你背,你靠记性学习是可以,如果在面试中遇到这些问题的话,你是可以很好回答的。算法跟术语结构不行,你得理解算法术语结构,基础算法基础术语结构还得会用,还得经过大量的练习才能触类旁通,见到一道新的题目你才能想到,哦,是我之前学过一个算法跟术语结构的东西,能够把它解掉,还得当场写出代码,这也就是为什么现在算法跟数据结构的比重在逐渐上升,同时美国早就考这些了,为啥?因为他觉得你进入到工作岗位,你记忆性的东西,你是可以查文档的,你是可以现场现学的,哪怕你面对Google编程,面对百度编程,很多代码,代码的这样你可以写出来,包括网络的那些内容,包括这个系统的内容,你是可以很好的获。
05:11
你你理解了跟会有,这对于这些内容来说是一码事,但是算法跟数语结构呢,很难练,对不对?这非常难练是吧?他学很久我都没有入门,怎么感觉这么难是吧?下回换一个题,还是觉得连题目在说什么我都不懂,他这个门槛就比较高,我太难了。那我们说回国外的面试只考算法跟术语结构,有一个很重要的原因是他不觉得其他的内容是重要的,或者说对于一个即将踏入职场,可每天工作,可以查询网络,可以查书的这样一群人群来说,记忆性的东西没那么重要,所以他特别在乎思维。还是有一个著名的段子,当然不是段子啊,是一个真事儿。若干年之前,Google招了一个电话接线员,这个电话接线员是宾夕法尼亚大学的法律系博士,你会说这个国外都已经内卷到这个体格了吗?其实不是啊,他Google招这种精英是传统,在当年那个年代Google招精英是传统,哎,为什么你会觉得,哎呀,一个电话接线员都招的这么贵,是为何是吧,为哪般?
06:11
想想在那个年代,Google其实已经几乎占领全球的搜索引擎市场了,对吗?那他们你招一个A员工,招一个B员工,A员工写的代码比B员工稍微提升个5%或者7%的性能,告诉你真的这段代码部署到他给很多用户用的这个场景下的那个环境下,他能给我省很多的钱,所以他花这么高的价钱招这么好的人,你看四哎,你啊,这个可能你是科班出身,计算机读到某一个美国前三的名校的一个博士水平的人,进了Google就写很简单的业务,然后一年给那么多钱,好像很浪费的样子是吧,其实对Google来说是最省钱的啊,他其实来自于他这个具体的需求,就是最贵的,他就是最省的,堪比于这个皇马的弗罗林德诺主席是吧,他他当时不就是明星战略嘛,就说了一句话啊,贵的就是最省的是吧,那么说回说完了国外的一种情况,我们再说回国内,其实国内呢,我们中国人是非常务实的民族,对吧,这个即便。
07:11
是如我们这么务实的民族,也逐渐的发现,随着我们整个软件行业,或者说互联网行业,It行业的一种进步,原来超快猛有一个词啊,这个词很有年代感了,是吧?超快感超快猛就是代码,我尽快的把它写完,这字面都能理解嘛,超快猛这样一种程序会逐渐的没落,为啥?因为各个公司把属于自己的领域瓜分完了,就进入到我要守守好我自己已经抢下来的业务领域,那我就一定要在这个领域内仔细耕耘,好好迭代,优化代码,提升性能。所以越来越多的公司也着重的爱考算法跟数据结构的内容,它也是来自于公司它本身的这样一种需求。好,我们刚才讲了,就是算法跟数据结构,它对于公司或者对于你工作越来越重要的一个原因。
08:04
这个前面已经回答了,前半部分就是他在工作跟实际公司的需求的这样一个层次上来说,它是需要的,还有一点就是它作为一种选拔性考试,算法跟术语结构真的可以考出东西,比如说每个人都经历过这样的阶段,对吧?我看书,我一开始看书,看算法的书,然后啊具体的去刷题,这个东西很辛苦的,对不对?那你从一开始的影影绰绰的理解一个算法,到最终写出代码,这个东西不是什么人都可以坚持下来的。首先它就是因大家可能对于代码跟代码面试如果稍微了解一点的话,就会知道,在实际的在公司实际进行代码面试的过程中,他是给你出题目,让你在白纸或白板上现场写出代码的,有些公司可能对你比较好,或者给你个本让你写,或者在编译器里让你写,但你也是要现场写出代码能运行的,如果面试官发现你有一点点边界条件没有考虑好,或者有一点代码写错了,直接就扣分啊,或者直接让你走人,都有可能这么一种严苛的要求,你要想达到这个公司算法跟数据结构的要求的话。
09:04
啊,你对于日常的练习,你需要进行大量的练习才能达到这个要求,好,那所以算法跟术语结构,它本身可以认为是绝对代码能力和耐心努力的一种证明,这是第一个原因,那第二种原因,那很明显就是它可以作为某种程度聪明程度的证明,就是啊这很多人觉得一一看算法的数据结构就头晕,看不懂,对吧,我我我我仔细理解,我理解个一半天,或者是半周,或者是一周或者更长的时间才能理解一个算法,那有些人可能理解的很快,他看完整整个他,他甚至于他不用去看具体的代码描述,看一个高手写的code,看完之后他就把这个算法理解了,有这样人对吧,你说公司会更香,更喜欢要什么样的工程师,当然是后者,脑子好,看什么东西都马上能够反应过来,都马上能够进入到这样一种逻辑中去,而且还能学习了之后能够用到别的领域,对吧?触类旁通的这么一种天才,他当然喜欢那算法跟数据结构能力,其实是对这种能力的一个很好的。
10:04
这就是第二个原因,有算法跟数据结构,它是智力程度的一种良好证明,那么第三个原因就是因为老的考试或者老的算法面试,或者老的程序员面试,他没办法筛查人了,刚才我们说了一些框架性的东西,对吧?早早个十年前,你只会spring mvc,就或者是一些Java的框架,你是可以当架构师的,今天你你这个能力你去大家都具备,那为什么要,你为什么要,我是不是得要一种更加能够考出能力的一种考试啊,就是时代变了对吧?时代变了,人才越来越多了,而且高素质人才越来越多了,那岗位好公司那些岗位总是有限的,是吧?那你怎么样在同样来求职的面试者中选出来你最想要的人,算法跟术语结构是一个很好的考试,因为他靠背,它仅靠背,仅靠记忆性的东西他是搞不定的,这个就是我们说这个为什么算法和术语结构在面试中的比重越来越大,一方面是工作上的需求,对吧。
11:04
啊,实际业务就需要很聪明的人跟很强的算法跟数据结构能力来优化它,下面几个理由就是智力的证明,耐心的证明,Hold定能力的证明,以及时代需要这样的考试。好,接下来这个话题呢,我们想谈一下算法跟数据结构在学习过程中的一遇到的一些困难,是吧,我觉得可以用一些场景来举例,我们畅想一下,比如说我们每个人都有这样的时刻,哎呀,我特别迫切的想学一个内容,然后我就看啊,有没有经典的书籍,结果算法跟术语结构方面你就发现了一本书叫做算法导论,然后你下了单,书还挺贵的,英文版跟中文版,稍微斟酌了两秒钟之后,下单的中文版,盼望着盼望着书来了,翻了几页之后热情熄灭了。场景二,哎,你刷题是吧,一开始刷发现简单题都好难做,哎呀,想了半天啊,终于写出了一些代码残片,调试了半天,哎呀,好痛苦,但是终于调试过了,这个评测软件上写出了啊,AC。
12:04
啊,接受完全通过的意思啊,你好高兴好高兴是吧,觉得很有成就感是吧?之前的算法导论为什么要看书呢?是吧?我自己刷题也行,诶,我刷到一道中等难度的题,不是简单难度了,中等难度的题彻底不会做了,以至于连题解也看不懂。场景三,就是你要解决一个问题,突然间从你身边的同事或者是你身边的同学中知道,哎,这个问题其实是某个某个算法跟数据结构解的啊,你满怀热情说话,自己长久以来想的一个问题终于要得到解决了,我只要回家打开搜索,搜索这个词汇,然后一看帖子,然后我就会了。结果你搜完帖子之后一看,哎,我那会儿算法导论呢?场景四,哎,你已经经历过很长一段时间的刷题经历了,这个刷题经历可能时间拉的也非常的长,几个月已经过去了,你从一开始的简单题写的灰头土脸。
13:04
到现在的中等题也基本上可以写出来,直到有一天,你发现了诸如像KMMP、买BFPT等等等等稍微难一点的算法,你发现自己其实连门都没找到。场景五,诶,你听说算法难学爷从一开始就不玩这个是吧?不搞这个,我进大公司,我为什么搞算法数结构,我工作几年,我有工作经历,他们会因为工作经历而要我的,诶你你你这样想着是吧,你就觉得,哎呀,天生我才必有用,我的能力不在那方面,所以我也不学是吧,你也别让我看,哎,看不着看不着,直到有一天你在写业务的时候,有一个具体的业务,你发现你怎么都没有办法做到性能的,有一这时候同事过来一说,诶,这不就是那个算法问题吗?写完之后你发现它的性能比你快1000倍,这个时候你刺不刺激啊,你遗不遗憾,你想不想看算法导论?
14:01
好,那么以上呢,就是简单的从这个具体遇到的状况来说啊,你会在算法跟数据结构遇到哪些难题,其实总结一下就是,呃,帖子很难懂,因为抽象化的东西太多,书更难懂,因为他可能完全是学术的描述,那自己从最简单的刷题呢,开始又会发现知识体系不足的问题,总而言之就是我们目前在就一些算法,它数据结构本身比较难,它整个在在在在在网络的资料中,你很难找到那种特别能够通俗易懂的东西。更痛苦的一点就是你在整个学习的过程中是没有交流感,你仿佛一个人在孤军的看着一个前辈写的下的一个帖子,或者前人写下一个帖子,你在破解它,有的时候帖子写的还会有错,对吗?啊,这个时候你就觉得很进步的每一步都显得步履维艰,那么好,欢迎关注,我们会在以后的视频中逐渐的在大家领略算法跟术语结构的美,包括我的讲述,其实这么多年的教学生涯也足够我总结了很多。
15:02
就是利益于理解的这样一些知识点,这也就是为什么我想要开这个视频的这样一个原因,一方面我是实际讲课的啊,当然报名的方式我们也会在屏目中或者在这个评论区打出来,但是我我做这个一系列的视频,其实是想比如说把一些经典的面试题目啊,直接在直接在这个视频里面给他讲,给大家讲讲仔细啊,或者是讲明白啊,面试过程中经常遇到的一些技巧的一些总结,包括怎么样去跟面试官互动啊,啊,以及一个比较著名的算法跟术语结构,怎么在工作中的应用啊,这样一些或者是硬核的啊,纯粹讲述题目要看代码的这样一些视频我们也会做,呃,以及交流的视频,比如说日常吹水,或者是我会经翅采访一些当时打比赛,Am比赛,搞比赛搞得很好,现在呢,在工作过程中也很强的一些大佬们,是吧,或者是全站工程师,或者是在自己的领域干的。
16:02
好的,工程师的一些访谈啊,这个我们以后都会做啊,其实也欢迎大家一直持续关注我,我也会一如既往的推出这样的一种视频啊,谢谢大家。
我来说两句