base北京,生活服务部门
全程无八股,无项目考察,直接手撕代码
第一题
// 在公司年会上,我们经常会有抽奖的需求 // 需要你实现一个抽奖的功能,包含如下要求 // 1. 对待抽奖者的名单进行乱序排列(打乱次序) // 2. 点击开始抽奖时,运行start,在名单内随机指定一个index作为开始index // 3. 每100ms以此index开始轮询抽奖列表,当用户点击stop时停止轮询inex,并返回抽中的人 // 4. 每次抽奖可设置n(n>0)个人中奖。每次抽奖抽1个人,中奖的人不可再次被抽中 const userList = [ '王雪', '李阳', '张晨', '陈婷', '刘宇', '赵博', '孙洁', '周航', '吴梅', '郑勇', '王梦', '杨华', '徐杰', '马丽', '何昊', '林俊', '朱红', '范冰', '余宏', '吕娜' ]; class Lottery { // 完成你的代码编写 } } // 模拟一次用户的执行,设置本次抽奖中奖2人 const lotteryIns = new Lottery(userList, 2); const sleep = (t)=> new Promise(res=> setTimeout(res, t)); async function drew(len) { for(let i = 0; i < len; i++) { lotteryIns.start(); await sleep(1000); console.log(lotteryIns.stop()); // 期望输出中奖者的名字 } } // 执行抽奖3次 //输出2个中奖者的名字,和1个null drew(3);
第二题
// 实现一个过滤求解函数,该函数2个输入值,支持传入2个数组 // 执行时会从第一个数组内过滤掉第二个数组内的值 // 并对过滤后的值进行加法运算 // 返回过滤后的结果和运算的结果 // 要求:优先完成上述内容 // 加分项:使用高效的方案实现 const arr = [2,4, 1, 0, -1, 5, 9, 3, 2, 4, 1, 0, -1, 5, 9]; const fArr = [2,4, 1, 0, -1]; const arrFilter = (target, input) => { // 完成你的代码编写 let arr = target.filter((item) => !input.includes(item)) let ans = arr.reduce((t,item) => t + item ,0) return { res: arr, sum: ans } } // 期望得到{res: [5, 9, 3, 5, 9], sum: 31} console.log(arrFilter(arr, fArr));
第三题
// 我们经常需要做一些营销活动,会涉及到很多的商品。 // 现在有2个商品Product1和Product2,他们的一天内促销周期以二维数组存储 // 如:[['0300', '0312'], ['0614', '0714']] // 促销周期数组内的每个子数组代表开始的日期(时分)和结束日期,24小时计时法 // 如:['0300', '0312']代表其3点00分开始,3点12分结束。 // 需求你求出2个商品同时参加营销的时间段是什么 // Input: // Product1 sales time slot = [['0709', '0720'], ['0108', '0120'], ['1512','1612']], // Product 2 sales time slot = [['0300', '0312'], ['0614', '0714']], // Output: ['0709', '0714'] const p1slot = [['0709', '0720'], ['0108', '0120'], ['1512','1612']]; const p2slot = [['0300', '0312'], ['0614', '0714']]; const getCommonPeriod = (slot1, slot2)=> { } console.log(getCommonPeriod(p1slot, p2slot)) //[['0709', '0714']]
反问的时候问了下是不是比较看重算法,回答是校招入职后就需要立即参与业务,相比基础更看重coding能力,二面会更多考察基础和八股。
感觉自己随机应变的能力还是差了点,写的太慢有种被拷打的感觉。
#快手##前端##面经##春招##手撕代码#