70场面试,复盘我遇到的有趣问题(二)

         不知道这个系列可以更新多久,我预期是希望逐步整理所有的我认为有价值的问题,趁着还有时间,多复盘一下,大概每篇更新四五个问题,在精不在多。
         如果大家觉得有用欢迎点赞收藏送花
1.(Minimax二面)react的单向数据流怎么理解,有什么好处?
        当时对这个概念了解的不太深入,没回答好,下来复盘我觉得可以按照如下思路展开。
        首先这个问题想回答好就需要理解几个概念:什么是数据流?什么是单向?为什么要设置成单向的?咱一个一个看看
        react组件中最常用到的数据有两类:state和props,state是组件内部自行维护的,props是父组件传给子组件的,下面说的数据我理解都指的是props。
        数据流:也就是数据在不同组件或节点之间的流动,比如a数据(引用类型)被b节点引用,又被b传递给c,那么a数据改变后会影响b,从而影响c,这就叫数据流。但是这种流动是双向的,因为如果在b或c修改了这个数据,其他的也会变化。
        单向:在react中,单向是”自顶向下“的,也就是react规定了数据的流向是从外层组件向内层组件进行传递和更新的,而内层组件是无法直接修改props影响外层的。
        那么为什么要用单向的形式?如果内层的组件可以通过修改props来修改外层的数据,那么外层使用到这个数据或者其他使用到这个数据的地方都会造成数据更新,UI渲染也会改变,这会造成数据紊乱和不可控。所以为了更好的可控性,react设计了单向数据流。
        除此之外还有一个好处,所有的数据更新是单向的,那么出现问题的时候会更好溯源,因为修改数据的链路是确定的,排查起来顺着调用链就可以一层一层找到问题了。
2.(快手二面)如果用户传了一个很大的excel要解析,如何处理比较好?web worker如何和主线程通信?
        首先这个问题可以泛化到很多复杂计算上,而不只是excel解析,其次可以延申展开一些东西。‘
        web worker是JS里难得的多线程。
        在 HTML5 中,工作线程的出现使得在 Web 页面中进行多线程编程成为可能。众所周知,传统页面中(HTML5 之前)的 JavaScript 的运行都是以单线程的方式工作的,虽然有多种方式实现了对多线程的模拟(例如:JavaScript 中的 setinterval 方法,setTimeout 方法等),但是在本质上程序的运行仍然是由 JavaScript 引擎以单线程调度的方式进行的。在 HTML5 中引入的工作线程使得浏览器端的 JavaScript 引擎可以并发地执行 JavaScript 代码,从而实现了对浏览器端多线程编程的良好支持。
HTML5 中的 Web Worker 可以分为两种不同线程类型,一个是专用线程 Dedicated Worker,一个是共享线程 Shared Worker。两种类型的线程各有不同的用途
        和主线程之间的通信是通过postMessage来进行的。简单的说,主线程用postMessage向webworker推送消息,子线程用onMessage接受并处理,处理完之后在子线程内调用postMessage将结果返回给主线程,主线程同样用onMessage接受。具体内容请查阅MDN文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API/Using_web_workers
3.(灵犀互娱一面)多个web worker如何保证顺序?
        还好当时面试官只是提了一嘴,没让我解答。
        这个问题属于上面的问题的延申版本,其实没了解过具体方式也能猜个七七八八(类比文件切片上传之类的)。要想保证顺序,最简单的方式就是在给不同web worker分配任务时附带上一个唯一编号,在web worker处理完返回结果时也将这个编号一起发回给主线程,在主线程中按顺序重组。
        查了一下,webworker自身也提供了all和race等方法,这些其实就是在promise的基础上封装的(想来也正常,毕竟不同线程,肯定要异步返回)。有一个很详细的知乎文章,有兴趣的uu们自行查阅哈:https://zhuanlan.zhihu.com/p/41431253#:~:text=web-worker
4.(快手二面)setInterval准确吗?
        感觉大家可能也看过,但是这个问题还是比较有意思的。
        答案是不准确,为啥呢?
        嵌套的 setTimeout 相较于 setInterval 能够更精确地设置两次执行之间的延时。
        下面来比较这两个代码片段。第一个使用的是 setInterval:
        let i = 1;
        setInterval(function() {
          func(i++);
        }, 100);
        第二个使用的是嵌套的 setTimeout:
        let i = 1;
        setTimeout(function run() {
        func(i++);
          setTimeout(run, 100);
        }, 100);
        对 setInterval 而言,内部的调度程序会每间隔 100 毫秒执行一次 func(i++)(图1),时间开始计算的位置是调用内部方法的那一刻,因此第一次方法结束到第二次开始之间的时间间隔其实是小于100ms的,这就是为啥他不准确。
        再看看setTimeout(图2)。时间开始计算的位置是内部方法调用结束的时刻,也就是说两次方法之间的时间间隔是准确的100ms。好处在于如果内部方法调用的耗时比较长,那么这个方法也能确保两次调用之间的时间间隔。
        延申:如果setInterval的内部函数执行耗时大于设定的时间间隔咋办?
        在这种情况下,JavaScript 引擎会等待 func 执行完成,然后检查调度程序,如果时间到了,则 立即 再次执行它。极端情况下,如果函数每次执行时间都超过 delay 设置的时间,那么每次调用之间将完全没有停顿。
5.(百度一面)语义化标签如果没加样式,跟div、span这些非语义化标签有啥区别?
        这个就看大家对语义化标签的理解了。首先肯定能想到的一点就是更方便理解,看到header就知道是顶,看到aside就知道是侧边栏,但是这些任务div都能完成,区别在哪?
        1.即使在没有CSS的情况下,HTML页面也能呈现出很好地内容结构、代码结构。语义标签具有默认的CSS,比如html5之前的h1、h2等等就是语义化标签,他们表示几级标题;虽然我们在html没有引入任何css时,我们仍然可以看到h标签有字体放大加粗的效果。 实际上,html本身是没有表现的,我们看到例如 h1标签是粗体,字体大小2em,加粗;strong是加粗的,不要认为这是html的表现,这些其实html默认的css样式在起作用,所以去掉或样式丢失的时候能让页面呈现清晰的结构不是语义化的HTML结构的优点,但是浏览器都有有默认样式,默认样式的目的也是为了更好的表达html的语义,可以说浏览器的默认样式和语义化的HTML结构是不可分割的
        2.不仅人更容易看懂,也更利于机器看懂,对SEO更友好。

再次感谢大家的点赞收藏和花花
#软件开发2024笔面经##前端##快手##minimax##百度##面经#
全部评论
点赞了uu,很早就关注了,真面霸
点赞 回复 分享
发布于 2024-10-08 10:51 浙江

相关推荐

04-06 20:17
复旦大学 Java
投递腾讯等公司6个岗位
点赞 评论 收藏
分享
04-08 21:41
南京大学 Java
先整理一下时间线吧:    3.27一面    4.2二面    4.7晚上hr打电话oc    4.8发的offer得说不知道为啥我这个美团的流程走的好慢,我朋友和我前后脚第一次一面,我走了一遍流程拿的offer,他走了两编流程跟我同一天拿的offer,搞得我中间以为二面直接寄了。---------------------------------------------------------------------------------------------------一面上来自我介绍之后面试官对我大模型的论文特别感兴趣,上来让我说一下前端实习的项目以后一句没问,直接让开讲大模型实验是怎么做的,然后让我给他展示我论文里的prompt是怎么写的。之后出了一道需求让我手搓prompt给大模型试试生成的代码的质量。最后出了个人机交互的题目,分析一下用户对系统的三个反馈问题哪个问题最要紧,三个问题修正的顺序怎么安排。全程大概60分钟整,一道前端八股没问,给我整懵逼了。二面二面同理,感觉美团面试官对大模型特别感兴趣,上来也让我讲论文实验思路,完了讲讲对实验设计有没有更好的优化的想法,我说准备做个根据大模型生成结果的得分做个multi-query的操作提高性能(被批说大概率没用)。之后开始问我怎么保证一个项目进展的顺利,我说在项目开展之前对任务量进行评估,计算每周要做多少,设立里程碑,每周结束的时候做评估。然后开始让结合实习经历讲讲怎么保证项目里各个角色合作顺利开展,比如前端怎么和后端argue系统设计啥的。之后开始让讲怎么学习一个新技术,以及对大模型有什么看法,觉得大模型对个人和学校有什么影响。(也是一道八股没问)无hr面,二面面完直接给我oc,第二天发的offer。(美团offer发的太快了,后面淘天约我三面我直接拒了,实在不想面试了,太累了,之前阿里控股给我连挂四次)#美团##我的OC时间线##晒一晒我的offer#
点赞 评论 收藏
分享
评论
17
30
分享

创作者周榜

更多
牛客网
牛客企业服务