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挂了?#
全部评论
好伤心
点赞 回复 分享
发布于 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 湖北

相关推荐

第一次就被中厂拷打&nbsp;紧张鼠了呜呜公司:地平线时长:53minPart1.&nbsp;热身环节-&nbsp;自我介绍-&nbsp;什么时候开始学习前端-&nbsp;学习的方式有什么-&nbsp;平时有用一些AI工具吗Part2.&nbsp;项目1拷打-&nbsp;你内容管理平台的框架是怎么搭建的-&nbsp;你项目的开发工具或者说这个脚手架是怎么生成的(不知道什么意思直接说了用命令行,然后就说你说一下你使用的相关命令是什么)-&nbsp;有去了解ESlint的配置以及一些构建的配置吗-&nbsp;项目有部署吗?怎么部署的Part3.&nbsp;项目2拷打-&nbsp;组件库的话一些架构还有一些比如Babel插件怎么来的?是用现成的框架吗?(没理解他的意思然后我在乱扯,之后他又问了一遍)-&nbsp;脚手架是哪来的?是怎么搭建的?开发环境是怎么准备的?-&nbsp;你这个组件库有没有实际应用到项目里面去-&nbsp;你组件库打包方式和正常开发者打包成UMD的方式有什么不一样?-&nbsp;那你组件库的静态文件是怎么处理的?(比如里面用到的图片)Part4.&nbsp;八股盛宴-&nbsp;怎么用&nbsp;CSS&nbsp;去实现一个垂直居中的效果-&nbsp;响应式布局的方式有哪些(只知道一个媒体查询,问还有吗?)-&nbsp;用css实现一个三角形-&nbsp;怎么设置那个盒子元素的阴影呢?-&nbsp;渐变色的属性是什么?-&nbsp;怎么设置背景图片的位置和大小?-&nbsp;background的配置顺序是什么?-&nbsp;怎么在网页中播放一个音频文件?-&nbsp;那我们正常这个播放一个音频的时候,打开网页怎么让它自动播放?-&nbsp;怎么在网页中嵌入这个第三方网页链接的地址?(愚蠢如我说个href,说不是,是要直接嵌入别人的网页)-&nbsp;css的选择器有哪些?-&nbsp;伪类选择器你了解哪些?-&nbsp;js的数据类型有哪些?-&nbsp;这八个可以分成哪两类?-&nbsp;js的事件循环机制是什么样的?-&nbsp;闭包的实现方式有哪些?(完了只知道一个然后被问还有吗?)-&nbsp;说一下原型和原型链吧-&nbsp;怎么判断判断这个原型上的属性是属于他自己的还是它链上的?-&nbsp;function可以用new方法吗-&nbsp;你有一个&nbsp;object&nbsp;和&nbsp;new&nbsp;一个方式,他们的_proto_分别指向什么?-&nbsp;判断这个变量类型的方法有哪些?-&nbsp;typeof和instanceof的区别?-&nbsp;instanceof不可以判断基本数据类型吗?-&nbsp;let&nbsp;const&nbsp;var的区别-&nbsp;模版字符串怎么使用?{}里面可以执行一些计算一些方法吗?-&nbsp;解构数组的第二个元素怎么解构?-&nbsp;箭头函数和普通函数的区别-&nbsp;map和forEach的区别-&nbsp;如何查找数组元素的索引(脑子短路只知道遍历)-&nbsp;那我怎么判断这个数组里面是否包含我想要的元素呢?-&nbsp;promise&nbsp;有哪些状态?-&nbsp;那我可以手动把这个先resolved之后再rejected吗-&nbsp;Promise.all和Promise.race的区别和作用是什么?-&nbsp;promise&nbsp;和&nbsp;async/wait&nbsp;有什么区别-&nbsp;有用过Proxy吗-&nbsp;有用过Reflect吗-&nbsp;map和set的区别-&nbsp;正常开发怎么通过浏览器去定位这个错误-&nbsp;控制台里可以看到哪些内容-&nbsp;断点有使用过吗?怎么使用?-&nbsp;开发者工具里的网络包含哪些内容?-&nbsp;开发者工具其他的呢?里面有什么Part5.&nbsp;手撕-&nbsp;手撕深拷贝(PS:苯蛋人侥幸心理只准备了怎么解决循环引用和处理数组对象,本来其他类型就准备瞎扯一扯,结果给我一个样例让我跑起来看结果,里面对象套数组套对象,然后还有new&nbsp;Date(),直接不会了)——&amp;gt;我回去一定好好看深拷贝完整版Part6.反问&nbsp;&nbsp;&nbsp;&nbsp;
点赞 评论 收藏
分享
评论
6
25
分享

创作者周榜

更多
牛客网
牛客企业服务