【2024最新精简版】网络_Linux操作系统面试篇

在这里插入图片描述

文章目录

    • 简述 tcp 和 udp的区别?
    • get 和 post 请求有哪些区别?
    • 常用HTTP请求方式有哪些 ?
    • 进程跟线程的区别?
    • 僵尸进程?
    • IO的多路复用?
    • 虚拟内存
    • 什么是OSI模型
    • 说一说HTTP协议
    • 说一说HTTPS协议
    • HTTPS协议和HTTP协议有什么区别 ? 👍
    • 常用HTTP状态码有哪些 ? 代表什么意思 👍👍👍
    • 常用HTTP请求方式有哪些 ? 👍👍👍
    • 说一说一个请求的完整过程 👍👍
    • 什么是TCP的三次握手👍👍👍
    • 什么是TCP的四次挥手👍👍👍
    • 有没有了解过XSS攻击 , 如何预防
    • 有没有了解过CSRF攻击, 如何预防
    • 有没有了解过SQL注入攻击, 如何预防👍
    • 简单介绍一下Java的IO流
    • 什么是AIO、BIO和NIO
    • 什么是网站跨域, 如何解决跨域 👍

更多相关内容可查看

简述 tcp 和 udp的区别?

  1. 连接性:TCP是面向连接的协议,通信双方在数据传输前要先建立连接,然后再传输数据,确保数据的可靠性和顺序性。而UDP是无连接的协议,通信双方直接发送数据包,不需要建立连接,因此传输速度更快,但不保证数据的可靠性和顺序性。
  2. 可靠性:TCP保证数据的可靠传输,会通过序列号、确认应答、重传等机制来确保数据不丢失、不重复、按顺序到达。UDP不保证数据的可靠传输,数据包可能会丢失或者乱序。
  3. 传输方式:TCP是面向字节流的传输方式,数据在传输时会被拆分成以字节为单位的数据包进行传输,保证数据的完整性。UDP是面向数据包的传输方式,每个数据包都是独立的,没有顺序要求。
  4. 适用场景:TCP适用于对数据完整性要求较高的场景,如文件传输、网页浏览等。UDP适用于对实时性要求较高、可以容忍少量数据丢失的场景,如音视频传输、在线游戏等

get 和 post 请求有哪些区别?

• GET请求只能进⾏url编码,⽽POST⽀持多种编码⽅式。
• 对参数的数据类型,GET只接受ASCII字符,⽽POST没有限制。

  1. 数据传输方式:
    • GET:通过URL的查询字符串传输数据,数据会附加在URL的末尾,以键值对的形式出现,例如http://example.com/page?name=value。
    • POST:通过请求体传输数据,数据不会显示在URL中,而是作为请求的一部分发送给服务器。
  2. 安全性:
    • GET:数据以明文形式出现在URL中,因此不适合传输敏感信息,如密码等。
    • POST:数据被包含在请求体中,不会显示在URL中,相对于GET更安全,适合传输敏感信息。
  3. 数据长度限制:
    • GET:由于数据是附加在URL中的,URL的长度有限制,因此GET请求传输的数据量较小,一般限制在几千个字符以内。
    • POST:由于数据是作为请求体发送的,因此POST请求传输的数据量较大,一般没有特定的限制。
  4. 缓存机制:
    • GET:可以被浏览器缓存cache,
    • POST:通常不会被浏览器缓存
  5. 幂等性:
    • GET:幂等,多次请求相同的URL会得到相同的结果,不会产生副作用。
    • POST:不幂等,多次请求相同的URL可能会产生不同的结果,会产生副作用,比如向数据库中添加数据。

常用HTTP请求方式有哪些 ?

HTTP/1.1协议中共定义了八种请求方式来以不同方式操作指定的资源分别是
GET,POST,PUT,DELETE,TRACE,OPTIONS,HEAD,CONNECT
其中前四种会用的比较多一些 , 在RestFull风格中一般

  • GET用于查询请求
  • POST用于新增请求
  • PUT用于修改请求
  • DELETE用于删除请求

进程跟线程的区别?

  1. 定义:
    • 进程:进程是程序的一次执行过程,是系统进行资源分配和调度的一个独立单位。每个进程都有独立的内存空间
    • 线程:线程是进程中的一个执行单元,一个进程可以包含多个线程,线程共享进程的资源,如内存空间
  2. 资源占用:
    • 进程:每个进程都有独立的内存空间和系统资源,因此进程之间的切换开销较大。
    • 线程:线程共享进程的内存空间和资源,线程之间的切换开销相对较小。
  3. 创建和销毁:
    • 进程:创建和销毁进程的开销较大,需要分配和释放独立的内存空间和系统资源。
    • 线程:创建和销毁线程的开销相对较小,因为线程共享进程的资源,只需分配和释放少量的线程相关资源。
  4. 并发性:
    • 进程:进程之间相互独立,通信需要通过进程间通信(IPC)机制来实现。
    • 线程:线程之间可以共享同一进程的资源,可以直接访问进程的全局变量等共享数据,通信更加方便。
  5. 执行性质:
    • 进程:进程可以看作是程序的一次执行,拥有独立的执行序列。
    • 线程:线程是进程的执行单元,多个线程可以同时执行不同的任务,提高了程序的并发性和响应速度。

僵尸进程?

僵尸进程(Zombie Process)是指一个已经完成执行任务但其父进程尚未调用wait()或waitpid()函数来获取其状态信息的子进程。在这种情况下,子进程虽然已经终止,但是其在系统进程表中的表项依然存在,称为僵尸进程。
当一个进程结束时,操作系统会向其父进程发送一个 SIGCHLD 信号,通知父进程子进程已经终止。父进程可以通过调用wait()或waitpid()等系统调用来获取子进程的状态信息,并释放其在进程表中的资源。如果父进程没有及时处理这个信号,或者忽略了这个信号,子进程就会成为僵尸进程。
僵尸进程占用系统资源,尤其是进程表中的条目,如果系统中有大量的僵尸进程,就会影响系统的性能和稳定性。因此,及时处理僵尸进程是很重要的。
通常,父进程可以通过以下方式处理僵尸进程:

  1. 使用wait()或waitpid()函数等待子进程结束,并获取其状态信息,然后释放资源。
  2. 使用信号处理程序捕获 SIGCHLD 信号,并在信号处理程序中处理僵尸进程。
  3. 父进程退出时,操作系统会自动将其子进程的所有资源释放,包括僵尸进程。

IO的多路复用?

IO的多路复用(IO Multiplexing)是一种IO模型,通过在一个线程内同时监听多个IO事件,实现对多个IO操作的管理和调度,从而提高系统的IO效率。
在传统的阻塞IO模型中,每个IO操作都需要一个线程来处理,如果有大量的IO操作,就需要大量的线程,这样会导致系统资源的浪费和线程管理的复杂性。而多路复用IO模型通过一个线程同时监听多个IO事件,只有当有IO事件就绪时才会被唤醒,从而减少了线程的数量,提高了系统的性能和效率。
在Unix/Linux系统中,常用的多路复用IO函数包括select、poll和epoll。这些函数允许程序同时监视多个文件描述符(socket、文件等),并在其中任何一个文件描述符就绪时通知程序,从而实现了IO的多路复用。

虚拟内存

根据内存跟磁盘,给应用程序提供一个看似连续比实际可用物理内存大的空间

  1. 分页机制(Paging):
    • 将物理内存和硬盘空间划分成固定大小的页面(Page)或帧(Frame),通常大小为4KB或更大。
    • 操作系统将进程的地址空间划分为相同大小的页面,使得每个进程都可以看到一个连续的地址空间,称为虚拟地址空间。
  2. 页表(Page Table):
    • 为了跟踪虚拟内存中的页面到物理内存中的位置的映射关系,操作系统维护了一个页表。
    • 页表记录了每个虚拟页面对应的物理页面的位置信息,以及页面的状态(如是否在内存中)等信息。
  3. 页面置换算法(Page Replacement Algorithm):
    • 当物理内存不足以容纳所有进程所需的页面时,操作系统需要选择哪些页面从内存中换出到硬盘上,以便为新的页面腾出空间。
    • 常见的页面置换算法包括最近最少使用(LRU)、先进先出(FIFO)、最不常用(LFU)等。
  4. 页面访问机制:
    • 当应用程序访问虚拟内存中的某个页面时,操作系统会根据页表将虚拟地址转换为物理地址。
    • 如果所需的页面当前不在物理内存中,操作系统将触发页面调度(Page Fault),将页面从硬盘加载到内存中,并更新页表。
  5. 写回与写通过(Write-back vs Write-through):
    • 虚拟内存系统通常采用写回(Write-back)策略,即当数据被修改时,首先修改的是缓存中的数据,而不是直接写入主存。
    • 这样可以减少对主存的写操作,提高性能,但需要定期将被修改的页面写回到硬盘中,以保持一致性。

什么是OSI模型

应⽤层:⽹络服务与最终⽤⼾的⼀个接⼝。包括电子邮件、网页浏览、文件传输
表⽰层:数据的格式转换、加密解密和压缩解压
会话层:建⽴、管理、终⽌会话。
传输层:定义传输数据的协议端⼝号,负责端到端的数据传输。
⽹络层:转发数据包
数据链路层:比特流组织成数据帧
物理层:传输原始比特流
image.png

其中HTTP协议HTTPS协议属于应用层 , TCP协议UDP协议属于传输层协议

说一说HTTP协议

HTTP协议又称为超文本传输协议 , 是一种用于分布式、协作式和超媒体信息系统的应用层协议。底层基于TCP协议实现 !
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息
HTTP协议格式
HTTP协议分为请求和响应 , HTTP协议规定了在网络传输中的基本标和格式
请求(Request)格式
image.png
响应(Response)格式
image.png
简单总结一下 :

  • 请求 : 请求分请求行, 请求头 , 请求体
  • 响应 : 响应分响应行, 响应头 , 响应体

说一说HTTPS协议

HTTPS(超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性
HTTPS 默认使用 TCP 协议443端口,它的工作流程一般如以下方式:

  1. TCP 三次同步握手
  2. 客户端验证服务器数字证书
  3. 协商对称加密算法的密钥、hash 算法的密钥
  4. SSL 安全加密隧道协商完成
  5. 网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性
  6. 服务端用协商的hash算法进行解密 , 保证数据完整性,保证数据不被篡改

HTTPS协议和HTTP协议有什么区别 ? 👍

  1. HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好
  2. 使用 HTTPS 协议需要到 CA(数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等
  3. HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包
  4. http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443
  5. HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源

总结一下 : HTTPS协议比HTTP协议更加安全 , 但是传输效率和通信效率更低, 消耗服务器资源更多

常用HTTP状态码有哪些 ? 代表什么意思 👍👍👍

HTTP协议响应状态代码的第一个数字代表当前响应的类型 , 一共3位数字组成的状态代码 , 例如:

  • 1xx : 消息——请求已被服务器接收,继续处理
  • 2xx : 成功——请求已成功被服务器接收、理解、并接受

200 (OK): 请求处理成功
201 (Created) : 请求已被接受, 并处理成功
202 (Accepted) : 服务器已接受请求,但尚未处理

  • 3xx : 重定向——需要后续操作才能完成这一请求

302 (Move Temporarily) : 重定向
304 (Not Modified) : 资源未改变 , 浏览器会从缓存获取
305 (Use Proxy) : 需要使用代理

  • 4xx : 请求错误——请求含有词法错误或者无法被执行

400 (Bad Request) : 一般是请求参数错误
401 (Unauthorized) : 请求未认证
403 (Forbidden) : 请求已经被接受但是决绝执行, 一般是权限不足
404 (Not Found) : 请求资源不存在, 一般是请求路径错误
405 (Method Not Allowed) : 请求方式不被允许 , 请求方式错误

  • 5xx : 服务器错误——服务器在处理某个正确请求时发生错误

500 (Internal Server Error) : 服务器内部错误, 一般是后端程序出现异常
503 (Service Unavailable) : 服务不可用, 一般出现在微服务项目, 服务调用过程中
504 (Gateway Timeout) : 网关操作, 一般网关出现问题

常用HTTP请求方式有哪些 ? 👍👍👍

HTTP/1.1协议中共定义了八种请求方式来以不同方式操作指定的资源分别是
GET,POST,PUT,DELETE,TRACE,OPTIONS,HEAD,CONNECT
其中前四种会用的比较多一些 , 在RestFull风格中一般

  • GET用于查询请求
  • POST用于新增请求
  • PUT用于修改请求
  • DELETE用于删除请求

说一说一个请求的完整过程 👍👍

http://www.baidu.com

  1. 浏览器查询 DNS,获取域名对应的IP地址

查询搜索浏览器自身的DNS缓存
查询搜索操作系统的DNS缓存
读取本地的Host文件
向本地DNS服务器进行查询

  1. 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;
  2. TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求
  3. 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器(SpringMVC执行流程)
  4. 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源
  5. 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面

什么是TCP的三次握手👍👍👍

TCP协议位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采用三次握手策略
image.png

第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端
第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了(服务器端是OK的)
第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束(客户端是OK的)

什么是TCP的四次挥手👍👍👍

TCP协议在断开连接的时候, 客户端和服务端都必需单独进行关闭
当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接
收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据
首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭
image.png

有没有了解过XSS攻击 , 如何预防

XSS全称Cross-Site Scripting(跨站脚本攻击) ,是一种代码注入攻击。
攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全
XSS 的本质是:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行
预防手段 :

  1. 利用模板引擎 开启模板引擎自带的 HTML 转义功能
  2. 避免内联事件 尽量不要使用 onLoad=“onload(‘{{data}}’)”、onClick=“go(‘{{action}}’)” 这种拼接内联事件的写法。
  3. 在 JavaScript 中通过 .addEventlistener() 事件绑定会更安全。
  4. 避免拼接 HTML 前端采用拼接 HTML 的方法比较危险,采用比较成熟的渲染框架,如 Vue/React 等
  5. 时刻保持警惕 在插入位置为 DOM 属性、链接等位置时,要打起精神,严加防范
  6. 增加攻击难度,降低攻击后果 通过输入长度配置、接口安全措施等方法,增加攻击的难度,降低攻击的后果
  7. 主动检测和发现 可使用 XSS 攻击字符串和自动扫描工具寻找潜在的 XSS 漏洞

有没有了解过CSRF攻击, 如何预防

CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性
你可以这样来理解: 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作 , 如下所示 :
image.png

  1. 用户已经登录了站点 A,并在本地记录了 cookie
  2. 在用户没有登出站点 A 的情况下(也就是 cookie 生效的情况下),访问了恶意攻击者提供的引诱危险站点 B
  3. 网站B接收到用户请求后,返回一些攻击性代码 , 并发出一个请求要求访问第三方站点A
  4. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行

CSRF的防御方法

  1. CSRF漏洞检测 , 使用一些专门针对CSRF漏洞进行检测的工具,如CSRFTester,CSRF Request Builder等
  2. 验证 HTTP Referer(请求来源) 字段
  3. 增加 token并验证 ,服务器为用户的浏览器提供唯一的,随机生成的令牌,并在执行请求之前检查每个请求以查看浏览器是否将其发回

有没有了解过SQL注入攻击, 如何预防👍

SQL注入攻击是指攻击者通过构造恶意的SQL语句,利用应用程序的SQL查询功能,在数据库中执行恶意操作的一种攻击方式
例如 :
我们知道,SQL 语句可以查询、插入、更新和删除数据,且使用分号来分隔不同的命令。例如:
SELECT * FROM users WHERE user_id = ${user_id}
其中,user_id 是传入的参数,如果传入的参数值为“1234; DELETE FROM users”,那么最终的查询语句会变为:
SELECT * FROM users WHERE user_id = 1234; DELETE FROM users
如果以上语句执行,则会删除 users 表中的所有数据
避免SQL注入:

  1. 过滤输入内容,校验字符串

过滤输入内容就是在数据提交到数据库之前,就把用户输入中的不合法字符剔除掉。可以使用编程语言提供的处理函数或自己的处理函数来进行过滤,还可以使用正则表达式匹配安全的字符串。

  1. 使用预编译 , 使用jdbc中的PreparedStatement对SQL语句进行预编译, 参数使用?替代 , 之后设置参数执行

在预编译的情况下,数据库服务器不会将参数的内容视为 SQL 语句的一部分来进行处理,而是在数据库完成 SQL 语句的编译之后,才套用参数运行。因此就算参数中含有破坏性的指令,也不会被数据库所运行

  1. 安全测试、安全审计

在开发过程中应对代码进行审查,在测试环节使用工具进行扫描,上线后定期扫描安全漏洞 , 例如 :Havij,Domain SQL Injector等工具

简单介绍一下Java的IO流

IO流从流向上看,分为输入流和输出流;从操作的数据单元来看,分为字节流和字符流
**字节流的组成如下所示 : **

字符流的组成如下所示 :

思考 : 字节流如何转字符流 ? InputStreamReader OutputStreamWriter

什么是AIO、BIO和NIO

  1. BIO(Blocking I/O):
    • BIO 是最传统的 I/O 模型,在执行 I/O 操作时会阻塞当前线程,直到操作完成或者超时。这意味着当一个线程执行 I/O 操作时,其他线程无法使用 CPU。
    • 在 BIO 中,通常是通过 InputStream 和 OutputStream 来进行数据的读取和写入。
  2. NIO(Non-blocking I/O):
    • NIO 是 Java 1.4 引入的一种更为灵活和高效的 I/O 模型。它提供了 Channel 和 Buffer 的概念,使得可以使用单个线程处理多个连接,提高了系统的并发性能。
    • NIO 中引入了 Selector(选择器)的概念,通过它可以实现单线程监听多个 Channel 上的事件,从而实现非阻塞的 I/O 操作。
    • NIO 主要由 java.nio 包中的类和接口实现,如 ByteBuffer、Channel、Selector 等。
  3. AIO(Asynchronous I/O):
    • AIO 是 Java 1.7 引入的一种异步非阻塞的 I/O 模型,也称为 NIO.2。它相比于 NIO 提供了更为简洁的异步操作方式,使得可以在 I/O 操作完成后通过回调函数获取结果,而不需要手动检查状态或者轮询。
    • AIO 中主要使用了 java.nio.channels.AsynchronousChannel 和 java.nio.channels.CompletionHandler 等类和接口。

什么是网站跨域, 如何解决跨域 👍

跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、IP任意一个不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。
同源策略:是指协议,IP/域名,端口都要相同,其中有一个不同都会产生跨域;

如何解决跨域问题?

  1. 使用nginx作为代理服务器 , 对客户端请求进行统一处理, 转发到服务器

  1. 使用跨域资源共享CORS方案

它的总体思路是:如果浏览器要跨域访问服务器的资源,需要获得服务器的允许

  1. 使用@CrossOrigin注解配置
@RestController
@CrossOrigin
public class TestController {@GetMapping("test")public String test() {return "success";}
}
  1. 在配置类中配置CORS跨域
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedHeaders("*").allowedMethods("*").allowCredentials(true);}
}
  1. 在Gateway网关中配置CORS跨域
spring:application:name: gateway  #服务名称cloud:gateway:globalcors:add-to-simple-url-handler-mapping: truecors-configurations:'[/**]':  #拦截的请求allowedOrigins: #允许跨域的请求- "http://localhost:8080"allowedMethods: #运行跨域的请求方式- "GET"- "POST"- "DELETE"- "PUT"- "OPTIONS"allowedHeaders: "*" #允许请求中携带的头信息allowedCredentials: true #是否允许携带cookiemaxAge: 36000 #跨域检测的有效期,单位s

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

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

相关文章

C语言 | Leetcode C语言题解之第172题阶乘后的零

题目: 题解: int trailingZeroes(int n) {int ans 0;while (n) {n / 5;ans n;}return ans; }

【MAUI】resource xml/file_paths (aka com.xxx.xxx:xml/ file _paths) not found.

APP2260:resource xml/file_paths (aka com.zettlercn.wms:xml/ file _paths) not found. This error is likely caused by an issue with the AndroidManifest.xml file or an Android manifest generation attribute in a source code file MAUI从6.0升级到8.0,调试发现资源…

安卓逆向案例——X酷APP逆向分析

X酷APP逆向分析 这里介绍一下两种不同的挂载证书的方法。 chls.pro/ssl无法在浏览器中下载证书是什么原因解决方法: 法一 1. 挂载系统分区为读写 使用正确的挂载点来挂载系统分区为读写: su mount -o remount,rw /dev/uijISjR/.magisk/block/syste…

前端 CSS 经典:旋转边框效果

效果&#xff1a; 思路&#xff1a;使用伪元素&#xff0c;给伪元素设置背景色&#xff0c;然后定位&#xff0c;遮盖&#xff0c;旋转。就可以实现旋转边框效果。 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta chars…

docker in docker 在CI中应用解析

docker in docker 简介 docker里嵌套运行docker&#xff0c;本文讲解其在jenkins和gitlab-runner 种的调用流程 一、用于jenkins 容器化部署jenkins时调用docker命令集成CI功能 [rootops-demo~]# docker inspect jenkins --format"{{json .Mounts}}" [{"T…

电子竞赛1——基于DDS的AM信号发生器

课题要求 产生AM调幅波&#xff1b; 要求&#xff1a;载波10K&#xff0c;被调制波1K&#xff1b; 短按键1&#xff08;pin_143&#xff09;改变该调幅波的调制度&#xff1a;25%、50%、75%&#xff1b; 长按按键1&#xff08;pin_143&#xff09;改变被调制信号频率&#…

STM32通过SPI软件读写W25Q64

文章目录 1. W25Q64 2. 硬件电路 3. W25Q64框架图 4. 软件/硬件波形对比 5. 代码实现 5.1 MyI2C.c 5.2 MyI2C.h 5.3 W25Q64.c 5.4 W25Q64.h 5.5 W25Q64_Ins.h 5.6 main.c 1. W25Q64 对于SPI通信和W25Q64的详细解析可以看下面这篇文章 STM32单片机SPI通信详解-CSDN博…

工作实践:11种API性能优化方法

一、索引优化 接口性能优化时&#xff0c;大家第一个想到的通常是&#xff1a;优化索引。 确实&#xff0c;优化索引的成本是最小的。 你可以通过查看线上日志或监控报告&#xff0c;发现某个接口使用的某条SQL语句耗时较长。 此时&#xff0c;你可能会有以下疑问&#xff…

Web渗透:XSS-DOM-based XSS

DOM-based XSS&#xff08;基于DOM的跨站脚本攻击&#xff09;是一种XSS攻击类型&#xff0c;其特点是恶意脚本通过操作文档对象模型&#xff08;DOM&#xff09;直接在客户端执行&#xff0c;而无需经过服务器的处理。这种攻击主要利用客户端JavaScript代码中的漏洞&#xff0…

BP神经网络-入门到理解-长文讲述

本文来自&#xff1a;老饼讲解-BP神经网络 https://www.bbbdata.com 目录 一、BP神经网络的仿生意义 二、BP神经网络的结构 三、BP神经网络的前馈与后馈 3.1 BP神经网络的前馈 3.2 什么是BP神经网络的后馈 四、BP神经网络的训练 4.1 BP神经网络归一化 4.2 梯度下降算法…

完胜PSP的神器

小鸡模拟器&#xff0c;顾名思义&#xff0c;它是一个能够模拟多种经典游戏平台的软件&#xff0c;从家用游戏机到掌上游戏机&#xff0c;几乎覆盖了所有知名的老式游戏设备。这意味着&#xff0c;通过小鸡模拟器&#xff0c;我们可以在手机上重温那些陪伴我们度过童年时光的经…

springboot学习-图灵课堂-最详细学习

springboot-repeat springBoot学习代码说明为什么java -jar springJar包后项目就可以启动 配置文件介绍 springBoot学习 依赖引入 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.target>8</mav…

【教程】PVE下uhd630核显直通HDMI输出 以NUC9为例村雨Murasame

大家好&#xff0c;村雨本雨又来发教程了 最近在搞小主机&#xff0c;之前hp400g3仅仅200多元成功核显直通HDMI&#xff0c;作为简单NAS、解码机、伺服机、中控都非常棒&#xff0c;待机仅9w 村雨Murasame&#xff1a;【教程】7代核显直通HDMI成功输出画面 PVE下7代intel核显…

数仓中数据分层的标准流向解读

在大数据开发中&#xff0c;数据分层是一个至关重要的概念。合理的数据分层可以有效地提升数据处理的效率和质量。本文将详细介绍数据分层的标准流向和相关注意事项&#xff0c;并结合实际应用进行说明。 数据分层的标准流向 根据行业标准&#xff0c;数据分层的标准流向如下…

IOS开发学习日记(十五)

目录 App启动过程及生命周期 App的启动 UIApplication UIApplicationDelegate 通过App生命周期回调实现启动页 闪屏的实现 简单实现闪屏功能 App启动过程及生命周期 App的启动 main函数前 动态链接 / 二进制文件加载 / runtime / 类的加载 ...... main函数 int main(int…

事件驱动架构详解:触发与响应构建高效系统

目录 前言1. 事件驱动架构概述1.1 什么是事件1.2 事件驱动架构的核心概念 2. 事件驱动架构的实现2.1 基于消息队列的实现2.2 基于发布-订阅模式的实现2.3 基于流处理的实现 3. 事件驱动架构的优势3.1 松耦合性3.2 可扩展性3.3 异步处理3.4 灵活性 4. 事件驱动架构的应用场景4.1…

镜像发布至dockerHub

1、login 没有账号的话去注册一个 https://hub.docker.com docker login 输入账号密码和账号2、修改镜像名格式 可以直接招我的修改 格式为你的 hub名/镜像名 3、推送

svm和决策树基本知识以及模型评价以及模型保存

svm和决策树基本知识以及模型评价以及模型保存 文章目录 一、SVM1.1&#xff0c;常用属性函数 二、决策树2.1&#xff0c;常用属性函数2.2&#xff0c;决策树可视化2.3&#xff0c;决策树解释 3&#xff0c;模型评价3.1&#xff0c;方面一&#xff08;评价指标&#xff09;3.2&…

Android基于MediaBroswerService的App实现概述

mSession.setPlaybackState(mStateBuilder.build()); // 5. 关联 SessionToken setSessionToken(mSession.getSessionToken()); } } 根据包名做权限判断之后&#xff0c;返回根路径 Override public BrowserRoot onGetRoot(String clientPackageName, int clientUid, Bundl…

如何生成protobuf文件

背景 protobuf是一种用于序列化结构数据的工具&#xff0c;实现数据的存储与交换&#xff0c;与编程语言和开发平台无关。 序列化&#xff1a;将结构数据或者对象转换成能够用于存储和传输的格式。 反序列化&#xff1a;在其他的计算环境中&#xff0c;将序列化后的数据还原为…