地平線前端一面22-23年總結(jié)
面試軟件用的騰訊會(huì)議,只有面試者開視頻,用時(shí)30分鐘,效率最高可當(dāng)天出結(jié)果,基礎(chǔ)和api問題很多
??及斯晌?,手撕,場(chǎng)景,看代碼說輸出
注重手寫,js和react偏多,計(jì)網(wǎng)沒有,webpack看下
- 面試多會(huì)照著簡(jiǎn)歷問,所以不熟的東西千萬不要作死寫上去
- 手寫一定要滾瓜亂熟,因?yàn)榭嫉亩际腔A(chǔ),所以面試時(shí)給你停頓時(shí)間不超過一分鐘
- 答不出來也不必緊張,面試官的目的就是深挖到你答不出來,只是為了摸清你了解到哪個(gè)程度,一般情況并不會(huì)因?yàn)槟闵俨糠执鸩簧蟻砭筒灰懔?/span>
x2表示地平線考過至少2次
說下防抖節(jié)流,說了使用場(chǎng)景和實(shí)現(xiàn)。(x2)
拍平數(shù)組(x2)
2023.4.14
面試全程40min左右,IC部門的
面試官是受托來面試的,不是搞前端的,雖然在交給我編程題時(shí)我有看到他那邊2021前端面試題的文檔,但是他并沒有問我前端。
所以問了我數(shù)據(jù)結(jié)構(gòu)的常用排序的時(shí)空復(fù)雜度,問了進(jìn)程線程的區(qū)別,http這些計(jì)算機(jī)基礎(chǔ)關(guān)鍵問題,最后給了我三道編程題,不限語言,盡快郵件交付即可。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>地平線前端筆試</title> </head> <body> <div>請(qǐng)輸入時(shí)間: <input type="text" id="time" value="5"> <button onclick="startCount()">開始倒計(jì)時(shí)</button></div> <div>請(qǐng)輸入字符串:<input type="text" id="str" value="abccbbb"> <button onclick="delRepeat()">開始去重</button> 結(jié)果為<input type="text" id="res"> </div> <div>請(qǐng)輸入字符串(方法1:正則表達(dá)式):<input type="text" id="strAI2" value="3[abc]"> <button onclick="repeatAIReg()">開始重復(fù)</button> 結(jié)果為<input type="text" id="resAI2"> </div> <div>請(qǐng)輸入字符串(方法2:壓棧):<input type="text" id="strAI1" value="3[2[a]2[b]]"> <button onclick="repeatAI()">開始重復(fù)</button> 結(jié)果為<input type="text" id="resAI1"> </div> </body> <script type="text/javascript"> //倒計(jì)時(shí) 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(); } //倒計(jì)時(shí) //消除相鄰字符串 function delRepeat() { let str = document.getElementById("str").value; for (let i = 1; i < str.length; i++) { let flag = false;//是否刪除過重復(fù)元素 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);//刪去重復(fù)的子串,將剩余的子拼接 } if (flag) i -= 2;//回到被刪的前一個(gè)元素,再次遍歷,下一步會(huì)i++,所以i-=2; } document.getElementById("res").value = str; } //消除相鄰字符串 //智能重復(fù) //方法2:正則表達(dá)式 function repeatAIReg() { let str = document.getElementById("strAI2").value; const regex = /\d+\[[a-zA-Z]+\]/g;//獲取cnt[str]格式的字符串?dāng)?shù)組 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) {//拼接數(shù)字 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(); } //智能重復(fù) </script> </html>
因?yàn)?3年沒有什么參考,所以整理了22年的,22年面經(jīng)如下,從新到舊排序
2022.8.23
1.自我介紹
2.實(shí)現(xiàn)兩欄布局,說了三種
3.判斷一個(gè)對(duì)象是空對(duì)象,說了stringfiy和object.keys
4.說下防抖節(jié)流,說了使用場(chǎng)景和實(shí)現(xiàn)。(x2)
5.然后看了幾個(gè)作用域的題目,事件循環(huán)題。
6.字符串計(jì)數(shù),用map實(shí)現(xiàn),延伸一下求最多的字符,統(tǒng)計(jì)map中value最大的。
7.vue2和vue3區(qū)別??蓮挠梅ǖ皆创a都說了一遍。
8.vue和react區(qū)別??蓮挠梅ǖ皆创a說了一遍
9.vue實(shí)現(xiàn)數(shù)據(jù)響應(yīng)。說了下watch。
10.說下watch和compute區(qū)別,秒了。
11.es6有哪些新特性,項(xiàng)目中用了。說了七八個(gè)。
12.手寫拍平數(shù)組,秒了。
13.手寫深拷貝,秒了。
2022.8.5
- 為什么要來前端崗位?
- 從整體的角度來說一下前端技術(shù)?(這種開放題反而有點(diǎn)不知道怎么回答)
- 項(xiàng)目中的防抖和節(jié)流技術(shù),應(yīng)用場(chǎng)景
- 手寫防抖,延伸出防抖里面函數(shù)如何接受參數(shù)?使用閉包實(shí)現(xiàn)出來
- Promise是什么?
- 如何解決回調(diào)地獄問題的?
- then和catch的區(qū)別是什么?
- 原型鏈?zhǔn)鞘裁??為什么用它?/span>
- 根據(jù)原型鏈延伸出了n多個(gè)題目,具體到每條線都要理解
2022.7.22
1.首先進(jìn)行自我介紹
2.實(shí)現(xiàn)左邊固定,右邊自適應(yīng)布局
我答的是用左邊盒子固定寬度,右邊BFC盒子
3.還是上面那個(gè)問題,用flex布局怎么實(shí)現(xiàn)
4.怎么判斷是不是一個(gè)對(duì)象類型
用typeof判斷會(huì)有弊端,然后我從底層存儲(chǔ)數(shù)據(jù)類型解釋了為什么null會(huì)被typeof誤判成對(duì)象
然后我介紹了使用 Object.string可以準(zhǔn)確判斷一個(gè)類型的類別
5.面試官共享屏幕問js執(zhí)行題的輸出:
考點(diǎn)一:塊級(jí)作用域和全局作用域
考點(diǎn)二:根據(jù)作用域鏈查找輸出變量顯示的值
考點(diǎn)三:事件循環(huán)機(jī)制,setTimeout內(nèi)部打印for循環(huán)的i變量
考點(diǎn)四:上題var 改成let后的輸出是什么,為什么
6.你會(huì)vue是吧?問你點(diǎn)vue知識(shí),watch和computed的區(qū)別
從應(yīng)用場(chǎng)景進(jìn)行解釋,另外computed具有緩存上次值的功能。
7.了解slot插槽么?
這個(gè)沒咋用過
8.用過react么?
沒用過
9.考查算法思想:高維數(shù)組如何進(jìn)行平鋪成一維數(shù)組?
沒答好,我只能想出二維變成一維的辦法
10.反問環(huán)節(jié):部門使用的是vue技術(shù)還是react技術(shù)呢?
react。
基于我今天的面試表現(xiàn)您對(duì)我有什么學(xué)習(xí)建議?
其他都挺好,算法能力可能差了點(diǎn)。建議我多練練算法。
用時(shí)30分鐘
#軟件開發(fā)2023筆面經(jīng)##地平線##面試##前端##實(shí)習(xí)#