当前位置: 首页 > news >正文

计算机网络八股整理(二)

计算机网络八股整理(二)

应用层

1:dns的全称了解过吗?

dns全称domain-name-system,翻译过来就是域名系统,是在计算机网络中将域名转换成ip地址的分布式数据库系统;

域名服务器的层级类似一个树状结构:从上到下分别是根dns服务器,顶级域dns服务器和权威dns服务器;因为是一个树状结构,所以任意一个服务器可以找到根dns服务器从而找到任意目标dns服务器;

2:dns域名解析的工作流程?

首先客户端获取域名后去访问本地dns服务器,查看本地dns服务器缓存的表格中有没有对应的域名,没有的话

本地dns服务器就会去问根dns服务器,根dns服务器不会进行域名解析,而是指路,根dns服务器告诉本地dns服务器域名的顶级域dns服务器的地址,然后本地dns服务器去访问顶级域dns服务器,顶级域dns服务器就会指路给权威dns服务器,再去访问权威dns服务器,权威dns服务器会告诉本地dns服务器对应的ip地址,然后本地dns服务器就会将IP地址返回给客户端,客户端就能与服务器建立连接;

3:dns默认的端口是多少

dns默认的端口是53;

4:dns底层使用了udp还是tcp;

dns底层使用了udp传输协议,因为udp低延迟,简单快速,轻量级更适合dns这种需要快速响应的域名解析服务;

1:低延迟:因为udp是一种无连接的传输协议,不需要在传输前建立连接,延迟更低;

2:简单快速:因为udp不需要做连接管理和流量控制所以传输速度快;

3:轻量级:是因为udp头部较小;

虽然使用udp可能会造成丢包或者数据不完整,但是对于dns来说这些风险可以容忍,dns通过一些机制来保证数据的可靠性,比如超时重发,请求重试,缓存等;

5:http是不是无状态的?

http是无状态的,每次请求都是独立,且多次请求之间不会共享数据;

可以使用会话跟踪技术,如cookie,和session来跟踪用户状态,从而实现一定程度上的状态保持;

6:携带cookie的http请求是有状态的还是无状态的?cookie是http协议族的一部分,那为啥还说http是无状态的?

携带cookie的http请求可以实现在一定程度上的状态保持,因为cookie是在客户端保存会话信息和状态信息的一种机制。在发送http请求的时候携带上cookie,服务端读取cookie中的信息可以用来保持用户特定状态。所以虽然http是无状态的,但是可以通过cookie来实现一定程度上的状态保持;

cookie是http协议族的一部分,但是http协议设计的初衷就是无状态的请求,每个请求都是相互独立的,而cookie是一种补充机制,可以使用cookie来实现一定程度上的状态保持;

7:cookie和session有什么区别?

cookie和session在存储位置,数据容量,安全性,生命周期等方面有一定的区别:

1:存储位置:cookie存储在客户端,每次请求时都会携带cookie到服务端。session存储在服务端,由服务端分发session ID,通过cookie或者是url重写将session ID发送给客户端,客户端在访问时就携带上session ID,服务器根据sessionID找到对应的session;

2:数据容量:cookie存储在客户端,容量一般是4kb,而且浏览器不允许同一个域名有过多的cookie;而session存储在服务端,理论上没有容量限制,主要取决于服务器的内存;

3:安全性:cookie存储在客户端,可能会收到xss攻击;session存储在客户端,比cookie安全性强一些,但也可能受到session劫持和会话固定攻击;

4:生命周期:cookie可以设置过期时间,超过过期时间cookie会失效,也可以设置会话cookie,即浏览器关闭时,cookie失效;

session在客户端关闭浏览器时失效,也可以设置过期时间;

拓展1:cookie和session的优缺点?

cookie的优点:是http中支持的;

cookie的缺点:1:只有在浏览器中可用,移动设备等不可用;2:不安全,用户可以禁用cookie;3:不支持跨域;

session的优点:存储在服务器中,安全;

session的缺点:1:只存储在单台服务器中,在集群环境下,进行负载均衡后可能会不可用。2:cookie的缺点;

8:cookie,session,token的区别:

1:session存储在服务端,可以理解为一个状态列表,拥有唯一的标识符sessionID,通常存储在cookie。客户端发送请求时在cookie中携带sessionID, 服务端根据列表查询对应的session数据,依赖于cookie;

2:cookie类似于令牌,携带sessionID,存储于客户端,由浏览器自动添加;

3:token也是一种令牌,将用户的信息进行加密后,发送给用户,用户下次请求需要在cookie或者其他位置携带token,服务端进行解密后就能获取用户信息,通常由开发者手动添加;

9:如果客户端禁用了cookie,session还能使用吗?

默认情况下,禁用了cookie之后session是无法正常使用的,因为sessionID的传递依赖于cookie;

但是可用使用别的方法传递sessionID:

1:url重写:将sessionID拼接在url中,服务端通过解析url获取sessionID,但是这样使url不是那么整洁;而且如果用户分享连接可能会泄露sessionID;

2:隐藏表单字段:将sessionID存储在html表单的隐藏字段中,服务端通过解析表单字段获取sessionID,但是这种情况只能用于表单提交的情况,不能用于链接点击和ajax请求;

10:如果我把数据存储到localstorage中或者是cookie中有什么区别?

数据容量:cookie存储在客户端,一般容量大小在4kb,而localstorage的容量更大可以达到几MB;

数据发送:发送请求时,会携带cookie从而实现多次请求之间的数据共享。而localstrorage只会存储在客户端浏览器中,不会自动发送出去,一般可以用来同一域名多个页面的数据共享;

安全性:cookie会发送到服务端,有被窃听的风险,安全性不高,而localstotage存储在服务器端一般较安全;

生命周期:cookie可以设置过期时间,超过过期时间就会失效,而localstorage持久化存储在服务端,一般需要手动删除或者使用代码删除;

11:什么数据应该存储在cookie中,什么数据应该存储在localstorage?

cookie适用于服务端和客户端传递数据,跨域访问,设置过期时间,localstorage适合存储大量数据,相同域名下的不同页面共享数据,永久存储数据;

12:jwt令牌和传统令牌有什么区别?

1:无状态性:jwt令牌是无状态的,它不会存储在服务端中。jwt包含了一些必要信息,如用户身份,权限信息;

2:安全性:jwt通过密钥对令牌进行签名,保证了密钥的完整和真实性,只有持有密钥才能对令牌进行解析;

3:跨域访问:jwt存储在请求头或者参数中,无需cookie就能进行跨域访问;

13:jwt令牌包含哪些部分?

jwt令牌包含头部,载荷,和签名:

头部由签名算法和令牌类型组成;

有效载荷为自定义信息;

签名是将头部,载荷和密钥通过算法进行计算而来的字符串;

其中头部和载荷都是JSON格式通过base64编码成字符串;

14:jwt为什么能解决集群部署?什么是集群部署?

在传统的令牌和cookie中,请求将令牌或者cookie保存在服务器内存或者数据库中,如果是集群部署,每次访问的服务器不同,cookie和令牌都要重新获取,比如要用户重新登录,这带来了额外的开销;

而jwt是无状态的,服务端无需存储jwt相关信息,jwt存储了一些必要信息如用户身份和权限,集群中的服务器只要解析jwt的内容就能获取相关信息用来维持特定状态;解决了集群部署的问题;

15:jwt的缺点是什么?

jwt一旦派发出去在失效之前都是有效,无法进行撤销;

如果解决这个问题,我们可以使用内存数据库比如redis,创建一个黑名单,将想要其失效的jwt加入到黑名单中,这样每次在使用jwt之前都会判断jwt是否在黑名单中;

16:jwt如果泄露了怎么办,如何解决?

1:及时失效令牌:让旧的令牌失效无法使用;

2:刷新令牌:刷新令牌获取新的令牌,让旧的失效;

3:黑名单:服务端维护黑名单,将旧的令牌加入黑名单;

17:前端是如何存储jwt的?

jwt存储在客户端,可以存储在localstotrage中,也可以存储在cookie,sessionstotrage中;

各自的优缺点:

1:localstotrage:

优点:存储空间大,一般都有几MB,而且不随着请求发送到服务端,所以不会出现在http缓存和日志中;

缺点:可能会受到xss攻击,恶意的javascpirt可以盗取jwt;

2:sessionstotrage:

优点:和localstotrage一样存储空间大,窗口关闭会清除缓存,一定程度上降低了泄露的风险;

缺点:每次刷新和打开新标签页使用同样的应用都要重新登录影响用户体验;

3:cookie:

优点:可以使用httponly来防止javaspript的访问,降低xss的风险。也可以设置secure标志来使用https发送请求,提高了安全性;

缺点:存储空间小只有4kb,而且每次访问会携带,增加性能负担;

18:都有http协议了为什么还会有rpc?

1:首先rpc本质上不是一种协议,是一种调用方式,像grpc,thrift才算是协议,他们是实现了rpc调用的协议。一般用于程序员像调用本地方法一样调用远程方法;

2:对于有多端服务的软件来说,对外一般用http,rpc用于集群不同服务之间的调用;

3:rpc出现的比http早,且性能要比http1.1要强;

4:虽然http2.0的性能对http1.1有提升,可能比rpc性能还有还要好,但是是近几年才推出,不太可能替代rpc;

19:http长连接和websocket的区别?

1:全双工和半双工:tcp是全双工的协议,虽然http1.1是基于tcp协议,但是http1.1是半双工协议,对于服务端主动推送服务端的场景不太友好,所以需要使用全双工协议websocket;

2:应用场景:http1.1是基于请求应答的协议,由客户端主动发送请求,服务端响应,服务端不能主动发送数据。对于一些简单场景可用通过定时轮询或者长轮询来实现服务器主动推送;对于需要频繁进行通信的场景可以使用websocket双向通讯协议;

20:nginx负载均衡的算法有哪些?

1:轮询:按照顺序依次将请求分配给后端服务器;这个算法最简单,但是无法处理服务器访问速度突然变慢或者客户端有连续访问需求的场景;

2:ip哈希:通过ip的哈希结果来分配后端服务器,同一个IP始终分配给同一台服务器;适用于保持同一个客户端的请求一直方式给同一个服务器的场景如会话保持。

3:url哈希:根据url的哈希结果来分配后端服务器,一个url定向发送给后端的一个服务器;

4:最短响应时间:根据响应时间来分配请求,优先分配给响应时间最短的后端服务器。

5:加权轮询:根据权重将请求分配给后端服务器,权重越大的分配的请求越多,适用于后端服务器性能不同的场景,可以提高高性能服务器的利用率;

21:nginx位于七层网络结构的那一层?

nginx位于应用层,因为主要处理http请求和响应;

实现负载均衡和反向代理;

相关文章:

计算机网络八股整理(二)

计算机网络八股整理(二) 应用层 1:dns的全称了解过吗? dns全称domain-name-system,翻译过来就是域名系统,是在计算机网络中将域名转换成ip地址的分布式数据库系统; 域名服务器的层级类似一个树…...

强化学习off-policy进化之路(PPO->DPO->KTO->ODPO->ORPO->simPO)

需要LLM在训练过程中做生成的方法是 On Policy,其余的为Off Policy。 On Policy是包含了反馈机制,Off Policy不包含反馈机制。 若进行环境交互的模型与被更新的模型是相同的模型,通常这种更新策略被称为on-policy的策略。on-policy的方法会有…...

Linux 如何创建逻辑卷并使用

一、逻辑卷的介绍 生成环境中逻辑卷使用率很高 逻辑卷的诞生:如果对磁盘直接使用fdisk分区,那么这中分区,我们叫做Linux的标准分区,Linux的标准分区格式化成文件系统之后,挂载使用,那么一旦文件系统的空间…...

java实现将图片插入word文档

插入图片所用依赖 private static void insertImage(XWPFDocument document, String path) {List<XWPFParagraph> paragraphs document.getParagraphs();for (XWPFParagraph paragraph : paragraphs) {CTP ctp paragraph.getCTP();for (int dwI 0; dwI < ctp.sizeO…...

初识java(3)

大家好&#xff0c;今天我们来讲讲我们的老伙计-变量&#xff0c;在哪一门编程语言中&#xff0c;变量的作用都是不可或缺的&#xff0c;那么下面我们就来详细了解一下java中的变量。 一.变量概念 在程序中&#xff0c;除了有始终不变的常量外&#xff0c;有些内容可能会经常…...

coqui-ai TTS 初步使用

项目地址&#xff1a;https://github.com/coqui-ai/TTS 1. 创建一个新的conda环境&#xff0c;如果自己会管理python环境也可以用其他方法 克隆项目下来 pip install -r requirements.txt # 安装依赖 pip install coqui-tts # 只要命令行工具的话 下载自己想要的模型 …...

matlab代码--卷积神经网络的手写数字识别

1.cnn介绍 卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;是一种深度学习的算法&#xff0c;在图像和视频识别、图像分类、自然语言处理等领域有着广泛的应用。CNN的基本结构包括输入层、卷积层、池化层&#xff08;Pooling Layer&#xff09;、全连…...

Scala—Map用法详解

Scala—Map用法详解 在 Scala 中&#xff0c;Map 是一种键值对的集合&#xff0c;其中每个键都是唯一的。Scala 提供了两种类型的 Map&#xff1a;不可变 Map 和可变 Map。 1. 不可变集合&#xff08;Map&#xff09; 不可变 Map 是默认的 Map 实现&#xff0c;位于 scala.co…...

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【六】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

ES6 、ESNext 规范、编译工具babel

ES6 、ESNext 规范、编译工具简介 ES6ES&#xff08;ECMAScript&#xff09; vs JS常量进一步探讨 obj对象的扩展面试&#xff1a;使对象属性也不能更改——Object.freeze(obj) 解构deconstruction变量的解构赋值&#xff1a;数组解构赋值&#xff1a;对象解构赋值&#xff1a;…...

DeepSpeed 配置文件(DeepSpeed Configuration Files)详解:中英文解释

中文版 本文详细介绍 DeepSpeed 配置文件&#xff0c;结合 4 卡 3090 的实际使用场景&#xff0c;重点解释各个参数的含义&#xff0c;并提供应对爆显存的方案。 DeepSpeed 配置文件详解&#xff1a;从基础到实战 DeepSpeed 是用于加速大规模分布式训练的重要工具&#xff0c…...

前端JavaScript(一)---基本介绍

Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言&#xff0c;主要目的是为了解决服务器端语言&#xff0c;比如Perl&#xff0c;遗留的速度问题&#xff0c;为客户提供更流畅的浏览效果。当时服务端需要对…...

文本处理之sed

1、概述 sed是文本编辑器&#xff0c;作用是对文本的内容进行增删改查。 和vim不一样&#xff0c;sed是按行进行处理。 sed一次处理一行内容&#xff0c;处理完一行之后紧接着处理下一行&#xff0c;一直到文件的末尾 模式空间&#xff1a;临时储存&#xff0c;修改的结果临…...

uniapp在App端定义全局弹窗,当打开关闭弹窗会触发onShow、onHide生命周期怎么解决?

在uniapp(App端)中实现自定义弹框&#xff0c;可以通过创建一个透明页面来实现。点击进入当前页面时&#xff0c;页面背景会变透明&#xff0c;用户可以根据自己的需求进行自定义&#xff0c;最终效果类似于弹框。 遇到问题&#xff1a;当打开弹窗(进入弹窗页面)就会触发当前页…...

计算机网络 实验七 NAT配置实验

一、实验目的 通过本实验理解网络地址转换的原理和技术&#xff0c;掌握扩展NAT/NAPT设计、配置和测试。 二、实验原理 NAT配置实验的原理主要基于网络地址转换&#xff08;NAT&#xff09;技术&#xff0c;该技术用于将内部私有网络地址转换为外部公有网络地址&#xff0c;从…...

数据结构——排序算法第二幕(交换排序:冒泡排序、快速排序(三种版本) 归并排序:归并排序(分治))超详细!!!!

文章目录 前言一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本 快排1.2.2 挖坑法 快排1.2.3 lomuto前后指针 快排 二、归并排序总结 前言 继上篇学习了排序的前面两个部分:直接插入排序和选择排序 今天我们来学习排序中常用的交换排序以及非常稳定的归并排序 快排可是有多…...

【kafka04】消息队列与微服务之Kafka 图形工具

Kafka 在 ZooKeeper 里面的存储结构 topic 结构 /brokers/topics/[topic] partition结构 /brokers/topics/[topic]/partitions/[partitionId]/state broker信息 /brokers/ids/[o...N] 控制器 /controller 存储center controller中央控制器所在kafka broker的信息 消费者 /c…...

剖析前后端 API 接口参数设计:JSON 数据结构化全攻略

在当今软件开发领域&#xff0c;前后端分离架构已成为主流趋势。而 API 接口作为前后端之间数据交互的桥梁&#xff0c;其设计的合理性对系统的可维护性和扩展性起着至关重要的作用。JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&…...

vue3 多种方式接受props,定义ref,reactive

定义props 1 第一种 interface AddType { dialogStudyVisible: boolean; } const props defineProps<AddType>(); 第二种 // const props defineProps({ // dialogStudyVisible:{ // type:Boolean, // default:false // } // }) 第三种 // const …...

逻辑处理器核心指纹修改

navigator.hardwareConcurrency的属性,可以用来获取CPU的逻辑处理器核心数。 1、navigator.hardwareConcurrency接口定义&#xff1a; third_party\blink\renderer\core\frame\navigator_concurrent_hardware.idl // https://html.spec.whatwg.org/C/#navigator.hardwarecon…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...