【面试总结】一场令人崩溃的面试体验

70 阅读6分钟

这场面试的面试官是一个非常看重底层知识与个人思考的面试官,问我的第一个问题之后我就意识到人家找的人一定不是我,可惜还是得硬着头皮聊了一个小时十分钟,感觉自信都快被打垮了。

复盘一下里面一些有用的问题吧,那些纯属难为人的问题我就不提了 (写完发现大部分我都回答不上来)

移动端布局如何适应不同的设备

面试官说是看到我写了flex布局,认为我应该很快联想到flex布局在移动端屏幕大小适配里用的比较多,(然而我并没有联想到,总之我说的面试官get不到,面试官想要的我也没说出来)

CSS如何实现高度宽度居中

聊一下字体和非字体的实现方式
字体垂直居中的几种实现方法_font居中-CSDN博客

字体垂直居中

  1. 字体行高设置为父元素的高度,就能实现垂直居中

  2. vertical-align:middle,使用 vertical-align 用来指定行内元素(inline)和行内块级元素(inline-block)或表格单元格(table-cell)元素的垂直对齐方式。

JS语言和Java、python等语言相比,有什么不同

Java 和 JavaScript 之间的主要区别

  • 编程范式: Java 严格遵循面向对象编程范式,而 JavaScript 遵循多范式,包括面向对象编程、过程化和脚本编程语言。
  • 代码执行: Java 应用程序具有在 JVM(Java 的虚拟运行时环境)上运行的灵活性,而 JavaScript仅在特定于浏览器的特定于应用程序的环境中运行。
  • 对象: Java 对象纯粹是基于类的,而 JavaScript 对象是基于原型的。
  • 类型检查: Java 确保在编译前对其变量和函数进行强类型检查,这使得运行或编译时运行的概率非常低。然而,JavaScript是弱类型的,变量的类型在编译之前是未知的,因此,运行或编译时错误的机会增加。
  • 多线程: Java 支持多线程(同时执行两个或多个线程以最大限度地利用 CPU),而 JavaScript 不支持。
  • 内存使用:由于 Java 有很多内容,所以它占用更多的空间,而 JavaScript 占用的空间更少。
  • 语言依赖:两种语言都可以独立工作,也可以与其他语言配对。
  • 并发方法: Java 利用其多线程能力并具有基于线程的方法,而 JavaScript 则遵循事件驱动的方法。
  • 性能:由于其参与的性质,脚本语言总是比纯编程语言更有效,因此,与 JavaScript 相比,Java 效率较低且速度较慢。

编程语言脚本语言有什么不同?

脚本语言是编程语言的子集 通常来讲,我们一般把通常通过程序、虚拟机来解释执行,而不是编译后执行的语言叫做脚本语言。脚本语言通常比较动态,通常执行相比于编译语言较慢,通常代码规模不会很大(聚焦在批量处理),通常入门门槛较低。而编程语言范围更广,指的是通过指令来命令计算机进行某种运算或输出,指令本身就是编程语言。脚本语言是编程语言的一种形式。

编译语言是直接编译为机器码执行的;而脚本语言有可能编译为机器码,但更多情况下不直接编译为机器码,而是直接翻译为编译语言(通常是C)的内部结构,然后直接在宿主语言的可执行程序下调用;

聊一下原型链

类组件和hook函数的不同

面试官认为hook函数使一个业务的代码更聚焦,能够完整实现一段业务逻辑,但类组件因为生命周期的原因会把一个业务分成很多块代码来处理,比较零碎

命令式 VS 声明式

在 Class 组件中,通常的写法是在生命周期检查 props 和 state,如果改变或者是符合某个条件就触发xxx副作用。在函数式组件中使用 Hooks 的写法是组件有xxx副作用,这个副作用依赖的数据是 props 和 state。一个是被动触发,一个是主动声明。

去生命周期化

在 hooks 组件中使用 useEffect 取代了类组件生命周期的调用,使得“生命周期”变成了一个“底层概念”,因此开发者能够将精力聚焦在更高的抽象层次上。 react 开发者认为生命周期使得逻辑过于分散,且代码重复率较高;使用 hooks 能够将逻辑进行聚合,代码量更少;

去 this 化

this 的问题: 1)需要使用 bind 方法绑定,bind 方法会创建一个新函数,影响性能 2)虽然可以使用箭头函数避免这种难看的写法,但仍然会创建一个新函数,对性能有影响 3)通过 this.props 每次都会取到最新的 props,有时候会导致视图错误的渲染 在 hooks 组件中,没有用 this 来获取 props,直接以参数的形式传递,因此只会在当前状态生效。

代码聚焦的问题

比如在处理缓存的时候,如何确保缓存的key值不冲突,可以把他们都写在一个文件里,避免重复与冲突。这样代码的逻辑能够实现聚焦,处理问题也可以更集中

webpack和node有什么关系

node和浏览器在处理JS的时候有什么不同

很明显,node里面没有dom(我真的get不到这个面试官的点,但我能感觉出来他真的很讨厌那些八股文问题)

git处理冲突的逻辑

多人协作写代码时如何提高代码的可读性

项目里面都有哪些文件夹,每个文件夹都在处理什么

在处理一个业务需求的时候,要关注哪些点

1px的处理

这场面试可以深入去思考的问题:

如何解决CSS中类名冲突的问题——

  1. 将最外层的父组件类名写到一个文件中去管理,避免重复
  2. 使用less里面的嵌套等功能
  3. 使用scope