前端面试题

685 阅读8分钟

简历篇

基本资料

  • 第一栏尽量简洁明了概括基本信息
  • 姓名
  • 联系方式
  • 工作经验
  • 学历
  • 求职意向
  • 英语证书

技能

  • 熟练使用前端三剑客(HTML、CSS、JavaScript)
  • 熟练使用一门JS框架(React或VUE)
  • 熟练使用一门CSS插件(Less或Sass)
  • 熟悉或了解过一门模块打包工具(WebPack或Vite)
  • 熟悉Git的常规操作,多人合作开发
  • 熟悉使用前后端交互(axios、fetch)
  • 了解一门后端语言
  • 根据需要去面试的公司条件再添加一些技能

公司经历

  • 公司名称
  • 在职时间
  • 担任职务
  • 公司简介
  • 项目技术

项目经历

  • 项目名称
  • 项目介绍
  • 项目技术

教育经历

  • 学校名称
  • 学校性质(本科、专科)
  • 在校时间

计算机与浏览器常识篇

计算机常识

三次握手和四次挥手

  • 第一次握手,发送端首先发送一个带SYN(synchronize)标志的数据包给接收方,第一次的seq序列号是随机产生的,这样是为了网络安全,如果不是随机产生初始序列号,黑客将会以很容易的方式获取到你与其他主机之间的初始化序列号,并且伪造序列号进行攻击
  • 第二次握手,接收端收到后,回传一个带有SYN/ACK(acknowledgement)标志的数据包以示传达确认信息SYN 是为了告诉发送端,发送方到接收方的通道没问题;ACK 用来验证接收方到发送方的通道没问题
  • 第三次握手,发送端再回传一个带ACK标志的数据包,代表握手结束,若在握手某个过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包

浏览器常识

输入URL到页面渲染的过程

  • 通过DNS解析获得网址的对应IP地址
  • 浏览器与远程web服务器 通过TCP三次握手协商来建立一个 TCP/IP 连接
  • 浏览器 通过TCP/IP连接 向web服务器 发送一个 HTTP 请求
  • 服务器的永久重定向响应
  • 浏览器跟踪重定向地址
  • 服务器处理请求
  • 服务器返回一个 HTTP 响应
  • 浏览器渲染:解析HTML、解析CSS、解析JS、Render树

HTTP和HTTPS

HTTP:

  • 不安全
  • 协议对客户端没有状态存储【没有状态】
  • 每次请求需要TCP三次握手四次挥手,和服务器重新建立连接【没有连接】
  • 基本的特性,由客户端发起请求,服务端响应
  • 简单快速、灵活
  • 使用明文、请求和响应不进行确认

HTTPS:

  • 安全
  • HTTP安全版本,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
  • 采用混合加密技术,传输过程无法直接查看明文内容【传输加密】
  • 通过证书认证客户端访问的是自己的服务器【身份认证】
  • 传输过程防止被篡改【数据完整】

HTML篇

H5新增的语义化标签

  • 头部标签:header
  • 导航标签:nav
  • 相似组合块标签:section
  • 主标签:main
  • 内容区域标签:article
  • 声明标签:small
  • 挂件标签:aside
  • 下标标签:sub
  • 上标标签:sup
  • 强调语义标签:strong
  • 进度标签:progress(value:当前进度 max:总进度)
  • 删除线标签:del
  • 现价标签:ins
  • 时间标签标签:time
  • 尾部标签:footer
  • 视频标签:video
  • 音频标签:audio

Canvas和SVG

  • Canvas 是H5中新增的标签
  • Canvas 主要是用笔刷来绘制 2D 图形的
  • SVG 即可缩放的矢量图形(放大或者缩小不会失真的图形)
  • SVG 节点过多时渲染慢,Canvas 性能更好一点,但写起来更复杂
  • SVG 支持分层和事件,Canvas 不支持(当前有插件库可以用实现)

行内标签和块级标签

  • 块级标签:独占一行,对宽高的属性值生效,如果不给宽度,块级元素就默认为浏览器的宽度,即就是100%宽
  • 行内标签:可以多个标签存在一行,完全靠内容撑开宽高
  • 常用行内标签:a、span、em、strong、b、i、u、label、br ... ...
  • 常用块级标签:p、div、ul、ol、li、dl、dt、dd、h1~h6、form ... ...

iframe(文档的内联框架)

  • 浏览器得不到支持,iframe 是不可见
  • 可以设置这个标签的src实现嵌套另一个网页

img标签属性

  • 宽高:width、height
  • 悬浮标题:title
  • 未找到图片源的文本:alt
  • 图片源:src

标签的搜索引擎优化(SEO)

  • 标题标签的使用,h1标签只能出现一次,它是当前页面的主标题。
  • strong标签的使用,strong标签对关键词的强调作用仅次于标题标签,用于加粗段落标题或是重点关键词
  • title标签可以让搜索引擎更容易找到网站
  • meta标签设置 name=“descriptiion” content=“网站描述”
  • meta标签设置 name=“keywords” content=“网站关键词”

html全局属性

常用全局属性有:class、hidden、id、lang、style、title、dir、contenteditable等等

CSS篇

JavaScript篇

基础类型

  • null、undefined、boolean、number、string、symbol、bigInt

VUE篇

React篇

类组件生命周期

  • constructor() // 初始化state
  • componentWillMount() // 组件被挂载在DOM之前调用
  • componentDidMount() // 挂载在DOM之后调用
  • componentWillReceiveProps() // 由props引起的组件更新过程中被调用
  • shouldComponentUpdate() // 用于决定组件是否继续执行更新过程,优化组件的性能
  • componentDidUpdate() // 组件更新之后被调用
  • render() // 渲染UI
  • componentWillUnmount() // 组件卸载阶段

hooks钩子函数

  • useState();
  • useMemo();
  • useEffect();
  • useContext();
  • useRef();
  • useCallback();

虚拟DOM实现原理?

  • 虚拟DOM是对真实DOM的抽象
  • 状态变更时,记录新树和旧树的差异
  • 通过key值和真实DOM进行比较后更新到真正的dom中

setState到底是异步还是同步?

  • 在代码的本身是同步的,但是在合成事件和钩子函数没法立马拿到值,所以成了“异步”
  • setState(partialState, callback),第二个参数可以拿到更新后的结果
  • setTimeout 中是同步的

React组件通信

  • 父传子:通过props传参
  • 子传父:通过props传入一个回调
  • 全局传参:推荐使用Redux、Mobx... ...

redux的几个核心概念

  • Store:保存数据的地方,你可以把它看成一个容器,整个应用只能有一个Store。
  • State:Store对象包含所有数据,如果想得到某个时点的数据,就要对Store生成快照,这种时点的数据集合,就叫做State。
  • Action:State的变化,会导致View的变化。但是,用户接触不到State,只能接触到View。所以,State的变化必须是View导致的。Action就是View发出的通知,表示State应该要发生变化了。
  • Action Creator:View要发送多少种消息,就会有多少种Action。如果都手写,会很麻烦,所以我们定义一个函数来生成Action,这个函数就叫Action Creator。
  • Reducer:Store收到Action以后,必须给出一个新的State,这样View才会发生变化。这种State的计算过程就叫做Reducer。Reducer是一个函数,它接受Action和当前State作为参数,返回一个新的State。
  • dispatch:是View发出Action的唯一方法。

redux与mobx的区别?

  • redux将数据保存在单一的store中,mobx将数据保存在分散的多个store中

  • redux使用plain object保存数据,需要手动处理变化后的操作;mobx适用observable保存数据,数据变化后自动处理响应的操作

  • redux使用不可变状态,这意味着状态是只读的,不能直接去修改它,而是应该返回一个新的状态,同时使用纯函数;mobx中的状态是可变的,可以直接对其进行修改

  • mobx相对来说比较简单,在其中有很多的抽象,mobx更多的使用面向对象的编程思维;redux会比较复杂,因为其中的函数式编程思想掌握起来不是那么容易,同时需要借助一系列的中间件来处理异步和副作用

  • mobx中有更多的抽象和封装,调试会比较困难,同时结果也难以预测;而redux提供能够进行时间回溯的开发工具,同时其纯函数以及更少的抽象,让调试变得更加的容易

什么是高阶组件

  • 高阶组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧
  • 高阶组件是参数为组件,返回值为新组件的函数
  • 高阶组件是一个函数(而不是组件),它接受一个组件作为参数,返回一个新的组件
  • 高阶组件有助于提高我们代码的灵活性,逻辑的复用性

webpack篇

Git运用篇

项目深度(开发经验)

学习能力(社区及常规问题解决方案)

社区

  • 掘金
  • 知乎
  • gitHub
  • stackoverflow
  • gitee

解决问题的方案

  • 查看官方文档
  • 先去社区查找是否有人遇到相同的问题
  • 跟开发同事讨论该功能是否可以变动(考虑开发成本)
  • 跟产品了解是否有备用方案

谈资技巧