滴滴前端笔经面经
笔试
题目描述:
小明同学用薄纸片卷了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区别
三面
继续扣项目,这次崩溃了,比二面面试官要狠
手写一个登陆组件
#前端工程师##滴滴##面经#
