拼多多社招面经(1小时)

1.自我介绍(因为楼主介绍里面是制造业转回互联网的,所以面试官很贴心给了比较简单的题目,面试脑袋一热,导致简单题也没回答的号)

2.手撕题目:

  1. 在一个多层级的节点中,找到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);

  1. 水平垂直居中,尽可能多写,并且解释每一种方法每个属性为什么这么写。
  2. 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的,因为我太菜了,所以拖延了时间,导致面试官没时间问。

还是太菜了,在制造业待久了,楼主太懒散了,学计算机的东西学不动,几道题都是知道大概什么原理怎么实现,但是手撕完全没办法完全写出来,但是不面试自己写又是能大概写出来,面试太紧张,这回肯定挂了。还是继续边找工作面试边复习吧。

共勉加油!

拼多多面试官挺好的,生怕我过不了。

#拼多多##面试##前端##面经#
全部评论
1 回复 分享
发布于 11-13 23:22 上海

相关推荐

3 3 评论
分享
牛客网
牛客企业服务