滴滴正式批前端一二三面

9/13,一面

40min

自我介绍

JS判断类型

说说call和bind

new做了什么

Object.create做了什么

看输出 两题:

var name = 'Tom';
(function () {
    if (typeof name == 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();
async function async1() {
    console.log('async1 start');
    await async2();
    console.log('async1 end');
}
async function async2() {
    console.log('async2');
}
console.log('script start');
setTimeout(function() {
    console.log('setTimeout');
}, 0);
async1();
new Promise(function(resolve) {
    console.log('promise1');
    resolve();
}).then(function() {
    console.log('promise2');
});
console.log('script end');

CSS模块化有哪些规范

JS模块化规范

npm install做了哪些事情

两种路由模式的区别

nodejs进程守护

知道哪些设计模式

观察者模式和发布订阅模式区别

单例模式的应用

浏览器缓存

babel转换过程

虚拟列表

内存泄漏场景,怎么定位

冒泡,快排,归并复杂度

写一个归并

最近在学什么

未来规划

学习方法路径

反问:流程:连续三面

9/13,二面

50min

自我介绍

项目

上来六个题

  1. 一行代码实现拍平
const deps = {
    'A': [1, 2, 3],
    'B': [5, 8, 12, [6, 4, 6]],
    'C': [5, 14, 79],
    'D': [3, 64, 105]
}
// 要求输出:[1, 2, 3, 5, 8, 12, 6, 4, 6, 5, 14, 79, 3, 64, 105]
  1. 实现一个new

  2. 说输出:

function Person() {
    this.name = 'Jack';
}
var p = new Person();
console.log(p.name);
var q = Person();
console.log(q);
console.log(name);
console.log(q.name);
function Person() {
    this.name = 'Jack';
    return 'Tom';
}
var p = new Person();
console.log(p);
console.log(p.name);
function Person() {
    this.name = 'Jack';
    return { age: 18 };
}
var p = new Person();
console.log(p);
console.log(p.name);
console.log(p.age);
  1. 说输出:
const promise = new Promise((resolve, reject) => {
    console.log(1);
    console.log(2);
});
promise.then(() => {
    console.log(3);
});
console.log(4);
  1. 如何改进fn:
const fn1 = () => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(1);
        }, 300);
    });
}
const fn2 = () => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(2);
        }, 600);
    });
}
const fn = () => {
    fn1().then(res1 => {
        console.log(res1);
        fn2().then(res2 => {
            console.log(res2);
        });
    });
}
  1. 实现Promise.race

组合式api和选项式api

computed和watch

vue为什么this.foo可以访问this.data.foo

vue依赖收集

watch深层响应式变量,怎么优化

排查内存泄漏

说说webpack,给几个关键词把他们串起来:loader plugin chunk module bundle

pnpm和npm

写CSS,水平垂直居中,能写的都写上

写一个组件库之前会做什么准备工作

反问:

评价:前半段还挺优秀,了解的都挺深入,后半段对于工程化相关了解不多

9/13,三面

53min

自我介绍

为什么选前端

学习方法

封装的组件和正常写的组件的设计区别

pinia的使用场景,怎么决定用不用

虚拟列表

写题:

封装一个fetch,有最大并发限制10,每个请求可以有优先级,根据优先级发请求,优先级大于等于0,越大优先级越高 如 myFetch(url, options={}, priority=0)

class MyFetch {
    constructor() {
        this.queue = []
        this.count = 0
        this.maxCount = 5
    }

    fetch(url, options = {}, priority = 0) {
        return new Promise((resolve, reject) => {
            this.queue.push([priority, url, options, resolve, reject])
            this._run()
        })
    }

    _run() {
        if (this.count >= this.maxCount || this.queue.length === 0) return
        this.count++
        while (this.queue.length) {
            this.queue.sort((a, b) => a[0] - b[0])
            const [_, url, options, resolve, reject] = this.queue.shift()
            fetch(url, options).then(resolve).catch(reject).finally(() => {
                this.count--
                this._run()
            })
        }
    }
}

压缩CSS类名

optim('class-a') // a
optim('class-aa') // b
optim('class-a') // a
optim('class-a class-aa class-b') // a b c

function optimizer() {
    const map = new Map()
    let index = 0
    const index2string = (index) => {
        let result = ''
        while (index >= 26) {
            result = String.fromCharCode(index % 26 + 97) + result
            index = Math.floor(index / 26) - 1
        }
        return String.fromCharCode(index + 97) + result
    }
    return (className) => {
        const arr = className.split(' ')
        const result = new Set()
        arr.forEach(name => {
            if (map.has(name)) {
                result.add(map.get(name))
            } else {
                map.set(name, index2string(index))
                result.add(index2string(index))
                ++index
            }
        })
        return [...result].join(' ')
    }
}
optim = optimizer()

反问:

评价:结合前面一面二面的情况感觉前端基础这块还是不错的,个人建议多点实践、多总结,前端相关还是要系统性学习;代码方面思路没问题,细节要注意(最后一个题的index2string没写好,连着三面脑子不太清楚;写面经的时候用ai完善下补前面了……

后续:会统一告诉大家结果,不会很久


面经合集


#前端##面经##滴滴##软件开发笔面经#
全部评论
我滴亲娘,面这么多东西呢🥲🥲
点赞 回复 分享
发布于 04-19 23:45 美国
开奖了吗
点赞 回复 分享
发布于 2024-11-26 11:03 湖北

相关推荐

04-17 17:33
已编辑
门头沟学院 前端工程师
途径三次转岗终于约面,无笔试,害怕是kpi给牛子们更下面经,攒攒人品4.2约面4.7一面  1h1 自我介绍2 自己介绍实习3 项目中的难点亮点介绍,难点怎么解决的,为什么要这么解决4 Vue和React哪个更熟    1 nexttick原理,降级方案    2 rn和原生的通信    3 Vue3的响应式相对于Vue2做了什么优化    4  记不清了,都是常规Vue八股5 浏览器和node中的事件循环6 事件循环输出题,具体忘了,不难,但是输出多,十几个。。。,赛码网代码格式化一坨,看得头昏眼花7 函数柯里化, 写一半脑子空白了,拉了坨大的,提示几次才写出来8 反问感觉一面表现极差,但是第二天居然约二面了4.9 38min1 经典自我介绍2 公式化介绍实习和项目3 公式化介绍难点及解决方案4 Vue相关    1 响应式原理    2 diff5 React    1 fiber6 手写题:实现eventBus,要求有emit/on/off/once功能7 直接反问了,面试时间很短,都答上来了,但是不知道是满意还是不满意,时间太短了好累-------------------------晚上打电话约三面了,许愿顺利4.11三面 25min1. 实习2. 手写url解析3. 反问我靠三面时间怎么这么短4.15更新,已挂#滴滴求职进展汇总##滴滴工作体验##滴滴前端面经#
点赞 评论 收藏
分享
😭(11408)三月下旬得知考研下岸,浑浑噩噩过了十几天,随便做了个简历投了投,又做了做毕设,应付4.1毕设中期检查。没曾想4.3收到字节和快手前端面试邀请(定在4.9和4.10),还有PDD笔试邀请。这时候才垂死病中惊坐起,惊觉自己还啥也不会~~ps:鼠鼠0实习,唯一有的项目也还是学校开展的课程项目,还有校企合作生产实习的一个项目。还都是简单使用了下vue,也没有系统学习过html,css,js。属于啥也不会,唯一会点的vue还是vue2,更绝的是,因为考研都忘的差不多了。从4.3号起,可能自己也觉得快完蛋了,开始恶补前端知识。从黑马的js基础课看起,两天白天时间速通了下基础和进阶,有了个大概认知。(为什么不看html,css?——来不及啦,而且js更难更重要些吧?)看了看牛油们的面经,得知前端也会考算法,于是晚上12点到凌晨四五点又去看力扣top100(为什么这么晚?感动自己?失败好让自己心安理得?——不是啊,鼠鼠夜猫子,晚上也不困,早上十一二点起已经常态)就这样一直到4.7,榨干了所有精力,倾尽所有也无法学完,根本学不完,打电话给hr尝试推迟面试,推到了4.15(快手)  4.16 (字节),想更晚一些,hr说太晚岗位随时可能满人,好吧好吧,硬着头皮上。然后继续每天15个小时左右的恶补,又把Ajax速通,vue2+3速通(没跟着手敲,这埋下了一颗雷),八股(八股看的尤其的多,我真是吐了)就这样,来到了今天。经历了十二三天的恶补,对于前端有了个模糊的概念(细节、底层还是不懂啊),抱着涨涨经验的想法,参加了快手面试:“介绍一下项目吧,有什么难点以及怎么解决的。”“~emmmm没什么难点。”面试官绷不住了,我看到面试官笑了我也有点绷不住。(不是,是真没什么难点,也没上线,就两个本地项目)之后还是引导性地问了问项目:1.组件封装怎么做的,出于什么目的?2.性能调优讲一讲?3.首屏加载速度具体是怎么体现的?这个3.5秒是从什么到什么的时间?然后面试官看我实习时间,问我后半年干啥去了(应该是我回答的太差了,想知道我到底在前端方向下没下功夫),我说考研去了。然后聊了聊,问我以后打算什么的。接着出了个场景题:(其实我截图了,怕违反什么规定,就不发了)水果蔬菜,分类多选框;水果蔬菜内部嵌套着还有分类(比如蔬菜,又细分为根茎类和叶类;水果类似。)多选框的功能大家都应该清楚,不细说了。面试官要我自己实现一个数据结构,完成这样的多选功能。坏啦!丸辣!以为是力扣题,没曾想场景题。我也没耗时间,直接跟面试官说编码能力还不太够。(其实我能看出来,这题不难。可我现在真不会敲代码!)反问:有什么建议能给我吗?——多重视业务场景,尝试做一个难一些的项目等等。总之,整个流程不到半小时,就没了。——ps:面试官是个姐姐,人很好。全程没压力,看我答不出来就换个问题,没有刨根问底。全程无压力,就是自己太菜了。还有,为什么一点八股都没问(没有责怪面试官的意思)哭死了~作为人生第一场面试,总体感觉下来还不错,涨经验了。另外,字节的面试取消了,能力根本够不到。4.17又约了小米面试。再提一嘴,面试官太好啦!
点赞 评论 收藏
分享
评论
9
43
分享

创作者周榜

更多
牛客网
牛客企业服务