2020.11.22
一面
就简历上的内容展开问了一个问题,然后马上做题
实现 sum 函数使得以下表达式的值正确,即 sum 函数可以连续柯里化调用,当未传入任何参数时则返回之前调用的所有参数的和。
实现一个 SimpleEventEmitter,支持 trigger、once、on、off 方法
看到我简历上有写用到了 LRU 算法,让我实现了一个 LRUCache 的类. 问了一些关于 LRU 的问题,比如为什么要用双向链表,为什么要用哈希表,时间复杂度是多少等等
leetcode 532:给定一个整数数组和一个整数 k,你需要在数组里找到不同的 k-diff 数对,并返回不同的 k-diff 数对 的数目(要求时间复杂度 O(n) )
输入一个正整数数组,如果这个数组可以通过以下两种操作中的一种,使整个数组变成单调递增或递减,则返回最终的单调序列,否则返回 -1。这两种操作分别是
这题最后因为时间关系没实现出来,只是说了说思路。
二面
说一下你所知道的性能优化手段
数千条数据量的长列表,你认为如何渲染最高效
基于上面的问题拓展出
leetcode 67: 二进制加法,简单难度
手写 bind。给了一段函数,让你覆盖掉 Function.prototype.bind 并且保证原来的运行结果还是正确的。主要得注意各种传参和返回值的处理
三面
三面是大 leader 面的,如果你的思路是对的,他会顺着你的回答来由浅入深步步提问,前后逻辑非常严密,知识广度和深度都有所考察
介绍下你原来团队为了提高代码健壮性做了哪些工作
如何检测到页面的白屏?如何优化首页渲染性能?如何检测并上报页面的卡死?(考察 EventLoop + Web Worker 相关,二面问的是卡顿如何上报,三面问的是卡死如何上报)
在你看来虚拟 DOM 是什么?它能解决什么问题并带来了什么收益(渲染性能、跨端)?你认为 React-native 在 native 这边做了什么工作?你知道目前主流框架的 SSR 原理吗?
先给了一个数组 arr 和 for 循环,问输出的 arr[i] 的结果;然后在保留 for 循环结构的同时让你改成间隔 1 秒输出数组各项元素。最后要求改成间隔时间是每次都调用传入的 reducer 动态计算的,实现一个这样的 function logger (arr: number[], timeWaitReducer: () => number) 函数的封装
实现一个请求函数 function ajax (url, wait, count),在 wait 时间内无结果则进行重试,最多重试 count 次。要求不可使用 xhr 的 timeout 属性。如果 wait 的时间要尽可能排除掉 xhr pending 的时间可以怎么做?
问到 web worker 相关的时候三面面试官还让阐述下 web push 的原理
最后更新于
这有帮助吗?