时间过得很快,仿佛20年的金九银十就在昨天,21年的金三银四随之而来了,尚未准备好面试的同窗们不要慌,今天和你们聊得的是淘系前端面试,一共是5面+HR面,会问那些问题?又该如何回答?看完这篇,为咱们的面试锦上添花!html
这一面主要问了基础部分, 一部分题目我会带上提示
主要是 令牌化/建树/收集样式表/布局渲染树/绘制列表/栅格化/绘制图块/...这些过程, 推荐阅读浏览器的工做原理:新式网络浏览器幕后揭秘前端
E-Tag
和Last-Modified
以及对应的标识, 强缓存方案与协商缓存方案的场景, 好比index.html
该用哪一个?Fiber
架构可能会将其打断), 新版的有什么特色(getDerivedStateFromProps(nextProps, prevState)
, 这个方法是静态方法, 也就说你没法在里面获取到this, 还有就是入参为prevState
, 这样就保证state
和props
之间更隔离). 还有就是我以为很好玩的getDerivedStateFromErrors
和componentDidCatch
的协做.React: PureComponent, 浅比较, 放一下shouldComponentUpdate
中shallowEuqal
的源码:html5
const hasOwn = Object.prototype.hasOwnProperty; function is(x, y) { if (x === y) { return x !== 0 || y !== 0 || 1 / x === 1 / y; } else { return x !== x && y !== y; } } export default function shallowEqual(objA, objB) { if (is(objA, objB)) return true; if ( typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null ) { return false; } const keysA = Object.keys(objA); const keysB = Object.keys(objB); if (keysA.length !== keysB.length) return false; for (let i = 0; i < keysA.length; i++) { if (!hasOwn.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) { return false; } } return true; } 复制代码
particalState
), 内部对参数的Object
类型和Function
类型作了不一样的处理, 为函数的状况下, 会在setState调用完成而且组件开始rerender的时候被调用.Buffer的话主要提了一下它是堆外内存(V8的常驻内存由代码区/栈/堆/堆外内存组成)啥的.webpack
微信小程序, 这个是二面的重点提问之一, 包括如下几个方面:程序员
sessionKey
生成token, openid做为主键入数据库, 再返回自定义的登陆态标识.@Penumbra/cli, 一个思路相似Feflow
的脚手架, 也是 脚手架核心+模板插件包+构建器 的一个组合, 模板插件包的话, 前端包含 Webpack
/Parcel
+ TypeScript
/JavaScript
的组合, 后端包含Koa
/Egg
+ RESTFul
/GraphQL
的组合. 主要问了这些问题:web
Parcel
Sentry
以及Release时上传Source-Map
文件的方式. 本身实现的话, React的思路主要是一个最外层的<ErrorBoundry />
组件, 借助getDerivedStateFromError
与componentDidCatch
来捕获错误.FaaS
以及BaaS
, 还有Serverless
对前端意义, 这个问题千人千面, 就不展开来说了.三面和四面发问的角度和提出的问题比较相似, 所以就放在一块儿讲了.面试
@Penumbra/cli
.不要东扯一点西扯一点, 以 技术栈 -> 业务场景 -> 亮点 -> 难点 -> 提炼总结 -> 自我提高 这几个步骤来叙述会更加条理清晰, 其中亮点/难点以STAR
法则介绍最佳.算法
@Penumbra/cli
这个, 上面已经介绍过, 就再也不赘述. 主要为了体现 新工程目录创建繁琐 -> 应当成员之间统一目录结构 这个意识.GraphQL, 主要介绍了这些:数据库
Apollo-Server
& TypeGraphQL
& Apollo-Rest-Datasource
, 至于它们是什么感兴趣同窗能够去查查. Apollo不只提供了服务端支持, 也提供了客户端支持, 即Apollo-Client
, 同时使用Server
和Client
来构建应用真的能起到1+1>2的效果, 由于两者就像是一体的.Webpack性能调优, 从 打包速率 / 打包大小 / 交互友好 三个方面入手的, 这里能够稍微列举一些我以为比较好用/有趣的Plugin:小程序
VuePress
就用的这个)resolve
字段中配置extension
, loader中配置exclude
, 后者的话则主要是Tree-Shaking(注意, CSS也能够作摇树优化), 代码分割(动态加载以及Lodash/Antd这种庞大的模块), Source-Map模式, 压缩代码等等.React Hooks:
useRef, 还有useImperativeHandle与forwardRef
React-Redux
的useSelector和useDispatch
, React-Use
还有Umi-Hooks
等等.五面的面试官可能比较忙, 所以整个面试过程大概就二十分钟左右. 以本身的经历为主, 若是你是独行侠, 也能够讲一讲本身在社区的贡献等等, 不要直接说你喜欢独来独往一我的全干.
这一面就是常见的问题啦:
这些问题比较主观, 为了不误导我就不讲啦
对将来前端的展望是二面问到的问题, 我我的的想法主要分这么三点:
Rax
或者Taro
, 真正的一次编写到处运行. 固然理想是好的, 在它还未乘着七彩祥云到来前, 仍是专心学好每一端吧~Serverless
无疑是前端仔的下一个风口, 它给予了咱们向后端进发的能力, 让咱们"本身和本身联调", 也无需操心本身写的服务被流量打爆掉. 后端同窗则可以解放出来, 去作一些更有意义的事情.(真的不是抢饭吃)只能说面试真的是很玄学的东西, 若是每一面都能碰见和你至关合得来的面试官, 那整个面试流程真的会很轻松愉快。春招逐渐接近尾声, 也但愿你们都能拿到本身满意的offer!