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挂了?#
全部评论
第4题页面显示为什么是0呢,我尝试是1,不懂,求解
1 回复 分享
发布于 05-10 19:21 福建
第八题后面那个好像是考在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 陕西
我面的时候也是在第8题那里炸了,回去恶补基础吧
点赞 回复 分享
发布于 05-09 19:30 广东
什么部门吗
点赞 回复 分享
发布于 05-09 18:37 广东
以前面试挂了也emo,面多了就麻木了😂
点赞 回复 分享
发布于 05-09 18:32 北京
全在写题吗
点赞 回复 分享
发布于 05-09 18:15 湖北

相关推荐

年轻女士面试,没有压力,探讨引导提示蛮多,面试体验极佳。这个部门写的招c++&nbsp;go&nbsp;php,面试才知道是智能体,哇塞i约了公司会议室,结果提前几分钟上一波人开会还没走公司网络貌似拦截视频推流?最后我这边没画面,接着面试了,,出师不利(手机开热点记得先关公司wifi连接。。)1.自我介绍2.讲项目3.项目微服务的拆分依据是什么(我主动屏幕共享看项目讲解)你的云服务配置key,数据库配置直接开源了?如果用跳板机,并且公司有一台机器暴露就会泄漏...没事你继续说吧。你刚说用了配置中心,其实可以放到配置中心里面。微服务怎么拆分的(我只往开发解耦方向扯了,不过面试官反复引导耐心等我描述了,后面才开始讲部署隔离)拆分原则,从流量角度有什么优点;(但是我按数据库主从讲了)5.一亿个用户的用户表&nbsp;如何拆分6.讲讲分布式锁的实现方案,用redis如何实现7.redis过期淘汰策略,内存淘汰策略,LRU,还有其他哪几种(忘了,但是提示了&nbsp;LFU,后面想起来了)项目为啥用LRU8.Mysql语句&nbsp;按年龄分段&nbsp;(这个也写捞了,其实年龄/10直接group即可)9.写java多还是go多10.你们公司的产品我好像用过11.你通过什么渠道了解新知识,比如大模型&nbsp;(不太会讲了,也没想着吹了,讲论文?其实也就最近看了跳表是有CMU论文的)12.项目调阿里AI接口,那了解SFT、大模型truncate输出、SSE流式输出吗&nbsp;(不了解)13.编程题:滑动窗口限制指定时间内的网络请求-模拟,分布式锁-模拟&nbsp;选一个14.反问校招考察基础通过这次久违的面试和灵笼2结局的播出,对人生有了新的思考体会。
查看14道真题和解析
点赞 评论 收藏
分享
评论
7
31
分享

创作者周榜

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