前端高频面试--查缺补漏篇

2024-03-04 08:52

本文主要是介绍前端高频面试--查缺补漏篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是进程和线程,有什么区别

进程:进程是程序的一次执行过程,是动态的过程,有自身产生、存在、消亡的过程。

线程:线程由进程创建,是进程的一个实体。一个进程可以拥有多个线程。

举个例子:
一个公司是一个进程,公司里面各个项目组都是一个线程。
再比如,如果吃饭是一个进程,那么夹菜、吃菜、咀嚼、吞咽都是线程。
 


前端网络攻击有哪几种模式以及怎样预防

1. XSS攻击
XSS指跨站脚本攻击,攻击者通过向网站注入恶意代码实现攻击,当用户浏览这个页面时,就会执行这些恶意代码。可能造成泄露用户登陆信息cookie,恶意跳转等。
预防XSS攻击的方法:
1. 对注入的代码启动HTML编码。
2. 过滤非法字符。
3. 设置cookie属性http-only,防止js脚本读取cookie。

2. CSRF攻击
CSRF攻击叫做跨站请求伪造,通过盗用用户的身份信息发起请求。诱导用户跳转到新页面,如果目标站点只使用cookie,并且kookie是允许跨域的,此时就能拿到用户的cookie,来模拟用户进行操作。
预防CSRF攻击的方法:
1. 增加用户与页面交互操作,例如页面增加随机数字验证码。
2. 使用token来认证。
3. 设置cookie规定其他网站不能使用本网站的cookie。

浏览器缓存机制

浏览器缓存分为:强制缓存和协商缓存。

强制缓存:
定义:当浏览器去请求某个文件的时候,服务端就在响应头里面对该文件做了缓存规则配置。
设置:控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Control优先级比Expires。
Expires:服务器返回该请求结果缓存的到期时间,如果发送请求时客户端的时间小于Expires的值,直接使用缓存结果。
Cache-Control属性:
public:所有内容都缓存
private:默认值,所有内容只有客户端可以缓存
no-cache:客户端缓存内容,是否使用缓存需要协商缓存来决定
no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
max-age=xxx:缓存内容将在xxx秒后失效

协商缓存:
强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存就叫协商缓存。
协商缓存主要还是看ETagLast-Modified,Last-Modified是文件的修改时间;Etag是当前返回资源的唯一标识。

不能被缓存的请求
1. post 请求无法被缓存。(缓存一般会对不更改数据库的数据进行缓存,对于更改数据的数据一般不进行缓存。所以get请求会被缓存,post请求不会进行缓存)
2. http响应头中不包含Last-Modified/ETag,也不包含Cache-Control/Expiress的请求。
3. http信息头明确设置Cache-Control:no-cache 或 Cache-Control:max-age=0时。


http和https基本概念、区别

概念:
http:超文本传输协议,是互联网应用最为广泛的一种网络协议。
https:HTTP的安全版。即HTTP下加入SSL层。

区别:
1. http是明文传输,https是加密传输。
2. http标准端口是80,http是443。
3. https需要证书认证,http不需要。
4. http连接简单,是无状态的;https是可进行加密传输、身份认证的网络协议,比http更加安全。

常见的http请求有哪些

GET:请求从服务器获取特定资源
POST:在服务器上创建一个新的资源
DELETE:从服务器删除特定的资源
PUT:更新服务器上的资源

GET和POST区别:
1. GET参数通过URL传递,POST放在请求体中。
2. GET参数会直接暴露在URL上,不能放敏感信息,POST相对于GET更安全。
3. GET请求在URL中传送的参数是有长度限制的。

HTTP常见状态码

2开头:成功状态码
200请求成功

3开头:重定向状态码
301:永久移动
302:临时移动
304:走缓存(第一次成功状态码为200,第二次F5刷新为304。按Ctrl+F5强制刷新为200)

4开头:客户端错误状态码
400:请求语法报错,或者请求参数有误
401:未授权的请求,无权限访问(身份验证错误)
403:禁止访问
404:找不到资源,一般为路径错误

5开头:服务器错误状态码
500:服务器错误
503:服务不可用


TCP三次握手与四次挥手

TCP三次握手和四次挥手实质是TCP通信的连接断开
三次握手:
第一次:客户端->服务端,发送SYN标志,表示请求建立新连接。
第二次:服务端->客户端,回传SYN和ACK,表示我收到了,并且同意连接。
第三次:客户端->服务端,回传ACK标志,表示我知道你收到了。

四次挥手:
第一次:客户端->服务端,发送FIN标志,表示客户端不再发送数据了。
第二次:服务端->客户端,回传ACK响应确认,服务器进入CLOSE_WAIT状态,在第三次挥手之前数据还是可以从客户端传送到服务端的。
第三次:服务端->客户端,服务端完成数据请求后,向客户端发送FIN标志,表示服务端也不再发送数据了。
第四次:客户端->服务端,回复ACK响应确认,此时客户端处于TIME_WAIT状态,需要经过一段时间确保服务器收到自己的应答报文后,才会进入CLOSED状态。

为什么要三次握手不是两次握手:
是为了确保双方都能够收到对方的请求和应答,建立可靠的连接。如果只有两次握手,那么无法确定客户端和服务器端都已经同意建立连接。
打个比方,约我想约好朋友出来玩,我先发送消息告知:我想和你出来玩。朋友回复:好啊,一起出来玩。我再发送:那我们现在出门吧。如果只发送两次,第二次我能知道她同意出来玩了,但是她并不知道我是否知道她同意出来玩。

为什么握手三次,挥手却要四次:
四次挥手之所以是四次,是因为在TCP中数据的传输是双向的,每一方都需要单独关闭连接,而且可能还存在未传输完的数据段和对方的ACK报文,因此需要四次握手来确保双方的连接被正确关闭。

WebPack是什么,谈谈你对他的理解

webPack可以看做是模块的打包机器:它能分析项目结构,找到浏览器不能直接运行的拓展语言,例如:Scss,TS等,并将其打包为合适的格式以供浏览器使用。

对于不同类型的资源,webPack有对应的模块加载器:loader
CSS:
解析CSS的css-loader、style-loader,
解析less的less-loader,sass的sass-loader,

JS:
解析将 TypeScript 转换成 JavaScript的ts-loader,
解析ES6为ES5的babel-loader,
解析JavaScript 代码规范的eslint-loader

vue:vue-loader

静态资源:url-loader、file-loader、json-loader

如何利用webpack优化前端性能:
1. 压缩代码,删除多余代码。
2. 利用CDN,将静态资源上传到CDN上。
3. 提取公共代码。

WebSocket了解吗

WebSocket是一种客户端和服务端通信的方式。服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。

由于websocket会断开,需要有断开重连机制,可以使用reconnecting websocket,它是一个websocketd的js库,非常小,压缩后仅有3KB。当websocket断线后会自动帮你重连。使用非常简单,new WebSocket替换成new ReconnectingWebSocket即可。

常用的属性和方法:
readyState:连接的四种状态。1表示连接成功。
onopen:连接成功后的回调函数
send:向服务器发送数据
onmessage:收到服务器数据后的回调函数。
onclose:连接关闭后的回调函数。

var ws = new WebSocket("wss://echo.websocket.org");ws.onopen = function(evt) { console.log("Connection open ..."); ws.send("Hello WebSockets!");
};ws.onmessage = function(evt) {console.log( "Received Message: " + evt.data);ws.close();
};ws.onclose = function(evt) {console.log("Connection closed.");
};

这篇关于前端高频面试--查缺补漏篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',