2022年校招前端开发面经总结(高频),适合基础好的同学

本文主要是介绍2022年校招前端开发面经总结(高频),适合基础好的同学,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2022年前端开发面经总结(高频)

博主是23届的毕业生,目前在秋招阶段,总结一下近两个月来面试遇到的高频面经吧,以下回答网上的标准答案太多了,这里就写博主自己的理解吧
下面只介绍了高频题目,适合基础比较好的同学冲刺一下,基础不是很牢的我推荐CSDN博主 zh阿飞 的博客 前端面试题整理
一些重要的术语加粗标记了,注意注意!!

一、计算机网络和浏览器部分

1、介绍一下http协议的发展

1.0

  • 短连接,每次请求都需要客户端与服务器之间建立一次连接,即三次握手和四次挥手的过程,十分耗费时间。

1.1

  • 长连接,得益于管道技术的使用,建立一次连接,可以持续传输请求和响应,请求头内的Connection: keep-alive字段。虽然允许多个请求或响应发送,但须按序处理并按序返回,引发队头阻塞问题。
  • 缓存策略,新增强缓存协商缓存,由响应头内的cache-control、expires、no-store、no-cache等字段控制。
  • range头域,允许只请求资源的某一部分,通过range字段来设置请求资源的字节范围

2.0

  • 以帧的形式传输数据,用有效序列标识帧属于哪一个流,每个流代表一个请求或响应。
  • 多路复用,允许并发多个请求,允许先完成的请求先响应给客户端,避免了队头阻塞的问题。
  • 头部压缩,通讯双方各保存一份头部信息表,第一次请求时将请求头所用的字段保存到表中,后续的请求只发送与之前请求有差异的部分,对于重复的请求字段,只需告知服务器所需的重复字段,服务器直接从头部信息表中读取即可。

2、https的实现流程

趁着这个机会简单的讲一下,网上有些写的篇幅太长了,我这里做个简述

1、客户端请求服务器,携带 随机数R1 并告知服务器自己支持哪些会话密钥生成算法(对称加密算法)
2、服务器向CA机构请求一个 证书证书私钥C1
3、服务器生成服务器 公钥1、服务器 私钥1
4、服务器将 公钥1 和相关的 源数据 放入证书,并使用一种 加密算法(如MD5) 对源数据进行加密,得到 签名(数据摘要),随后使用 证书私钥C1 对证书进行加密,将 签名、证书、加密算法、会话密钥生成算法随机数R2 一同发送给客户端
5、客户端用 内置的证书公钥 对证书进行解密,得到 证书,并使用 同一种加密算法 对证书中的源数据进行加密,得到 新的签名(数据摘要),若两个签名一致,说明原数据没有被篡改。
6、客户端生成 随机数R3,使用服务器 公钥1 加密R3,并发回给服务器
7、客户端使用 会话密钥生成算法 将R1、R2、R3生成 对称加密密钥
8、服务器收到R3后,将R1、R2、R3使用会话密钥生成算法生成对称加密密钥
9、双方通信时使用该对称加密密钥对数据进行加密 (整个https流程都是为了这个对称加密密钥)

3、说一下http缓存

  • 强缓存,服务器开启强缓存,客户端会将第一次请求响应的资源、响应头中的expires字段保存在本地,其中expires字段设置了强缓存资源的过期时间。当后续客户端再请求资源时,会对比本地时间与expires过期时间,如果过期,则需要重新向服务器发起对资源的请求,否则直接使用本地保存的资源。
  • 协商缓存,举个栗子,服务器开启协商缓存,客户端会将第一次请求响应的资源保存在本地,并将资源版本信息(E-Tag = 111、Last-Modified-Since = 2018.6.3 )保存在浏览器缓存表中,客户端第二次请求时会先请求浏览器缓存表中的缓存信息,在请求头中加入字段(If-None-Match = 111、If-Modified-Since = 2018.6.3),服务器获取之后比对E-Tag、Last-Modified-Since字段,若一致则返回304代码,客户端收到304后,直接使用本地缓存,否则返回新资源,客户端将新资源保存在本地,并将新E-Tag = 112、Modified-Since = 2018.6.8 存入浏览器缓存表。

4、输入URL跳转时的过程和TCP三次握手四次挥手

在我的面试经历中问的不多,但也是重点,网上很多相关知识,我就直接引用了CSDN用户 cute_ming 的博客了

浏览器输入url到页面展示出来的全过程(含TCP三次握手四次挥手)

5、什么是跨域?影响了什么?怎么解决?

跨域:浏览器的同源策略对资源请求和响应做出的限制,所谓同源是指"协议+域名+端口"三者相同,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。

同源策略限制内容有:

  • Cookie、LocalStorage、IndexedDB 等存储性内容
  • DOM 节点
  • AJAX 请求发送后,结果被浏览器拦截了

跨域解决方案

  • 前端正向代理服务器
  • JSONP,动态创建script标签,请求一个带参网址实现跨域通信
  • nginx反向代理
  • CORS,服务器设置 Access-Control-Allow-Origin 即可
  • websocket

6、说一下事件循环(event-loop)

首先,JS是单线程的,在JS代码的执行过程中,会将同步代码放入执行栈中,将异步代码放入异步队列。执行栈中的同步代码依次执行,当执行栈为空时,轮询异步队列,异步队列中的由于类型不同,又分成宏任务队列和微任务队列,且微任务队列优先级高于宏任务队列,所以微任务队列里的任务的同步代码会先被放入执行栈中执行,再处理宏任务队列中的任务,每执行完一个宏任务,都会去执行微任务队列里的任务。如此轮询执行,直到所有队列为空。
下面放一个图帮助大家理解。
在这里插入图片描述

二、JS部分

1、JS中的数据类型有哪些?

  • 基本数据类型: String、Number、Boolean、Null、undefined、Bigint、Symbol
  • 引用数据类型:Object、Array、Map、Set

2、说一下原型链是什么

首先,从构造函数new出来的一个实例对象,都有一个属性 __proto__指向 构造函数的prototype属性,该构造函数的ptototype属性称为 原型对象,原型对象中具有 constructor 属性指向构造函数,同时具有一个__proto__属性指向 Object构造函数的prototype 属性(因为该原型对象也是通过Object构造函数new出来的),Object的原型对象上的__proto__属性指向 null。从开头的构造函数new出来的实例对象,到最终的null,中间存在原型指向的链式结构,称为原型链。
下面放一个图帮助大家理解。
在这里插入图片描述

3、new关键字的实现过程

1、生成一个空对象
2、将该空对象的原型设置为构造函数的prototype对象(也就是空对象的__proto__指向构造函数的prototype属性)
3、让函数的this指向这个对象,执行构造函数的代码(为这个新对象添加属性)
4、判断函数的返回值类型,如果是基本数据类型,返回创建的对象。如果是引用数据类型,就返回这个引用类型的对象。

4、ES6有哪些新特性

  • let和const
  • Map和Set
  • Bingint和Symbol
  • async和await
  • Promise
  • class
  • 箭头函数
  • 拓展运算符
  • 模板字符串

5、说说你对闭包的理解

闭包是一个定义在函数内部的函数,它能够访问上层函数作用域中的变量,使其不被回收,这就是闭包。
闭包常见的应用场景有:节流、防抖、函数柯理化
节流和防抖函数可以写写,函数柯理化比较偏,有兴趣可以学学

6、说说你进行数据深拷贝的几种方式

  • JSON.parse(JSON.stringify(obj))
  • 第三方库函数,如lodash库的clonedeep()
  • 手写深拷贝
function cloneDeep(obj){let newObj// 是对象,进行深拷贝if(typeof obj == 'object' || obj != null){// 判断一下obj是对象还是数组newObj = obj instanceof Object ? {} : []// 对源数据中的属性遍历,递归深拷贝for(let i in obj){newObj[i] = cloneDeep(obj[i])}}//不是对象,则直接赋值else{newObj = obj}return newObj
}

三、Vue部分

1、Vue生命周期

直接放图,大家看吧,最好背的滚瓜烂熟,一般问vue开头就是生命周期,把这个给面试官讲的仔仔细细,面试官大概不会为难你后面的vue的知识了,因为他会觉得你vue学的不错
在这里插入图片描述

2、Vue 组件间的传值的几种方式

  • 父子组件 props / emit
  • 祖孙组件 $attrs / $listeners
  • 父子、祖孙都能用的 provide / inject
  • 所有组件共用的 vuex、Vue2全局事件总线(eventBus)、Vue3全局事件总线(mitt)、localStorage

3、Vue中key的作用

简单点说就是高效更新虚拟dom。具体是怎么做的呢,会的已经想起来了,不会的看视频吧。
尚硅谷vue课程 P30讲的就是key

这篇关于2022年校招前端开发面经总结(高频),适合基础好的同学的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/422366

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push