1. 程式人生 > >騰訊2018校招WEB前端開發筆試有感

騰訊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