站酷一面
自我介绍
介绍一下自己的项目
项目中的jwt鉴权怎么实现的(我说的主要处理还是在后端,首先用户登录的时候会接收到一个服务器发来的token,这个token会保存在localStorage中,然后每次操作文件比如上传下载都需要在请求头中加入token传给后端,后端进行jwt的一些解析判断匹配成功后才能给服务器返回对应的数据)
项目中的断点续传怎么实现的(七牛云里面有go的SDK,直接调用就可以)
先说说框架吧,useMemo和useCallback了解吗(我说useMemo主要用于性能优化,useCallback没那么了解,但除了useCallback,我useRef、useReducer还有其它hooks都用过一些,面试官说没关系,下一题)
useEffect了解吗,它可以实现哪些类组件的生命周期(我有点遗忘了,只说了useEffect的第二个参数为空数组的时候,在页面第一次渲染的时候会执行回调,第二个参数的数组中有值的时候,对应的组件在更新后会执行useEffect中的回调(我真的记不清了))
useLayoutEffect了解过吗(我只说我听说过,但没有具体了解,面试后搜索发现它和useEffect的主要差异是useEffect 是异步执行的,而 useLayoutEffect 是同步执行的,背面经看来还是不能马虎,虽然useEffect可以满足99%的场景)
讲讲MVVM和MVC的差别吧(我说MVVM数据是双向流动的,数据更新的同时对应的视图也会更新,而MVC不是,而且设计模式也有区别,前者是发布订阅模式,后者是观察者模式)
CSS中水平垂直布局怎么实现(我回答了两种方法,一个flex布局把justify-content和align-item设置为center,另一种是绝对定位时可以使用top:50%,left:50%,transform: translate(-50%, -50%))
听说你了解git工作流,能讲讲如何解决冲突吗(我说产生冲突就手动解决,然后再merge并push,可能是我没太理解问题,面试官还连续问了几次,似乎没得到他想要的答案)
你这还写了解go和java,能说说他们的区别吗(我说java社区生态丰富,go速度快而且入门的语法似乎更简单)
那好,谈谈计网吧,HTTP你了解吗(我询问了是否可以讲HTTP几个版本的区别,面试官说可以,于是我开始吟唱。。。HTTP1.0不支持长连接,没有keep-alive,只有最基本的GET/POST方法没有PUT和DELETE这些,HTTP1.1默认长连接,可以断点续传,而且增加了协商缓存的E-tag和强缓存的cache-control,HTTP2.0又增加了多路复用,header头部压缩,服务端主动推送,有新的二进制格式)
你谈到了协商缓存这些,能具体说说强缓存和协商缓存吗(我说了一下协商缓存E-tag,服务器资源变动的时候E-tag也会改变,强缓存是cache-control这些,一般会设置一个过期时间,如果强缓存未过期则会直接使用缓存,否则去服务器请求)
讲讲TCP三次握手(开始背诵,具体的每个参数和数据还有每个阶段客户端或服务端的状态都说了,自我感觉不错)
手写快排(秒A)
手写leetcode 46.全排列(没A出来,我说思路是回溯算法,面试官笑着说没关系,本来也不是考察这个,换道题吧)
手写leetcode 70.爬楼梯(秒A)
手写leetcode 3.无重复字符的最长子串(秒A)
反问(1.公司的技术栈是什么,答全是React 2.公司的日常工作是什么,答低代码平台,webgl,React Native也会用,但不用flutter 3.如果我如果有幸加入的话还需要学习一些什么,答 React Native 还有 webgl 这些 4. 我能这份实习中学到什么,答就是上面的那些项目的工作经验)
总结:React和计网还有手写代码能力考察得多一些,主要是力扣第46题全排列没写出来。