腾讯web前端一面秒黑经
4.2号下午3点面试
一上来就是4道编程题,4选3
函数里面都是空的,写上了的都是我做的
注意:我写的都是错的!我只是自己存着,只看题目就好了
编程题1
/** * 第一题:实现 multiply * 要求: * multiply(1,2).result == 2 * multiply(1,2)(3).result == 6 * multiply(1,2)(3,4).result == 24 * multiply(1,2)(3,4)(5).result == 120 */ function multiply() { }
编程题2
。。我还保留了我和面试官小哥的对话
/** * 第二题:实现一个 superBaby: * 要求: * superBaby("tom") 输出: * I am tom * * superBaby("tom").sleep(10).eat("apple") 输出: * I am tom * (等待10秒后输出)Start eating after 10 seconds * Eating apple * * superBaby("tom").sleepFirst(5).eat("banana") 输出: * (等待5秒后输出)Start eating after 10 seconds * I am tom * Eating banana * */ 这边可以在浏览器调试面板调试下,看看代码是不是有问题 不是很会用这个 或者你可以用你比较熟悉的调试工具 好的,但是就剩3分钟了 这边延长10分钟,你来调试这道题吧做到 4.20 好的 需要注意的是,这里调用完 superBaby("tom") 会暴露 eat 和 sleep 和 sleepFirst 方法出来。你目前没有对外暴露这些方法 我试一下 => ok 我不会这个,做不出来 ok async function superBaby(name) { await function sleepFirst(time){ setTimeout((time)=>{ console.log("Start rating after "+time +"seconds") },time*1000) } this.name=name; console.log("I am "+name); //异步 //eat是在异步之后输出 await function sleep(time){ setTimeout((time)=>{ console.log("Start eating after "+ time+" seconds") },time*1000) } function eat(food){ console.log("Eating "+food); } }
编程题3
/** * 第三题:输入一个整形数组,数组里有正数也有负数。数组中连续的一个 * 或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。 * 输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。 */ function subArrayMax(nums) { //2、比较前面和+array[i+1]和array[i+1]的大小,取max if(nums.length==0) return 0; var sum=nums[0]; for(let i=0;i<nums.length-1;i++){ if(nums[i+1]>sum+nums[i+1]){ sum=nums[i+1]; }else{ sum=sum+nums[i+1]; } return sum; }
编程题4
我的答案totally错误的,别看我自己存着。
/** * 第四题:给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额 * 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 * 示例 1: * 输入: [1,2,3,1] * 输出: 4 * 解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。 * 示例 2: * 输入: [2,7,9,3,1] * 输出: 12 * 解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。偷窃到的最高金额 = 2 + 9 + 1 = 12 。 */ function rob(houes) { //问题是:可以隔两间房,不一定是只隔一间? //比如[10 1 9 0 1 9 8 15],这时隔两间房 var sum=0; if(houes.length==0) return 0; if(houes.length==1) return houes[0]; //每两个数找出一个最大值。 for(let i=0;i<houes.length;i=i+2){ if(!houes[i+1]) { sum=sum+houes[i]; break; } if(houes[i]>houes[i+1]){ sum=sum+houes[i]; }else{ sum=sum+houes[i+1]; //因为不能取相邻的值。 i++; } } return sum;
真正的面试
- vue的双向数据绑定
- dom事件流机制
- 状态码了解哪些
- 返回304的流程
- 跨域
- vue项目的性能优化
- webpack
- 浏览器的安全问题
----即攻击方式