每日八股文6.12

每日八股-6.12

  • 计算机网络
    • 1.当我们在浏览器中输入一个 URL 并按下回车后,到页面最终显示出来,这中间都发生了哪些关键步骤?
    • 2.请简述一下 JWT(JSON Web Tokens)的原理和校验机制
    • 3.DNS 是如何进行域名解析的?它属于 OSI 哪一层的协议?
    • 4.HTTP 协议定义了哪些常用的请求方法?你的项目中用了哪些?
    • 5.HTTP 协议有哪些常见的状态码?你能说出一些你熟悉的吗?
    • 6.HTTP 协议是长连接还是短连接呢?长连接的好处了解吗?
    • 7.HTTP/1.0 和 HTTP/1.1 之间有哪些主要的区别?
    • 8.Cookie、Session 和 Token 这三种技术有什么异同之处?它们分别适用于哪些场景?
    • 9.什么是跨域?在什么情况下会发生跨域请求?

计算机网络

1.当我们在浏览器中输入一个 URL 并按下回车后,到页面最终显示出来,这中间都发生了哪些关键步骤?

首先,我们需要解析浏览器客户端的URL,因为网络传输需要ip地址,一个正确的URL包括协议,比如http,https,ftp;域名,比如www.baidu.com;端口,对于http来说,默认端口是80,对于https来说,默认端口是443;路径,比如说我们像访问百度贴吧里面某一个具体的帖子,那么后面一定会跟随一个具体的路径。

解析出这些之后,我们需要获得请求的ip地址,首先我们需要查看浏览器的缓存是否有这个ip地址,如果有直接返回,如果没有,我们接下来去查操作系统的缓存,比如hosts,看有没有ip地址,如果有,直接返回,如果没有,我们就要用到域名解析协议,也就是DNS,本地域名服务器会帮我们去递归的查询ip地址。首先,去查根域名服务器,然后去查顶级域名服务器,最后去查权威域名服务器,这样我们就得到了ip地址。

得到了ip地址之后,我们就可以与服务器建立TCP连接,如果使用的协议是http的话,那么我们用三次握手来建立TCP连接,具体细节是首先客户端发送一个SYN包到服务器,表示我要开始与你建立连接了,然后服务器返回一个SYN ACK包表示服务器收到了来自客户端的建立连接请求,之后客户端再发送一个ACK包表示收到了来自服务器的SYN ACK包,可以正式开始传输数据了。如果使用的协议是https的话,那么我们用四次握手来建立安全的TCP连接。

在完成了建立连接后,浏览器将之前的http报文逐层的向下传输并封装该层的特定信息,比如说到传输层就要封装上源端口和目的端口;到网络层就要封装上源ip和目的ip;到数据链路层就要封装上源mac地址和目的mac地址,另外,在数据链路层,我们会使用到ARP协议来广播请求,以此来知道下一跳的目标mac地址。

就这样,我们经过了无数个路由器最终到达了目的服务器,服务器通过与刚才相反的路径返回我们请求的资源,在浏览器web页面上渲染出来,呈现给用户。

2.请简述一下 JWT(JSON Web Tokens)的原理和校验机制

在这里插入图片描述
JWT的全称是JSON WEB TOKENS,是一种基于Json的开放标准,一个JWT由三个部分构成

  1. 头部(header)

    头部包括两个字段,第一个字段是alg,也就是指明我们的加密算法,分为对称算法和非对称算法两种,对称算法用到的一般是HS256,非对称算法一般用到的是RS256;第二个字段是typ,这是一个固定值JWT,用来表示他是一个jwt token。头部会使用base64 url来进行编码,并进行加密

  2. 负载(payload)

    负载主要存储的是实际信息,包括用户登录信息,过期时间等等,他也需要用base64 url来进行编码,但是他不会加密,所以说我们不能将任何敏感的数据存放在负载里。

  3. 签名(signature)

    签名是服务器用来验证客户端传来的jwt的完整性和真实性,它等于alg(解密后的头部+“.”+解密后的负载+secret)

校验机制是这样的:客户端发来一个jwt token,服务器端用头部中的算法计算base64 url解密后的头部加上base64 url解密后的负载加上服务器端的密钥,看是否用jwt token中的签名一致,如果一致,说明没有被篡改,可以进行后续的操作。

补充Refresh Token

为什么需要Refresh Token?

  1. Access Token,即jwt,在客户端请求服务器时,会频繁的暴露在网络传输中,极有可能会被窃取,如果说jwt token设置的过期时间很长,那么对用户会造成损失
  2. 如果jwt token设置的过期时间很短,比如说15分钟,那么用户在使用服务的时候,每隔十五分钟就需要重新输入一次密码,这对于用户的体验感是极差的

所以说,我们在Access Token的基础上,引入了Refresh Token,它解决了上面两个问题,首先,Access Token通常存储在内存中,而Refresh Token一般存在cookie上,这保证了安全性,另外最重要的是我们引入Refresh Token来刷新Access Token的这一过程,对用户是无感的,也就是用户不会察觉到。

Access Token (访问令牌):就像是你酒店房间的房卡。它的有效期很短(比如 15 分钟到 1 小时),你每次进房间(访问受保护的 API)都需要出示它。它直接暴露给各种服务,风险较高。
Refresh Token (刷新令牌):就像是你办理入住时拿到的入住凭证。它的有效期很长(比如 7 天或 30 天),你平时都把它妥善保管起来,不会轻易示人。它的唯一作用就是,当你的房卡(Access Token)过期失效时,你可以拿着这个凭证去前台(特定的刷新接口),换一张新的房卡。
所以,Refresh Token 本身并不用于访问业务 API,它唯一的作用就是用来获取新的 Access Token。

3.DNS 是如何进行域名解析的?它属于 OSI 哪一层的协议?

DNS属于应用层的协议。

当我们在浏览器输入一个url后,浏览器首先检查自己的缓存,看有无对应的ip地址,有就直接返回,没有就去检查操作系统的缓存,如果还没有,本地域名服务器先检查自己的缓存,如果没有就去递归的搜寻ip,首先去根域名服务器,根域名服务器会告诉本地域名服务器去哪个顶级域名服务器找,然后去顶级域名服务器,顶级域名服务器会告诉本地域名服务器去哪个权威域名服务器找,最后到权威域名服务器找到需要的ip地址,并逐层向上返回。

这时本地域名服务器会将ip缓存下来,以便于下一次访问同样的url,浏览器和操作系统也可能将ip缓存下来。

4.HTTP 协议定义了哪些常用的请求方法?你的项目中用了哪些?

我了解到的有GET、PUT、POST、HEAD、DELETE请求。

GET请求用于从服务器获取资源, PUT请求用于将请求体中的内容更新到服务器上,POST请求用于往服务器添加资源,HEAD请求只会获取资源的头部信息,DELETE请求用于从服务器删除资源。

项目中用到的请求是GET和POST请求。

5.HTTP 协议有哪些常见的状态码?你能说出一些你熟悉的吗?

在这里插入图片描述

  • 2开头的状态码,表示服务器已成功接收到请求,常见的有200 OK
  • 3开头的状态码,表示客户端需要进一步的操作才能访问资源,通常是重定向,常见的比如301 Moved permanently,表示永久重定向
  • 4开头的状态码,表示客户端错误,常见的比如说403 forbidden,表示服务器禁止访问该资源,404 not found,表示服务器找不到该资源
  • 5开头的状态码,表示服务器错误,常见的比如说500 internal server error,表示服务器内部错误,502 bad gateway,表示服务器作为网关时,从后端服务器收到了无效响应

6.HTTP 协议是长连接还是短连接呢?长连接的好处了解吗?

这个要区分http/1.0和http/1.1

如果是http/1.0,默认的就是短链接,也就是说客户端完成了一次对服务器的请求,该连接就会关闭,除非显式在请求头中指定connection keep alive。

如果是http/1.1,默认的就是长连接,除非显式指定connection close,长连接的好处就是客户端要多次访问同一url时,不需要多次的建立连接,只需在第一次建立连接就可以,没有了多次建立和关闭连接的开销,提升了通信的效率和性能。

7.HTTP/1.0 和 HTTP/1.1 之间有哪些主要的区别?

  1. 最关键的一点,1.1默认长连接,1.0默认短链接,长连接可以减少频繁创建和关闭TCP连接的开销,提升网络通信性能和效率
  2. 1.1支持管道化请求传输,1.0只能等待一个请求返回响应之后,再传输下一个请求,但1.1可以在一个连接上发送多个请求,但需要保证返回响应的顺序,这会造成队头阻塞

队头阻塞:比如说连接上有三个请求,第一个请求要访问一个很大的数据文件,预估耗时3秒,第二个请求只需要访问一段文字,预计耗时0.01秒,第三个请求只要访问一张图片,预计耗时0.01秒,因为要保证返回响应的顺序性,即使我的后续请求只需要很短时间完成,那么也需要等待前面的请求先返回响应,这就是队头阻塞

  1. 1.1引入了更多的缓存控制,比如Entity Tag,If-Match等等
  2. 1.1针对带宽进行了优化,允许只访问服务器的部分资源,这可以保证用户在下载大文件的断点续传功能
  3. 1.1支持虚拟主机,通过引入host头部字段,可以明确指定要访问的域名;1.0的一大缺陷就是服务器只知道要访问的ip地址,但不知道具体的域名是什么,如果说一台服务器上托管了多个网站,服务器就无法区分请求是发给哪个网站的。

8.Cookie、Session 和 Token 这三种技术有什么异同之处?它们分别适用于哪些场景?

Cookie存储在客户端(浏览器),它主要用来存储一些非敏感的数据,比如说用户偏好等,安全性低,默认不支持跨域

Session存储在服务器端,服务器会为每一个发来请求的客户维护一个唯一的session ID,并通过cookie发给客户端,安全性较高,跨域的支持有限,可能需要一些特殊方法实现跨域

Token存储在客户端,它包含客户的一些登录信息和权限信息,服务器可以通过验证token来进行用户的登录和授权,token会使用算法加密,安全性高,且支持跨域

从适用场景来看,Cookie适用于存储一些临时数据,做简单的状态管理;Session适用于传统的web应用,需要保护用户的敏感信息;Token则适用于现代的web应用和Restful Api,尤其是需要跨域和无状态服务的场景。

9.什么是跨域?在什么情况下会发生跨域请求?

跨域指的是在浏览器环境下,去访问不同源的资源,这里的源包括域名,协议,端口。

以下场景都会发生跨域请求

  1. 当前协议是http,要去访问https下的资源
  2. 当前域名是example.com,要去访问example2.com的资源
  3. 当前端口是默认端口80,要去访问端口8080的资源

一个现实场景中的例子就是现在的前后端分离项目,前端应用部署在一个域名之下,而后端的api服务部署在另一个域名之下,当前端通过fetch发送请求,比如说获取用户列表或者提交表单数据,这时就发生了跨域请求,解决方案之一是后端服务器会在响应头中添加Access-Control-Allow-Origin: http://www.my-frontend-app.com(前端域名) 来允许前端域名访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是云计算的边缘原生应用?

关于作者:John Bradshaw阿卡迈公司欧洲、中东和非洲地区云计算技术与战略总监 当谈及云计算时,人们往往会联想到那些坐落于国际大都会核心地带的大型数据中心集群,这些设施作为数字时代的重要枢纽,承载着海量数据处理任务。尽管这…

Linux常用命令速查与面试高频命令总结

🐧 Linux常用命令速查与面试高频命令总结 本文旨在帮助初学者快速掌握 Linux 的常用命令,同时为即将参加技术面试的朋友们提供一份高频命令清单和实用技巧。 🔰 一、基础命令:熟练使用命令行从这里开始 这些是你在 Linux 中最常用…

基础测试工具使用经验

背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…

浅谈DaemonSet

1. DaemonSet 概述 ‌定义‌:DaemonSet 确保 Kubernetes 集群的每个节点上运行一个 Pod 实例。‌特性‌: 每个节点上只有一个 Pod 实例。新节点加入集群时,会自动在新节点上创建 Pod。旧节点被删除时,其上的 Pod 会被回收。 2.…

计算机系统(6)

◆指令寻址方式: 顺序寻址方式:执行一段程序时,是一条指令接着一条指令的顺序执行。 跳跃寻址方式:下一条指令的地址码不是由程序计数器给出,而是由本条指令直接给出。程序跳跃后,按新的指令地址开始顺序执行。因此&…

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…

python打卡训练营打卡记录day51

复习日 作业:day43的时候我们安排大家对自己找的数据集用简单cnn训练,现在可以尝试下借助这几天的知识来实现精度的进一步提高 数据预处理 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transfor…

网络安全:OWASP防护守则

目录 一、OWASP十大WEB弱点防护守则 二、防护守则 1、权限控制失效 2、加密失误 3、注入 4、不安全设计 5、安全配置缺陷 6、易受攻击和过时的组件 7、身份认证和会话管理失效 8、缺乏完整性校验 9、缺乏监控与日志记录 10、服务端请求伪造 三、核心防护原则总结 …

Dagster 实现数据质量自动化:6大维度检查与最佳实践

在当今数据驱动的世界中,数据质量的重要性不言而喻。数据质量测试是确保数据准确、完整、一致和可靠的关键步骤。本文将深入探讨数据质量测试的六大维度,并提供相关的检查方法和最佳实践。 什么是数据质量测试? 数据质量测试涉及评估数据以确…

计算机视觉之三维重建(深入浅出SfM与SLAM核心算法)—— 2. 摄像机标定

文章目录 1. 前置知识1.1. 非齐次线性方程组求解1.1.1. 传统求解方法1.1.2. 奇异值分解法1.1.3. 牛顿法或者梯度下降法 1.2. 齐次线性方程组的最小二乘解1.3. 非线性方程组的最小二乘解 2. 相机标定2.1. 相机内参数求解2.1.1. 求解 u 0 u_0 u0​ 和 v 0 v_0 v0​2.1.2. 求解 …

SQLLL

595-big-countries https://leetcode.com/problems/big-countries/description/ 面积最大的国家 -- select name, population, area from World where area > 3000000 or population > 25000000596-classes-with-at-least-5-students https://leetcode.com/problems/…

MySQL中触发器详解 触发器在自动化任务中的应用场景

触发器是mysql中与表关联的数据库对象,能在特定操作(如insert、update、delete)发生时自动执行预定义sql逻辑。其核心用途包括:1. 维护数据一致性,如订单插入后自动减少库存;2. 记录审计日志,如…

MySQL 8.0的数据库root用户默认无法远程登录,需要修改root的远程授权

mysql> grant all privileges on . to ‘root’‘%’; ERROR 1410 (42000): You are not allowed to create a user with GRANT mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quick…

​​MPI + OpenMP 环境配置指南(Windows/Linux)​

—— 让你的并行计算飞起来 🚀 1. 简介​​ ​​MPI (Message Passing Interface)​​:用于多机分布式并行计算(进程级并行)。​​OpenMP​​:用于单机多线程并行计算(线程级并行)。​​混合编…

新闻类鸿蒙应用功耗危机以及优化方案

🔋 ​​一、功耗痛点:新闻类应用成“续航杀手”​​ ​​后台进程失控​​ ​​高频刷新​​:未适配应用(如网易新闻、百度客户端)默认每30秒后台刷新内容,触发CPU持续唤醒,单设备日均耗电增加1…

【小工具】-Doxygen01

0、前言 参考帖子。 使用Doxygen Documentation Generator自动添加注释 Doxygen使用教程 代码注释规范之Doxygen 1、Doxygen介绍 Doxygen 是一个功能强大的开源文档生成工具,主要用于从源代码中自动提取注释并生成专业的 API 文档。它支持多种编程语言&#xff…

大模型Transformer触顶带来的“热潮退去”,稀疏注意力架构创新或是未来

1. 大模型退潮:裸泳者离场,创新者浮出水面 资本热潮逐渐冷却,大模型赛道正经历残酷洗牌。过去两年密集的“百模大战”,本质是商业模式的军备竞赛,用数据规模与参数数量掩盖技术同质化。当DeepSeek以61层精简架构挑战千…

Android编译时打印所有引用的so库路径

在app module build.gradle 最后添加脚本 tasks.whenTaskAdded { task -> println("test 11 task.name:"task.name) if (task.name.startsWith(merge) && task.name.endsWith(NativeLibs)) { task.doFirst { prin…

暴雨亮相2025中关村论坛数字金融与金融安全大会

6月10日,由中关村金融科技产业发展联盟与中关村互联网金融研究院主办的“2025中关村论坛系列活动——数字金融与金融安全大会”在中关村展示中心盛大召开。本次大会以“人工智能机遇:未来金融格局重塑及安全治理”为主题,汇聚政产学研各界精英…

mapstruct中的@Mapper注解详解

在MapStruct中,Mapper注解是核心注解之一,用于标记一个接口或抽象类为MapStruct的映射器(Mapper)。MapStruct会在编译时自动生成该接口的实现类,完成对象之间的属性映射。以下是对Mapper注解的详细解析: 1.…