首先很荣幸能在 1 月 30 号,也就是过年的前一天能够得到在抖音的老师给我进行的面试,很感谢老师能够在百忙之中抽出时间来。能够得到现在前端业界处于顶尖老师的指点,十分的荣幸。在这次的面试过程中收获太多太多,对自己当前的水平,不足,未来的学习方向都有一个更加明确的认知,那废话不多说,下面我就简单的介绍一下我这次的面试的经历吧。
直接上流程,就不讲一些基本的面试准备了,如果想了解的同学可以去看一下我第一次面试的文章总结 第一次面试——滴滴
自我介绍
也是和其它的自我介绍一样讲述自己的个人信息,然后学习前端的过程,项目经历,未来规划(仅代表个人), 为什么要讲述这个呢?因为老师从我的自我介绍当中的项目经历开始了面试的第一个提问。
交流过程
项目介绍
首先老师对我做过的一个项目 —— react + ts 的全栈旅游网相关的东西想进一步的了解,然后我就进行了简单的项目介绍,首先就是项目的基本架构,前端使用什么,后端使用什么,为什么要使用这个架构进行你的代码编写,然后就是你项目的里面的亮点,比如你用了什么很优秀的库,实现了什么很复杂的功能,然后就是你项目当中遇到的难点,你是怎么解决的,在做这个项目里面收获了什么。
下面讲述一下相关的问题,我不会进行编写完整的答案,我会将个人理解以及相关知识优秀的文章列举在下面,真正面试的时候的答案还是需要自己编写属于自己的剧本,要记得面试是一场表演,你要有自己的剧本,这样你才能更好的展示自己
为什么要做这个项目呢?
过程
这个考察的就是你有没有项目设计这一方面的思维,你是怎么选择并且确定项目的原因,爱好,还是模仿呢?这里面考察的就是我不太懂的部分了(希望有大佬可以指点一下),大家也要想好这个问题你的答案哦。
不足
对自己为什么要做这个项目的本质还没有很了解,不知道自己的初衷
为什么使用 JWT 进行登录,以及简单介绍一下JWT
过程
这里我就简单的讲述了一下为什么使用 jwt进行登录,为什么不使用 cookie,session ?
不足
没有讲述出来 JWT 的不足,以及更加优秀的授权方式 —— OAuth
做前后端分离项目前,劝你先了解 OAuth2.0 的四种授权方式
傻傻分不清之 Cookie、Session、Token、JWT
React 生命周期
过程
React 在 16.8 版本之前还是类式编程的版本,里面存在生命周期这一个概念,在 16.8 版本之后的函数式编程的版本,生命周期的概念逐渐变淡了,但是对生命周期的了解还是十分重要的,因为可以更好地了解 React 代码执行的顺序,以及 React 一些基本的架构思想是什么。
我讲述了 React 里面在挂载更新卸载过程中相关的生命周期,以及讲述了全部生命周期的总体流程,以及新增两个声明周期,对以前生命周期的优化。
不足
对生命周期理解不是很到位,只存在表面上的复述,还不是很懂 React 的执行以及更新机制。
性能优化相关的 hooks
过程
- 使用过 useCallback 吗?
- 使用过 useMemo 吗?
- 使用过 useLayoutEffect 吗?以及为什么这个是 同步的呢,同步的具体表现是什么呢?
不足
只知道 useLayoutEffect 是同步的,有时候会阻塞浏览器的绘制,这个就需要知道 React 在浏览器中执行的线程和浏览器绘制的线程之间的交替关系
原型式继承
过程
我首先讲述了一下原型和原型链相关的东西,然后讲述了原型式继承的基于原型链的,然后讲述了原型式继承的不足,就没有了
不足
没有一开始先简述继承是什么,ECMAScript只支持实现继承,然后没有对原型式继承的优化,后面的组合,寄生,组合寄生式继承都没有讲述。
position 的相关属性
过程
这个问题相信在大家的面试当中都经常会遇到,因为这个问题还是很经典的,要把这个吃透哦,这里我就不解释了,不懂得同学可以去 MDN 里面看一下,链接在下面
重绘重排
过程
我讲述了重排(回流):当 DOM 的变化影响元素的几何信息(DOM 对象的位置和尺寸大小),浏览器需要重新计算元素的几何属性,将其安放到界面中的正确位置。重绘:当一个元素的外观发生变化,但没有改变布局,重新把元素外观绘制出来的过程
其实还可以讲述一下浏览器的绘制过程,里面涉及的一些 DOM 树,分层,图层树,光栅化等一些知识
TCP 和 UDP 的区别
过程
这个考察的就是你对网络协议了解,经常考的还有 三次握手,四次挥手的全过程,这里就不讲了。
UDP | TCP | |
---|---|---|
是否连接 | 无连接 | 面向连接 |
是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
连接对象个数 | 支持一对一,一对多,多对一和多对多交互通信 | 只能是一对一通信 |
传输方式 | 面向报文 | 面向字节流 |
首部开销 | 首部开销小,仅8字节 | 首部最小20字节,最大60字节 |
适用场景 | 适用于实时应用(IP电话、视频会议、直播等) | 适用于要求可靠传输的应用,例如文件传输 |
什么是 301 和 302,以及具体表现
过程
这个考察的就是你对状态码的了解我们都知道 301:永久重定向,302:临时重定向,老师问我301,302的具体表现是什么以及他们的区别在缓存,安全,行为上面,
不足
对状态码的具体表现理解不是很深刻,以前的我只知道他们叫什么,是干嘛的,根本不知道具体表现的细节
算法 —— 在一个数组当中找到最大的值
过程
这里考察的就是对排序算法的理解,讲述冒泡排序,快速排序,归并排序还有好多就不列举了,其中老师还问我知道大顶堆和小顶堆
不足
对排序算法的理解还不是很深刻,只知道简单的算法的编写,其它的一些复杂的排序算法还不太了解,其中很重要的就是,大小顶堆的理解
我对自己面试的评价
首先面试表现我自己非常的不满意,表现的其实有点差,在很多基础知识方面只是简单的了解,不够全面,不够深刻,特别是原型式继承这一个知识点,还有就是 React 方面对相关的知识点只知道它叫什么以及有什么用,稍微深入的不太了解,浏览器方面的知识的了解还不够全面,特别是在网络协议方面,不够细。
还有就是对知识的表达不够全面,没有提前设计好每一个技术点的表述方式,要从来源开始,为什么会出现这个,这个是干什么的,里面涉及到的知识点,然后进行相关的扩展,对一个技术的认知的深度和广度都还有待加强,不过吧,加油
给我的建议
- 首先告诉我的就是面试是一个 双向选择 的过程,
- 不用表现得自己不够自信,感觉在面试官前面压力很大,要自信
- 还有就是我的一些缺点和有待加强的部分还有一点点的亮点
- 在表达的时候要扩展也要有条理
- 对一个知识的了解要有一定的深度
- 在对一个知识点深入了解的时候尽量去官方的文档进行系统的学习
- 要有写文章的习惯
- 公司招聘的要求是,是一个聪明,热爱前端,基础好,有亮点等等的同学
- 亮点可以是:基础特别扎实,项目写的很好,看过很多的源码,算法很厉害,精通多种语言,知识面很广并且都具有一定的了解......
总结
首先很感谢老师在百忙之中给我进行面试,在这场面试当中学到了很多的东西,不仅仅是对自己知识点的不足,面试的一点缺点,还有未来的发展方向,要找到自己的优势以及每一个自己的闪光点,写文章等等很多的好处用言语无法表述。
不过总而言之,加油吧,前方的世界很大,路也很长,只有一直学习才能一往无前。最后希望对你的面试也有一点点的帮助吧。