记一次微信前端面试

阿里云2000元红包!本站用户参与享受九折优惠!

背景

抱着尝试一下的心态投了微信的前端简历,没想到还收到了面试邀请,仅以此文记录一下面试过程中遇到的问题

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被窃取?

期待你们的答复!

https://juejin.im/post/5dbacec0f265da4d365f28d3

Python量化投资网携手4326手游为资深游戏玩家推荐:《FFF团的华丽变身!《天下》手游情缘秘籍助你远离单身!

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
PyTorch
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论