滴滴前端笔经面经
笔试
题目描述:
小明同学用薄纸片卷了N个空心的小圆柱,他想把一些小的空心圆柱嵌套到大的空心圆柱里面。已知每一个空心圆柱的底面半径,在不考虑薄纸片本身厚度的情况下,请问这些空心圆柱最多可以嵌套多少层?
输入描述
单组输入。 第1行输入一个正整数N表示空心小圆柱的总数量。(N<=10^3) 第2行输入N个空格隔开的正数(数字不大于1000, 有整数也有小数,最多不超过八位小数),表示N个空心小圆柱底面半径。
输出描述
输出最多可以嵌套的空心圆柱的数量。
样例输入
5
1.3 2 1.5 1.3 1.50
样例输出
3
我的代码,卡在27%,不明原因
const n = 7; const arr = '1.3 2 1.5 1.3 1.50 1 1.00000000'.split(' ').map((item) => Number(item)); const set = new Set(arr); console.log(set.size);
题目描述:
程序员小明这几天在看《三国演义》。今天他看到了“火烧赤壁”这一回:诸葛亮在七星坛终于祭来了东南风,老将黄盖带着火药准备对曹操发动火攻。因为曹操的船都用铁链相连,如果其中一条船被火烧着,其他的船都会起火。最终,曹操大败。 看着看着突然想到一个问题:如果当时曹操的船并没有全部连在一起,而只是部分船用铁链连在一起。如果一条船着火,所有与这条船连在一起的船也会着火。假定一共有N条船,这些船的编号分别为1、2、3、......、N。如果1号船着火,并且告诉你哪些船是相连的,请问一共会有多少条船着火?
输入描述
单组输入。 第1行输入两个正整数N和M,其中N表示船的总数,M表示船之间的连接关系数量,N<=1000,M<=100000。N和M之间用空格隔开。 接下来M行每行输入两个正整数,表示相连的两条船的编号,编号小的在前,编号大的在后。两个正整数之间用空格隔开。
输出描述
如果1号船着火,输出会着火的船的总数量。
样例输入
5 3
1 2
2 3
4 5
样例输出
3
我的代码
const N = 5, M = 3; const num = ['1 2', '2 3', '4 5']; const inToOut = new Map(); for (let i = 0; i < M; i++) { const arr = num[i].split(' ').map((item) => Number(item)); if (inToOut.has(arr[0])) { inToOut.get(arr[0]).push(arr[1]); } else { inToOut.set(arr[0], [arr[1]]); } if (inToOut.has(arr[1])) { inToOut.get(arr[1]).push(arr[0]); } else { inToOut.set(arr[1], [arr[0]]); } } const isVisted = new Set(); const queue = [1]; let res = 1; isVisted.add(1); while (queue.length) { const curr = queue.shift(); const arr = inToOut.has(curr) ? inToOut.get(curr) : []; for (let i = 0; i < arr.length; i++) { if (!isVisted.has(arr[i])) { isVisted.add(arr[i]); queue.push(arr[i]); res++; } } } console.log(res);
一面
TS实现1位数补零显示2位
function numToFormat(num: number): string | never { num = parseInt(num); if (num >= 0 && num <= 9) { return '0' + num; } else if (num >= 10 && num <= 99) { return '' + num; } else { throw Error('out of range 0-99'); } } var s = {} var a = [], b = []; s[a] = 1; s[b] = 2; console.log(s[a]);
以下是否存在错误 如果不存在 这些操作是在做什么
function test(a, b = 2, ...args) { return [...args, a, b]; } test(1,3,4);
4,1,3
function test2() { console.log(a); var a = 11; }
undefined
const a = 'a'; const s = 'test'; const d = `just ${a} ${s}`; console.log(d);
just a test
let num = 10; function ch() { num = 12; } ch(num); console.log(num);
12
let obj1 = {}; function ch(obj) { obj.a = 'a'; } ch(obj1); console.log(obj1.a);
'a'
const o1 = {}; const o2 = {}; console.log(o1 == o2); console.log(o1 === o2);
false
false
html片段 #root下 序号2/4div红色 第5个元素蓝色
3
3
编程 randomInt(min, max, num) 返回一个长度为num 元素值在[min, max]区间的整数数组
function randomInt(min, max, num) { let res = []; for (let i = 0; i < num; i++) { res[i] = getRandomInRange(min, max); } return res; } function getRandomInRange(min, max) { return min + Math.floor(Math.random * (max - min + 1)); }
去重
function deDeplicated(arr) { return arr.filter((item, index) => { index === arr.indexOf(item); }) }
对arr排序 要求奇数(从小到大)在前 偶数(从大到小)在后
eg
arr= [5, 6, 2, 9, 4, 7, 10, 12]; result [5, 7, 9, 12, 10, 6, 2];
讲思路
const obj = { a: 1, b: { c: 2 } } const {a, b:{c}} = obj; console.log(a, b, c);
写错了1, {c:2}, 2
应该会报错,b没有赋值
手写Promise.any
Promise.any = function(arr) { return new Promise((resolve, reject) => { let res = []; let rejected = 0; const n = arr.length; for (let i in arr) { let promise = arr[i]; if (!promise instanceOf Promise) { promise = Promise.resolve(promise); } promise.then(result => { resolve(result); }).catch(error => { rejected++; res[i] = error; if (rejected === n) reject(res); }) } }) }
二面
扣项目
实现Promise发送请求和接收请求
除了压缩体积,模块打包还有什么作用
为什么使用rollup不用webpack
ES6导入和commonJS区别
三面
继续扣项目,这次崩溃了,比二面面试官要狠
手写一个登陆组件
#前端工程师##滴滴##面经#