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

面试分享:三年经验面试阿里前端失败总结(附面试真题及答案)

时间:2023-04-05 02:03:15 HTML5

前言大家好,我是驾考书手游天下的WckY。我目前辞职并正在寻找一份新工作。一直在手游天下负责h5游戏业务。辞职后在github上创建了一个h5游戏合集。您可以单击此处了解更多信息。从上周二面试开始,意外接到了杭州阿里的电话面试和在线编程测试。由于没研究过题目,包括Leetcode,也没怎么复习过基础,所以面试了一周,offer惨不忍睹。但不管怎样,知耻而后勇。接下来给大家分享一下阿里以外其他公司的面试题。大家记得刷面试题哦!!!以下是阿里第一轮面试流程,电话面试+在线编程面试1.自我介绍就不用我了……阿里给我打电话的时候,已经是晚上八点多了,我正坐着在房间里发呆。电话接通后对方告诉我,我是杭州阿里巴巴华北借贷部的,然后说他们会发一个在线测试链接到我的邮箱。里面有两道编程题,20分钟左右可以做完。虽然一头雾水,但还是很快做了,然后看到网上给我印象深刻的试题,无从下手。2(算法题)。想办法随机生成100个随机字符串整数,丢到数组中,比如vararr=['1','2','3'....],arr的长度为100,然后设计不允许重复数据删除的算法,新的集合。写了八分钟,纠结了八分钟,最后还是没有写出正确的代码。阿里小哥很温柔,一步步指导我,再次感谢。面试结束后,我交作业帮前端朋友聊了聊这个问题,这是他最后的回答。vararr=Array.from({length:100}).map(()=>String(Math.floor(Math.random()*100)))varnewArr=[];arr.forEach((val)=>{if(newArr.indexOf(val)<0){newArr.push(val)}})console.log('sucess',newArr)3.实现一个带有简单观察者模式的类,在类中haveon,关闭,触发方法。在向对方确认可以使用原生JS实现on、off、trigger等方法后,我直接选择了放弃。我真的不能。之后,我和我的360工作的前端朋友聊天。他说在自如面试的时候面试官也让他手写,现在忘记了。。。4(算法题)。游戏中的碰撞你是如何检测到的?碰撞检测的固定方法是什么?A星寻路算法的具体原理是什么?说了下我实现碰撞检测的方式,但是阿里大哥好像觉得太麻烦了。。。所以问问有没有简单固定的方法,当然不知道。和星A一样,我只会按照文档使用。5.create.js和Pixi.js相比,有什么优缺点?是什么原因?你听说过移相器吗?你知道阿里的游戏框架叫什么吗?为什么您的PalmGame团队选择create.js?为什么选择create.js?当时,我的领导什么也没说。他只是说以后大家应该用create.js。然后他开始对create.js作为主程序进行二次打包。不过私底下仔细研究了不同引擎之间的差异,并在内部分享。主要参考资料:zhuanlan.zhihu.com/p/32392153。阿里总结并问了基本的技术问题后,阿里大哥就开始给我介绍这个职位他们想招什么样的前端,并耐心地给了我一些建议。但是除了技术问题,说实话,我完全忘了他后面说了什么。本来只想结束谈话的我,挂了电话后才松了口气。至此,阿里的面试已经告一段落,我决定不再给阿里其他的前端简历。我太菜鸟了。以下是PalfishSpokenLanguage、TAL等其他公司的笔试题1.EventLoop会输出什么?console.log('1');异步函数async1(){console.log('2');等待console.log('3');console.log('4');}setTimeout(function(){console.log('5');},0);async1();newPromise(function(resolve){console.log('6');resolve();}).then(function(){console.log('7');});console.log('8');这个部分呢?题目来自360笔试题setTimeout(function(){console.log(1);})Promise.resolve(function(){console.log(2)})newPromise(function(resolve){console.log(3);resolve();}).then(function(){console.log(4)})console.log(5)360笔试题是借贷宝朋友发给我的,然后我这两个第一步都错了。可以在浏览器和node环境下运行,是有区别的。2(算法题)。使用就地排序,将vararr=[2,0,1,0,2,1]改为vararr=[0,0,1,1,2,2],禁止使用sort和reverse函数。看到原地排序我惊呆了,我从来没听说过。面试官来了之后没有解释什么意思,我也忘记问了,很尴尬。回来查看了一下,原来原来的地方居然是冒泡排序。好家伙,我从来没有背过冒泡排序。for(vari=0;iarr[j+1]){vartemp=arr[j];arr[j]=arr[j+1];arr[j+1]=温度;}}}3.是什么原因导致宏任务和微任务的出现?是什么导致了当前的执行顺序?我很困惑....如果你问我为什么我刚才输出那些事件循环问题的答案,我可以告诉。至于为什么优先级是microtasks在macrotasks之前,我沉默了....4。谈谈你对这个指向问题和四个绑定规则的理解。这是一个动态的变化,谁叫它就指向哪里。默认绑定(严格/非严格模式)是严格未定义的;当调用非严格的独立函数时,this指向window。隐式绑定,当函数引用上下文对象时,隐式绑定会将函数中的this绑定到上下文对象。varobj={name:"wcky",foo:function(){console.log(this.name);//奇怪}};obj.foo();显示绑定,通过call()或apply()方法,第一个参数是一个对象。functionfoo(){console.log(this.a);}varobj={a:2};foo.call(obj);//2new绑定,如果有new关键字,this指向新对象。5(算法题)。写一个快速排序。突然!冒泡、快速排序和选择、插入等排序我都记下来了,当时就过一遍,没记下来。6.箭头函数和函数有什么区别?这个要具体分析问题。以下代码的输出是什么?原因是为什么?在node.js环境下,结果一样吗?让a=1;constobj={a:2,b:()=>{console.log(this.a);},c:function(){console.log(this.a);}}对象。b();obj.c();console.log(this.a);vara=1;constobj={a:2,b:()=>{console.log(this.a);},c:function(){console.log(this.a);}}obj.b();obj.c();console.log(this.a);首先第一段代码的输出是undefined,2.undefined在node.js下也是一样的。第二段代码分别输出1、2、1,但是在node.js下,还是undefined、2、undefined。具体原因是第一段代码中,let默认没有挂在window下,所以是undefined,2,undefined。对于第二段代码,大家可以想想为什么在node.js下还是undefined、2、undefined。6.2增强版的判断这个vara=1;varobj={a:2,c:function(){console.log(this.a);},b:()=>{console.log(this.a);}}obj.c();obj.b();console.log(this.a);varfoo=obj.c;console.log('111',foo());答案是什么?它们分别为2、1、1、undefined。如果我直接foo(),结果是什么?答案当然是1。7(递归)a1=1,a2=2,a3=a1+a2,a4=4,a5=a3+a4,a6=6....用递归求an。这道题不难,稍微想一想就可以了,只是当时没想到。不知道为什么只想到用递归求1X2X3X4X5Xn,然后就放弃了。错误的。functionf(n){if(n===1){return1}elseif(n%2===0){returnn}elseif(n%2===1){returnf(n-1)+f(n-2)}}8.您对强制缓存和协商缓存了解多少?对应的英文名称是什么?缓存控制和最后修改过期的电子标签9。以下代码输出什么,为什么?vararrData=[1,2,3,4,5,6];for(vari=0;i