【位元組日常實習-前端涼經】
- 一輪 電話面
- 二輪 視頻面
博主人生中第一次面試竟然是位元組跳動,真是蚍蜉撼樹哈哈,當時無心插柳隨手投了一個,沒想到對方不在意我的非科班身份,給了我面試機會,
坐標杭州,背景是雙985非科班碩士,除了肯加班一無是處,
一共三輪面試,博主水平太差,在第二輪就涼涼了,在這里感謝位元組給我的面試體驗,我會繼續努力的,總結一下兩輪面試,供大家參考,
一輪 電話面
面試官上來先說大概十幾分鐘,最后被我扯到了20分鐘,
1. 做過什么專案?
生而為非科班,我很抱歉,只有一些和前端無關的演算法專案和自己寫的一個蹩腳的博客系統(重點還在node.js上…)
2.為什么選擇前端?
3. 計算機基礎怎么學的?
博主耿直地把計算機網路、資料結構與演算法、作業系統挨個講了一下,作業系統的確沒有系統學過,不該講的,編譯原理么…
4. 講一下計算機網路的分層結構
我說我看過《自頂向下》,面試官就問了這個問題,
5. 快速排序大概講一下?
我說我資料結構是刷LeetCode為主,所以面試官問了這個問題,這個不難,接下來又進一步問了快速排序pivot如何選擇(優化),沒有看過《演算法導論》的我,很抱歉…不會,面試完補了一下,可以參考這篇博文,
演算法真是博大精深…我以為我會手寫快排就行了,太天真…
總的來說,第一輪面試官是有看過我簡歷(知道我是非計算機專業的),針對性的提了一些比較友好的問題,感謝這位優しいの面試官,
二輪 視頻面
收到第二輪面試邀請,點開鏈接看到牛客網的房間啊,哦吼完蛋,我意識到自己應該是過不了這一輪的了,盛傳位元組上來兩道hard,以我這種一道medium都可能要做40+min,hard看運氣AC的水平,肯定是要涼的,不過最終只有一道medium … 面試官幾次提示我,最后還是沒寫好,這只能怪自己演算法不扎實了,
1. 獲取一個DOM樹中,div節點的個數
面試官一上來,先BAN掉了document的方法,說那樣直接一步就出來了(其實我不知道怎么一步就出來了),然后我就懵逼了,因為DOM操作我記得document的方法…
后來面試官善意提醒我,DOM是什么資料結構?我回答是樹,可惜當時太緊張了連遞回都忘了用了,面試官引導我用深度遍歷,還允許我用偽代碼…
事后在網上也沒搜索到原題答案,我就自己寫了一個,有錯誤的地方請大佬指教,
<div id="app">
<div>
<div>重整旗鼓</div>
<div class='fighting'>
<div>再接再厲</div>
</div>
</div>
<div>沖沖沖</div>
</div>
<script>
function getDivNumbers(node){
let cnt = 0;
if(node==null || !node.hasChildNodes()) return 0
for(n of node.childNodes){
if(n.nodeType === 1){
cnt ++;
cnt += getDivNumbers(n)
}
}
return cnt
}
const node = document.getElementById("app")
console.log(getDivNumbers(node))
</script>
2. 三數之和
Leetcode原題!可惜我沒刷過

看到題目的時候,我的腦海里閃現過,之前好像做過一個兩數之和(easy),
然后…就沒有然后了,三數之和跟兩數之和根本就不是一個東西…
我上來先說,這道題O(n3)的方法是可以的(廢話)…
然后我想到了先排序,面試官提醒我可以用雙指標,可惜太緊張了只聽懂了一半,最后磕磕絆絆也沒A出來… 牛客網的代碼區風格和leetcode也不太一樣,上來就飄紅…很搞心態hhh
恥辱地貼上官方解答…
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int n = nums.size();
sort(nums.begin(), nums.end());
vector<vector<int>> ans;
// 列舉 a
for (int first = 0; first < n; ++first) {
// 需要和上一次列舉的數不相同
if (first > 0 && nums[first] == nums[first - 1]) {
continue;
}
// c 對應的指標初始指向陣列的最右端
int third = n - 1;
int target = -nums[first];
// 列舉 b
for (int second = first + 1; second < n; ++second) {
// 需要和上一次列舉的數不相同
if (second > first + 1 && nums[second] == nums[second - 1]) {
continue;
}
// 需要保證 b 的指標在 c 的指標的左側
while (second < third && nums[second] + nums[third] > target) {
--third;
}
// 如果指標重合,隨著 b 后續的增加
// 就不會有滿足 a+b+c=0 并且 b<c 的 c 了,可以退出回圈
if (second == third) {
break;
}
if (nums[second] + nums[third] == target) {
ans.push_back({nums[first], nums[second], nums[third]});
}
}
}
return ans;
}
};
其實這是道挺經典的面試題,之前做了很多的每日一題,但竟然連這么經典的題目都沒做過,刷題的選擇上是有問題的… 以后還是不刷每日一題了,先把經典的面試題搞清楚…
3. promise和異步

這道題考察的是promise的執行邏輯和同步/異步,
- 首先promise建構式執行,1會列印出來,然后promise變成resolved狀態,接著輸出2,后面然后reject()其實是沒用的,因為promise狀態確定后就不會改變;
- 然后setTimeout執行,但里面的回呼是異步任務,所以5不會立馬列印;
- 然后promise的then()和catch()函式被系結上,但此時里面的回呼不會執行;
- 然后最后的同步程序4被列印出來,
- 然后promise的回呼函式(微任務)先于setTimeout(宏任務)被執行,
最后答案應該是:
1 2 4 3 6 5
4. 并發和并行/行程和執行緒
5. 說一說RSA加密… 這個我真的不會
6. defineProperty和proxy的區別,
只用過defineProperty,,,可以參考下這篇博客
7. new Function 的原理,
我回答的也不是很完善,可以參考下這篇博文
8. 瀏覽器的event loop 和 node環境下的event loop,
瀏覽器的event loop我知道,node的…支支吾吾就說了和"瀏覽器差不多"… 可以參考下這篇博客 宏任務和微任務,
9. TCP和UDP的區別,
感覺這是我唯一回答的還算可以的題…
10. 左邊固定,右邊自適應的布局,
簡化版的圣杯 / 雙飛翼,
11.移動端做過嗎?rem適配原理是什么?
第二面還是很看計算機基礎和對JS的理解的,涼了也是理所應當, 作為一個已經研二的非科班,現在心情就像一個文科生報了理科高考,眼看著高考前夕… 唉,加油吧,
與其茍延殘喘,不如縱情燃燒吧,有一天總會發芽…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/212835.html
標籤:其他
