拼多多社招面经(1小时)
1.自我介绍(因为楼主介绍里面是制造业转回互联网的,所以面试官很贴心给了比较简单的题目,面试脑袋一热,导致简单题也没回答的号)
2.手撕题目:
- 在一个多层级的节点中,找到id名为container的dom节点,并且找出嵌套层级≥4的img节点,并为之添加class名'.abc'。
这一题本质上在考察递归查找dom节点,如下是比较好的方法:
function addClassToDeepImg(element, level = 1) { if (!element) return; // 遍历当前元素的所有子节点 for (let child of element.children) { if (child.tagName.toLowerCase() === 'img' && level >= 4) { child.classList.add('abc'); console.log(`Added class 'abc' to img at level ${level}`); } // 递归查找子节点的子节点 addClassToDeepImg(child, level + 1); } } // 获取 container 元素 const container = document.getElementById('container'); // 开始遍历并处理 img 子节点 addClassToDeepImg(container);
- 水平垂直居中,尽可能多写,并且解释每一种方法每个属性为什么这么写。
- promise串行和并行题。 串行:c函数依赖于b函数的返回值,b函数依赖于a函数的返回值,中间要注意处理rejected的情况,请用promise串行写。 并行:各个函数并不互相干扰,写出如何计算各个函数的返回值的和,如果有rejected的情况,则当做异常处理。
串行
function a() { return new Promise((resolve, reject) => { setTimeout(() => { resolve('Result from a'); }, 1000); }); } function b(resultFromA) { return new Promise((resolve, reject) => { setTimeout(() => { if (resultFromA === 'Result from a') { resolve('Result from b'); } else { reject('Error in b'); } }, 1000); }); } function c(resultFromB) { return new Promise((resolve, reject) => { setTimeout(() => { if (resultFromB === 'Result from b') { resolve('Result from c'); } else { reject('Error in c'); } }, 1000); }); } a() .then(resultFromA => b(resultFromA)) .then(resultFromB => c(resultFromB)) .then(finalResult => { console.log('Final result:', finalResult); }) .catch(error => { console.error('Error:', error); });
并行
function a() { return new Promise((resolve, reject) => { setTimeout(() => { resolve(1); }, 1000); }); } function b() { return new Promise((resolve, reject) => { setTimeout(() => { resolve(2); }, 500); }); } function c() { return new Promise((resolve, reject) => { setTimeout(() => { resolve(3); }, 1500); }); } function d() { return new Promise((resolve, reject) => { setTimeout(() => { reject('Error in d'); }, 700); }); } Promise.all([a(), b(), c(), d()]) .then(results => { const sum = results.reduce((acc, curr) => acc + curr, 0); console.log('Sum of results:', sum); }) .catch(error => { console.error('Error:', error); });
3.本来还想问vue的,因为我太菜了,所以拖延了时间,导致面试官没时间问。
还是太菜了,在制造业待久了,楼主太懒散了,学计算机的东西学不动,几道题都是知道大概什么原理怎么实现,但是手撕完全没办法完全写出来,但是不面试自己写又是能大概写出来,面试太紧张,这回肯定挂了。还是继续边找工作面试边复习吧。
共勉加油!
拼多多面试官挺好的,生怕我过不了。
#拼多多##面试##前端##面经#