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

HTTPS 发送请求出现TLS握手失败

最近在工作中,调外部接口,发现在clientHello步骤报错,服务端没有返回serverHello。

从网上找了写方法,都没有解决;

在idea的vm options加上参数:

-Djavax.net.debug=SSL,handshake 
把SSL和handshake的日志打印出来;

看到的异常日志如下:

"ClientHello": {"client version"      : "TLSv1.2","random"              : "6A 07 F0 0E B6 96 23 B2 35 2D CD 3E 2B 7B D2 E5 14 B8 43 A9 44 24 0C B8 62 29 AD C5 7A C4 EE 16","session id"          : "82 48 DC 04 FA CF 39 4B BF 38 52 7F 4E B7 42 ED DD 48 4F 38 CA 9E 68 96 39 79 AA 2E B4 A4 2E FB","cipher suites"       : "[TLS_AES_256_GCM_SHA384(0x1302), TLS_AES_128_GCM_SHA256(0x1301), TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(0x009F), TLS_DHE_DSS_WITH_AES_256_GCM_SHA384(0x00A3), TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(0x009E), TLS_DHE_DSS_WITH_AES_128_GCM_SHA256(0x00A2), TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(0x006B), TLS_DHE_DSS_WITH_AES_256_CBC_SHA256(0x006A), TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(0x0067), TLS_DHE_DSS_WITH_AES_128_CBC_SHA256(0x0040), TLS_DHE_RSA_WITH_AES_256_CBC_SHA(0x0039), TLS_DHE_DSS_WITH_AES_256_CBC_SHA(0x0038), TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x0033), TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x0032), TLS_RSA_WITH_AES_256_GCM_SHA384(0x009D), TLS_RSA_WITH_AES_128_GCM_SHA256(0x009C), TLS_RSA_WITH_AES_256_CBC_SHA256(0x003D), TLS_RSA_WITH_AES_128_CBC_SHA256(0x003C), TLS_RSA_WITH_AES_256_CBC_SHA(0x0035), TLS_RSA_WITH_AES_128_CBC_SHA(0x002F), TLS_EMPTY_RENEGOTIATION_INFO_SCSV(0x00FF)]","compression methods" : "00","extensions"          : ["server_name (0)": {type=host_name (0), value=},"supported_groups (10)": {"versions": [ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192]},"ec_point_formats (11)": {"formats": [uncompressed]},"signature_algorithms (13)": {"signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]},"signature_algorithms_cert (50)": {"signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]},"extended_master_secret (23)": {<empty>},"supported_versions (43)": {"versions": [TLSv1.3, TLSv1.2]},"psk_key_exchange_modes (45)": {"ke_modes": [psk_dhe_ke]},"key_share (51)": {"client_shares": [  {"named group": ffdhe2048"key_exchange": {0000: 48 B1 7A 2B B0 D1 81 13   EB E1 76 E2 29 8C 1A E3  H.z+......v.)...0010: 04 24 17 44 45 25 F0 1B   07 18 49 D8 5E 33 1D B1  .$.DE%....I.^3..0020: B8 EC 51 29 AA 33 4B 2C   2A 61 BB 45 E7 F4 E2 94  ..Q).3K,*a.E....0030: 95 31 7C 9E B7 28 78 75   C1 68 10 82 E5 77 0C 98  .1...(xu.h...w..0040: 8E F2 69 4A DB 37 0C B7   AE B4 3E D4 A6 6D 79 2B  ..iJ.7....>..my+0050: C7 80 B4 C0 BB C9 AD A1   EF B8 C5 B1 66 75 68 9E  ............fuh.0060: F9 F4 F0 C4 2F E7 E2 4C   12 FC 68 66 59 5D B7 D2  ..../..L..hfY]..0070: 35 0F D2 8E 37 90 1B F0   FD EC 9C 60 16 0C 83 FA  5...7......`....0080: BB 8E 2B 7E F9 C2 5E 06   85 76 95 A1 52 04 EF CB  ..+...^..v..R...0090: EF 44 07 58 2F 2A D5 B2   8D B9 32 11 4D D9 07 65  .D.X/*....2.M..e00A0: D1 C6 F3 40 54 4F 92 48   E5 07 D9 23 42 BE AD 9A  ...@TO.H...#B...00B0: 2D AD 9D AB C0 CA D4 4A   37 5F CC DF B6 3B D2 D8  -......J7_...;..00C0: D0 CE 4F F1 74 92 81 53   C2 B6 77 2C 76 D1 66 A5  ..O.t..S..w,v.f.00D0: 14 21 1A 2B F7 E3 E1 F4   9D 98 D6 8D 9E 32 35 80  .!.+.........25.00E0: 1F 6A 01 D1 DE 31 42 E5   0D 19 F7 67 85 77 4C CC  .j...1B....g.wL.00F0: 2B 62 FD F0 DE 27 68 1D   B1 09 40 83 C7 E4 47 7C  +b...'h...@...G.}},]}]
}
)
javax.net.ssl|FINE|B4|http-nio-8099-exec-1|2024-07-07 10:20:42.945 CST|Alert.java:238|Received alert message (
"Alert": {"level"      : "fatal","description": "handshake_failure"
}
)

最终报出来的错误是:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure;

握手失败。

在别的项目中使用相同的工具类进行调用,使用相同的jdk版本,是可以正常调用的;对比两者的clienthello报文,发现客户端所支持的加密套件是不一样的,调用失败的请求明显少了一些套件;

这是正常请求的报文:

"ClientHello": {"client version"      : "TLSv1.2","random"              : "A6 F3 8F E9 EA 8C 1C 91 D8 33 EC E9 70 3C 12 05 96 63 EF B0 24 7E 09 65 08 50 74 98 A8 65 F3 08","session id"          : "02 31 3F 18 F0 35 E3 B9 15 87 D3 D1 A1 A7 59 E7 DD ED 28 07 1D 56 DF 28 64 B6 82 21 D7 9C 79 E6","cipher suites"       : "[TLS_AES_256_GCM_SHA384(0x1302), TLS_AES_128_GCM_SHA256(0x1301), TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(0xC02C), TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(0xC02B), TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xC030), TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(0xC02F), TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(0x009F), TLS_DHE_DSS_WITH_AES_256_GCM_SHA384(0x00A3), TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(0x009E), TLS_DHE_DSS_WITH_AES_128_GCM_SHA256(0x00A2), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384(0xC024), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(0xC028), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(0xC023), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(0xC027), TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(0x006B), TLS_DHE_DSS_WITH_AES_256_CBC_SHA256(0x006A), TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(0x0067), TLS_DHE_DSS_WITH_AES_128_CBC_SHA256(0x0040), TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384(0xC02E), TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384(0xC032), TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256(0xC02D), TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256(0xC031), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384(0xC026), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384(0xC02A), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256(0xC025), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(0xC029), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(0xC00A), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(0xC014), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(0xC009), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(0xC013), TLS_DHE_RSA_WITH_AES_256_CBC_SHA(0x0039), TLS_DHE_DSS_WITH_AES_256_CBC_SHA(0x0038), TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x0033), TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x0032), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA(0xC005), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA(0xC00F), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA(0xC004), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA(0xC00E), TLS_RSA_WITH_AES_256_GCM_SHA384(0x009D), TLS_RSA_WITH_AES_128_GCM_SHA256(0x009C), TLS_RSA_WITH_AES_256_CBC_SHA256(0x003D), TLS_RSA_WITH_AES_128_CBC_SHA256(0x003C), TLS_RSA_WITH_AES_256_CBC_SHA(0x0035), TLS_RSA_WITH_AES_128_CBC_SHA(0x002F), TLS_EMPTY_RENEGOTIATION_INFO_SCSV(0x00FF)]","compression methods" : "00","extensions"          : ["server_name (0)": {type=host_name (0), value=},"supported_groups (10)": {"versions": [secp256r1, secp384r1, secp521r1, ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192]},"ec_point_formats (11)": {"formats": [uncompressed]},"signature_algorithms (13)": {"signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]},"signature_algorithms_cert (50)": {"signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp521r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]},"extended_master_secret (23)": {<empty>},"supported_versions (43)": {"versions": [TLSv1.3, TLSv1.2]},"psk_key_exchange_modes (45)": {"ke_modes": [psk_dhe_ke]},"key_share (51)": {"client_shares": [  {"named group": secp256r1"key_exchange": {0000: 04 64 F2 B7 51 E2 D6 1B   11 00 7D 59 58 62 90 3E  .d..Q......YXb.>0010: 03 8F 7C 16 92 D7 EA 81   D3 D1 3C 58 4E 4F 29 20  ..........<XNO) 0020: 1B 49 EA AD 84 D1 B6 60   77 77 77 90 60 C5 50 98  .I.....`www.`.P.0030: 50 CC 48 D3 8E 12 B6 11   A3 AE 43 24 7F 66 AE 9B  P.H.......C$.f..0040: EB }},]}]
}
)
javax.net.ssl|FINE|01|main|2024-07-07 10:26:02.678 CST|ServerHello.java:863|Consuming ServerHello handshake message (
"ServerHello": {"server version"      : "TLSv1.2","random"              : "D4 8E 8D 8D D9 07 97 2B 7E 17 55 36 14 D3 14 9D 77 20 55 13 67 0E F1 61 B9 AA 1F 49 3D B6 A4 07","session id"          : "4E EE F7 CA B5 B1 AB C9 7D 79 0B 9E AC 21 84 1D EE C7 E8 66 C7 E3 D9 F3 DC 61 79 FF 7D 59 05 72","cipher suite"        : "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xC030)","compression methods" : "00","extensions"          : ["renegotiation_info (65,281)": {"renegotiated connection": [<no renegotiated connection>]},"server_name (0)": {<empty extension_data field>},"ec_point_formats (11)": {"formats": [uncompressed, ansiX962_compressed_prime, ansiX962_compressed_char2]},"extended_master_secret (23)": {<empty>}]
}
)

两者对比可以发现,服务端选择了TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384加密套件,正常请求是有这个套件的,而失败的请求是没有这个套件的;

解释一下这个加密套件:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 是一个提供强安全性的加密套件,它结合了ECDHE密钥交换的前向安全性、RSA的广泛接受度、AES_256_GCM的高效加密和认证能力以及SHA384的强哈希功能。这种套件通常用于需要高安全性的通信,例如金融服务、政府通信或其他敏感数据传输。

  • ECDHE: 椭圆曲线Diffie-Hellman密钥交换(Elliptic Curve Diffie-Hellman Ephemeral)。这是一种密钥交换机制,使用椭圆曲线加密算法来生成一个临时的共享密钥,用于加密会话密钥。

可以简单理解,这是个ECC的椭圆机密曲线,那有没有可能就是因为项目的某些配置导致ECC椭圆加密曲线缺失了;

我本人对这个方面的研究不深,到达了我的知识盲区,刚好身边有个博士做过这方面的研究,他所在的团队实现了TLS1.3的一个版本,对这个非常熟悉,请他看了一下日志,可以判断,也是缺少椭圆曲线;

既然大概确定是缺少某些东西导致调用报错,那就想办法把原因找出来;

经过了一天的努力,终于发现了问题所在,之前有个哥们不知道因为什么原因,把SUN公司的ECC曲线都删掉了,导致了问题;

现在公布这个罪魁祸首:

    static {Security.removeProvider("SunEC");}

问了KIMI,它的回答是这样的:

在Java中,Security 类是 java.security 包的一部分,它提供了一些管理安全属性和访问安全服务的方法。Security 类中的 removeProvider 方法用于从安全框架中移除一个已经注册的提供者。这里的 "SunEC" 是一个提供者的名称,它代表Sun公司提供的椭圆曲线加密(ECC)服务。椭圆曲线加密是一种基于椭圆曲线数学的公钥密码体系,它在TLS握手中用于密钥交换和数字签名等操作。在TLS握手过程中,如果客户端和服务器都支持ECC,它们可能会选择使用基于ECC的加密套件来进行通信,因为它们通常提供与RSA相比更高的安全性,并且密钥尺寸更小。当你执行 Security.removeProvider("SunEC") 这行代码时,你告诉Java安全框架不再使用 "SunEC" 提供者的服务。这可能导致以下问题:移除关键加密服务:
如果"SunEC"提供者是用于TLS握手中ECC相关操作的唯一提供者,那么移除它可能会导致Java虚拟机无法使用ECC加密套件,这可能违反了客户端和服务器之间的安全协议。TLS握手失败:
如果客户端尝试使用ECC加密套件与服务器进行握手,但服务器期望使用"SunEC"提供者支持的特定加密算法,而该提供者已被移除,这可能导致握手失败。兼容性问题:
某些TLS库或服务器可能特别依赖于特定的加密提供者。移除"SunEC"可能会影响到这些库或服务器的兼容性。安全漏洞:
如果你的应用程序依赖于ECC提供的安全性,移除"SunEC"提供者可能会降低安全性,使应用程序容易受到某些类型的攻击。配置错误:
如果"SunEC"提供者被用于支持某些特定的业务逻辑或安全策略,移除它可能会导致应用程序行为不符合预期。要解决这个问题,你可以考虑以下步骤:审查代码:
检查为什么需要移除"SunEC"提供者,是否有其他方式可以实现相同的目标,而不需要移除整个提供者。错误日志:
查看TLS握手失败的错误日志,了解具体是哪个步骤失败了,以及是否与ECC相关。恢复提供者:
如果确定移除"SunEC"是导致问题的原因,尝试恢复它,看看是否能解决问题。更新依赖:
如果你的应用程序依赖于特定的加密库或版本,确保这些依赖是最新的,并且与你的Java版本兼容。联系服务提供者:
如果问题依然存在,可能需要联系服务提供者或寻求专业的技术支持。在处理这类问题时,重要的是要理解你的应用程序对特定加密服务的依赖程度,以及这些服务如何与TLS握手过程相互作用。

接下来的工作就是看要不要删除这行代码,删除之后会不会对以前的功能有影响,需要回归测试。

这个问题困扰了我好久,感觉http、https吃得不透啊,需要去看一下《TCP/IP详解》这种经典了。

相关文章:

HTTPS 发送请求出现TLS握手失败

最近在工作中&#xff0c;调外部接口&#xff0c;发现在clientHello步骤报错&#xff0c;服务端没有返回serverHello。 从网上找了写方法&#xff0c;都没有解决&#xff1b; 在idea的vm options加上参数&#xff1a; -Djavax.net.debugSSL,handshake 把SSL和handshake的日…...

数字化精益生产系统--IFS财务管理系统

IFS财务管理系统是一款功能丰富、高效且灵活的企业财务管理软件&#xff0c;广泛应用于多个行业和不同规模的企业中。以下是对IFS财务管理系统的功能设计&#xff1a;...

基于SpringBoot的校园台球厅人员与设备管理系统

本系统是要设计一个校园台球厅人员与设备管理系统&#xff0c;这个系统能够满足校园台球厅人员与设备的管理及用户的校园台球厅人员与设备管理功能。系统的主要功能包括首页、个人中心、用户管理、会员账号管理、会员充值管理、球桌信息管理、会员预约管理、普通预约管理、留言…...

免杀笔记 ---> Session0--DLL注入

刚更新完上一篇&#xff0c;于是我们就马不停蹄的去跟新下一篇&#xff01;&#xff01; Session0注入 &#xff1a;&#xff1a; 各位看官如果觉得还不错的可以给博主点个赞&#x1f495;&#x1f495; 这次&#xff0c;我把这个脚本直接传到Github上了 喜欢的师傅点个Star噢…...

如何做好IT类的技术面试?

我们在找工作时&#xff0c;需要结合自己的现状&#xff0c;针对意向企业做好充分准备。作为程序员&#xff0c;你有哪些面试IT技术岗的技巧&#xff1f; 方向一&#xff1a;分享你面试IT公司的小技巧 我分享一些基于广泛观察和用户反馈的面试IT公司的小技巧&#xff1a; 技术准…...

A7 配置方式Master SPI如何更改位宽

在 FPGA 完成自初始化后&#xff0c;INIT 释放&#xff0c;FPGA 对模式引脚 (M[2:0]) 进行采样&#xff0c;以确定使用哪种配置模式。当模式引脚 M[2:0] 001 时&#xff0c;FPGA 开始以大约 3 MHz 的频率在 CCLK 上输出时钟。随后&#xff0c;FCS_B 驱动为低电平&#xff0c;紧…...

linux kthread任务管理

目录 一、linux 创建内核线程1.1 kthread_create1.2 kthread_create_worker kthread_queue_work 二、设置线程优先级和调度策略2.1 sched_setscheduler2.2 调度策略 一、linux 创建内核线程 1.1 kthread_create 在 linux 中&#xff0c;可以使用 kthread_create 接口创建内核…...

第一节 网络安全概述

一.网络空间安全 网络空间&#xff1a;一个由信息基础设施组成相互依赖的网络。 ---- 海陆空天&#xff08;大海、陆 地、天空、航天&#xff09; 通信保密阶段 ---- 计算机安全 ----- 信息系统安全 ----- 网络空间安全 计算机安全&#xff1a;开始秉持着“严于律己&#x…...

星光云VR全景系统源码

星光云VR全景系统源码 体验地址请查看...

spdlog一个非常好用的C++日志库(七): 源码分析之异常类spdlog_ex

目录 1.自定义异常类spdlog_ex 1.1.通用异常 1.2.系统调用异常 1.3.what()函数 2.异常的使用 2.1.抛出异常 2.2.控制异常使用 1.自定义异常类spdlog_ex 标准库异常类&#xff08;std::exception&#xff09;系列&#xff0c;能满足大多数使用异常的场景&#xff0c;但对…...

从一次 SQL 查询的全过程了解 DolphinDB 线程模型

1. 前言 DolphinDB 的线程模型较为复杂&#xff0c;写入与查询分布式表都可能需要多个类型的线程。通过了解 SQL 查询的全过程&#xff0c;可以帮助我们了解 DolphinDB 的线程模型&#xff0c;掌握 DolpinDB 的配置&#xff0c;以及优化系统性能的方法。 本教程以一个分布式 …...

Vue3.js“非原始值”响应式实现基本原理笔记(二)

如果您觉得这篇文章有帮助的话&#xff01;给个点赞和评论支持下吧&#xff0c;感谢~ 作者&#xff1a;前端小王hs 阿里云社区博客专家/清华大学出版社签约作者/csdn百万访问前端博主/B站千粉前端up主 此篇文章是博主于2022年学习《Vue.js设计与实现》时的笔记整理而来 书籍&a…...

论文 | PRCA: 通过可插拔奖励驱动的上下文适配器拟合用于检索问答的黑盒大语言模型

论文全称&#xff1a;PRCA: Fitting Black-Box Large Language Models for Retrieval Question Answering via Pluggable Reward-Driven Contextual Adapter 核心问题&#xff1a;如何在检索增强式问答&#xff08;ReQA&#xff09;任务中&#xff0c;利用大型语言模型&#xf…...

网络状态的智能感知:WebKit 支持 Network Information API 深度解析

网络状态的智能感知&#xff1a;WebKit 支持 Network Information API 深度解析 在现代 Web 应用中&#xff0c;理解用户的网络连接状态对于提供适应性体验至关重要。Network Information API&#xff0c;一个新兴的 Web API&#xff0c;允许 Web 应用访问设备的网络信息&…...

Vue3基础知识:组合式API中的provide和inject,他们作用是什么?如何使用?以及案例演示

1.provide和inject相较于父子传递的不同在于provide,inject可以用于跨层级通信&#xff08;通俗易懂的讲就是可以实现爷孙之间的直接信息传递&#xff09;。 1.跨层级传递数据 1.在顶层组件通过provide函数提供数据 2.底层组件通过inject函数获取数据 演示一&#xff1a;跨…...

Transformer自注意力机制(Self-Attention)模型

​ 上一篇我们介绍了transform专题一&#xff1a;Seq2seq model&#xff0c;也知道了transfrom属于seq2seq模型&#xff0c;这一排篇咱们接着介绍另外几种seq2seq架构的模型。&#xff09;RNN&#xff08;循环神经网络&#xff09;CNN&#xff08;卷积神经网络&#xff09;&…...

【计算机体系结构】缓存的false sharing

在介绍缓存的false sharing之前&#xff0c;本文先介绍一下多核系统中缓存一致性是如何维护的。 目前主流的多核系统中的缓存一致性协议是MESI协议及其衍生协议。 MESI协议 MESI协议的4种状态 MESI协议有4种状态。MESI是4种状态的首字母缩写&#xff0c;缓存行的4种状态分别…...

Ubuntu24.04 Isaacgym的安装

官方论坛 rl-接口 教程1 教程2 教程3 1.下载压缩包 link 2. 解压 tar -xvf IsaacGym_Preview_4_Package.tar.gz核心教程在 isaacgym/docs/install.html下 3. 从源码安装 Ubuntu24.04还需首先进入虚拟环境 python -m venv myenv # 创建虚拟环境&#xff0c;已有可跳过…...

docker 设置代理,通过代理服务器拉取镜像

docker 拉取目标镜像需要通过代理服务器进行时&#xff0c;可以通过为 docker 配置全局代理来实现。 注&#xff1a;Linux 上通过临时命令 export HTTP_PROXY 设置的代理&#xff0c;对 curl 这些有用&#xff0c;但是对 docker pull 不起作用。 示例 假设您的代理服务器地址是…...

OpenCV教程02:图像处理系统1.0(翻转+形态学+滤波+缩放+旋转)

-------------OpenCV教程集合------------- Python教程99&#xff1a;一起来初识OpenCV&#xff08;一个跨平台的计算机视觉库&#xff09; OpenCV教程01&#xff1a;图像的操作&#xff08;读取显示保存属性获取和修改像素值&#xff09; OpenCV教程02&#xff1a;图像处理…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...