当前位置: 首页 > Web前端 > CSS

面试分享:阿里巴巴前端社招一年经验初探

时间:2023-03-30 14:10:19 CSS

阿里巴巴社招一般招聘P6+高级工程师,有3-5年经验。虽然不想换工作,但也经常关注一些招聘网站的信息。有一天,某老板的人找到我,让我发简历。某老板找我要简历,我知道我经验不足,然后跟老板说我是16班,只有一年的经验,然后就没有了。这次我还是这样回复,但是老板说,没关系,他喜欢底子好,我可以试试,所以我也抱着试试看的心态发了简历。简历投出后,老板给我打电话,让我简单介绍一下自己,我就噼里啪啦说了一些,还说了一些题外话。然后老板开始问我问题。因为四轮面试,第一次面试的记忆有些模糊,但仔细想想,又觉得记忆犹新。一、初步电话沟通1、说说你对CSS盒子模型的理解。刚才讲了IE的怪盒模型和注解浏览器的盒模型,然后可以通过box-sizing属性来控制这两种盒模型的转换。2、说说box-sizing的应用场景。这并不难。我简单提到了一两个应用场景,就不一一赘述了。3.说说你知道的灵活的FLEX布局。我也很清楚这一点。可以想到的概念和属性有很多,Grid布局也涉及到。这个基本上是没有问题的。4.说说一个不知道宽高的元素是如何垂直上下左右居中的。说说flex弹性布局的实现,说说兼容性,说说postcss的一些东西,再说说常规兼容性更好的实现。5.说说原型链、对象、构造函数之间的一些联系。之前写过相关文章,理解更深,所以这个问题不大。说了很多,也不知道面试官是怎么听的。6.绑定DOM事件的方式有三种,然后是一些冒泡的,默认的事件,还有DOM2和DOM3级别的一些标准。7、说说你项目中用到的技术栈,你引以为豪的地方和引以为豪的地方,还有让你头疼的问题,以及如何解决的。这是一个开放性的问题,因人而异。主要考察日常项目的一些积累。感觉这个回答还是比较ok的。8、你知道http2.0、websockt、https吗?说说你的理解和你知道的特点。我看过一些关于这个的文章,但我没有太多印象。我画了一些概念,但答案不是很深。第一轮电话面试大概50分钟,就记住了这么多,有些细节可能忘记了。一般来说,面试主要是看基础,然后老板说会把我的简历推荐给内部人员。进行正式的社会招聘流程。一轮技术面试然后当晚有个女面试官给我打电话,说8:30进行下一轮技术面试。没想到效率这么快,也没怎么准备。这次直接省略了自我介绍。1.webpack的入口文件怎么配置,多入口怎么划分等没看懂,说了自己的理解和node写的多入口怎么配置,然后面试官说是不是多入口配置,然后说说我的理解,然后这道题就过了。2.我看到你的项目使用了一个Babel插件:transform-runtime和stage-2。说说它们的功能。这个我还是比较了解的,所以讲了ES的一些API,比如generator,默认不转换,只转换语法,需要这个来转换,然后讲了profill,讲了stage-1,stage-2,stage-3,这个问题的答案已经很明确了。3、我看到你的webpack配置使用了插件webpack.optimize.UglifyJsPlugin,有没有感觉压缩速度很慢,有什么办法可以提高速度。我主要回答这个。我以前对它了解不多。一种想法是缓存的原则。压缩只是重新压缩变化,有减少冗余的代码。compression只用在制作阶段,然后面试官问还有什么?刚才说了也可以从硬件上进行改进,可以获得质的飞跃,比如换一台I9处理器的电脑。...4、我在你的简历上看到你懂http协议。先说说200和304的理解和区别。这个噼里啪啦说了很多,协商缓存和强制缓存的区别,过程,还有一些细节,提到了expires,Cache-Control,If-none-match,Etag,last-Modified之前已经详细了解了这块区域的匹配和特性,所以响应还是很流畅的。5、DOM事件中target和currentTarget的区别没有回答。..6.谈谈你平时是怎么解决跨域问题的。以及后续JSONP的原理和实现以及如何设置cors。刚才说了Jason和cors,然后问我JSONP的原理和cors怎么设置。这部分我自己练习过,所以答题还是很流畅的。7.说说深拷贝的实现原理。这样还可以,但是细节考虑的不是很全面。首先讲了一个JSON.stringify和JSON.parse的实现,以及这个实现的缺点,主要是非标准的JSOn格式不能复制和兼容性问题,然后问我用过IE8的JSON框架吗,我不记得是什么了,因为没听过,然后讲了尾递归实现深拷贝的原理,问我typeofnull是什么,this当然是Object。..8.说说你认为项目中可以改进的地方,以及你做得好的地方?这也是因人而异的。这是一个悬而未决的问题。大致说说自己的经历,还可以。最后,我问是否有什么我需要问的。面试到这里基本就结束了。大约一个小时后,我还是很累。总的来说,回答的广度、深度和细节都还可以,感觉这一轮面试基本没有悬念。第二轮技术面试后没几天,就接到了阿里另一位面试官的电话。最后一轮面试通过了。这次是第二轮技术面试,大概一个小时。这次还是略过自我介绍之类的,直奔主题。1、你自己写过webpackloader吗,原理什么的,记不太清了。就这么说了,然后loader配置就ok了。2、是否研究过webpack的一些原理和机制,如何实现的?我简单说一下我知道的,因为这部分我没有深入研究过,所以说的应该比较浅。3、babel将ES6转ES5或ES3的原理是什么?你研究过吗?这部分我讲了我的想法,总体来说还可以。具体怎么转换我还没有深入研究。之前好像看过类似的文章,只是观察转换后的代码长什么样。至于怎么转换规则,还真没去深入观察。4.大型git项目团队合作,持续集成。这里我就说说我对gitflow的了解。因为没有实战经验,所以选择性的说明自己在这方面的不熟练,面试官也没有详细问。5.什么是函数柯里化?并告诉我函数柯里化的实现应用了哪些JSAPI?在这里我将谈谈对函数柯里化的一些理解以及它在函数式编程中的应用。最后说说JS中bind函数和数组的reduce方法中函数柯里化的使用。6.ES6的箭头函数这个问题,以及扩展运算符。这部分主要是API和概念,这只是严格模式下一些规范和其他情况的问题。7、JS模块化Commonjs、UMD、CMD规范的理解,以及ES6模块化与其他类型的区别,以及出现的意义。这也是说说我的理解和认知。模块化的历史和一些规范我都有涉猎,这个还行。8、说说Vue的双向数据绑定原理,以及vue.js和react.js的异同。如果让你选择一个框架,你如何权衡这两个框架?我们来分析一下。主要是发布订阅的设计模式,以及ES5的Object.defineProperty的getter和setter机制,然后顺便说了下Angular的脏检测,alvon.js最先使用了这个方法。然后讲了vue.js和react.js的异同,框架的选择权衡,研究分析等等,说了一大堆。9.看到你也写了一篇博客,讲一下稿件的交互细节和实现原理。这个是根据我自己使用简书或者掘金,SG等草稿的经验,详细讲解过的。这个openquestion基本上说到点子上就OK了。最后面试官问我有没有什么问题。面试到这里基本就结束了。花了大约一个小时。几天后,我会给出答案。如果通过了,我会去阿里园区进行下一轮的技术面试。.三轮的技术表现,感觉自己没有前两轮发挥好,还是有点不自信。没想到过了第三天就打电话通知我去阿里校区面试。因为阿里西西公园离我不到十公里,所以我是凌晨一点骑着共享单车出发的。天气比较热,飘在路上,百感交集。一辆法拉利呼啸而过,另一辆兰博基尼呼啸而过。心里有一万匹草泥马在奔腾,MLGB,心想,这不就是正在看文章的你吗,开神马这辆车的吗?中途面试官给我打电话说怎么还没到,还说约好两点,我愣了。短信只有一个游客访问ID,并没有告诉我具体时间。反正不管谁疏忽,我肯定迟到了,于是我赶路,骑着难骑的共享单车,背着微风,一路狂奔。满头大汗,满脸油光,到了阿里公园就气喘吁吁了。..面试迟到了,印象肯定不好,大汗淋漓的形象也不太好,又饿又渴,估计要GG了。老板面试我。第一面试官1.首先自我介绍,说说项目的技术栈,项目中遇到的一些问题。这个问题只是一个开场白。我简单说明一下,问题不大。这位面试官是第一次打电话给我面试的老大,所以技术老大也深有体会,所以就没有再问技术问题了。2、一个业务场景,面对不断的产品迭代,如何应对需求的变化,具体技术方案的实施。具体的业务场景我就不一一描述了。老大在白板上画了一个大概的模块图,然后做了一些需求描述。然后我们需要一层层改,再往下挖,主要考察对付产品的能力,以及代码的可维护性和可扩展性。对于开放式问题,我认为也考察了一些沟通技巧。因为有些地方,面试官故意说得很含糊。反正就是综合能力和对产品的理解。中间说了怎么实现,也问了一些具体点。记得多问几句。①如何获取元素到视图顶部的距离。②getBoundingClientRect获取的top和offsetTop获取的top的区别③事件委托给第二个面试官1.业务场景:比如百度的一个服务不想让阿里使用。如果识别出是阿里的请求,那就跳404或者拒绝服务什么的?主要是查看http协议的Referer头,然后怎么判断是不是阿里的ip什么的,我不是很清楚。2.如何求二分查找的时间复杂度,是什么。..排序倒是还算清楚,但是搜的时候真的是一头雾水。我没有回答,也没有猜测。这没有多大意义。3、什么是XSS,攻击原理,如何防范。这很简单。跨站脚本攻击XSS(crosssitescripting)。主要有两种攻击类型:反射型和存储型。简单说一下如何防御:①逃逸②DOM解析白名单③第三方库④CSP自身对web的攻击我研究过安全系统,也学到了很多。我对XSS、CSRF、点击劫持、cookie安全、HTTP窃听篡改、密码安全、SQL注入、社会工程等都有一定的了解,这自然不在话下。向下。4.线性顺序存储结构和链式存储结构有什么区别?以及优缺点。我是用JS数组和对象来类比回答的。不管怎样,没关系。对数据结构还是有些印象的,所以进了前端,真的把数据结构和算法忘得一干二净了。5、分析手机日历、PC日历和桌面日历的一些区别和需要注意的地方。我能想到的大概是这样。不同的场景交互、细节、功能都有偏差,功能的侧重点可能不同。6.把代码写在白板上,用最简洁的代码实现数组的去重。我写了两个实现:ES6实现:[...newSet([1,2,3,1,'a',1,'a'])]ES5实现:[1,2,3,1,'a',1,'a'].filter(function(ele,index,array){returnindex===array.indexOf(ele)})7、草稿、多端同步、冲突问题如何实现?这个答案不是很好。我也想过类比git的处理方式,但是说的时候换了个方式说,结果和面试官想要的结果不一样。最后,目前的工作经验没有达到P6级别,业务类略显薄弱。阿里目前招聘高级工程师只需要P6,但可以进入第二梯队,即与第三方签订聘用协议,一年后即可成为正式员工。俗称外包。有点可惜,面试了四轮外包商,最后还是放弃了这份工作。最后,感谢老板一直以来对我的关心和关注。