地平线前端一面22-23年总结
面试软件用的腾讯会议,只有面试者开视频,用时30分钟,效率最高可当天出结果,基础和api问题很多
常考八股文,手撕,场景,看代码说输出
注重手写,js和react偏多,计网没有,webpack看下
- 面试多会照着简历问,所以不熟的东西千万不要作死写上去
- 手写一定要滚瓜乱熟,因为考的都是基础,所以面试时给你停顿时间不超过一分钟
- 答不出来也不必紧张,面试官的目的就是深挖到你答不出来,只是为了摸清你了解到哪个程度,一般情况并不会因为你少部分答不上来就不要你了
x2表示地平线考过至少2次
说下防抖节流,说了使用场景和实现。(x2)
拍平数组(x2)
2023.4.14
面试全程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年面经如下,从新到旧排序
2022.8.23
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.手写深拷贝,秒了。
2022.8.5
- 为什么要来前端岗位?
- 从整体的角度来说一下前端技术?(这种开放题反而有点不知道怎么回答)
- 项目中的防抖和节流技术,应用场景
- 手写防抖,延伸出防抖里面函数如何接受参数?使用闭包实现出来
- Promise是什么?
- 如何解决回调地狱问题的?
- then和catch的区别是什么?
- 原型链是什么?为什么用它?
- 根据原型链延伸出了n多个题目,具体到每条线都要理解
2022.7.22
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分钟
#软件开发2023笔面经##地平线##面试##前端##实习#