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和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We