前端刷题路-Day100:完结

463 阅读9分钟

终究还是干到100了,说快也快啊。

在这101篇文章中,介绍的肯定不止100题了,说多不多,说少不少,不过对于面试,尤其是前端面试来说应该是足够了。

题型覆盖面很广,基本题型都覆盖了,重点、难点的题目出现的比较多,比方说动态规划类型的,少说也有十几道,具体笔者也没输,可以参数题型目录来看看,里面的数据比较丰富。

最后的这篇文章就不说刷题相关的内容了,说说刷了这些题笔者得到了什么吧,这里给出的是笔者的真实体验,可能你的感觉和笔者不同,因人而异,不喜勿喷。

工作

其实工作中用到的算法相关内容是少之又少,除了研究院的人需要经常和算法打交道,正常的研发,尤其是前端来说哪能经常遇到算法。

笔者记得的用到算法的场景只有一个:斐波那契数列。

为什么会用到这个?当时的场景是做一个错误重试机制,从A发一个请求到B,如果B没收到就持续发请求,就是这样一个简单的场景。

如果是简单的错误重试,直接写个定时,5秒或者10秒尝试一次就完事了,尝试制定次数后GG,宣告失败就完事了。

用了斐波那契数列数列之后其实会有点不一样,每次请求的间隔都会变长,相比一个固定时间段的请求来说可以用相同的资源覆盖更久的时间,一方面给了B更久的等待时间,对于A来说也减少了请求次数。

不过说实话笔者还是没有太深入理解这里用斐波那契数列的实际好处,只能推测一下,因为笔者也是根据领导提供的思路来实现的,别问为什么,问就是不知道。

除了斐波那契数列之后就没有什么了,最多就是数据结构上的一些优化,会用到算法上常见的——Map,不刷题的研发大概率是想不到用这个的。

当时用Map的场景也十分巧妙,有一个长列表,数据量可能会有一两百条吧最多,因为分页机制,这个列表会不断增加。同时这个列表也需要展示在前端页面上。

此时另外一个需求就是在拿到这个列表的数据并且展示后,需要请求另外一个接口,可能会往数组中的某个,或者某些数据中添加新的字段,还需要将这些新增的字段展示出来,是一个动态添加的过程吧,因为第二个接口的返回时间较长,所以需要将第一个接口的数据先展示出来,之后再进行数据的添加。

正常情况下,甚至笔者当时的领导(不是用斐波那契数列的那个),也觉得直接用数组就完事了,拿到新数据之后循环一些列表数据,动态插入。

但这样会有一个问题,列表会循环很多次,因为请求另外一个接口的数据是按第一个接口的分页数据走的,也就说每请求一次第二个接口都需要循环一下数组,感觉是一种资源上的浪费啊。

笔者此时就采用的Map的数据结构,Map不像对象,可以很好的保证数据的插入顺序,这样就保证了数组中元素的顺序,同时此时第二个接口的如果有数据返回,可以直接利用key来修改Map中的数据,一步到位,根本不需要循环数据,修改完成后直接取Map的值即可。

这是两处笔者觉得比较好的适用场景,当然也有不好的,比方说在刷题中经常会用到一个关于数字的API——Number.isSafeInteger,笔者用这个来判断是否是数字,结果就被导师说了(最近刚入职一家公司),这个API不常用,用起来可读性较差,看了不见得能理解,木得办法。

总的来说,刷题还是能在工作中起到一定作用的,虽然大部分的工作内容都是在处理业务逻辑,可偶尔也是能用到刷题的相关内容的,如果遇到了就可以大显身手了。

面试

笔者在刷了这一百多题后基本上就没遇到不会的算法题了,最难的是一道DP,其实也有遇到过,只是不记得了,导致没答出来。

其它的算法题就没有没写出来的情况,即使有的题目不是最优解,起码也是能写出来的,后续优化不优化问题不大,而且大部分算法题都是遇到过了。

笔者最近这次找工作大概从今年2月份开始刷题,一直刷6月份,6月份开始准备框架和JavaScript相关的内容,七月底开始面试。

总共面试了12家公司,面试了30次。个人比较菜,只拿到了5家公司的Offer,

耗时4周,第一周面试的4家公司全部GG,即使美团都干到3面了,还是GG,木得办法。

从第二周开始有所好转,开始陆续拿到Offer,直到最后拿到了5个Offer。

所以说第一周就是来攒经验的,慢慢来嘛,失败也不是什么坏事。

面试的公司有大有小,说实话,如果不想去小公司就不要面了,面完之后就会遇到十分尴尬的问题,HR问笔者:你觉得我们这里给到多少你会放弃另外的Offer?这怎么说?这没法说啊,因为压根就没想去。感觉跟欺骗人感情似的,典型的渣男行为,以后还是不要做了。

常见的大厂基本上都面过了,阿里、腾讯、百度除外,这三家笔者一开始就没想去,因为笔者心里还是有点*数的,我不配。

不过如果面某些缺人的部门还是很有可能的去的,但缺人的部门同时也意味着另外一件事——你要加班了。

为了多活两年,笔者果断放弃。

回到算法题这块,和网上说的情况十分类似,大部分EASY题,少部分MID,HRAD就遇到过一次。

其实面试中更难的是实际场景解决题,这些题往往比算法题更难写

文章

在刷题的过程中也是有留存的嘛,《前端刷题路》这一系列就是这么出现的,本来以为是一个很长的目标,结果到最后也是实现了,期间还参与了不少掘金的活动,拿到了不少周边:半袖、徽章、杯子、书包等,还其它的小礼物:耳机、拍立得、积木、颈椎仪等,总的来说收获颇丰,不亏不亏。

在写文章的过程中也不断的在成长,文笔什么的好像一直都这样,没什么进步,主要是对与系列文章的把控有了进步。

一定要在一开始就定好的文章的整体结构,比方说《前端刷题路》就有着极为规范的结构:从题目开始,到文章链接,到题目分析,再到自己的答案和更好的方法。

围绕了这几个点来展开写,写起来会越来越快,在写的过程中也让文章看起来更漂亮,之前插入代码都是没有高亮的,直到有一天发现了原来可以在代码块上规定语言,这样高亮就有了,而且可以修改掘金的主题,让文章看起来更有感觉。

在写文章的过程中注意容灾和备份是十分重要的,笔者就出现过两次写好的文章丢失的情况,难受😣啊~

心性

相信大家伙在一开始刷题的过程中一定出现过心态崩了的情况,Leetcode评论区中出现最多的评论就是:

我是废物

或者是:

WSFW

笔者到现在也是这么想的,没办法,笔者的数学是真的拉,在遇到某些需要用数学原理解释的算法题中,真他娘的太难了,简直令人发指。

而且某些二进制转换之类的题目笔者也是不会,一开始试图操作,结果好容易操作完了下次还是不会,于是就放弃了。毕竟有句老话是这样说的——世上无难事,只要肯放弃。

讲真,不用太纠结,有些题目就是不会,看了也没用,反正笔者是看开了,不用过于弥补自己的短处,要突出自己的长处。这样活着也不会太累,刷题也能让自己开心,何乐而不为呢?

这其实跟高考是差不多的道理,一定有些题目是可以通过自身的努力来弥补的,俗称的送分题,掌握好送分题之后对于平凡的我们来说就已经够了。更难的题目答出来固然是好的,可那是你想做就能做出来的么?

你可能需要比那些强者付出十倍、百倍的努力才能勉强和他们站在一起,这样做固然是好的,但对于笔者来说这真没必要。

再次强调一些,这些只是笔者的想法,具体的想法因人而异,不喜欢可以Ctrl(Command) + W关掉这篇文章。

活着就已经很累了,把专业的事情交给专业的人去做,别太勉强自己,如果没有一些特殊原因的话。

总结

总的来说刷题还是能学到不少东西的,对于整个人的成长还是有好处的,不仅仅是工作方面,对于心性的考验也是不少。

笔者也通过刷题找到了一份还算满意的工作。领导和同事都很Nice,公司的人文关怀感觉也好好,福利不少,离家还很近,天天骑着小电动车就到了,和预想中的工作还是差不多的。

至此,《前端刷题路》也就完结了,笔者也要进入下一阶段了,开始下一个目标了,生活总得继续,面包和牛奶都会有的。

加油吧,为了过上想过的生活。

路漫漫其修远兮,吾将上下而求索

与君共勉。