货拉拉前端面经

(工作经验:不到一年,难度应该是校招水平)

一面

1、做个自我介绍吧,为什么这个,为什么那个, 你前端的学习路线是怎么样的?

2、DOM编程

<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <p>4</p>
</ul>

不可以改变html文档,只可以使用DOM+CSS:

(1)将最后一个 li 的文字颜色设置为 red,至少使用3种方法

(2)将 p 去除,至少使用3种方法

(3)实现三栏布局,至少使用3种方法(补充问题:flex=1 是哪些内容的缩写)

(4)点击每一个 li ,输出对应的数字,使用

    1
    2
    3
    4

3、实现一个sum函数,参数数量任意,例子: sum( 1,2,3 ) , 输出 6

// 递归写法(我也不知道我的第一想法为什么是递归...)
function sum(a, ...args) {
    if(args.length === 0) return a;
    let b = args.shift();
    return a + sum(b, ...args);
}

// 迭代写法
function sum(...args) {
    let res = 0;
    for(let i of args) res += i;
    return res;
}

4、假如上一问的sum函数计算时耗时很大,如何使得第一次运行后再次计算的时间大大减少 ?

我使用了个Map 进行缓存。

5、我们不希望这个缓存消耗的空间不断变大,请实现一个LRU缓存置换算法

 class ListNode {
    constructor(key, val) {
        this.key = key;
        this.val = val;
        this.pre = null;
        this.next = null;
    }
}

var LRUCache = function(capacity) {
    this.size = capacity;
    this.map = new Map();
    this.head = new ListNode(null, null);
    this.tail = new ListNode(null, null);
    this.head.next = this.tail;
    this.tail.pre = this.head;
};

LRUCache.prototype.get = function(key) {
    if(!this.map.has(key)) return-1;
    let val = this.map.get(key).val;
    this.put(key,val);
    return val;
};

LRUCache.prototype.put = function(key, value) {
    if(!this.map.has(key)) {
        if(this.map.size === this.size) {
            let node = this.tail.pre;
            let k = node.key;
            this.tail.pre = node.pre;
            node.pre.next = this.tail;
            node.pre = null;
            node.next = null;
            node = null;
            this.map.delete(k);
        }
        let node = new ListNode(key, value);
        node.next = this.head.next;
        node.pre = this.head;
        node.next.pre = node;
        node.pre.next = node;
        this.map.set(key,node);
    }
    else {
        let node = this.map.get(key);
        node.val = value;
        if(node.pre !== this.head) {
            node.pre.next = node.next;
            node.next.pre = node.pre;
            node.pre = this.head;
            node.next = this.head.next;
            node.pre.next = node;
            node.next.pre = node;
        }
    }
};

6、讲下this的指向,并说下这个程序的输出,为什么?(题目忘记了)

7、Vue组件间是如何通信的?

8、Vue2 的数据劫持如何实现的, 有什么缺陷吗? Vue3的是如何实现的?

9、说下什么是跨域问题?如何解决跨域问题?

10、讲下TCP三次握手的过程?稍微详细些

11、在浏览器搜索栏中输入一个url,详细讲讲浏览器渲染环节会发生什么?

12、我改变一个可见元素的宽高,会发生 reflow 还是 repaint?使用translateX呢?

13、你有什么问题想问我的吗?

二面:

  1. 自我介绍

  2. 你做过的项目有什么亮点吗

  3. 如何实现一张图片绕着鼠标旋转的效果

见我回答不出来,将问题拆分成了以下两个子问题:

  1. 如何使一张图片随着鼠标移动

  2. 如何使一张图片以固定的半径绕着一个点旋转

  3. 如何不用new,实现一个构造器的实例化

  4. nginx实现跨域,nginx进行反向代理会有什么问题

  5. 你最近还有在研究什么吗?数据结构与算法,异步编程。那讲下异步编程吧

  6. 有什么想问我的吗

HR面

聊了很多,貌似不刷人

#货拉拉##面经##校招##社招##前端工程师#
全部评论
感觉好难啊,膜拜大佬
1 回复 分享
发布于 2021-11-08 19:57
童鞋,你是21届的吗?
1 回复 分享
发布于 2021-08-28 15:47
过了吗
1 回复 分享
发布于 2021-08-10 23:55
请问hr面完后多久发offer呀
点赞 回复 分享
发布于 2022-06-28 23:17
最低的话需要什么学历?
点赞 回复 分享
发布于 2021-12-30 21:41
去字节了还要跳出来?
点赞 回复 分享
发布于 2021-10-21 17:12
大佬,搞点字节的面经噻
点赞 回复 分享
发布于 2021-10-11 07:46
学历应该不错吧。
点赞 回复 分享
发布于 2021-09-08 23:20
请问这是社招还是校招?
点赞 回复 分享
发布于 2021-08-30 22:47
点赞 回复 分享
发布于 2021-08-10 17:32

相关推荐

06-16 15:04
黑龙江大学 Java
零OFFER战士:另一个版本查看图片
点赞 评论 收藏
分享
05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
投递美团等公司8个岗位
点赞 评论 收藏
分享
评论
15
109
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务