当前位置: 首页 > 科技观察

7-9月2年前端面试经验总结

时间:2023-03-14 16:30:02 科技观察

背景:毕业于环球科技大学计算机专业,2年前端开发经验,在广州和深圳两家小厂工作一年每个。今年7月底,我裸辞回家,准备了2个月。面试了大大小小十几二十家公司,最后拿到了不错的offer。前言7月底,因为在深圳租的房子刚到期,中间遇到一些工作和非工作的问题,打算辞职直接回家准备。同时,在我的职业生涯规划中,我希望在职业生涯初期能够在大厂工作(不管是不是一线)。大厂提供的资源,大厂的业务,是小厂无法比拟的。能够进入大厂,对我以后的职业规划会有很大的帮助。同时,如果我今年选择进小厂,还保留着3年内进大厂的想法,那么明年又要跳槽了。hr面试是一个非常大的负项。同时再次提醒大家:不到最后一刻不要选择裸辞。因为一旦选择裸辞,就会失去经济来源,短时间还好,但是一旦经历了比较长的面试过程(比如腾讯的面试过程需要一个多月),精神压力整个人的分量非常大,同时,如果裸辞的理由不充分,在hr面试中也会是扣分项。至此,我的所有流程大致如下:大厂:深圳shopee(财务):offer;金山办公软件(wps+):报价;猎豹移动:报价;腾讯教育(IM网):三面,但不知道为什么简历还在处理中;字节跳动(深圳飞书):双面上市;富途证券(架构组):三边,我推;深圳百度(安全部):HR面,我推;中信信用卡研发中心:三轮面试,被安排上飞机,就是不想去;cvte(ES-Web):一个技术面试通过,hr面试被拒。小厂:深圳兔展:报价;明源云:报价;铱云科技:报价。Outline整篇文章不会列出上面我面试过的所有公司的面试问题,因为面试过程中问的问题大多与简历上的项目经历密切相关,所以很多问题不具有一般的参考价值,我会列出一些我在面试中经常遇到的问题,给出我认为比较好的答案,供大家参考。当然,我相信还是有很多人想看我完整的面试题。我已经把它们整理好存放在仓库i-want-offer/FE-Interview-questions[1],里面包含了我整个准备过程中准备的所有问题。过程中收集到的一些前端面试知识点,以及自己经历过的面试题,身边人经历过的面试题,或者在掘金上看到的有参考价值的面试题,希望对大家有所帮助。前端定型js基本原型链继承实现数据类型var,const,let比较esnextlatestspecificationnewprocessthis指向问题bind实现方法闭包事件循环【超高频】类型判断手写Promise其中,关于jssyntax的信息这里就不详细介绍了,大家可以去仓库中查找对应的信息。关于事件循环(EventLoop),大小厂的提问方式是不一样的。小畅通常会直接让你口述事件循环的机制。这时候标准答案是说事件循环分为浏览器事件循环和节点事件循环,分别说明浏览器和节点事件中的事件循环机制。循环机制。加分的是可以回答v8对async/await的优化以及node11版本前后nodeeventloop机制的区别(其实大部分面试官可能自己都不知道,面试题都是网上找的,你说的理智能唬住他基本没问题)。具体答案可参考EventLoop机制满分答案[2]。大厂是另一种提问方式。通常他不会让你直接口述事件循环的原理,而是会给你一道面试题,里面有宏观任务和微观任务的各种坑。这个其实更简单,做多了自然会发生。另外关于手写Promise,目前还没有小厂问过这个,但是大厂问过好几次了。他们让我手写Promise.finally和Promise.all。实现思路很简单。可以参考我用js实现的PromiseA+[3]。前后端沟通作为一个前端工程师,知道那几个基本知识点,足以让你应对初中水平的面试题,但是如果从程序员的角度出发,你还是需要丰富自己这方面的知识。这里不讨论,只是面试题。输入要在页面显示的网址-区分HTTP普通状态码认证和输入URL到页面显示的时髦题,不过我觉得这道题基本涵盖了整个前端的所有基础知识点,可以回答的很丰富。建议大家看一下我的总结:浏览器输入URL的全过程[4],分为三个步骤:网络篇、分析算法篇、渲染过程篇,比较好地描述了整个过程经历了什么。这道题可以带出缓存、DNS解析、TCP连接、HTTP请求、重排重绘等很多子题,如果你掌控得好,甚至可以掌控整个面试过程,非常有利于打动面试官面试官。印象比较好。跨域也是另一个非常高频的问题。通常会问你跨域的原因和解决方法。网上有很多答案,这里就不解释了。HTTP版本之间的差异通常不会让你回答。在我遇到的所有案例中,通常当我回答缓存时,面试官让我停下来解释缓存。这时候,我回答了HTTP各个版本的部分差异;另外我回答性能优化的时候会回答一部分,回答HTTP2的时候也会回答一部分。HTTPS的问题也比较简单,一般问题都比较直白。一般会直接让你解释原理,然后让你总结一下握手过程。偶尔让大家比较一下HTTP的优缺点。至于其他问题,可以去仓库找答案,也可以自己上网查。这些都是非常基本的问题。security本来这个问题应该列在前后端沟通的,但是这个问题太频繁了,几乎每次面试都会问到,所以单独列出来。具体答案可以参考我整理的这篇文章:Front-endSecurity[5]。通常,在回答安全问题时,需要回答以下几点:什么是安全问题?解决方案。XSS和CSRF是必须要回答的,剩下的回答多少你就知道了,但不要乱说。一旦你胡说八道,很容易让人觉得你在没有自己理解的情况下背书(虽然你确实在背书)。在工程方面,我们一般都是从一个项目入手,一般会问这样的问题:页面性能优化【超高频】webpack性能优化页面性能优化可以讨论的东西其实挺多的,比如,通常来自thenetwork,loading这两个角度是用来解决性能问题的。从网络的角度,我们可以谈谈前面提到的缓存、CDN、HTTP2、图片格式优化。在加载方面,我们还可以说说webpack的打包解包、tree-shaking、懒加载和异步加载、多线程。除了这两个角度之外,还可以从用户体验的角度进行优化,比如骨架屏、动画、虚拟滚动等。除了这种常规的角度,现在我们开发一个web应用通常都是使用框架,而每个框架一般都有一些配套的性能优化方式,比如shouldComponentUpdate、PureComponent、memo等手段来优化React中的diff算法也需要回答。框架优化问题通常在您回答完性能优化问题后提出。具体可以看这两篇文章:性能优化[6]React性能优化[7]至于webpack,根据我目前的面试经验,问的问题比较少,可以选择关心。FrameworkFramework基本上是现在现代web应用开发的必备技能。面试的时候,面试官一般会根据你简历上写的技术栈来提问。对于大厂和小厂,询问的方式可能会略有不同。对于小厂来说,如果你刚好和他们有相同的技术栈,那么他们的问题和大厂基本一样;如果没有,那完全看面试官是否了解你现在的技术栈,如果了解,他们可能会问一些问题,否则基本不问。对于大厂来说,不问基本上是不可能的。由于我的技术栈是React+Angular,所以在我所有的面试经历中基本上没有被问过Vue相关的问题(用Vue的同学尴尬)。到目前为止我被问到的主要问题是:Angular变更检查的原理以及如何优化React的diff算法的工作过程Angular和React的事件机制React中的setState是同步还是异步React和Angular的区别(如果你用过Vue,问的问题会被Vue代替)React中各种组件复用的优缺点(mixin、renderprops、hoc、hook)React的fiber架构老版本React有些生命周期是放弃React性能优化上面的问题很可能会被问到。2020年的TypeScript,ts基本上是一个前端从业者必须掌握的技能。一旦你在简历上写了自己有ts开发经验,面试的时候基本上都会问一两个关于ts的问题。ts的一些常识这里不再赘述,这里是我在面试中遇到的一些题目。另外,大厂和小厂对ts的掌握程度要求是不一样的。对于小厂来说,他们希望受访者能够熟练使用ts进行业务开发,所以对ts概念的熟练程度对他们来说很重要。说最重要的。对于大厂来说,他们可能希望面试官能用ts开发一些ts周边工具,所以他们很少会直接问一些ts的概念,一般都是让你手写一个ts工具函数。目前我面试过的小厂基本上都会问ts中type和interface的区别,而且基本只会问这个问题。另外偶尔会问一下ts怎么实现一个函数重载,基本都是从使用的角度,来测试一个面试官对ts的熟练程度。在大厂里,有两个问题印象比较深刻:1.实现一个ts工具函数GetOnlyFnProps,提取一个工具函数,字段类型是泛型T中的一个函数,其中T属于一个对象。typeGetOnlyFnKeys={[KeyinkeyofT]:T[K]extendsFunction?K:never}typeGetOnlyFnProps={[KinGetOnlyFnKeys]:T[K]}2.实现一个ts实用函数UnGenericPromise并提取PromisetypeUnGenericPromise>=TextendsPromise中的泛型类型?u:never项目经验项目经验千千万万,我的项目经验对大部分人来说价值不大。但是整个面试过程,对整个项目的描述其实可以提炼出来组合成一套公式来描述:项目的背景是什么;当前项目的目的是什么;你在开发过程中扮演什么角色;你遇到了什么样的问题;你是如何解决这些问题的;项目完成后取得了什么成果;这套公式基本上可以完整的说明你参与的项目的全过程,也有助于面试官发现你项目中的亮点,也方便面试官在你的叙述中找到可以挖掘的问题更深入地问你。同时,在你准备写简历的项目中,你最好自己走一遍以上的过程,这有助于你发现自己可能没有掌握的知识,查漏补缺。算法我相信大部分人对大厂面试的恐惧主要来自于对算法的恐惧,因为网上流传的各种面试题中有很多leetcode难度在mid以上的算法题。我也一样,尤其是面对字节跳动的时候,整个面试过程都很紧张。感觉字节跳动的算法题会很难,我可能做不出来。但是做完之后其实还好,难度基本控制在leetcodemid以下,连遇到的几个大厂在流程上都不涉及算法。不过我觉得作为一个程序员,算法水平在一定程度上代表了你程序设计的好坏,所以提高你的算法水平对于开发高水平的Web应用是很有帮助的。我在准备算法的时候,一开始就瞎刷lee??tcode题。整个过程感觉进度很慢。很多题刷了一两遍,第三遍看的时候还是不知道怎么办。后来我放弃了这种无目的的刷题,开始在网上找一些前端算法的常见题目。找到这篇文章:前端算法渣的救赎之路[8],总结了一些前端算法。面试中的常见问题,以及算法题的一些经典解法。在整个学习过程中,我的算法得到了很大的提升。同时,我也整理了一些自己的算法心得[9]。同时,对于基础不扎实的小伙伴,强烈推荐极客大学算法基础训练营9.9。看了整个训练营的4节课,对基础有了一定的巩固。做算法的时候,我有一个技巧:遇到问题,先尝试用最暴力的方法解决,然后分析暴力的方法会导致什么样的问题,然后解决遇到的问题。对于我遇到的大部分算法题,这种方法基本可以解决问题。各大厂面试特点今年由于特殊原因,基本上所有公司的面试都会采用远程面试的方式。在我整个面试过程中,其实各大厂的面试风格也略有不同,下面我会一一细说。CVTE视源股份据我了解,hr面试会有好几轮。基本上每一轮技术面试之后,都会有一轮hr面试来评价你。当时我已经过了技术面,没过hr面,而且hr面问的问题比较犀利,但技术面的难度还不错。基本上按照上面的模板,我可以用一组组合拳回答七个问题。七八个。CVTE一面没有涉及算法题,所以后面的面试不是很清楚。中信信用卡中心一侧是前端,另一侧是后台,所以只有一侧问了前端知识问题,另一侧只是简单的打电话聊天,主要是说说开发过程中的一些问题。这个过程非常快速和简单,整个过程只有一道算法题,也出现在我上面整理的算法题库中。百度的技术面一共4轮,基础面(同级别的员工)+基础面(级别应该比你高一点)+leader面(整个研发部的技术总监))+老板脸(整个研发部的总经理)人)百度要求你现场完成一套笔试题。难度一般。基本上,你必须把所有的知识点都过一遍。还有一道算法题,也是百度原题,只是题型一样,问题不大。前两个方面都是前端开发,难度不大。涉及的知识点不仅限于前端,还包括网络和开发模型等问题。leader的面试还是挺有意思的。当时他们强烈要求我去现场参加面试。领导是一个非常年轻的小伙子。因为他不是全职前端,他问的问题涉及到整个计算机的所有知识点:数据结构,算法(原题,很简单的递归),操作系统,什么语言做的除了js等你懂的,整个过程很轻松愉快,大家有说有笑。老板面前的气氛比较严肃,可能是会议室的空调有点冷吧。基本上整个面试就是给我吹脑子,说说我的项目经历,以及解决方案。答案模板基本可以按照上面的做,终于通过了。富途证券富途证券是我目前面试过的面试时间最长的公司。每一轮面试基本上正好是一个半小时。由于我只体验过富途双面,所以对整个双面之后的流程不是特别清楚,但大部分互联网公司都是类似的。一方面,面试官是做前端的,问的很细。不仅需要口授一些前端的基础知识,还会有一些笔试题让你完成,最后还有一道算法题,不过没让我写算法题。先说实现的思路,让我pass。第二个面试官好像是我面试组的开发负责人,所以整个过程没有涉及到任何前端知识相关的东西。一开始他在项目上吹水,后来给了4道笔试题,包括算法。难度方面,大概是leetcodemid的水平,做一下就好了。我觉得金山软件金山软件的面试题比较有水平。整个过程没有算法参与。一方面,有一些非常基础的前端问题。如果你记住它们,就很容易通过。第二面是两个面试官,其中一个是整个研发部的前端leader。一开始可能会问一些关于框架的知识,看你对框架的理解。然后从实际开发的角度,给出几个场景题让你设计,很考验一个人的开发水平,这样更容易找到熟练的前端开发。至于三面,就是全程吹水,或者按照上面工程的吹水公式吹水,整体很容易。Tencent腾讯的面试风格和金山很像,但是他问的基本问题会比较复杂,不会简单的让你说一些无用的API,只是用来背锅的。通常,会测试一些手撕代码。.然后每一方都会问你一些项目的信息,问的问题基本都是一样的,所以准备上基本没有问题。但是值得注意的是,在问项目的时候,不要让面试官带头。回答的时候一定要自信,不要被面试官牵着鼻子走。在第三次面试的时候,因为是第一次面试,没有什么经验,很紧张。被面试官牵着鼻子走,因为这次面试的是C端部门,面试官可能不太了解C端和B端的关系。不同的是,用c端思维来考察我的b端项目,导致我在整个面试过程中表现不佳。所以在面试的时候,一旦发现面试官问的问题不太对,一定要及时说出来。字节跳动字节跳动问的很详细。我参加的两轮面试,都是在问一些很基础的知识。面试过程不是很长,大概45分钟。一边做了一些自我介绍,一边给了5道笔试题,做完了再说其他的。第二面我简单介绍了我做过的项目,然后主要讨论了你做的项目中用到的技术。他给了我一道场景题,然后让我根据场景里的内容去实现,最后给了我一道应该是原创的算法题。其实在采访字节之前我是很紧张的。我个人对通过Byte的面试没有任何希望。但是面试过后觉得很多时候大家都误解了字节的面试,难度并没有想象中那么高。.但是有一点要说,我觉得面试我的两个面试官的态度都很好。有些问题我答不上来,他们会给我提示和鼓励。虽然我最后两次面试都没有过,但是第二次面试的面试官给了我一些帮助,教我怎么做算法题,也就是上面我算法总结的最后一段。总结其实面试也就是一回事。问的多了,自然能总结出自己的方法论。不过对于广大程序员小伙伴们来说,大家一定要记住,面试就是面试,工作就是工作。面试不好的人,在工作能力上不一定比你差。归根结底,当你在开发行业的时候,你还是在谈论你的技术水平。谁的层次高,谁的声音就大。不要以为进了大厂就稳定了一辈子,一定要不断提高自己的技术水平。后记在准备面试的过程中,看了很多掘金等网上的文章,收获了很多以前不懂的知识。在此非常感谢:LinDaiDai_林呆呀[10]大哥,他写的好几篇文章让我受益匪浅;luciferzero[11]是个大佬,他的前端算法渣男的救赎之路[12]在算法方面对我很有帮助;SaeYu[13]是个大佬,他的SaeYu博客[14]我什么都知道,是我的入口;非常感谢以上所有作者的无私奉献。最后,希望大家都能找到一份满意的工作。参考资料[1]i-want-offer/FE-Interview-questions:https://github.com/i-want-offer/FE-Interview-questions[2]Eventloop机制满分答案:https://github.com/i-want-offer/FE-Interview-questions/blob/master/JS/eventloop.md[3]PromiseA+:https://github.com/LaamGinghong/Promise-A-Plus[4]View浏览器输入URL全过程:https://github.com/i-want-offer/FE-Interview-questions/blob/master/Browserrendering/浏览器输入URL全过程.md[5]前面-端安全:https://github.com/i-want-offer/FE-Interview-questions/blob/master/security/front-endsecurity.md[6]性能优化:https://github.com/i-want-offer/FE-Interview-questions/blob/master/performanceoptimization/performanceoptimization.md[7]React性能优化:https://github.com/i-want-offer/FE-Interview-questions/blob/master/performanceoptimization/Reactperformanceoptimization.md[8]前端算法渣的救赎之路:https://juejin.im/post/6844904175562653710[9]算法心得:https://github.com/i-want-offer/FE-Interview-questions/tree/master/algorithms[10]LinDaiDai_林呀停:https://juejin.im/user/360295513463912[11]luciferzero:https://juejin.im/user/888061128607662/posts[12]前端算法渣的救赎之路:https://juejin.im/post/6844904175562653710[13]】见你:https://juejin.im/user/712139234359182[14]见你博客:https://github.com/mqyqingfeng/Blog