好傢伙,
線上面試,總時長1h30mins左右
整體流程:
0.自我介紹(0-2mins)
1.做的比較難的事情(15min)
我講我之前寫的一個低開平臺,寫了一個撤銷回退功能,提了個pr,用了節流,用了命令模式
1.1.節流怎麼用的?用在哪?為什麼用?
1.2.節流把前面的觸發直接clean了還是怎麼處理?會不會清除掉一些關鍵變化?
1.3會不會導致某些變化無法觸發?如何更好的最佳化?
2.前端知識+計算機四大件拷打(25min)
2.1.使用者態和核心態的區別?
(忘了,直接跳)
2.2. https或者http連線過程發生了什麼?
講了tcp, dns代理返回ip
接著問2.2.1.TCP三次握手過程?
2.2.2.握手過程中唯一識別符號作用?
2.2.3.DNS解析過程,如何解析?
2.3. TCP/IP協議多少層?每層作用?
2.3.1.為什麼要分層?
2.4. 有沒有用過Rust?(每太聽清楚問的什麼,好像是這個)
沒有,直接跳
2.5. 用過什麼設計模式,展開說?
我講了訂閱釋出模式,命令模式
2.5.1.命令模式解決了什麼問題?
2.5.2.釋出訂閱模式怎麼用的?解決了什麼問題?
2.6.用過什麼資料結構?為什麼用?怎麼用的?
2.7. 非同步有了解過嗎?講講非同步
3.演算法(35min)
3.1.演算法一(20min)
三數之和
題目描述
給你一個陣列,有N個數,怎麼判斷三個數之和等於某個數,每個數只能使用一次
let number = [10, 21, 3, 14, 5...]
input: 9
output: true
input:2
output: false
要求程式碼實現
會寫
3.2.演算法二(10min)
資料來源:a->一,b->二 ,c->三,d->四
輸入: a 返回 [一、三], ab返回[三],b返回[二、四],bc返回[四]
要求給出思路,
面試官給了提示,說是類似拼音輸入法,用樹去實現
我妹答出來
4.最後反問(10min)
5.演算法答案補充
5.1.第一題:
function threeSum(nums, target) {
nums.sort((a, b) => a - b);
for (let i = 0; i < nums.length - 2; i++) {
let left = i + 1;
let right = nums.length - 1;
while (left < right) {
const sum = nums[i] + nums[left] + nums[right];
if (sum === target) {
return true;
} else if (sum < target) {
left++;
} else {
right--;
}
}
}
return false;
}
Array.sort的複雜度為O(nlogn)
外層迴圈為n-2,內層迴圈為n-1,算O(n^2)
平均複雜度為O(n^2)
5.2.第二題:
使用字首樹實現
一組單詞,adv,age,ant,ate,inn,int
用字首樹去儲存大概長這樣:
class TrieNode {
constructor() {
this.children = {};
this.outputs = [];
}
}
class Trie {
constructor() {
this.root = new TrieNode();
}
insert(key, output) {
let node = this.root;
for (const char of key) {
if (!node.children[char]) {
node.children[char] = new TrieNode();
}
node = node.children[char];
}
node.outputs.push(...output);
}
search(key) {
let node = this.root;
for (const char of key) {
if (node.children[char]) {
node = node.children[char];
} else {
return [];
}
}
return node.outputs;
}
}
// 初始化Trie樹
const trie = new Trie();
trie.insert('a', ['一', '三']);
trie.insert('ab', ['三']);
trie.insert('b', ['二', '四']);
trie.insert('bc', ['四']);
// 查詢
console.log(trie.search('a')); // 輸出: ['一', '三']
console.log(trie.search('ab')); // 輸出: ['三']
console.log(trie.search('b')); // 輸出: ['二', '四']
console.log(trie.search('bc')); // 輸出: ['四']
6.總結與反思
從整個整體的面試過程來看,大廠還是更加註重基礎,四大件和演算法,狠狠的補