腾讯面试题笔试

腾讯前端面试题笔试

虽然已经有了offer,但还是很有幸的受邀参加腾讯前端的面试,很幸运,遇到一位很nice的大佬面试官,很有耐心的和我唠了很久,面试是用的腾讯会议远程,聊了很多,也向他请教了不少,前后加起来有4个小时了,是我经历的最长的一次面试了,下面是笔试部分的两道题,在这里记录下,分享给大家

1. 写代码用原生JS实现一个类似百度搜索框的自动完成控件,比如候选结果集arr=[‘aaa’, ‘abc’, ‘acc’, ‘dda’,…]; 用户输入’a’,下拉列表会出现以字母a开头的项’aaa’, ‘abc’, ‘acc’。要求,鼠标或键盘可以选中候选结果到输入框
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>1</title>
    <style>
        .li:hover{
            background-color: green;
        }
    </style>
</head>
<body>
    <div id="wrap">
        <input id="input" type="text" value="" oninput="inputChange(this)">
        <ul id="list"></ul>
    </div>
</body>
<script>
    let arr = ['aaa', 'abc', 'acc', 'dda','agc', 'dds','ana', 'rbc', 'hgc', 'dfa','ass', 'dys']
    let ul = document.getElementById("list")
    let input = document.getElementById("input")
    let result = []
    let active = 0
    // 输入时
    function inputChange(e) {    
        // get value
        if (e.value === '') {
            ul.innerHTML = ""
            return
        }
        result = arr.filter(function(item){
            return item[0] == e.value[0]
        })
        // remove
        ul.innerHTML = ""
        //add
        result.map(function(val,index){
            let li = document.createElement('li')
            li.innerHTML = val
            li.style.backgroundColor = 'white'
            li.setAttribute('class','li')
            // key words
            if (index === active) {
                li.style.backgroundColor = 'green'
            }
            // click
            li.addEventListener('click',function(){
                input.value = val
            })
            ul.appendChild(li)
        })
    }
    // 
    input.addEventListener('keydown',function(key){
        if (result.length > 0) {
            if (key.keyCode ===38 && active > 0) {
                active -= 1
                input.value = result[active]
            }else if (key.keyCode ===40 && active < result.length-1) {
                active += 1
                input.value = result[active]
            }
            // 
            let lis = ul.getElementsByClassName('li')
            for (let index = 0; index < result.length; index++) {
                const element = lis[index];
                element.style.backgroundColor = 'white'
                if (index === active) {
                    element.style.backgroundColor = 'green'
                }
            }
        }
    })
</script>
</html>
2. 实现超出整数存储范围的两个大正整数相加 function add(a, b) 。注意:参数 a 和 b 以及函数的返回值都是字符串。
// 2     数字转字符,按位相加
function add(a,b){
    let result = "" // 保存结果

    // 转数组
    number1 = a.split("")
    number2 = b.split("")

    // 进位结果
    car = false

    // length -> 0   && 进位结束   结束循环
    while( number1.length || number2.length ||  car ){

        //每一次将最后数字进行相加
        car += ~~number1.pop() + ~~number2.pop()

        // 取加法完的个位 进最终结果
        result = car % 10 + result

        // 进位判断
        car = car > 9
    }

    // 返回
    return result + ''
}

第一道题比较综合,我选择第二道题先快速解决,再慢慢调第一道题,最后还是都完成了,答案都是自己写的,有错误的望指正

再次感谢面试官大佬的耐心交流,比技术更美的是心灵美

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页