面试软件用的腾讯会议,只有面试者开视频,用时30分钟,效率最高可当天出结果,基础和api问题很多
常考八股文,手撕,场景,看代码说输出
注重手写,js和react偏多,计网没有,webpack看下
x2表示地平线考过至少2次
说下防抖节流,说了使用场景和实现。(x2)
拍平数组(x2)
面试全程40min左右,IC部门的
面试官是受托来面试的,不是搞前端的,虽然在交给我编程题时我有看到他那边2021前端面试题的文档,但是他并没有问我前端。
所以问了我数据结构的常用排序的时空复杂度,问了进程线程的区别,http这些计算机基础关键问题,最后给了我三道编程题,不限语言,尽快邮件交付即可。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>地平线前端笔试</title> </head> <body> <div>请输入时间: <input type="text" id="time" value="5"> <button onclick="startCount()">开始倒计时</button></div> <div>请输入字符串:<input type="text" id="str" value="abccbbb"> <button onclick="delRepeat()">开始去重</button> 结果为<input type="text" id="res"> </div> <div>请输入字符串(方法1:正则表达式):<input type="text" id="strAI2" value="3[abc]"> <button onclick="repeatAIReg()">开始重复</button> 结果为<input type="text" id="resAI2"> </div> <div>请输入字符串(方法2:压栈):<input type="text" id="strAI1" value="3[2[a]2[b]]"> <button onclick="repeatAI()">开始重复</button> 结果为<input type="text" id="resAI1"> </div> </body> <script type="text/javascript"> //倒计时 let c = 0; let t; function timedCount() { c -= 1; document.getElementById("time").value = c; if (c === 0) { clearTimeout(t); return; } t = setTimeout(function () { timedCount() }, 1000); } function startCount() { c = document.getElementById("time").value; timedCount(); } //倒计时 //消除相邻字符串 function delRepeat() { let str = document.getElementById("str").value; for (let i = 1; i < str.length; i++) { let flag = false;//是否删除过重复元素 if (str[i] === str[i - 1]) { flag = true; let j = i; while (j < str.length && str[j] === str[i - 1]) j++;//直到找到不与前者相等的元素 str = str.substring(0, i - 1) + str.substring(j, str.length);//删去重复的子串,将剩余的子拼接 } if (flag) i -= 2;//回到被删的前一个元素,再次遍历,下一步会i++,所以i-=2; } document.getElementById("res").value = str; } //消除相邻字符串 //智能重复 //方法2:正则表达式 function repeatAIReg() { let str = document.getElementById("strAI2").value; const regex = /\d+\[[a-zA-Z]+\]/g;//获取cnt[str]格式的字符串数组 while (str.match(regex)) { let arr = str.match(regex); for (const s of arr) { let cnt = /\d+/g.exec(s);//获取cnt let subStr = /(?<=\[)([a-zA-Z]+)(?=\])/g.exec(s)[0];//获取[str]中的str let repeatStr = subStr.repeat(cnt); str = str.replace(s, repeatStr); } } document.getElementById("resAI2").value = str; } //方法2 压栈 function repeatAI() { let str = document.getElementById("strAI1").value; let subStr = ''; const stack = [] for (const s of str) { if (s === ']') { let cur = stack.pop(); while (cur !== '[') {//获取'[xxx]' subStr = cur + subStr; cur = stack.pop() } let num = ''; cur = stack.pop() while (Number.isInteger(parseInt(cur)) && stack) {//拼接数字 num += cur; cur = stack.pop() } //将多取出来的放回去 if (cur) stack.push(cur); //将算好的字符串放入栈 stack.push(subStr.repeat(parseInt(num))) subStr = ''; cur = '' } else { stack.push(s); } } document.getElementById("resAI1").value = stack.join(); } //智能重复 </script> </html>
因为23年没有什么参考,所以整理了22年的,22年面经如下,从新到旧排序
1.自我介绍
2.实现两栏布局,说了三种
3.判断一个对象是空对象,说了stringfiy和object.keys
4.说下防抖节流,说了使用场景和实现。(x2)
5.然后看了几个作用域的题目,事件循环题。
6.字符串计数,用map实现,延伸一下求最多的字符,统计map中value最大的。
7.vue2和vue3区别。可从用法到源码都说了一遍。
8.vue和react区别。可从用法到源码说了一遍
9.vue实现数据响应。说了下watch。
10.说下watch和compute区别,秒了。
11.es6有哪些新特性,项目中用了。说了七八个。
12.手写拍平数组,秒了。
13.手写深拷贝,秒了。
1.首先进行自我介绍
2.实现左边固定,右边自适应布局
我答的是用左边盒子固定宽度,右边BFC盒子
3.还是上面那个问题,用flex布局怎么实现
4.怎么判断是不是一个对象类型
用typeof判断会有弊端,然后我从底层存储数据类型解释了为什么null会被typeof误判成对象
然后我介绍了使用 Object.string可以准确判断一个类型的类别
5.面试官共享屏幕问js执行题的输出:
考点一:块级作用域和全局作用域
考点二:根据作用域链查找输出变量显示的值
考点三:事件循环机制,setTimeout内部打印for循环的i变量
考点四:上题var 改成let后的输出是什么,为什么
6.你会vue是吧?问你点vue知识,watch和computed的区别
从应用场景进行解释,另外computed具有缓存上次值的功能。
7.了解slot插槽么?
这个没咋用过
8.用过react么?
没用过
9.考查算法思想:高维数组如何进行平铺成一维数组?
没答好,我只能想出二维变成一维的办法
10.反问环节:部门使用的是vue技术还是react技术呢?
react。
基于我今天的面试表现您对我有什么学习建议?
其他都挺好,算法能力可能差了点。建议我多练练算法。
用时30分钟
2021地平线笔试一二三面
2023年最全前端面试(20w字)HTML5+CSS3+JS+TS4+Vue3+React18+八股文+手写+项目+笔试 涵盖了大部分知识点,部分目录展示
#软件开发2023笔面经##地平线##面试##前端##实习#