记一字节跳动初试在线编程题

938 阅读2分钟

第一次面大厂就直接挂在一面,能力不足,尚需努力呀 ——2021-03-08

题目

function get() {
   // 请补全函数参数和实现逻辑
}
const obj = {
   selector: {
        to: {
               toutiao: 'FE coder'
            }
       },
       target: [1, 2, { name: 'byted' }]
    };
// 运行代码
// get(obj, 'selector.to.toutiao', 'target[0]', 'target[2].name')
//  输出结果:
// ['FE coder', 1, 'byted']

实现

function get() {
    const args = Array.from(arguments);
    const sourceObj = args[0];
    const keyPaths = args.slice(1);

    const retValues = [];
    let tempVal;

    keyPaths.forEach(keyPath => {
        const keys = keyPath.split('.');
        keys.forEach(key => {
            if (/(\w+)\[(\d+)\]/.test(key)) {
                const parentKey = RegExp.$1;
                const index = RegExp.$2;
                let parentVal;

                if (!tempVal) {
                    parentVal = sourceObj[parentKey];
                }
                else {
                    parentVal = tempVal[parentKey];
                }
                tempVal = parentVal[index];
            }
            else {
                // 对象
                if (!tempVal) {
                    tempVal = sourceObj[key];
                }
                else {
                    tempVal = tempVal[key];
                }
            }
        });
        retValues.push(tempVal);
        tempVal = undefined;
    });

    return retValues;

}

console.log(get(obj, 'selector.to.toutiao', 'target[0]', 'target[2].name'));

总结这次失败:

  1. 编程题时,第一次面对大厂的面试官而且还是别人等着你写代码,内心出现了有些不自信,写着写着思路就有点乱了,导致写了好几分钟还没有写出来,最终因为越来越慌,思路越来越乱给面试官说暂时写不出来。总结来说:临场发挥能力不足
  2. 工作所写项目没有任何可拿得出来的亮点和难点
  3. 自己平时没有深入学习,像webpack只是从官方脚手架拿来就用,连inject出来看下有哪些配置文件都没有
  4. 对工作中项目没有去思考能做哪些优化,基本上是业务开发完成,测试通过就结束,没有深入去分析自己所产出的代码的性能(性能优化是基本所有面试公司都问到的问题)
  5. 业务上,纯粹根据产品的来,没有过自己提出的一些实现方案或提议
  6. 项目实现上,像平时做的这么多ToB后台管理项目中,有很多业务逻辑类似、功能类似的没有去做复核、做抽象(对项目的思考太少)