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道真题和解析
点赞 评论 收藏
分享
1.&nbsp;CSS&nbsp;display&nbsp;有哪些值2.&nbsp;inline&nbsp;和&nbsp;block&nbsp;详细区别3.&nbsp;flex&nbsp;如何设置主轴方向4.&nbsp;(续)如何设置主轴布局方式5.&nbsp;上下布局,上高度固定&nbsp;100px,下高度(不管有没有内容)根据屏幕高度自动推开,怎么实现6.&nbsp;判断变量是否为数组7.&nbsp;数组&nbsp;map,forEach,filter&nbsp;分别说说8.&nbsp;宏任务和微任务9.&nbsp;const&nbsp;一个变量属于宏任务还是微任务(寄)10.&nbsp;React&nbsp;用的是什么版本11.&nbsp;React&nbsp;在一个条件语句中声明&nbsp;hook,有没有问题12.&nbsp;(有问题,执行顺序不能确保)不能确保顺序的原因(寄)13.&nbsp;数组&nbsp;@&amp;$#&amp;&nbsp;and&nbsp;and&nbsp;渲染,写法有什么问题(没听清,pass)14.&nbsp;React&nbsp;组件中用&nbsp;for&nbsp;循环,但是不给&nbsp;key,会导致什么问题15.&nbsp;那用下标确定&nbsp;key&nbsp;又会有什么问题16.&nbsp;三次握手过程17.&nbsp;为什么不是两次18.&nbsp;数据传输过程中丢包,怎么解决19.&nbsp;TCP&nbsp;滑动窗口说一下20.&nbsp;冒泡排序21.&nbsp;场景问题,后端一次性给十万条,客户不接受懒加载,不接受翻页,只用滚动条,怎么解决22.&nbsp;(提到画布和WebGL)那个只是替换了渲染的方式,关键要怎么解决性能问题23.&nbsp;(答虚拟列表,视口)怎么判断是否在视口里24.&nbsp;假如入职了,项目紧急要连续上一个月班,能扛住吗==================================反问1.&nbsp;业务前端业务跟部门业务连着,都是跟总部合作的一些业务2.&nbsp;技术栈什么都有,react&nbsp;vue&nbsp;小程序&nbsp;jq&nbsp;java&nbsp;golang3.&nbsp;强度新人强度高,要适应节奏,融入业务,平时业务强度一年偶尔几次4.&nbsp;评价一下我基础可以&nbsp;react&nbsp;偏底层&nbsp;网络可以&nbsp;实习项目表达不够清楚&nbsp;性能问题自由发挥欠火候5.&nbsp;什么时候出结果最晚下周一,过不过都通知已过,二面只让手写了个快排,半分钟写完之后就开始聊天了,秒过
查看24道真题和解析
点赞 评论 收藏
分享
评论
7
30
分享

创作者周榜

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