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

1/30每日一题

从输入 URL 到页面展示到底发生了什么?

1. 输入 URL 与浏览器解析

  • 当你在浏览器地址栏输入 URL 并按下回车,浏览器首先会解析这个 URL(统一资源定位符),比如 https://www.example.com
  • 浏览器会解析这个 URL 中的不同部分:
    • 协议(如:httphttps):决定了数据传输的方式和安全性。
    • 域名(如:www.example.com):确定请求的目标服务器。
    • 路径(如:/index.html):指定了服务器上的资源位置。
    • 查询参数(如果有):如:?id=123&sort=desc,用于传递额外的信息。

2. DNS 解析

  • 浏览器将 URL 中的域名(如 www.example.com)转换成服务器的 IP 地址。这个过程叫做DNS(域名系统)解析

3. 建立 TCP 连接

  • 一旦得到 IP 地址,浏览器就会与目标服务器建立一个 TCP 连接,通常通过 3 次握手的过程。
    1. 客户端(浏览器)发送 SYN 请求(同步标志位)。
    2. 服务器返回 SYN-ACK(确认响应)。
    3. 客户端再次发送 ACK(确认标志)。
  • 如果使用的是 HTTPS,还会进行 TLS/SSL 握手,保证数据传输的加密性。

4. 发送 HTTP 请求

5.服务器响应​

三次握手的过程,以及为什么是三次,而不是四次,两次?

三次握手的过程

  1. 第一次握手(客户端 → 服务器)

    • 客户端向服务器发送一个 SYN(同步)标志位的 TCP 数据包,表示客户端请求建立连接。
    • 同时,客户端会选择一个初始序列号(ISN,Initial Sequence Number),这个序列号是一个随机生成的数字,用于后续的数据传输中的数据包排序和确认。
  2. 第二次握手(服务器 → 客户端)

    • 服务器收到客户端的 SYN 包后,响应一个 SYN-ACK(同步-确认)标志位的 TCP 数据包,表示服务器同意建立连接。
    • 服务器会选择自己的初始序列号,并将客户端的序列号加 1,作为 ACK(确认)号返回给客户端。此时,服务器也等待客户端的确认。
  3. 第三次握手(客户端 → 服务器)

    • 客户端收到服务器的 SYN-ACK 包后,发送一个 ACK(确认)标志位的 TCP 数据包,表示客户端已经收到了服务器的响应。
    • 客户端将服务器的序列号加 1,作为确认号发送给服务器。
    • 至此,客户端和服务器都确认了对方的存在和初始序列号,连接建立完成。

为什么是三次握手,而不是两次或四次?

1. 为什么不是两次握手?

如果只有两次握手,就无法保证服务器是否准备好接收数据。假设只有两次握手的过程:

  • 第一次握手:客户端发送 SYN 请求。
  • 第二次握手:服务器收到 SYN 包后直接返回 SYN-ACK 包。

这种情况下,客户端无法确认服务器是否成功接收了请求,也无法确认服务器是否准备好接收数据。如果只有两次握手,可能会出现服务器无法接收数据的情况,或者服务器错误地认为客户端已经收到了响应。

三次握手通过客户端和服务器的互相确认,确保了双方的准备状态,避免了这种情况的发生。

2. 为什么不是四次握手?

四次握手实际上是不必要的,因为在三次握手中,双方已经充分确认了对方的状态。四次握手会增加额外的网络延迟和开销,而且在大多数情况下并不需要。

  1. 四次挥手的过程,以及为什么是四次?

**四次挥手(Four-Way Handshake)**是 TCP 协议中断开连接的过程。它用于确保通信双方都能正确地关闭连接,并且所有未发送的数据能够顺利传输。四次挥手的过程涉及到双方发送和确认的多个信号,确保连接断开是安全和完整的。

四次挥手的过程

  1. 第一次挥手(客户端 → 服务器)

    • 客户端向服务器发送一个 FIN(结束)标志位的 TCP 数据包,表示客户端已经没有数据要发送了,准备关闭连接。
    • 这个 FIN 数据包的序列号是客户端发送的最后一个字节的序列号。
  2. 第二次挥手(服务器 → 客户端)

    • 服务器收到客户端的 FIN 包后,表示同意关闭连接,返回一个 ACK(确认)标志位的 TCP 数据包,确认客户端的请求。
    • 这个 ACK 数据包的确认号是客户端 FIN 包的序列号 + 1,表示服务器收到了客户端的关闭连接请求。
    • 此时,连接的一个方向(客户端 → 服务器)已经关闭,服务器还可以继续向客户端发送数据。
  3. 第三次挥手(服务器 → 客户端)

    • 服务器发送完自己的数据后,准备关闭连接,会向客户端发送一个 FIN 包,表示服务器也没有数据要发送了,准备关闭连接。
    • 这个 FIN 包的序列号是服务器发送的最后一个字节的序列号。
  4. 第四次挥手(客户端 → 服务器)

    • 客户端收到服务器的 FIN 包后,确认服务器已经没有数据要发送了,发送一个 ACK(确认)标志位的 TCP 数据包,表示客户端同意关闭连接。
    • 这个 ACK 数据包的确认号是服务器 FIN 包的序列号 + 1,表示客户端已经收到了服务器的关闭请求。
    • 至此,客户端和服务器都确认连接已经完全关闭,连接进入 TIME_WAIT 状态,最终关闭。
  1. TCP与UDP的概念,特点,区别和对应的使用场景?

TCP(传输控制协议)和UDP(用户数据报协议)是互联网上两种常见的传输层协议

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议。它提供了数据传输的完整性,确保数据包按顺序、无误地传输。

特点
  1. 面向连接:在数据传输开始前,必须先通过“三次握手”建立连接,通信双方确认连接的存在后才能开始数据传输。
  2. 可靠性:通过数据确认、重传、流量控制、拥塞控制等机制确保数据传输的可靠性。
  3. 数据顺序:确保数据按发送顺序到达接收方,避免数据乱序。
  4. 流量控制:TCP 使用滑动窗口机制进行流量控制,避免发送方过快地发送数据导致接收方缓冲区溢出。
  5. 拥塞控制:TCP 具有拥塞控制机制(如慢启动、拥塞避免、快速重传等),防止网络拥塞。
  6. 数据完整性:TCP 为每个数据段提供校验和,确保数据传输的完整性。
优点
  • 提供可靠的数据传输,确保数据无误并按顺序到达。
  • 可以自动重传丢失的包。
缺点
  • 相对较慢,因需要连接建立、确认、重传等过程。
  • 占用较多的网络资源,因为每个连接都需要维护连接状态。
使用场景
  • 网页浏览:HTTP、HTTPS协议基于TCP,确保网页内容的完整性和顺序加载。
  • 文件传输:FTP、SFTP等协议用于文件上传/下载,需要保证数据传输的可靠性。
  • 电子邮件:如SMTP、POP3和IMAP等协议,保证电子邮件内容传输的完整性。
  • 视频会议:如Zoom、Skype等,保证视频数据按顺序到达,减少中断和错误。

二、UDP(用户数据报协议)

概念

UDP(User Datagram Protocol)是一个无连接、尽力而为的传输层协议。它不保证数据的可靠传输,发送方将数据发送到网络中,并不关心接收方是否收到。

特点
  1. 无连接:UDP 不需要建立连接,数据传输前不进行连接的建立与确认,发送方和接收方不需要同步。
  2. 不可靠性:UDP 不提供错误检测和修复机制。如果数据包丢失、乱序或损坏,UDP 不会重新发送。
  3. 无流量控制:UDP 不会控制数据的发送速度,不关心接收方的接收能力。
  4. 无拥塞控制:UDP 不会处理网络拥塞问题,可能导致网络过载。
  5. 低开销:没有建立连接、确认等过程,减少了协议的开销。
优点
  • 协议开销小,传输速度快。
  • 延迟低,适合对实时性要求高的应用。
缺点
  • 不保证数据传输的可靠性,数据包丢失、重复或乱序无法保证。
  • 不提供流量控制和拥塞控制,可能会造成丢包和网络过载。
使用场景
  • 实时通信:如VoIP(语音通话)、视频直播、视频会议等,要求低延迟,但可以容忍少量的数据丢失。
  • DNS查询:域名解析时使用UDP,响应快速,且请求和响应数据小,丢失一个数据包可以重新发起请求。
  • 在线游戏:多人游戏常用UDP,因为要求低延迟,玩家位置等数据的实时性远比数据的可靠性更重要。
  • 流媒体传输:如实时视频、音频流等,UDP 可以提供低延迟的传输,部分丢包也能接受。

HTTP常见状态码

HTTP状态码是Web服务器响应请求时,服务器向客户端发送的数字代码,用于表示请求的处理结果。状态码分为五类,分别对应不同的意义。

1. 1xx(信息性状态码)

这些状态码表示请求已被接收,正在处理。

  • 100 Continue:表示客户端应继续发送请求数据。
  • 101 Switching Protocols:表示服务器已经理解了客户端的请求,并且正在切换协议。
2. 2xx(成功状态码)

这些状态码表示请求已成功被服务器接收、理解和处理。

  • 200 OK:请求成功,通常用于 GET 和 POST 请求。
  • 201 Created:请求成功并且服务器已创建了新的资源。
  • 202 Accepted:请求已接受,但尚未处理完成。
  • 204 No Content:请求成功,但没有返回任何内容(如删除操作)。
  • 205 Reset Content:请求成功,要求客户端重置视图。
  • 206 Partial Content:部分内容响应,通常用于断点续传或部分请求的情况。
3. 3xx(重定向状态码)

这些状态码表示客户端需要进一步操作才能完成请求。

  • 301 Moved Permanently:请求的资源已被永久移动到新的 URL。
  • 302 Found:请求的资源临时性地被移动到新的 URL。
  • 303 See Other:客户端应访问其他位置的 URL 进行获取资源。
  • 304 Not Modified:请求的资源未修改,客户端可以使用缓存的版本。
  • 307 Temporary Redirect:请求的资源临时转移,客户端应继续使用原始 URL。
  • 308 Permanent Redirect:请求的资源永久转移,客户端应使用新的 URL。
4. 4xx(客户端错误状态码)

这些状态码表示客户端发出的请求存在错误。

  • 400 Bad Request:请求无效或无法理解,通常是客户端发送的数据格式不对。
  • 401 Unauthorized:请求要求用户的身份验证,未提供或提供的认证信息无效。
  • 403 Forbidden:服务器理解请求,但拒绝执行请求。
  • 404 Not Found:请求的资源不存在,URL 错误或者服务器上没有该文件。
  • 405 Method Not Allowed:请求方法不被允许,客户端请求了一个不支持的 HTTP 方法。
  • 408 Request Timeout:请求超时,服务器等待客户端发送请求时超时。
  • 409 Conflict:请求与服务器的当前状态发生冲突。
  • 410 Gone:请求的资源不再可用,且服务器不会再提供。
  • 411 Length Required:需要 Content-Length 头部,缺失时无法处理请求。
  • 413 Payload Too Large:请求实体过大,无法处理。
  • 414 URI Too Long:请求的 URI 太长,服务器无法处理。
  • 415 Unsupported Media Type:请求的媒体类型不被支持。
  • 429 Too Many Requests:客户端发送的请求次数过多,服务器认为超出了限制。
5. 5xx(服务器错误状态码)

这些状态码表示服务器遇到错误,无法完成请求。

  • 500 Internal Server Error:服务器内部错误,无法完成请求。
  • 501 Not Implemented:服务器不支持请求的方法。
  • 502 Bad Gateway:服务器作为网关或代理时,收到无效响应。
  • 503 Service Unavailable:服务器当前无法处理请求,通常是由于过载或维护。
  • 504 Gateway Timeout:网关或代理未能及时从上游服务器获取响应。
  • 505 HTTP Version Not Supported:服务器不支持请求中所使用的 HTTP 版本。

1. ==equals() 的区别

==equals() 都是用于比较对象的,但是它们的比较方式有所不同,适用于不同的场景。

==
  • 比较的是引用地址== 用于比较两个对象的内存地址,即它比较的是两个对象是否指向同一个内存位置(是否是同一个对象)。

  • 对于基本数据类型,== 比较的是

equals()
  • 比较的是对象的内容equals() 用于比较两个对象的内容是否相等。在 Java 中,String 类重写了 equals() 方法,比较的是字符串的内容。

  • 如果类没有重写 equals() 方法,默认使用 Object 类的 equals() 方法,实际上和 == 一样,比较的是内存地址。

总结
  • == 比较对象的内存地址(引用是否相同)。
  • equals() 比较对象的内容(值是否相同)。

String, StringBuilder, StringBuffer 的区别

在 Java 中,StringStringBuilderStringBuffer 都是用于处理字符串的类,但它们的特点和使用场景有所不同。以下是它们的主要区别:


1. String

  • 不可变性(Immutable)

    • String 是不可变的,一旦创建后,字符串内容不能更改。如果对一个 String 对象进行修改(如拼接、替换),会创建一个新的 String 对象。
    • 由于不可变性,String 对象在多线程环境下是线程安全的,因为它的内容不会被改变。

2. StringBuilder

  • 可变性(Mutable)

    • StringBuilder 是可变的,它允许在原有字符串的基础上进行修改,而不创建新的对象。它的内容可以被改变(如拼接、替换等),但不会生成新的对象。
  • 线程安全性

    • StringBuilder 不是线程安全的。如果多个线程同时操作同一个 StringBuilder 对象,可能会引发线程安全问题

3. StringBuffer

  • 可变性(Mutable)

    • StringBufferStringBuilder 类似,都是可变的,可以对字符串进行修改而不创建新的对象。
  • 线程安全性

    • StringBuffer 是线程安全的,内部方法通过加锁来保证线程安全。这使得 StringBuffer 在多线程环境下可以安全使用。
  • 性能

    • 因为线程安全的原因,StringBuffer 的性能相对较差(比 StringBuilder 要低)。如果不涉及多线程,StringBuilder 通常是更优选择。

什么时候使用抽象类?什么时候使用接口?

在 Java 中,抽象类接口都可以用于定义类的抽象行为,二者有一些相似性,但使用场景和设计意图有所不同。理解它们的区别有助于在不同的情况下做出更合适的选择。


使用抽象类的场景

1. 需要共享代码实现时
  • 抽象类可以包含具体的方法实现,因此它适用于一些子类之间需要共享代码实现的情况。抽象类可以提供一些公共的方法实现,子类可以继承这些实现,或者重写这些方法。

2. 有共同的父类
  • 如果多个类之间存在“是一个”的关系,且它们有一些共同的属性和行为,那么可以使用抽象类。在抽象类中定义这些公共属性和方法,子类只需要继承并实现那些特有的行为。
3. 想要限制类的实例化
  • 抽象类不能直接实例化,只能通过子类实例化。这种限制用于将某些类定义为模板,强制要求子类提供实现。

使用接口的场景

1. 多重继承(实现多个接口)
  • Java 不支持类的多重继承,但可以实现多个接口。如果你希望一个类能够有多个不相关的行为,接口是非常合适的选择。

Java 异常体系

Java 的异常体系采用类继承的方式组织,其中 Throwable 是异常体系的根类,所有异常类型都继承自它。Java 中的异常分为两大类:ErrorException,其中 Exception 又可以分为 RuntimeException非运行时异常

  • Error:表示 JVM 无法恢复的错误,通常由系统问题引发,不建议捕获。
    • OutOfMemoryError:内存不足错误
    • StackOverflowError:栈溢出错误
    • VirtualMachineError:虚拟机错误
  • Exception:表示程序可以处理的异常。它分为两类:
    • RuntimeException:运行时异常,是程序中无法预知的异常,通常不需要强制捕获或声明。
    • RuntimeException(受检异常):这类异常是编译时异常,通常需要显式捕获或者通过 throws 声明。

常见的运行时异常(RuntimeException

运行时异常是 Java 异常体系中的一个重要分支,它通常在程序运行过程中发生,不需要显式声明或捕获。这些异常通常是由于程序中的逻辑错误或预料外的情况引发的。

常见的运行时异常包括 NullPointerExceptionArrayIndexOutOfBoundsExceptionArithmeticExceptionClassCastException 等。

相关文章:

1/30每日一题

从输入 URL 到页面展示到底发生了什么? 1. 输入 URL 与浏览器解析 当你在浏览器地址栏输入 URL 并按下回车,浏览器首先会解析这个 URL(统一资源定位符),比如 https://www.example.com。浏览器会解析这个 URL 中的不同…...

vim的多文件操作

[rootxxx ~]# vim aa.txt bb.txt cc.txt #多文件操作 next #下一个文件 prev #上一个文件 first #第一个文件 last #最后一个文件 快捷键: ctrlshift^ #当前和上个之间切换 说明:快捷键ctrlshift^&#xff0c…...

设计转换Apache Hive的HQL语句为Snowflake SQL语句的Python程序方法

首先,根据以下各类HQL语句的基本实例和官方文档记录的这些命令语句各种参数设置,得到各种HQL语句的完整实例,然后在Snowflake的官方文档找到它们对应的Snowflake SQL语句,建立起对应的关系表。在这个过程中要注意HQL语句和Snowfla…...

CAPL与外部接口

CAPL与外部接口 目录 CAPL与外部接口1. 引言2. CAPL与C/C++交互2.1 CAPL与C/C++交互简介2.2 CAPL与C/C++交互实现3. CAPL与Python交互3.1 CAPL与Python交互简介3.2 CAPL与Python交互实现4. CAPL与MATLAB交互4.1 CAPL与MATLAB交互简介4.2 CAPL与MATLAB交互实现5. 案例说明5.1 案…...

无公网IP 外网访问 本地部署夫人 hello-algo

hello-algo 是一个为帮助编程爱好者系统地学习数据结构和算法的开源项目。这款项目通过多种创新的方式,为学习者提供了一个直观、互动的学习平台。 本文将详细的介绍如何利用 Docker 在本地安装部署 hello-algo,并结合路由侠内网穿透实现外网访问本地部署…...

实验四 XML

实验四 XML 目的: 1、安装和使用XML的开发环境 2、认识XML的不同类型 3、掌握XML文档的基本语法 4、了解DTD的作用 5、掌握DTD的语法 6、掌握Schema的语法 实验过程: 1、安装XML的编辑器,可以选择以下之一 a)XMLSpy b)VScode,Vs…...

Autosar-Os是怎么运行的?(内存保护)

写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 1.功能概述 以TC397芯片为例,英飞凌芯片集成了MPU模块, MPU模块采用了硬件机…...

题单:冒泡排序1

题目描述 给定 n 个元素的数组(下标从 1 开始计),请使用冒泡排序对其进行排序(升序)。 请输出每一次冒泡过程后数组的状态。 要求:每次从第一个元素开始,将最大的元素冒泡至最后。 输入格式…...

多目标优化策略之一:非支配排序

多目标优化策略中的非支配排序是一种关键的技术,它主要用于解决多目标优化问题中解的选择和排序问题,确定解集中的非支配解(也称为Pareto解)。 关于什么是多目标优化问题,可以查看我的文章:改进候鸟优化算法之五:基于多目标优化的候鸟优化算法(MBO-MO)-CSDN博客 多目…...

Go学习:字符、字符串需注意的点

Go语言与C/C语言编程有很多相似之处,但是Go语言中在声明一个字符时,数据类型与其他语言声明一个字符数据时有一点不同之处。通常,字符的数据类型为 char,例如 :声明一个字符 (字符名称为 ch) 的语句格式为 char ch&am…...

Linux文件原生操作

Linux 中一切皆文件,那么 Linux 文件是什么? 在 Linux 中的文件 可以是:传统意义上的有序数据集合,即:文件系统中的物理文件 也可以是:设备,管道,内存。。。(Linux 管理的一切对象…...

解决Oracle SQL语句性能问题(10.5)——常用Hint及语法(7)(其他Hint)

10.5.3. 常用hint 10.5.3.7. 其他Hint 1)cardinality:显式的指示优化器为SQL语句的某个行源指定势。该Hint具体语法如下所示。 SQL> select /*+ cardinality([@qb] [table] card ) */ ...; --注: 1)这里,第一个参数(@qb)为可选参数,指定查询语句块名;第二个参数…...

JavaScript系列(50)--编译器实现详解

JavaScript编译器实现详解 🔨 今天,让我们深入探讨JavaScript编译器的实现。编译器是一个将源代码转换为目标代码的复杂系统,通过理解其工作原理,我们可以更好地理解JavaScript的执行过程。 编译器基础概念 🌟 &…...

大数据相关职位 职业进阶路径

大数据相关职位 & 职业进阶路径 📌 大数据相关职位 & 职业进阶路径 大数据领域涵盖多个方向,包括数据工程、数据分析、数据治理、数据科学等,每个方向的进阶路径有所不同。以下是大数据相关职位的详细解析及其职业进阶关系。 &#…...

基础项目实战——学生管理系统(c++)

目录 前言一、功能菜单界面二、类与结构体的实现三、录入学生信息四、删除学生信息五、更改学生信息六、查找学生信息七、统计学生人数八、保存学生信息九、读取学生信息十、打印所有学生信息十一、退出系统十二、文件拆分结语 前言 这一期我们来一起学习我们在大学做过的课程…...

C++,STL,【目录篇】

文章目录 一、简介二、内容提纲第一部分:STL 概述第二部分:STL 容器第三部分:STL 迭代器第四部分:STL 算法第五部分:STL 函数对象第六部分:STL 高级主题第七部分:STL 实战应用 三、写作风格四、…...

【Rust自学】15.3. Deref trait Pt.2:隐式解引用转化与可变性

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 15.3.1. 函数和方法的隐式解引用转化(Deref Coercion) 隐式解引用转化(Deref Coercion)是为函数和方法提供的一种便捷特性。 它的原理是…...

密码强度验证代码解析:C语言实现与细节剖析

在日常的应用开发中,密码强度验证是保障用户账户安全的重要环节。今天,我们就来深入分析一段用C语言编写的密码强度验证代码,看看它是如何实现对密码强度的多维度检测的。 代码整体结构 这段C语言代码主要实现了对输入密码的一系列规则验证&a…...

arkts bridge使用示例

接上一篇:arkui-x跨平台与android java联合开发-CSDN博客 本篇讲前端arkui如何与后端其他平台进行数据交互,接上一篇,后端os平台为Android java。 arkui-x框架提供了一个独特的机制:bridge。 1、前端接口定义实现 定义一个bri…...

LINUX部署微服务项目步骤

项目简介技术栈 主体技术:SpringCloud,SpringBoot,VUE2, 中间件:RabbitMQ、Redis 创建用户 在linux服务器home下创建用户qshh,用于后续本项目需要的环境进行安装配置 #创建用户 useradd 用户名 #设置登录密…...

React Native 导航系统实战(React Navigation)

导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂&#xff…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...