記一次微信前端面試

背景

抱着嘗試一下的心態投了微信的前端簡歷,沒想到還收到了面試邀請,僅以此文記錄一下面試過程中遇到的問題

1. 手寫 add(a, b)函數

請你用 javascript 實現兩個字符串數字相加(大數相加)?

分析:這道題考查兩個超過js最大數值的數相加,可運用小學數學加法規律實現

實現方法:

function add(a, b) {
    // 看看兩個字符串長度相差多少,小的在前面補0, 如 10000 和 1, 補0後爲 10000 和 00001
    let leng = Math.abs(a.length - b.length);
    if (a.length > b.length) {
        b = Array(leng).join('0') + '0' + b;
    } else if (a.length < b.length) {
        a = Array(leng).join('0') + '0' + a;
    }
    
    // 將字符串轉化爲數組並且倒裝,如同小學加法從個位開始算起
    let textArrA = a.split('').reverse(),
        textArrB = b.split('').reverse(),
        resultArr = [];
    
    // 對數組進行循環
    for (let i = 0; i < a.length; i++) {
        // 求和,和小於10,則將和放進目標數組,若大於10,將除以10將餘數放進目標數組,然後textArrA數組的下一位 + 1(textArrB數組也可以,選一個即可)
        let sum = parseInt(textArrA[i]) + parseInt(textArrB[i]);
        
        // 這裏判斷是否是最高位數值相加,即i === a.length - 1, 如果是不用取餘直接放進去
        if (parseInt(sum / 10) === 0 || i === a.length - 1) {
            resultArr.push(sum);
        } else {
            resultArr.push(sum % 10);
            textArrA[i + 1] = parseInt(textArrA[i + 1]) + 1;
        }
    }
    // 最後將目標數組倒裝一下,再轉成字符串
    return resultArr.reverse().join('');
}

console.log(add('1045747', '10')); // 1045757

2. 對上面的函數,你會寫怎樣的測試用例呢?

3. 數組和鏈表的區別,有何使用場景的不同?

4. 請求報文有哪些組成,請求參數置於請求報文何處?

5. 緩存策略,如何詢問服務器該資源是否過期?

6. 進程的線程的區別?單線程和多線程的優缺點?

7. 爲何要將小圖片轉化爲 base64 ?

8. 網絡攻擊有哪些?如何防止cookie被竊取?

期待你們的答覆!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章