第二次面试记录——抖音

970 阅读9分钟

首先很荣幸能在 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 的执行以及更新机制。

React 的生命周期

性能优化相关的 hooks

过程

  1. 使用过 useCallback 吗?
  2. 使用过 useMemo 吗?
  3. 使用过 useLayoutEffect 吗?以及为什么这个是 同步的呢,同步的具体表现是什么呢?

不足

只知道 useLayoutEffect 是同步的,有时候会阻塞浏览器的绘制,这个就需要知道 React 在浏览器中执行的线程和浏览器绘制的线程之间的交替关系

Hook

原型式继承

过程

我首先讲述了一下原型和原型链相关的东西,然后讲述了原型式继承的基于原型链的,然后讲述了原型式继承的不足,就没有了

不足

没有一开始先简述继承是什么,ECMAScript只支持实现继承,然后没有对原型式继承的优化,后面的组合,寄生,组合寄生式继承都没有讲述。

JS原型链与继承别再被问倒了

position 的相关属性

过程

这个问题相信在大家的面试当中都经常会遇到,因为这个问题还是很经典的,要把这个吃透哦,这里我就不解释了,不懂得同学可以去 MDN 里面看一下,链接在下面

MDN —— position

重绘重排

过程

我讲述了重排(回流):当 DOM 的变化影响元素的几何信息(DOM 对象的位置和尺寸大小),浏览器需要重新计算元素的几何属性,将其安放到界面中的正确位置。重绘:当一个元素的外观发生变化,但没有改变布局,重新把元素外观绘制出来的过程

其实还可以讲述一下浏览器的绘制过程,里面涉及的一些 DOM 树,分层,图层树,光栅化等一些知识

你真的了解回流和重绘吗

TCP 和 UDP 的区别

过程

这个考察的就是你对网络协议了解,经常考的还有 三次握手,四次挥手的全过程,这里就不讲了。

UDPTCP
是否连接无连接面向连接
是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
传输方式面向报文面向字节流
首部开销首部开销小,仅8字节首部最小20字节,最大60字节
适用场景适用于实时应用(IP电话、视频会议、直播等)适用于要求可靠传输的应用,例如文件传输

关于 TCP/IP,必知必会的十个问题

什么是 301 和 302,以及具体表现

过程

这个考察的就是你对状态码的了解我们都知道 301:永久重定向,302:临时重定向,老师问我301,302的具体表现是什么以及他们的区别在缓存,安全,行为上面,

不足

对状态码的具体表现理解不是很深刻,以前的我只知道他们叫什么,是干嘛的,根本不知道具体表现的细节

具有代表性的 HTTP 状态码

算法 —— 在一个数组当中找到最大的值

过程

这里考察的就是对排序算法的理解,讲述冒泡排序,快速排序,归并排序还有好多就不列举了,其中老师还问我知道大顶堆和小顶堆

不足

对排序算法的理解还不是很深刻,只知道简单的算法的编写,其它的一些复杂的排序算法还不太了解,其中很重要的就是,大小顶堆的理解

十大经典排序算法总结(JavaScript描述)

我对自己面试的评价

首先面试表现我自己非常的不满意,表现的其实有点差,在很多基础知识方面只是简单的了解,不够全面,不够深刻,特别是原型式继承这一个知识点,还有就是 React 方面对相关的知识点只知道它叫什么以及有什么用,稍微深入的不太了解,浏览器方面的知识的了解还不够全面,特别是在网络协议方面,不够细。

还有就是对知识的表达不够全面,没有提前设计好每一个技术点的表述方式,要从来源开始,为什么会出现这个,这个是干什么的,里面涉及到的知识点,然后进行相关的扩展,对一个技术的认知的深度和广度都还有待加强,不过吧,加油

给我的建议

  1. 首先告诉我的就是面试是一个 双向选择 的过程,
  2. 不用表现得自己不够自信,感觉在面试官前面压力很大,要自信
  3. 还有就是我的一些缺点和有待加强的部分还有一点点的亮点
  4. 在表达的时候要扩展也要有条理
  5. 对一个知识的了解要有一定的深度
  6. 在对一个知识点深入了解的时候尽量去官方的文档进行系统的学习
  7. 要有写文章的习惯
  8. 公司招聘的要求是,是一个聪明,热爱前端,基础好,有亮点等等的同学
  9. 亮点可以是:基础特别扎实,项目写的很好,看过很多的源码,算法很厉害,精通多种语言,知识面很广并且都具有一定的了解......

总结

首先很感谢老师在百忙之中给我进行面试,在这场面试当中学到了很多的东西,不仅仅是对自己知识点的不足,面试的一点缺点,还有未来的发展方向,要找到自己的优势以及每一个自己的闪光点,写文章等等很多的好处用言语无法表述。

不过总而言之,加油吧,前方的世界很大,路也很长,只有一直学习才能一往无前。最后希望对你的面试也有一点点的帮助吧。