Dan Abramov 接受油管 UP 主的面试挑战,结果差点没写出来居中……?

简介: 大家好,我是 ssh,前两天大名鼎鼎的 React 核心开发者 Dan Abramov 接受了油管 up 主 Ben Awad 的一场面试,而且是正儿八经做题的那种,不是之前国内那场戏称的面试。我们赶快一起来看看。

大家好,我是 ssh,前两天大名鼎鼎的 React 核心开发者 Dan Abramov 接受了油管 up 主 Ben Awad 的一场面试,而且是正儿八经做题的那种,不是之前国内那场戏称的面试。我们赶快一起来看看。

刚开场,Dan 首先来了段自我介绍:

这绕口令呢?I work on React i did not create react but i work on it on React team...

大意就是,他是 React 和 Redux 的联合开发者,他不是 React 创始人(估计是他对外发声太多,有误解的小白不少),今天他想通过 Ben 的面试,祝他好运!

接下来寒暄几句,Ben 就正式开启了面试环节:


let vs const


上来就是国内也很经典的一道面试题,让 Dan 回答 let 和 const 的区别。

Dan 回答说他认为这不重要,于是面试官让他滚回家等通知了(误

开个玩笑,Dan 还是稳稳的回答出了区别,const 可以防止变量重新分配,并且指出 const 创建的对象 object 依然可以用 object.xxx 来修改对象属性的值。

之后主持人问他平时的使用习惯,Dan 说他是个很混乱的人,看心情使用,然后询问主持人是不是要解雇他(哈哈哈)


Redux


主持人非常俏皮的问:“有一个可爱的库,经常和 React 一起使用,你可能知道叫 Redux”

Dan 也很俏皮的回了句:“听说过”。

接下来主持人发出了灵魂拷问:“什么时候我该考虑在项目中使用 Redux?”

Dan 略加思索,从以下几点来回答了这个问题:

  • 项目中已经使用了它。
  • 团队对它比较熟悉。
  • 服务端数据 -> 可能需要被缓存。
  • 跨组件共享某些数据。

最后 Dan 说,如果现在新建一个项目,他可能不会选择 Redux 了,主持人蛤蛤大笑,问他会选择什么,Dan 说这取决于实际情况,如果是一些需要缓存的服务端数据,他可能会选择react-query, relay, apollo 等一些现代的 react 请求状态库。

主持人接着追问,如果是需要提升到顶部的状态,你喜欢用 Context 吗?Dan 给出了肯定的答复。


dangerouslySetInnerHTML


接下来,主持人对 dangerouslySetInnerHTML 这个 API 的使用时机提出了疑问。

Dan 回答说,这个 API 是在你可能从数据库或者什么地方拿到一串 HTML 想要展示到页面上时,在确保它是安全的 HTML 文本的前提下,可以使用。你可以提前对这串 HTML 消毒(santize),确保没有未经过消毒的用户输入。


居中


一个很常规的 CSS 问题,让这段文本在页面上水平垂直居中

Dan 慌慌张张的开始用 display: flex 起手,然后来了个 width: 100% 想让容器撑满,他显然已经忘了这是默认的块布局的行为了 XD。

翻译大误

Dan 写到这一步,开始迷茫了,为什么没生效!

经过了大约整整 5 分钟的苦思冥想的调试,Dan 终于试出来了问题,因为 HTML 元素默认不是 100% 的高度,大师原来也会遗忘这些基础,哈哈。

我得意的笑

国际友人埃文尤也对此事发表了亲切的慰问。


算法:反转二叉树


主持人:Dan 我要给你出个经典的算法题,你在 Facebook 工作,现在我要看看你能不能在 Google 工作。

没错,接下来他祭出了 homebrew 作者闻风丧胆的反转二叉树

如图所示,把二叉树的节点左右反转。

Dan 很快给出了答案,看来常年维护 React,对树方面的操作必须是手到擒来了,主持人打趣说 Dan 破了他保持的最快反转二叉树的记录。


奖金问题:找兔子


主持人神秘的拿出了他的额外奖金问题,找兔子。

这个问题大意是,一条直线上有 100 个洞,兔子藏在其中的一个洞里。

你一次只能查看一个洞,并且每次你查看洞的时候,兔子都会跳到它当前所在位置的相邻的洞里去。

举例来说,现在有 _ X _ _ 这四个洞,X 代表兔子的位置在第二个洞,如果你查看了第三个洞,那么兔子就可能会跳到它左边的第一个或右边第三个洞中去。

要求写出找到兔子的算法,并且给出复杂度。

这是一个比较开放性的问题,具体 Dan 调试和解答的过程可以直接去油管看原视频,占据了整整二十多分钟时间。这题是真的有难度了,不过 Dan 会把他思考的过程转化成代码或者文字写在 IDE 里,帮助自己找到更多线索,并且不断的和面试官进行沟通来确认细节,我觉得这是非常值得学习的。

最后,主持人说他决定雇佣 Dan 了,当他在回答 let vs const、redux、dangerouslySetInnerHTML 的问题时,展现出的思考过程就已经足够打动他了。

主持人说,谷歌也会雇佣 Dan,因为他解决了反转二叉树问题(笑),而且在遇到困难的兔子问题时,他能够一步步的写下自己的思考,和面试官不断进行互动获得更多提示,这是非常关键的。

这也可以给我们自己一些启发。当你在面试中遇到难题的时候,不要闷着头一声不吭的写,最好把你的思考过程转化成文字写下来,多和面试官进行一些提问和细节的确认。不然面试官也不知道你在想什么,该如何提示你。从我个人的感觉来说,没有面试官会喜欢沉默寡言的面试者,毕竟面试招进来的人是要在日后的工作中紧密合作的,确定你的思考过程很清晰,确定你在沟通交流方面友好和耐心也是面试官考察的重要因素,大家共勉。

彩蛋:油管高赞评论

油管地址:https://www.youtube.com/watch?v=XEt09iK8IXs

相关文章
|
9月前
|
存储 C++
C生万物 | 从浅入深理解指针【第三部分】(转移表的实现)
C生万物 | 从浅入深理解指针【第三部分】(转移表的实现)
|
9月前
|
存储 传感器 缓存
重拾计网-第二弹(三种交换方式)
重拾计网-第二弹(三种交换方式)
|
存储 编译器 C语言
课外闲谈4.对齐数的概念
结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字符;
126 0
课外闲谈4.对齐数的概念
|
前端开发 开发者
「前端阶段感悟」突围?我愿称之为向上的攀登者
用技术实现梦想,用梦想打开前端技术之门。分享我与技术文章写作的故事。
121 1
「前端阶段感悟」突围?我愿称之为向上的攀登者
|
设计模式 IDE Java
每一个疑问背后都隐藏着至少一个盲点和学习的绝佳机会
每一个疑问背后都隐藏着至少一个盲点和学习的绝佳机会
202 0
文字处理技术:搞明白了表格是如何参与文字方向的
文字处理技术:搞明白了表格是如何参与文字方向的
113 0
|
分布式计算 大数据 MaxCompute
三七女生节,看程序媛们选好口红色号,踩上高跟鞋,特别美丽,特别凶狠,特别温柔~
口红,尿不湿,代码;撒娇,卖萌,撕叉;烈焰红唇倾斜45度角写代码;我爱你,你用知性保持着最致命的吸引力!
2127 0
|
人工智能 大数据 测试技术
Master没学过人类棋谱?这才是它比老AlphaGo更恐怖之处
在Master完成60胜,结束人机车轮战后,因与AlphaGo对战而成名的欧洲围棋冠军樊麾就在社交网络上发表了一篇公告。 在这篇公告中,谷歌公司明确表示Master是“阿法狗”的升级测试版,而在其中更是有个惊人的所在——Master可能完全没学过棋谱,而这也侧面印证了Master不按常理出牌的套路
5007 0
|
机器学习/深度学习 人工智能 算法
从超级玛丽说起,谈谈如何为机器赋予好奇心
如何让机器付有好奇心?加州大学伯克利分校研究团队给出了答案。
2623 0