滴滴正式批前端一二三面

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 湖北

相关推荐

从上一个帖子之后面了大概七八次大厂公司,基本都做了总结,现在发一下面经,但是基本都一面挂......搞不懂问题也答了,手撕也过了为什么全都一面挂。。。疑似KPI面,无手撕,聊项目,聊八股1.自我介绍2.你认为前端和交互相关的技术有哪些?3.event loop4.promise5.你的研发过程中有没有使用过一些技术,通过event loop实现的技术6.宏任务、微任务这种情况在实际开发中你认为有哪些应用场景7.手写一个Promise.then的话,是怎么具体实现的8.手写这个Promise的话是怎么去实现这个同步任务、异步任务、宏任务、微任务的这个执行顺序的9.Promise会创建宏任务吗,Promise的宏任务是在什么时间点创建的?10.聊聊页面鉴权11.Token放在请求头的哪一个具体位置12.Token存储在LocalStorage里面会不会有安全问题?别人使用越权登陆怎么办?13.大部分的网站的登录信息,你认为是存在localStorage里还是存在Cookie里面14.你们现在为什么做项目都喜欢把Token存在LocalStorage里面,是有什么开源项目或者是看到什么推荐这样存储的吗15.防抖和节流具体做了一个什么事情16.如果我做了两次请求,第一次因为服务器卡顿返回的特别慢,第二次请求很快返回,结果第一次请求覆盖了第二次请求,该怎么办?17.介绍一下虚拟滚动18.你如果是按需渲染的,那么你的列表总高度理论上是不知道的,你怎么去知道这个列表的总高度是多少?19.虚拟滚动的时候如果滚动比较快,可能会出现白屏,实时渲染可能会出现抖动,有什么方案可以去解决?20.最近大模型比较火,你对AI或大模型有什么理解呢?你会使用大模型在具体实际生活中去做些什么21.你是怎么学习的?22.你看过哪些开源项目呢反问:1.面试流程2.公司base 杭州3.项目业务基本都答上来了,两个不是很确定的问题也一口气说了一大堆,面试官全程笑呵呵,但是有反馈,不抱希望,感觉会凉。
点赞 评论 收藏
分享
评论
9
42
分享

创作者周榜

更多
牛客网
牛客企业服务