emo一天,但还是回馈一下牛客:滴滴前端研发部一面

好伤心,面试官结束时候评价是整体还行,等视频挂了5分钟内收到感谢信

这前后反差,我只好安慰面试官尊重自己,但是谁来安慰我呀

面试上来开始问八股
1,说说 url到浏览器页面显示整个过程
2,http 缓存
3,流式输出,你知道哪些可以实现的方式?AI生成到前端你觉得采用那种方式?
3,css 设置的元素要不断旋转,怎么写(不到一分钟面试官问我是否会,不会可以换一题,那我还行想到用什么,那换一题吧)
keyfram 里面设transform;animation 里面应用设定的spin;
代码如下:(linear 匀速转,infinite 无限循环)
@keyframes spin {
    from {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(360deg);
    }
}
.spinner {
    animation: spin 2s linear infinite; /*持续2秒 转一圈*/
}

4,输出解释题:
function app() {
    const [count, setCount] = useState(0)

    useEffect(() => {
        const interval = setInterval(() => {
            console.log('useEffect')
            setCount(count + 1)
        }, 1000)
    }, []) 

    return (
        <div>
            <h1>{count}</h1>
        </div> 
    )
}
会输出打印什么?h1位置 count 显示什么
那当然每隔1s 打印出0,页面显示也是0
5,好的,你分析他原来想要实现什么效果,然后现在这段代码怎么改能实现预期效果,你有几种方式?
【用useRef 、手写update函数,设定count 动态依赖项,使用setTimeout 递归(但是容易爆栈)】

我当时有点懵,当然是没考虑到
function app() {
    const [count, setCount] = useState(0)

    const countRef = useRef(count);
    useEffect(() => {
        setInterval(() => {
            console.log('count', count);
            // setCount(count + 1)
            setCount(countRef.current + 1)
        }, 1000)
    },[])

    useEffect(() => {
       const update = () => {
        console.log('update')
        setCount(count + 1) 
        setTimeout(update, 1000) // 递归调用, 会导致栈溢出
       } 
       update(); // 初始调用
    })

    useEffect(() => {
        const interval = setInterval(() => {
            console.log('useEffect')
            setCount(count + 1)
        }, 1000)
    }, [count]) // 动态依赖,但是频繁定时器创建和销毁

    return (
        <div>
            <h1>{count}</h1>
        </div> 
    )
}
7,输出顺序是什么?
function app() {
    
    promise.resolve().then(() => {
        console.log('promise')
    })
    useEffect(() => {
        console.log('useEffect')
    }, [count])
    useLayoutEffect(() => {
        console.log('useLayoutEffect')
    }, [count])

    return (
        <div>
            <h1>{count}</h1>
        </div> 
    )
}
输出:useLayoutEffect
promise
useEffect

useLayoutEffect(dom更新后,相当浏览器刷新渲染了,立即同步执行)、
promise (微任务,在同步执行完清空微任务队列)
useEffect(异步执行,事件循环后执行)

期间问了useLayoutEffect 和 useEffect 区别
8,看下面输出什么?(弱弱心想:不能出点其他的吗?
function Foo() {
    getName = function () {
        alert(1);
    }
    return this;
}
Foo.getName = function () {
    alert(2);
}
Foo.prototype.getName = function () {
    alert(3);
}

var getName = function () {
    alert(4);
}
function getName() { alert(5); }
Foo.getName(); // 2
getName(); // 4
Foo().getName(); // 1
getName(); // 1
new Foo.getName(); // 2
new Foo().getName(); // 3
new new Foo().getName(); // 3

看这是金典js输出,但是解释起来费劲呀,解释不断问我:变量提升到哪,函数提升到哪,可以修改一下代码看看提升到的位置,new 关键字分析一下,作为普通函数调用还是.... 
(问下牛友,这种题目去那找能复习到呀)

9,写个sum函数实现下面输出:
console.log(sum(1,2,3).sumOf()); // 6
console.log(sum(1,4)(2).sumOf()); // 7
console.log(sum(1)(2)(3)(4).sumOf()); // 10

function sum(...args) {
    let total = args.reduce((acc,cur) => acc + cur,0);
    function innerSum(...newArgs) {
        total += newArgs.reduce((acc,cur) => acc + cur,0);
        return innerSum;
    }
    innerSum.sumOf = () => total;
    return innerSum;
}
console.log(sum(1,2,3).sumOf()); // 6
console.log(sum(1,4)(2).sumOf()); // 7
console.log(sum(1)(2)(3)(4).sumOf()); // 10

#面试问题记录##面试吐槽bot#
#面试经验谈##听到哪句话就代表面试稳了or挂了?#
全部评论
第八题后面那个好像是考在js中new操作和.的优先级,new Foo.getName() === new (Foo.getName()), new Foo().getName === (new Foo()).getName(); new new Foo().getName() === new (new Foo()).getName()),真的卷,不知道考这个干嘛
点赞 回复 分享
发布于 07-15 15:24 辽宁
好伤心
点赞 回复 分享
发布于 05-13 18:01 陕西
第4题页面显示为什么是0呢,我尝试是1,不懂,求解
点赞 回复 分享
发布于 05-10 19:21 福建
我面的时候也是在第8题那里炸了,回去恶补基础吧
点赞 回复 分享
发布于 05-09 19:30 广东
什么部门吗
点赞 回复 分享
发布于 05-09 18:37 广东
以前面试挂了也emo,面多了就麻木了😂
点赞 回复 分享
发布于 05-09 18:32 北京
全在写题吗
点赞 回复 分享
发布于 05-09 18:15 湖北

相关推荐

女面试官,难度挺大的。1h30min1.&nbsp;&nbsp;问问专业相关,自动化是不是比较偏硬件,回答我们学校偏软和算法2.&nbsp;拷打公司项目,问了很多业务场景和背景,这块比较吃力,因为工业场景说起来比较复杂。3.&nbsp;项目有什么难点:说了性能优化相关,追问react,&nbsp;fiber原理,增量更新,diff原理。4.&nbsp;有没有做什么组件服用(面试官想问的是组件封装),封装了简单的一些工具。5.&nbsp;开源项目:&nbsp;怎么想起来做开源的?6.&nbsp;项目有没有上线过,(还没有一些大型项目用过)7.&nbsp;架构升级是怎么做的(巴拉巴拉10分钟)8.&nbsp;个人项目介绍(10分钟)9.&nbsp;有上线吗?(汗流浃背,玩具项目怎么上线)10.&nbsp;项目有用过monorepo,说说monorepo的优缺点,追问技术选型11.&nbsp;项目后期的规划(回答说AI全干了)12.&nbsp;做题:&nbsp;react的闭包陷阱。&nbsp;追问原理13.&nbsp;做题:手写Promsie(先写了不带递归的版本,后续写带递归的,啃哧半天面试官说思路没问题)14.&nbsp;做题:&nbsp;给定两个字符串&nbsp;s1&nbsp;和&nbsp;s2,判断&nbsp;s2&nbsp;是否包含&nbsp;s1&nbsp;的排列(即&nbsp;s1&nbsp;的某个排列是&nbsp;s2&nbsp;的子串)。输入:s1&nbsp;=&nbsp;&quot;ab&quot;,&nbsp;s2&nbsp;=&nbsp;&quot;eidbaooo&quot;&nbsp;&nbsp;输出:true&nbsp;&nbsp;解释:s2&nbsp;包含&nbsp;&quot;ba&quot;(s1&nbsp;的排列)&nbsp;&nbsp;&nbsp;&nbsp;先用全排列+&nbsp;inclueds做出来了,追问有没有更好的方案,回答说可以用map&nbsp;+&nbsp;下标来判断,写一半说时间不太够了,思路没问题。15.&nbsp;反问:团队有哪些AI提效工作?16.&nbsp;反问:团队对于成员对业务的理解是什么要求?答:根据职级看17.&nbsp;反问:有没有什么学习的建议:答:暂时没有。可以多关注AI应用的落地。许愿三面😭。
查看14道真题和解析
点赞 评论 收藏
分享
评论
7
30
分享

创作者周榜

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