网络编程 websocket

news2024/10/10 5:21:25

1. HTTP

截至 2024 年,HTTP(HyperText Transfer Protocol)已经发展到 HTTP/3 版本。

各个版本的简介:

  1. HTTP/0.9(1991年):
    • 最初的 HTTP 版本,非常简单,仅支持 GET 方法和传输纯文本内容,没有头部信息,也不支持状态码。
  2. HTTP/1.0(1996年):
    • 引入了 HTTP 请求和响应的头部,支持更多的 HTTP 方法(如 POST、HEAD)。
    • 每次请求都需要新建一个 TCP 连接,传输效率较低。
  3. HTTP/1.1(1997年):
    • 改进了性能,支持持久连接(即在同一个 TCP 连接上传输多个请求和响应)。
    • 增加了对缓存、压缩、内容协商等功能的支持,提升了性能和扩展性。
  4. HTTP/2(2015年):
    • 采用了二进制格式(而非 HTTP/1.1 的纯文本格式),大大提高了传输效率。
    • 支持多路复用,允许多个请求和响应并发地在同一连接上传输,减少了延迟和头部开销。
    • 支持头部压缩,减少了头部信息带来的开销。
  5. HTTP/3(2018年开始草案,2022年标准化):
    • 基于 QUIC 协议(UDP 上的一种传输协议),大幅减少了连接建立时间和网络传输中的延迟问题。
    • 相比于 HTTP/2 的 TCP 连接,HTTP/3 的 QUIC 基于 UDP,使得即使网络不稳定也能更好地保持连接,并提升了传输效率。
    • 提供了更好的安全性和性能,尤其是在移动网络和无线网络环境下效果更好。

主要特性对比:

版本特点传输方式
HTTP/1.0每个请求创建一个新的连接,传输效率低。基于 TCP
HTTP/1.1支持持久连接和管道化请求,性能提高。基于 TCP
HTTP/2二进制传输,多路复用,头部压缩。基于 TCP
HTTP/3基于 QUIC 协议,减少延迟,多路复用,适应性更强,传输效率更高。基于 QUIC(UDP)

HTTP/3 是目前最新的 HTTP 版本,并且逐步在全球范围内得到广泛应用,尤其是在现代浏览器和大型互联网服务中得到了支持。

2. HTTP vs HTTPS

HTTP(HyperText Transfer Protocol)和 HTTPS(HyperText Transfer Protocol Secure)是两种用于网络通信的协议。它们的核心区别在于数据传输的安全性。以下是 HTTP 和 HTTPS 之间的主要区别:

1. 安全性:

  • HTTP:是一种不安全的协议,所有传输的数据都是明文的。任何人都可以在传输过程中截获并读取数据。HTTP 不提供加密、身份验证或数据完整性保护。
  • HTTPS:通过使用 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)对数据进行加密,确保传输的数据是安全的。即使数据在传输中被截获,也无法被解读。此外,HTTPS 还通过数字证书来验证服务器的身份,确保数据传输的目标是合法的服务器。

2. 数据加密:

  • HTTP:不加密数据,传输的内容(如用户名、密码、表单数据等)都是明文的,容易受到中间人攻击(Man-in-the-Middle Attack)。
  • HTTPS:使用对称加密和非对称加密相结合来加密传输数据,确保数据的机密性和完整性。客户端和服务器之间的通信是加密的,外部无法窥探或篡改数据。

3. 端口号:

  • HTTP:默认使用端口号 80 进行通信。
  • HTTPS:默认使用端口号 443 进行通信。

4. SSL/TLS 证书:

  • HTTP:不需要 SSL/TLS 证书,通信是直接的,没有安全认证。
  • HTTPS:必须有有效的 SSL/TLS 证书才能建立加密连接。证书由受信任的证书颁发机构(CA)签发,用于验证服务器身份,确保用户访问的是合法的服务器,而不是伪造的网站。

5. 性能开销:

  • HTTP:由于不进行加密操作,通信开销较小,性能相对较高。
  • HTTPS:在通信过程中需要进行加密和解密操作,涉及 SSL/TLS 握手和证书验证,因此会有一定的性能开销。不过,随着硬件和技术的进步,HTTPS 的性能开销已大幅降低,现代应用中这方面的影响已变得较小。

6. SEO (Search Engine Optimization Impact)影响:

  • HTTP:搜索引擎(如 Google)对使用 HTTP 的网站的排名可能较低,因为 HTTP 不安全,影响用户的信任感。
  • HTTPS:搜索引擎更倾向于提升使用 HTTPS 的网站排名,因此采用 HTTPS 对 SEO 友好。Google 等搜索引擎明确表示,使用 HTTPS 是一种排名信号。

7. 信任与浏览器支持:

  • HTTP:现代浏览器对使用 HTTP 的网站显示“不安全”警告,尤其是在涉及敏感信息(如支付、登录)时,用户通常不愿在不安全的 HTTP 网站上提交数据。
  • HTTPS:浏览器对使用 HTTPS 的网站显示“安全”锁标志,用户可以信任与网站的通信是安全的。尤其在电子商务和在线银行业务等场景下,HTTPS 是必须的。

8. 防止篡改和钓鱼攻击:

  • HTTP:由于数据是明文传输的,因此容易被中途篡改或截获,也容易被用于钓鱼攻击,因为用户无法确定服务器的真实性。
  • HTTPS:通过数字证书验证服务器身份,防止钓鱼网站冒充合法网站。此外,加密确保了数据在传输过程中不会被篡改或伪造。

9. 成本:

  • HTTP:不需要证书,使用成本为零。
  • HTTPS:通常需要购买 SSL/TLS 证书(尽管现在有一些免费证书提供商,如 Let’s Encrypt)。为网站配置 HTTPS 可能需要一些额外的配置工作和成本。

总结:

  • HTTP 是不安全的明文通信协议,适合不涉及敏感信息的简单数据传输,但随着网络安全意识的提高,使用 HTTP 的场景越来越少。
  • HTTPS 是安全的通信协议,通过加密和身份验证来保护数据传输,适合所有需要保护用户隐私和敏感信息的网站,尤其是涉及支付、登录等敏感操作的场景。

现代网络上,HTTPS 已经成为标准,甚至浏览器和搜索引擎也强烈推荐或要求使用 HTTPS,以确保用户的数据安全。

3. POST vs GET

在 HTTP 协议中,POST 请求和 GET 请求是两种最常用的请求方法。它们之间有几个重要的区别,主要体现在数据传输方式、用途和安全性等方面。

1. 请求的用途:

  • GET 请求
    • 用于从服务器获取资源或数据。
    • 常用于请求静态内容,如网页、图片、文件等,目的是获取数据,而不修改服务器端的数据。
    • GET 请求是幂等的,也就是说,多次发送同样的 GET 请求,结果应该是相同的,不会对服务器的状态产生副作用。
  • POST 请求
    • 用于将数据发送到服务器,通常用于创建或更新资源。
    • 常用于提交表单数据、上传文件等需要在服务器端进行数据处理的操作。
    • POST 请求不是幂等的,多次发送 POST 请求可能会导致不同的结果(例如,多次提交相同的表单可能会创建多个记录)。

2. 数据传输方式:

  • GET 请求
    • 数据通过 URL 的查询字符串传递,也就是通过 URL 的一部分发送给服务器。
    • 例如:https://example.com/api?name=John&age=30
    • URL 的长度有限,查询字符串通常用于传递少量的非敏感数据。
  • POST 请求
    • 数据放在请求体(body)中,而不是通过 URL 传递。因此,POST 请求没有大小限制,能够传递大量数据。
    • POST 请求通常用于提交表单数据、JSON、XML、文件等复杂或大规模数据。

3. 数据的可见性和安全性:

  • GET 请求
    • 由于数据包含在 URL 中,所有发送的数据都在 URL 上显示。这意味着 GET 请求的数据会出现在浏览器的地址栏中,且可能会被浏览器缓存或记录在浏览历史中。
    • 因此,GET 请求不适合传递敏感信息,如密码、信用卡号等。
  • POST 请求
    • 数据被放在请求体中,不会显示在 URL 中,因此比 GET 请求更适合传递敏感数据。
    • 但是,POST 请求本身并不比 GET 请求更安全,因为数据仍然可以被拦截。为了真正的安全性,应该通过 HTTPS 加密传输数据。

4. 缓存机制:

  • GET 请求
    • 通常可以被浏览器缓存。服务器也可以对 GET 请求进行缓存,以提高响应速度。
  • POST 请求
    • 不会被浏览器自动缓存。POST 请求每次都会重新发送,并且默认情况下不允许缓存。

5. 对服务器的影响:

  • GET 请求
    • 通常只用于读取数据,不会对服务器上的资源进行修改。GET 请求可以视为只读操作。
  • POST 请求
    • 通常用于发送数据到服务器并进行资源的创建、修改或删除,因此属于写操作,会对服务器上的数据产生影响。

6. URL 长度限制:

  • GET 请求
    • 因为数据是通过 URL 传递的,GET 请求的 URL 长度有限(取决于浏览器和服务器),通常不能超过 2048 字符。
  • POST 请求
    • 没有这种限制,因为数据通过请求体传输,可以传递大量数据。

7. 幂等性:

  • GET 请求
    • 幂等的,多次执行相同的 GET 请求,结果相同,不会对服务器状态产生影响。
  • POST 请求
    • 非幂等的,多次发送同样的 POST 请求可能会导致不同的结果。例如,连续多次提交一个购买订单表单可能会生成多个订单。

8. 跨域请求限制:

  • GET 请求
    • 跨域请求时,GET 请求会有一定的限制,但通常只要服务器支持,跨域 GET 请求可以正常工作。
  • POST 请求
    • 跨域 POST 请求需要更多的跨域资源共享(CORS)配置,因为浏览器会对跨域 POST 请求进行更多的检查,以确保安全性。

总结:

  • GET 请求:主要用于从服务器获取数据,数据通过 URL 传递,适用于查询、只读操作。数据长度有限,不适合传递敏感信息。
  • POST 请求:用于向服务器提交数据,数据通过请求体传递,适用于创建或修改资源。可以传递大量数据,并且不显示在 URL 中。

4. TCP 三次握手和四次挥手

TCP 三次握手四次挥手是用于建立和关闭 TCP 连接的两种机制,确保连接的建立与释放可靠和有序。下面是它们的详细解释:

一、TCP 三次握手(Three-way Handshake)

TCP 是一种面向连接的协议,在两个设备之间传输数据前,需要先建立一个可靠的连接。三次握手是指客户端和服务器在通信前要相互确认准备状态,确保双方都能发送和接收数据。

三次握手过程:

  1. 第一次握手(客户端发送 SYN)
    • 客户端向服务器发送一个 SYN(Synchronize) 包,用来请求建立连接。
    • SYN 包中包含客户端的初始序列号 Seq=X,标记客户端将用于数据传输的序列号。
    • 客户端进入 SYN-SENT 状态。
  2. 第二次握手(服务器回应 SYN-ACK)
    • 服务器收到客户端的 SYN 请求后,向客户端回应一个 SYN-ACK 包,表示接收到请求并同意建立连接。
    • SYN-ACK 包中包含服务器的初始序列号 Seq=Y,同时对客户端的 SYN 包中的序列号 X 做确认 Ack=X+1
    • 服务器进入 SYN-RECEIVED 状态。
  3. 第三次握手(客户端回应 ACK)
    • 客户端收到服务器的 SYN-ACK 包后,向服务器发送一个 **ACK(Acknowledgement)**包,确认已收到服务器的响应,并表示可以开始传输数据。
    • ACK 包中包含客户端对服务器序列号的确认 Ack=Y+1
    • 连接建立,客户端进入 ESTABLISHED 状态,服务器也进入 ESTABLISHED 状态。

总结:
三次握手的目的是确认客户端和服务器的发送和接收能力,并确保连接的可靠性。建立完连接后,双方即可开始数据传输。

二、TCP 四次挥手(Four-way Handshake)

当数据传输完成后,TCP 需要通过四次挥手来释放连接,确保双方都正确关闭通信。

四次挥手过程:

  1. 第一次挥手(客户端发送 FIN):
    • 当客户端完成数据传输后,它会发送一个 FIN(Finish) 包,表示不再发送数据,但仍然可以接收数据。
    • 客户端进入 FIN-WAIT-1 状态。
  2. 第二次挥手(服务器回应 ACK):
    • 服务器收到客户端的 FIN 包后,向客户端发送一个 ACK 包,表示确认已收到客户端的 FIN 请求,但服务器可能还有未发送完的数据。
    • 服务器进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。
  3. 第三次挥手(服务器发送 FIN):
    • 服务器确认所有数据发送完成后,向客户端发送一个 FIN 包,表示也不再发送数据,准备关闭连接。
    • 服务器进入 LAST-ACK 状态。
  4. 第四次挥手(客户端回应 ACK):
    • 客户端收到服务器的 FIN 包后,向服务器发送一个 ACK 包,确认收到服务器的 FIN 请求。
    • 客户端进入 TIME-WAIT 状态,此时要等待一段时间(通常是 2 倍的最大报文段生存时间),以确保服务器接收到了 ACK 包,然后彻底关闭连接。
    • 服务器接收到 ACK 包后,立即进入 CLOSED 状态,连接正式关闭。

总结:
四次挥手的目的是确保双方都完成了数据传输,并有序地关闭连接,防止任何数据丢失或被中途截断。

为什么是三次握手,四次挥手?

  • 三次握手 是为了确保双方的发送和接收能力正常。客户端和服务器各自需要确认自己能发送数据并能接收对方的确认消息,因此需要三次通信来完成这个过程。
  • 四次挥手 是因为 TCP 是全双工通信(即双方可以同时发送和接收数据),因此每一方都需要独立关闭自己的发送数据通道,这就需要分别发出 FIN 和 ACK,形成四次通信。

图示总结:

三次握手:

客户端                       服务器
  SYN  ------------------>  
                           SYN-ACK
  ACK  <------------------

四次挥手:

客户端                       服务器
  FIN  ------------------>  
                           ACK
                           FIN
  ACK  <------------------

总结:

  • 三次握手 用于建立连接,保证通信的可靠性。
  • 四次挥手 用于关闭连接,确保双方都完成数据传输并有序断开。

5. TCP vs UDP

TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是两种常用的传输层协议,它们的主要区别在于数据传输的可靠性、顺序性、连接性等方面。以下是 TCP 和 UDP 之间的详细区别:

1. 连接与无连接:

  • TCP:面向连接的协议。在传输数据之前,TCP 需要通过三次握手来建立连接,确保客户端和服务器之间的通信通道已准备好。数据传输完成后,还需要通过四次挥手来关闭连接。
  • UDP:无连接的协议。在传输数据之前,UDP 不需要建立连接,直接发送数据。这意味着 UDP 没有建立连接的开销,因此传输速度更快,但可靠性较低。

2. 数据传输的可靠性:

  • TCP:提供可靠的数据传输。它通过确认机制、超时重传、流量控制和拥塞控制来确保数据包的正确传输和接收。TCP 会确认每个数据包的到达,并且如果某个数据包丢失,TCP 会重新发送。
  • UDP:不保证可靠性。UDP 只负责将数据包发送出去,不关心数据包是否到达目的地,也不确认数据的接收情况。没有重传机制,也没有流量或拥塞控制。

3. 有序性:

  • TCP:保证数据按顺序到达。TCP 协议会给每个数据包分配一个序列号,并确保数据包按照发送的顺序到达接收方。即使某些数据包延迟,TCP 也会重新排序,确保顺序正确。
  • UDP:不保证数据包的顺序。由于 UDP 是无连接的协议,数据包的顺序可能会被打乱,接收方无法确保数据包按发送顺序到达。

4. 传输速度:

  • TCP:由于需要建立连接、确认数据接收、进行流量和拥塞控制,因此 TCP 的传输速度相对较慢。但它的可靠性使其适用于对数据完整性要求较高的场景。
  • UDP:由于没有连接建立、确认机制和流量控制,UDP 传输速度较快,适合需要快速传输、但对数据完整性要求不高的场景。

5. 头部开销:

  • TCP:TCP 的头部较大,通常有 20 个字节的头部信息。TCP 头部包含序列号、确认号、窗口大小、标志位等信息,用于实现数据传输的可靠性。
  • UDP:UDP 的头部较小,只有 8 个字节,包含源端口、目的端口、数据长度和校验和。由于头部较小,UDP 的开销更低,适合传输效率要求高的场景。

6. 流量控制与拥塞控制:

  • TCP:具备流量控制和拥塞控制功能。TCP 会根据网络状况动态调整传输速率,防止网络拥堵,确保发送方不会过度发送数据导致网络堵塞。
  • UDP:没有流量控制和拥塞控制机制。UDP 不关心网络状况,数据包一旦发送,不会进行速率调整,可能导致网络拥塞。

7. 适用场景:

  • TCP:适用于对数据传输可靠性和顺序性要求较高的场景。例如:
    • 网页浏览(HTTP/HTTPS):需要确保所有网页资源完整传输。
    • 文件传输(FTP):要求文件完整、准确地到达。
    • 电子邮件(SMTP、IMAP):邮件内容必须完整传输。
  • UDP:适用于对传输速度要求高、但对数据完整性和顺序性要求不高的场景。例如:
    • 视频会议、实时流媒体(如 Zoom、YouTube、Twitch):对延迟要求敏感,允许少量数据丢失。
    • 在线游戏:游戏中的动作需要快速传递,短暂的数据丢失不会影响整体体验。
    • DNS 查询:查询结果通常很小,并且如果丢失可以快速重新发送。

8. 流量模式:

  • TCP:是面向流的协议,数据作为无边界的字节流传输,发送方和接收方之间的数据传输通过 TCP 管道进行,数据流可以持续不断地发送。
  • UDP:是面向消息的协议。每个 UDP 数据包是独立的消息单元,不需要保持数据的持续性,也不会合并数据包。因此,每个数据包都是独立的、完整的。

9. 使用的协议:

  • TCP:常用于需要高可靠性的应用层协议,如:
    • HTTP/HTTPS(网页浏览)
    • FTP(文件传输)
    • SMTP(电子邮件)
    • SSH(安全登录)
  • UDP:常用于需要快速传输的应用层协议,如:
    • DNS(域名解析)
    • DHCP(动态主机配置协议)
    • TFTP(简单文件传输协议)
    • RTP(实时传输协议,用于视频/音频流)

总结对比表:

特性TCPUDP
是否连接面向连接无连接
可靠性提供可靠传输,确保数据完整性不提供可靠传输,可能丢包
有序性确保数据按顺序到达不保证数据包顺序
传输速度较慢(由于需要握手、确认等)较快(无连接、无确认机制)
头部开销较大(20 字节)较小(8 字节)
流量控制和拥塞控制
适用场景需要数据完整性和可靠性的场景需要快速传输、允许丢包的场景

总结:

  • TCP 提供连接性、可靠性和有序性,适用于需要确保数据完整和顺序的应用,但传输速度相对较慢,开销较大。
  • UDP 传输速度快,头部开销小,适用于对速度要求高、但对可靠性要求不高的场景,如实时通信和流媒体等。

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

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

相关文章

【长文梳理Webserver核心】框架篇

感谢前人的总结&#xff0c;让一个小白快速成长&#xff0c;那我也贡献一份自己的力量~ 大框架梳理从main函数开始学习 大框架梳理 先摆图&#xff1a; 目光先放到最上面的两个小框架&#xff0c;半同步/半反应堆线程池和异步日志系统&#xff0c;日志系统晓得伐&#xff1f;…

jvm垃圾收集器简介

串行垃圾收集器 串行垃圾收集器&#xff0c;是指使用单线程进行垃圾回收&#xff0c;垃圾回收时&#xff0c;只有一个线程在工作&#xff0c;Java应用中的所有线程都要暂停&#xff0c;等待垃圾回收的完成。这种现象称之为STW(Stop-The-World)&#xff0c;一般的javaweb应用中…

深入理解 pnpm(Performant NPM) 的实现原理及其与 npm 的区别

深入理解 pnpm 的实现原理及其与 npm 的区别 在 JavaScript 生态系统中&#xff0c;包管理器是开发者日常工作中不可或缺的工具。npm&#xff08;Node Package Manager&#xff09;作为 Node.js 的默认包管理器&#xff0c;已经广泛应用于各种项目中。然而&#xff0c;随着项目…

略谈发展测量方法论-高敏雪老师的文章解读与收获

历史地看&#xff0c; GDP 被誉为“世纪性发明”&#xff0c;我们曾经将其视为衡量一国经济发展的重要工具&#xff1b;现实地看&#xff0c;“超越 GDP”是当前出现的带有国际性的口号&#xff0c;内在地包含着对 GDP作为发展指标的批评和替代。 如何看到发展&#xff1f; 如…

apisix云原生网关

定义 企业级网关通过域名、路由将请求分发到对应的应用上&#xff0c;通常承载数千个服务的流量&#xff0c;对稳定性有较高要求。 CNCF全景图 选型 Kubernetes抽象出两个核心概念&#xff1a;Service&#xff0c;为多个Pod提供统一的访问入口&#xff1b;Ingress&#xff…

【STM32-HAL库】实现微秒、毫秒、纳秒延时。(STM32F4系列)(附带工程下载链接)

使用了本代码后不能使用HAL库自带的HAL_Delay函数 使用了本代码后不能使用HAL库自带的HAL_Delay函数 使用了本代码后不能使用HAL库自带的HAL_Delay函数 一、新建工程 可以参考我的新建工程系列教程 stm32-HAL库cubeMX新建工程教程&#xff08;以F103C8T6为例&#xff09;ht…

【长文梳理webserver核心】核心类篇

前言 有三个核心组件支撑一个reactor实现 [持续] 的 [监听] 一组fd&#xff0c;并根据每个fd上发生的事件 [调用] 相应的处理函数。这三个组件就是 EventLoop 、Channel 以及 Poller 三个类&#xff0c;其中 EventLoop 可以看作是对业务线程的封装&#xff0c;而 Channel 可以看…

从零开始搭建一个node.js后端服务项目

一、下载node.js及配置环境 网上很多安装教程&#xff0c;此处就不再赘述了 版本信息 C:\Users\XXX>node -v v20.15.0C:\Users\XXX>npm -v 10.7.0 二、搭建node.js项目及安装express框架 在任意位置创建一个项目文件夹&#xff0c;此处项目文件夹名为test&#xff0…

右键菜单添加cmd

regedit 计算机\HKEY_CLASSES_ROOT\Directory\Background\shell\命令提示符\command 数据&#xff1a;cmd.exe /s /k title 命令提示符 或软件商店安装 Windows Terminal

基于element-ui的upload组件与阿里云oss对象存储的文件上传(采用服务端签名后直传的方式)

服务端签名后直传图解 步骤 1 开通阿里云OSS对象存储服务&#xff0c;创建新的Bucket 2 创建子账户获取密钥 创建用户 添加权限 后端 1 新建一个第三方服务的模块 third-party pom文件 <?xml version"1.0" encoding"UTF-8"?> <project x…

HAL+M4学习记录_3

一、HAL库开发框架 记录HAL学习过程 1.1 CMSIS CMSIS&#xff08;Cortex微控制器软件接口标准&#xff09;&#xff0c;用于提供用户和硬件间的接口&#xff0c;用户通过CMSIS标准对Cortex微控制器内部寄存器单元进行读写 1.2 HAL库 HAL&#xff08;硬件抽象层&#xff09;为…

加固与脱壳04 - 一些简单的脱壳方法

这里只讨论一些简单壳的脱壳方法及其原因。 FRIDA-DEXDump https://github.com/hluwa/FRIDA-DEXDump 适用于不需要研究那些被强保护起来的代码&#xff0c;只是想单纯的看看某个地方的业务逻辑。 原理&#xff1a; 对于完整的 dex&#xff0c;采用暴力搜索 dex035&#xf…

云栖实录 | Hologres3.0全新升级:一体化实时湖仓平台

本文根据2024云栖大会实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a; 姜伟华 | 阿里云智能集团资深技术专家、Hologres 负责人 丁 烨 | 阿里云智能集团产品专家、Hologres 产品负责人 活动&#xff1a; 2024 云栖大会 - 商用大数据计算与分析平台论…

基于Arduino的超声波和舵机模块集成使用

一.超声波模块和舵机模块集成使用 超声波模块&#xff1a;HC-SR04舵机模块&#xff1a;SG90目的&#xff1a;通过Arduino UNO核心板控制舵机旋转到不同位置&#xff0c;同时获取不同位置超声波模块和障碍物间的距离&#xff0c;配合控制算法&#xff0c;进行基于超声波智能避障…

需求10——通过改一个小bug来学习如何定位问题

在浏览我之前完成的一些小需求时&#xff0c;我发现了一个非常有价值的需求。这个需求可以让我深入了解系统中关于故障上报的功能。通过完善这个需求&#xff0c;我能够全面掌握整个故障上报的流程。 这个需求主要是关于故障上报流程中出现的问题。当前的流程如下&#xff1a;…

ML 系列:机器学习和深度学习的深层次总结(16) — 提高 KNN 效率-使用 KD 树和球树实现更快的算法

一、说明 在机器学习系列的第 16 节&#xff0c;我们重点介绍了提高 K 最近邻 &#xff08;KNN&#xff09; 算法的效率&#xff0c;这是一种广泛用于分类和回归任务的方法。虽然 KNN 简单有效&#xff0c;但对于大型数据集来说&#xff0c;其计算成本可能会令人望而却步。为了…

基于SpringBoot问卷调查系统小程序【附源码】

基于SpringBoot问卷调查系统小程序 效果如下&#xff1a; 管理员登录界面 管理员功能界面 调查人管理界面 问卷调查管理界面 问卷题目管理界面 用户登录界面 APP首页界面 公告信息界面 研究背景 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&…

组织病理学图像中的再识别|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割

Title 题目 Re-identification from histopathology images 组织病理学图像中的再识别 01 文献速递介绍 在光学显微镜下评估苏木精-伊红&#xff08;H&E&#xff09;染色切片是肿瘤病理诊断中的标准程序。随着全片扫描仪的出现&#xff0c;玻片切片可以被数字化为所谓…

怎么在单片机裸机程序中移植EasyLogger?

1、介绍 EasyLogger 是一款超轻量级、高性能的C日志库&#xff0c;非常适合对资源敏感的软件项目。例如&#xff1a;IoT产品、可穿戴设备、智能家居等等。相比log4c、zlog这些知名的C日志库&#xff0c;EasyLogger的功能更加简单&#xff0c;提供给用户的接口更少&#xff0c;但…

肺腺癌预后新指标:全切片图像中三级淋巴结构密度的自动化量化|文献精析·24-10-09

小罗碎碎念 本期这篇文章&#xff0c;我去年分享过一次。当时发表在知乎上&#xff0c;没有标记参考文献&#xff0c;配图的清晰度也不够&#xff0c;并且分析的还不透彻&#xff0c;所以趁着国庆假期重新分析一下。 这篇文章的标题为《Computerized tertiary lymphoid structu…