背景
当经理过各种技术面试后,我们会发现各个公司的面试题目都五花八门,有些公司可能会比较规范,有一定的出题规律可循,而有些公司则完全按照面试官的个人爱好出题。这时候,你可能会遇到一个非常熟悉而又陌生的问题,“xxx技术是什么?”当你面对这个问题时,你会怎么回答呢?
前几天,我问了一个朋友,如果面试官问你“React是什么?”,他脱口而出:“React是用于构建用户界面的JavaScript库,一个网页UI框架,它的特点是声明式、组件化、一次学习随处编写。”我听完之后,感觉他的回答非常skr~,毫无疑问他已经很好地回答了这个问题。
据朋友说他在面试大厂的时候其实也遇到过这个题目,因为他在自己的简历上写了精通 React , 所以面试官第一个问题就是问他“ React 是什么?”。然后他就是像前面说的那样回答的,感觉题目很简单,也没多说什么,然而他在当时面试结束后,感觉面试官对他的这个回答不是很满意。
所以对于这样的简单问题,如何回答才能让面试官满意呢?或者说如何回答这个问题,才能让从来都没有接触过 React 的人知道 React 是一个什么?。我在网络上也看了很多人对这个问题的回答,总结了一下思路,可以从以下方面来回答这个问题:
- React 的本质
- React 出现的背景,为什么出现?解决什么问题?
- React 的用途
- React 的核心思想,他的优点是什么?
- 反过来想想它的缺点
通过这篇文章,你将知道这一类问题怎么回答。我们这篇文章以 React 为例。
1. React 的本质
React 本质上是js,但是react自己用创造了一个表达式,即JSX表达式。
2. React 出现的背景
React是Facebook在2013年开源的一款前端框架,在这之前,Facebook工程师开发一个简单功能时,如下图界面中“小红点”功能:
在导航栏中有“新好友”、“新消息”和“新动态”三个功能按钮,这其实功能挺简单,但却经常出BUG,比如“收到新消息后,新消息的图标上数字没有正确更新”等问题。「他们找寻出现这种问题的深层次原因」,最终总结为两个原因:「工程师太过关注UI层面的细节操作」,「应用程序的状态较为分散,无法追踪和维护」。
再介绍下React出现的时代背景:「大量业务逻辑由后端转为前端实现」,即前后端分离;已有前端框架开发的「复杂应用性能不佳」。
当时由于Ajax技术兴起,大量原来由服务端处理的逻辑,慢慢转移到前端做处理,这也是为了追求更流畅的Web交互体验。后来为了「提升开发效率和应用性能」,开始有很多大型前端框架出现(如:AngularJS),这些框架也让工程师们越来越关注UI层面的操作(如:频繁操作DOM),「应用性能越来越差」,并伴随无法预知的BUG出现。
之后Facebook工程师开始打造自己的前端框架,解决前面说的那些问题,于是React就诞生啦~
3. React 的用途
然后说 React 的用途,由于 React 虚拟 DOM 的关系,在用途上非常的丰富。
- 无论是 PC 还是移动端,都是支持的。
- React Native 既可开发 iOS 也可开发安卓。
- React 360 可开发 VR。
- 冷门的 ink,也可以使用 React 开发命令行。
4. React 的核心思想,他的优点是什么?
说完用途,在讲讲核心思想,也就是 React 的优点,很多人在面试时,经常在把自己知道的源码乱说一气,来证明自己对 React 很了解。其实个人感觉说源码还不如说说它核心思想是什么。它的优点是什么。
①. 声明式
React 使创建交互式 UI 变得轻而易举。为你应用的每一个状态设计简洁的视图,当数据变动时 React 能高效更新并渲染合适的组件。以声明式编写 UI,可以让你的代码更加可靠,且方便调试。
②. 组件化
构建管理自身状态的封装组件,然后对其组合以构成复杂的 UI。由于组件逻辑使用 JavaScript 编写而非模板,因此你可以轻松地在应用中传递数据,并保持状态与 DOM 分离。
③. 通用性
无论你现在使用什么技术栈,在无需重写现有代码的前提下,通过引入 React 来开发新功能。React 还可以使用 Node 进行服务器渲染,或使用 React Native 开发原生移动应用。
5. 反过来想想它的缺点
最后还是要客观的来看待,反过来想想 React 有什么缺点,所有的东西肯定有缺点,没有完美的东西。React 也一样。React 的优点就是React 的核心思路,声明式,组件化,通用性。缺点了,个人觉得对于一个开发者来说,当我使用完 Vue 之后再来使用 React,你会发现 React 并不是一个完全体,当你在开发一个应用时,很多东西你都需要去社区寻求并找到解决方案,这对于研发者来说,需要投入学成本。但是这其实在某些角度来看,这也并不算缺点,这间接的让 React 社区蓬勃发展。
总结
文章回答了最开始的问题 ”React 是什么?“。通过以 React 为例,可以延伸到这一类问题,如:
- React 是什么?解释 React 是什么?你了解 React 吗?谈一谈你对 React 的理解?
- 说说什么是 Vue?你了解 Vue 吗?
- xxx 技术是什么?你对 xxx 技术了解吗?
这一类问题其实大致都可以套用下面这个图的思路来回答,从本质、背景,到用途、核心、优缺点。