IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> DAY21刷面试题 -> 正文阅读

[网络协议]DAY21刷面试题

GET和POST的区别

可缓存/不可缓存
get请求是幂等的,用于对服务器资源不会产生影响的场景(请求一个网页的资源),get请求的数据是可以缓存的;
post请求不幂等,用于对服务器资源会产生影响的情景,查询对数据有副作用(注册用户这一类),是不可缓存的。
传参
get传参,参数在url中
post传参,参数在请求体中
安全性
get较为不安全;
post较为安全;
准确的说两者都不安全,都是明文传输的,在路过公网的时候都会被访问到,不管是url还是header还是body,都会被访问到,要想做到安全,就需要使用https。
参数长度
get参数长度有限,是比较小的;
post传参长度不受限制。
发送数据
post传参发送两个请求包,一个是请求头一个是请求体,请求头发送后服务器进行验证,验证通过就会给客户端发送一个100-continue的状态码,然后就会发送请求体。
字符编码
get在url上传输的时候只允许ASCII编码。

浏览器和服务器对GET方法中URK长度限制的范围

IE浏览器URL最大限制为2083个字符
Firefox浏览器URL最大限制为65536个字符
Safari浏览器URL最大限制为80000个字符
Opera浏览器URL最大限制为190000个字符
Google浏览器URL最大限制为8182个字符

主流的服务器对get方法中url的长度限制范围:

  • Apache (Server):能接受最大url长度为8192个字符。
  • Microsoft Internet Information Server(IIS):能接受最大url的长度为16384个字符。

所以说浏览器URL最长不能超过2083个字符才能在所有浏览器和服务器正常工作。

常见的HTTP请求方式

  • GET:向服务器获取数据
  • POST:将实体提交到指定的资源,通常会造成服务器资源修改
  • PUT:上传文件,更新数据
  • DELETE:删除服务器上的对象
  • HEAD:获取报文首部,与GET对比,不返回报文主体部分
  • OPTIONS:询问支持的请求方法,用来跨域请求
  • CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信
  • TRACE:显示服务器收到的请求,主要用于测试或者诊断

DNS协议

DNS是域名系统系统的缩写,提供的是一种主机名到IP地址的转换服务,是一个由分层的DNS服务器组成的分布式数据库,定义了主机如何查询到这个分布式数据库的方式的应用层协议。能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

DNS服务器解析域名的过程

  • 首先在浏览器的缓存中查找对应的IP地址,查到直接返回,查不到下一步
  • 将请求发送给本地DNS服务器,在本地域名服务器缓存中查询,查到返回,查不到下一步
  • 本地DNS服务器想根域名服务器发送请求,根域名服务器会返回一个所查询的顶级域名服务器地址
  • 本地DNS服务器向顶级域名服务器发送请求,接受请求的服务器查询自己的缓存,如果有记录,就返回查询结果,如果没有就返回相关的下一级的权威域名服务器的地址
  • 本地DNS服务器向权威域名服务器发送请求,域名服务器返回对应的结果
  • 本地DNS服务器将返回结果保存在缓存中,便于下次使用
  • 本地DNS服务器将返回结果返回给浏览器

常见的浏览器内核

(1) IE 浏览器内核:Trident 内核,也是俗称的 IE 内核;

(2) Chrome 浏览器内核:统称为 Chromium 内核或 Chrome 内核,以前是 Webkit 内核,现在是 Blink内核;

(3) Firefox 浏览器内核:Gecko 内核,俗称 Firefox 内核;

(4) Safari 浏览器内核:Webkit 内核;

(5) Opera 浏览器内核:最初是自己的 Presto 内核,后来加入谷歌大军,从 Webkit 又到了 Blink 内核;

(6) 360浏览器、猎豹浏览器内核:IE + Chrome 双内核;

(7) 搜狗、遨游、QQ 浏览器内核:Trident(兼容模式)+ Webkit(高速模式);

(8) 百度浏览器、世界之窗内核:IE 内核;

(9) 2345浏览器内核:好像以前是 IE 内核,现在也是 IE + Chrome 双内核了;

(10)UC 浏览器内核:这个众口不一,UC 说是他们自己研发的 U3 内核,但好像还是基于 Webkit 和 Trident ,还有说是基于火狐内核。

v-router路由的hash模式和history模式的区别

1)hash模式
hash魔兽是开发中默认的模式,他的URL带着一个#,www.zj.com/#/vue,他的hash值就是#/vue
hash值会出现在URL里面,但是不会出现在http请求中,对后端没有影响。所以改变hash值,不会重新加载页面。这种模式的llq支持度很好,低版本IE浏览器也支持。
hash路由被称为是前段路由,已经是spa的标配。
原理
hash模式的主要原理就是onhashchange()事件

window.onhashchange = function(event){
	console.log(event.oldURL, event.newURL);
	let hash = location.hash.slice(1);
}

在页面的hash值发生变化时,无需向后盾发起请求,window就可以监听事件的变化,并按规则加载相应代码。hash值变化对应的url都会被浏览器记录下来,这样浏览器就能实现页面的前进和后退;虽然没有请求后端服务器,但是页面的hash值和对应的URL关联起来了。

2)histroy模式
histroy模式的URL中没有#,使用的是传统的路由分发模式;用户在输入一个url时,服务器会接收这个请求,并解析这个url,然后做出相应的逻辑处理。
当使用history模式时,URL就像这样:abc.com/user/id相比hash模式更加好看。但是,history模式需要后台配置支持。如果后台没有正确配置,访问时会返回404。
切换历史状态: 包括forward()back()go()三个方法,对应浏览器的前进,后退,跳转操作。

如果想要切换到histroy模式,就要进行以下配置(后端也要进行配置):

const router = new VueRouter({
  mode: 'history',
  routes: [...]
})

vue子组件和父组件执行顺序

加载渲染过程
1、父组件beforeCreate
2、父组件created
3、父组件beforeMount
4、子组件 beforeCreate
5、子组件created
6、子组件beforeMount
7、子组件mounted
8、父组件mounted

更新过程
1、父组件beforeUpdate
2、子组件beforeUpdate
3、子组件updated
4、父组件updated

销毁过程
1、父组件beforeDestroy
2、子组件beforeDestroy
3、子组件destroyed
4、父组件destroyed

对SSR的理解

SSR就是服务端渲染,就是将vue在客户端把标签渲染成HTML工作放在服务端完成,然后再把HTML直接返回给客户端。

SSR的优势:

  • 更好的SEO
  • 首屏加载速度更快

SSR的缺点:

  • 开发条件会受到限制,服务器端渲染只支持beforeCreate和created两个钩子
  • 当需要一些外部扩展库时需要特殊处理,服务单渲染应用程序也需要处于Node.js的运行环境
  • 更多的服务端负载

vue的性能优化有哪些

1)编码阶段

  • 尽量减少data中的数据,data中的数据会增加getter和setter,会收集对应的watcher
  • v-if和v-for不能连用
  • 如果需要使用v-for给每项元素绑定事件时使用事件代理
  • spa页面采用keep-alive缓存组件
  • 更多情况下使用v-if代替v-show
  • key保证唯一
  • 使用路由懒加载、异步组件
  • 防抖、节流
  • 第三方模块按需导入
  • 长列表滚动到可视区域动态加载
  • 图片懒加载

2)SEO优化

  • 预渲染
  • 服务端渲染SSR

3)打包优化

  • 压缩代码
  • 多线程打包happypack
  • 使用cdn加载第三方模块
  • Tree Shacking

4)用户体验

link和@import的区别

两者都是外部引用CSS的方式

  • link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事物;@import属于CSS范畴,只能加载CSS
  • link引用CSS的时候,在页面载入时同时加载;@import是在CSS2.1提出的,低版本浏览器不兼容不支持
  • link支持使用JS控制DOM去改变样式;@import不支持

display:none和visibility:hindden的区别

1)在渲染树中

  • display:none 会让元素完全从渲染树中消失。渲染时不会占据任何空间
  • visibility:hidden 不会让元素从渲染树中消失,渲染的元素还会占据相应的空间,只是内容不可见

2)是否是继承属性

  • display:none 是非继承属性,子孙节点会随着父节点从渲染树消失,通过修改子孙节点的属性也无法显示
  • visibility:hidden 是继承属性,子孙节点消失是由于继承了hidden,通过设置visibility:visible可以让子孙节点显示

3)修改常规文档中元素的display会造成文档的重排,但是修改visibility属性只会造成本元素的重绘

4)如果使用读屏器,设置display:none的内容不会被读取,设置为visibility:hidden的内容会被读取

伪元素和伪类的作用和区别

  • 伪元素:在内容元素的前后插入额外的元素或者样式,但是这些元素实际上并不会在文档中生成。只在外部显示可见,但不会在文档的源代码中找到他们。
p::before {content:"第一章:";}
p::after {content:"Hot!";}
p::first-line {background:red;}
p::first-letter {font-size:30px;}
  • 伪类:将特殊的效果添加到特定的选择器上,他是已有元素上添加类别的,不会产生新的元素。
a:hover {color: #FF00FF}
p:first-child {color: red}
  • 总结:伪类是通过在元素选择器上加入伪类改变元素状态,而伪元素是通过对元素的操作进行对元素的改变。

margin和padding的使用场景

  • 需要在border外侧添加空白,且空白处不需要背景(色)时,使用margin
  • 需要在border内存添加空白,且空白处需要背景(色)时,使用padding
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 12:07:15  更:2021-10-08 12:07:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:55:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码