当前位置: 首页 > 后端技术 > Java

BAT大厂面试心得,想进大厂的程序员必看!!!

时间:2023-04-01 20:39:47 Java

个人近期面试情况今年2月以来,除了一个用友面试官,我的面试几乎都被拒了。可以说是非常的残忍了。其中有很多我觉得可以面对的好职位,比如百度、跟谁学、好未来等公司。说实话,打击还是比较大的。3月以来,情况已基本好转。此时此刻,疫情可能很快结束,国家也启动了接近40万亿元的基础设施建设计划。这时候面试的几家有代表性的公司,包括腾讯、饿了么、宝宝树、旷世科技等,基本都成功了。终于在3月9日,饿了么帮我确认了p7的位置。也算是到了另一个奋斗阶段。把自己的经历做一个面试总结。我的面试准备面试其实就是边面试边准备面试的过程,但是无论如何,一定要有扎实的基础,比较好的自我介绍,以及对自己职业故事的描述。1、基础知识的准备其实很重要。很多问题必须很容易理解,就像呼吸一样自然。因为这方面的掌握程度决定了一个前端工程师能否达到高级水平。抛砖引玉,比如面向对象、原型链、闭包、es6、html5、css3,它们是前端的基础,需要彻底熟悉。比如你连闭包都解释不了,那你真的应该在这些基础上下功夫。.对于前端框架,基本的特性,生命周期,组件,传值交互,路由,redux,vuex等等,基本没有使用上的疑惑。例如,面试官可能会问,actions和mutations有什么区别。这部分,几乎可以问出无穷无尽的问题。即使是同一个知识点,问的方式不同,如果没有真正理解,真的过不了高级。2.做好自我介绍自我介绍,很多人其实做的并不好。其实这是面试官对面试官的第一印象。如果我是面试官,我的自我介绍基本上可以得到以下信息:1、这个人是不是一个有逻辑的人?2、这个人的性格是积极的,还是略显自卑的?3.这个人能很好地表达自己吗?这些问题非常重要。按照这个思路,其实可以反过来向面试官表达自己。1.学校,专业2.技术栈3.职业经历4.不要跟面试官说最近在一家公司的贡献,配合好产品和背景,完成公司的项目之类的。因为这完全是胡说八道!自我介绍通常需要两分钟左右。你确定你能在两分钟内向面试官解释清楚以上四个问题吗?而且你要突出一些重点,比如我擅长react,做过XXX优化,有XX年的项目经验。自我介绍的精髓:用最短的话向面试官灌输你的优点,让面试官在目前的大概范围内考察你。如果你说你熟悉vue,一般面试官会多问一点vue,应该不会跟你反应。3、如何“讲故事”这是比较重要的一点。重要的是,故事要说明是什么让您与众不同。比如我会说,我之前在公司,做我们前端项目的标准化工作,搭建我们内部的组件库,集成我们自己的脚手架工具。这是我认为与大多数其他前端不同的地方。面试官的重点会放在什么是项目标准化,定义了哪些维度?构件库的建设解决了哪些问题?脚手架的出现,解决了哪些问题?任何人都是独一无二的,任何项目也是不同的。作为采访者,提取这些关键要素并形成我们自己的“故事”对我们来说很重要。比如我独立承担了公司的xxx项目。挑战是什么,我是如何逆境成长的。比如我通过xxx渠道研究了多少个项目的架构工作。只需要相信有些事情因为你而改变了。其实大部分人都处于被动状态,不知道自己有什么用,不知道自己在团队中的位置,不知道自己的职责是什么。在工作中,希望大家相信自己是有用的,然后找到可以发力的点,做出真正的改变。如果您正在找工作,请考虑您实际上在团队中的位置以及您正在承担的工作。面试应该注意什么?面试的核心是什么?一定要记住,那是沟通!而我们做技术,其实最大的硬伤多半是沟通,至少对我来说,是这个问题。沟通的意义,一方面是想让别人明白你表达的意思;另一方面,你必须理解别人说的话。1.注意你说的话,这样别人才能理解你。让我举一个例子。我去美团面试的时候一直口吃。我不知道为什么。平时说话是正常的。在特殊情况下,会出现此问题,虽然讲完了,但很明显美团通过了第一次会议。当时是在家视频面试。舍友不好意思直接说我,就帮我录了下来。听了大概10分钟,确实不尽如人意。.录音听了10分钟,我对自己的评价是,说话很费力气,以后再合作的话,也不会累死我。从现在开始,在所有的采访中,我都会把重点放在如何让别人听懂我说的话上,而不是我怎么说。首先,我对面试官说的一切都是系统的。其次,我对面试官说的一切都合乎逻辑且清晰。第三,我对面试官说的所有话,我都停顿了两秒多,想清楚了再说。当然这个可能是我个人的特例,但是基本语句流畅,逻辑清晰。程序员中,应该不多。2.学会倾听,让你理解别人。很多时候,其实面试官在表达的时候,我们很可能没有理解面试官的意思。这个时候,就会特别尴尬。我一般都是这样,我会说,我来描述一下你刚才提到的问题xxxxxxx。描述完了,可以再问面试官,是这个意思吗?一般来说,面试官会给出更详细的例子和描述。我在饿了么面试的时候,二面的面试官一开始问了一个比较复杂的业务问题,所以一开始其实我也没有听懂面试官在说什么,但是我通过自己的方式来引导面试官多说一些,然后在一定程度上达成共识,这是一种比较愉快的交流。不管是学说还是学听,核心的问题是让双方在同一个频道上交流,因为对于领导来说,面试其实就是在找相似的人!不可避免的面试题前端的一些核心经典题感觉永远都不会过时。反正我个人遇到的频率很高,但是我个人不会详细解读这些问题。1、前端浏览器输入网址后会发生什么?普通的前端都会回答,dns解析,获取html文件,解析DOM,渲染页面这么一个过程。其实这个过程很复杂,比如一个dns解析阶段,分为哪几步呢?解析出来的ip一定要一样吗?每次都会进行DNS解析吗?您可能还需要了解CDN托管的一些问题。比如html文件的获取,它是如何传输的?链接是如何建立的?什么是三向握手和四向挥手?http协议端口是什么?为什么我可以直接访问一个html文件?....2。前端性能优化?大部分前端基本都会说减少http请求,js和css压缩合并,图片懒加载,防止回流重绘,css放在头部,js放在底部。以上说法是否正确?完全正确!但是在这个过程中,我觉得缺乏思考。比如减少http请求,可以从哪些维度去减少?比如合并http请求?比如合并资源?喜欢延迟加载图像?http还有其他维度的优化吗?饼干优化?区分http请求和资源加载的优化?在网络视图中呢?它和普通的浏览器优化技术有什么区别?......3、前端如何进行性能监控和异常监控?性能监控和异常监控基本都是在小公司,没有实际依据,但是几乎在大厂,都会关注这个问题。首先是性能监控,应该从几个维度去考虑:一个是http方面,在后端的日志里面,流入kafka,然后在kafka消费数据,可以准确监控到哪些接口有异常?异常率是多少?另外一个方面是前端PerformanceAPI,在用户实时使用过程中会产生数据,从而实现页面性能监控。对于前端异常监控,首先要了解什么是异常。html、css之类的无非是显示问题,不会导致页面空白。所谓异常监控,其实就是js的异常监控。在前端领域,window.onerror是js异常的监听事件。而且你要知道在IE里面是不支持的,所以IE的监听要用trycatch来捕获。比如我们可能也会注意到,遇到异步时,如何做trycatch异常捕获。最后一个是前端sdk埋点,直接开发一个js文件,统计用户的UV/PV分析等,比如用户的转化率。我在这方面没有任何特殊做法。你可以百度一下。4.关于前端安全,这是进阶前端必问的问题。是一个前端对整个前端安全的系统认知。必须了解几个方面:sql注入、xss、csrf、cookie安全、密码安全等SQL注入,要了解SQL注入的场景,它的原理是什么,目前的数据库解决方案是什么?xss攻击,常见的攻击场景,哪些类型的网站容易受到xss攻击,整个过程的原理是什么?csrf攻击实际上是钓鱼网站。要了解它为什么会受到攻击,应该采取什么策略来防御它。对于cookie安全,需要了解为什么要使用token,其优势等。密码安全主要是用户登录、用户数据提交、加密、入库的全过程。其次,http和https等其实也有问题。5、http、https、http1.0、1.1、2.0、3.0的区别http部分其实是一个很复杂的系统,要深挖的东西很多。HTTP经过非对称加密得到https。过程是怎样的?什么是CA证书?整个站点的验证过程是什么?各个版本的http有什么区别?解决了哪些问题?比如降头的优化,你知道这个优化的具体策略吗?减什么?添加了什么?深入细节。http的底层协议?tcp/ip协议的三次握手和四次挥手,它们是如何通信的呢?什么是全面启动?它甚至扩展到整个网络协议领域。什么是插座?udp有什么用?dns解析?FTP?和其他不常用的协议?如果进一步扩展,7层结构的计算机网络呢?每一层的作用是什么?计算机组成原理,如何解析我们的代码等等。......为了深入解读这部分内容,我大致分为几个模块,源码、可视化、跨平台、工程化、混合应用交互、设计模式。其实每一个都值得前端研究。作为一个人,其实我已经定下了几个方向,我以后会往哪个方向努力。1、源码最好看某个框架的源码,最差的是看别人写的源码解读文章。现在的趋势基本都是基于react和vue。以vue为例,你要了解vue框架的整个循环,比如vue的初始化,发生了什么?vue的模板解析是如何工作的?如何形成AST?渲染函数的生成?什么是依赖收集?什么是补丁?数据更新策略等。你还需要知道如何混入mixins、$options、vuex、router,通过这些API实现各自的功能?对于源码的维度,可以尝试从vue系统、react系统、loadash、zepto等库入手,因为我们都是从这些框架和js库中走出来的。2、可视化地图、echats、canvas、webgl、d3.js、three.js!以上就是我想一一研究的关于可视化的话题。虽然可视化不是我的专长,但是因为之前在地图相关的公司工作过,也算是对可视化略微有所了解。在饿了么的采访中,提到了一个特殊的使用场景,就是关于地图划线,大规模数据推送,性能相关的问题。以后前端常用的技能,比如vue,react等等,都会被大家所熟知。不会有差异化竞争。前端市场会趋于饱和,对某些方面的专业人才会更加需要。3.跨平台flutter,react-native,weex,electron这些是目前市场上跨平台的一些解决方案。每个框架,在大方向上,都解决了一定程度的多端开发能力。首先要明白,多端开发并不是万能的,我们开发中也存在一些痛点。不管是rn还是weex,都提供了一些特殊的组件供前端实现开发能力。但业务是多样的,需求也是多变的。对于未提供的组件或API,我们的前端开发人员无法实现某些功能。对于多端框架,更重要的是理解层面的东西,比如electron,就是理解它的本质,就是用node塑造一个桌面应用容器,然后在里面一个webview。从面试的角度来看,面试官关注的不是这个东西怎么用,而是通常会问一些内部原理,比如小程序和公众号的对比?底层实现?比如rn的编译解析过程是怎样的?如何将js编译成真正的ios和android应用。比如flutter的渲染机制和rn的渲染方式有什么区别?和普通网页有什么区别?跨平台技术,flutter最近火了一把。从求职的角度来说,其实是可以借鉴的。electron等桌面应用本身并不难,但是学不学本身就是一个区别。4.工程工程是我个人比较感兴趣的一个方向。我自己也做过一些实践,但只能说是工程上的冰山一角。抛砖引玉,提一些我们可以探讨的点。1.前端项目标准?作为图书馆的选择?文件划分目录的规则是什么?PC、手机多端实践?ssr解决方案整合?2.元件库整合?构件库建设的目的?发布npm包?3、脚手架工具?webpack编译优化?Webpack包构建优化?自搭建工具如何使用?4、git提交规范commit-msg?代码检查规范eslin?5、前端性能监控?前端异常监控?前端用户埋sdk?6.说唱?詹金斯?5、混合应用交互jsBridge,性能提升,x5核心是一个小模块,我们要了解jsBridge是如何实现h5与原生应用的交互的?ios和h5交互通信?窗口.webkit?是同步的吗?android和h5的交互?details和ios有什么区别?webview可以做什么来提高性能?什么是离线包?腾讯x5核心有哪些优势?使用x5内核可以避免哪些问题?6、设计模式最后说一下设计模式,可以算是面试高频题。我们至少要知道以下几种设计模式的功能、代码实现和使用场景。单例模式,原型模式,工厂模式,观察者模式,策略模式,代理模式等等,最后祝大家面试愉快。刚刚发布