騰訊2018校招WEB前端開發筆試有感
鵝廠的校招考察的我感覺比較“雜”。
前端開發感覺我的印象,考察了JS、TCP/IP協議、MVVM、資料庫。都是在不定項選擇中。沒有單選題,無疑增加了難度。還考察了一些Linux作業系統、sizeof函式,資料結構也有一部分題。根結點,JS中考到了跨域。還有一兩道數學幾何體。竟然還考察了用css和table佈局的不同。
最後有三道程式設計題,難度都不易。
今年系統升級了作弊篩查功能,讓博主在宿舍考試有點尷尬。
JavaScript中的嚴格模式
var a = 5;
(function() {
var a = b = 3;
})();
console.log(a);
console.log(b);
如果是上面的程式碼,會輸出什麼?
我想很多人都會知道,輸出5和3。因為b前面沒有var宣告,會被當作全域性變數宣告。
"use strict";
var a = 5;
(function() {
var a = b = 3;
})();
console.log(a);
console.log(b);
那麼,如果在嚴格模式下會怎麼辦呢?會在var a = b = 3;丟擲未捕獲的異常。
b is not defined
即全域性變數必須顯示宣告考察
JavaScript單執行緒
window.setTimeout(function() {
console. log(1);
}, 1);
window.setTimeout(function() {
console.log(2);
}, 2);
window.setTimeout(function() {
console.log(3);
}, 3);
window.requestAnimationFrame(function() {
console.log(4);
});
上面程式碼執行情況可能有哪幾種?
一共有四種情況,分別是:
- 4123
- 1423
- 1243
1234
setTimeout表示的是隔了多少時間後,就將函式新增到事件處理後面,但是並不代表馬上就要執行
考察IPV6
考察協議
- DNS
- FTP
- TLS
- POP3
- HTTP2
考察JavaScript單執行緒
var a = 1;
setTimeout(function() {
console.log(a);
}, 0);
var date1 = new Date();
while(new Date().getTime() - date1.getTime() <= 10) {
console.log(a);
}
a = 2;
這道題,也是考察JavaScript的單執行緒,setTimeout的引數即使是0,表示0毫秒過後,將這個事件新增到佇列裡去,但是它依然要等待其他JavaScript程式碼處理結束後,才會執行佇列裡的程式碼。因此它的執行結果是:
- n個1
- 2
JavaScript題目
var x = 1;
function a() {
alert(x);
var x = 2;
x++;
alert(x);
}
function b() {
alert(x);
x++;
alert(x);
}
if(0 < 100 < 0) {
a();
} else {
b();
}
if(0 < 100 < (0 + 4)) {
a();
} else {
b();
}
經過測試,發現這道題,考察的是if語句資料型別的轉換。它的實際過程是這麼回事:
0小於100返回true,true再次被比較時回被轉為1。
true 小於 0 返回false,所以第一個if語句將會執行函式b裡的程式碼。
會依次彈出1, 2。
第二個if 0 小於 100會返回true,true會被轉為1。
true 小於 4返回true,所以第二個if將會執行函式a裡的程式碼。
會依次彈出undefined, 3。
// 即
1 2 undefined 3
考察nodejs
考察UDP的首部頭
UDP首部與偽首部
UDP的首部由8個位元組組成。
- 源埠:2個位元組。
- 目的埠:2個位元組。
- 長度:2個位元組。
- 檢驗和:2個位元組。
考察TCP的首部
TCP首部欄位
一個TCP報文由TCP首部和資料組成的。TCP報文首部的前20個位元組是固定的,後面有4n個位元組是根據需要而增加的, 因此TCP首部的最小長度是20位元組。
20個位元組由以下部分組成:
- 源埠:2個位元組
- 目的埠:2個位元組
- 序號:4個位元組, 因為TCP是面向位元組流的,在一個TCP連線中傳送的位元組流中的每一個位元組都按順序編號。
- 確認號:4個位元組,是期望收到下一個報文段的第一個資料位元組的序號。
- 資料偏移:佔4位,它指出TCP報文段的資料起始處距離TCP報文段的起始處有多遠。
- 保留:佔6位。
- 6個狀態位:佔6位,URG,ACK,PSH,RST,SYN,FIN。
- 視窗:佔2個位元組,指的是接受視窗的大小。
- 檢驗和:佔2個位元組。
- 緊急指標:佔2個位元組,只有URG=1時才有意義。
- 選項和填充:一共佔4個位元組,選項大小可變。
- 排序演算法的時間複雜度,是否是穩定的
什麼是穩定的?穩定其實指的是如果兩個數大小一樣,當經過排序後,它們的順序依然沒有改變,那麼排序就是穩定的。
常見排序演算法是否穩定
- 氣泡排序,n的平方,穩定
- 插入排序,n的平方,穩定
- 歸併排序,n的log2n,穩定
- 基數排序,d(r+n), 穩定, r代表關鍵字的基數,d代表長度,n代表關鍵字的個數。
- 快速排序,n的log2n, 不穩定
- 希爾排序,n的1.3次方,不穩定
- 選擇排序,n的平方,不穩定
- 堆排序,n的log2n, 不穩定
sizeof(double)是表示式還是函式?
sizeof不是函式,它是編譯時處理的,函式只能在執行時求值。
樹
描述:有一棵樹,它的度是4。度為4的節點個數是1,度為3的節點個數是2,度為2的節點個數是3,度為1的節點個數是4,問總節點的個數和節點為0的個數是多少。
所謂度就是節點子樹的個數,即分支數目,我畫出來是21個節點,度為0的個數是11。
網站效能優化的方法有哪些?
參見雅虎軍規。
從輸入URL到頁面載入的過程
參見google。
求任意整數有多少種解法
2 = 1 + 1
3 = 1 + 2
4 = 1+ 3;4 = 2 + 2;
給定有序陣列,求出數字出現的次數
可以自己設定一個hashTable