湖畔大学面经

  1. 自我介绍
  2. 项目经历(介绍项目背景、技术栈、难点创新点以及如何解决、技术栈的选择)
  3. HTTP header常用的字段及含义
  4. 介绍一下缓存(强缓存、协商缓存的区别,涉及到的一些请求头字段Etag、max-age、Expires、Last-Modified...扩展到字段出现的顺序,如HTTP1.1出现的字段与原先字段比较的优势、优先级。服务端涉及的Set-Cookie,会话保持原理。提到了Same-Site的坑,chrome86之后默认是Lax,之前是None,结合项目说明带来什么后果:跨域请求的携带cookie策略有了限制,需要同源)
  5. 跨域请求如何处理:反向代理、服务端CORS,还有不常用的JSONP等。
  6. 介绍一下JSONP原理:指定一个callback发送给服务端,服务端会将data传给callback,前端可以调用callback拿到数据。
  7. 知道哪些异步方案: callback(存在的问题:嵌套地狱)、promise(内部机制:有限状态机、不够直观)、generator(协程:yield等待执行结果、迭代器还是需要自己进行迭代)、async/await(同步方式写异步,直观、使用方便)
  8. promise可以取消吗?不可以,三种状态的关系是,初始态pending只能单向转换为fullfilled或者rejected,不可逆转。
  9. 水平垂直居中:flex
  10. HTTP常见状态码:1xx 2xx 3xx 4xx 5xx,301 302区别(301永久重定向 302暂时重定向)
  11. 介绍一下CSRF/XSS攻击及解决措施

    • CSRF:跨站请求伪造。伪造用户请求,本质上因为服务端信任浏览器端。攻击者利用已认证cookie(不需要知道cookie内容)向指定网站发出用户预期外的请求。措施:利用http-only限制客户端读取cookie;增加验证码;
    • XSS:跨站脚本漏洞。恶意插入代码,本质上是因为浏览器端信任用户。如评论框支持一些富文本内容,用户插入恶意script,提交后,其他用户访问指定网站后都会执行该段恶意脚本。比如提交cookie到攻击者的服务端。措施:对用户输入标签进行转义。
  12. React常用生命周期及调用时机(渲染、更新、卸载)
  13. React diff算法流程:分层、节点key(为什么不推荐用索引而是使用服务端提供的id或者前端生成key,影响比较,索引不是稳定的)
  14. virtual dom的作用: 在真实dom之上抽象一层,其实virtual dom是一个普通的js对象。频繁操作dom的动作放在js对象中,集中处理dom提升性能;抽象出virtual dom的本质作用是跨端开发,不同环境,如服务端、小程序、原生,端到端编译,一套代码可编译各个平台的代码。
  15. 为什么频繁操作dom影响性能:浏览器展示页面机制,render tree。频繁操作dom实际上涉及到渲染线程、js线程之间的通信,更改到dom几何尺寸可能会触发回流、重绘损耗性能。virtual dom则减少了这种触发次数,实际上类似的性能优化也可以利用document.createDocumentFragment来进行操作性的动作。
  16. 使用过的状态管理库:dva。介绍一下dva:实际上不是新的,底层由redux、redux-sage、react-redux组成。组合而成,约定了一套规范便于管理同步异步状态。
  17. redux的流程:action描述了动作、reducer处理逻辑、state存放状态。

    • state存放在store中
    • view组件dispatch一个action
    • action对应的reducer处理逻辑,纯函数输出新的state
    • state变动触发mapDispatchToProps(实际上还是发布订阅模式的应用)
  18. debounce、throttle应用。
tag(s): none
show comments · back · home
Edit with markdown