windows USB 设备驱动开发-USB 客户端驱动程序验证程序

USB 客户端驱动程序验证程序是 USB 3.0 驱动程序堆栈的一项功能,包含在 Windows 8 中。 启用验证程序后,USB 驱动程序堆栈会失败或修改客户端驱动程序执行的某些操作。 这些失败模拟的错误条件,否则可能难以找到,并可能导致以后产生不良结果。 模拟故障使你有机会确保驱动程序能够正常处理故障。 客户端可以通过错误处理代码处理错误或执行不同的代码路径。

例如,客户端驱动程序通过批量终结点的静态流支持 I/O 操作。 通过使用验证程序,可以确保驱动程序的流逻辑正常工作,而不考虑各种主机控制器支持的流数。 若要模拟该场景,可以使用 usbVerifierStaticStreamCountOverride 设置稍后讨论。 每次驱动程序调用 USBD_QueryUsbCapability 以确定主机控制器支持的最大静态流数时,例程将返回不同的值。

 重要 USB 客户端驱动程序验证程序仅针对各种 xHCI 控制器测试驱动程序。 它模拟某些固有的 2.0 控制器行为,例如缺少链接式 MDL 支持。 但是,我们建议你必须使用 USB 2.0 控制器测试客户端驱动程序,而不是使用此工具来替代相同。

Windows 硬件实验室工具包 (HLK) 测试可用于系统、USB 主机控制器、集线器和设备的其他测试。 这些测试涵盖基本设备功能、可靠性和与 Windows 的兼容性。 有关详细信息,请参阅 Windows Hardware Lab Kit (HLK) USB 测试。

如何启用 USB 客户端驱动程序验证程序

若要使用 USB 客户端驱动程序验证程序,请在运行 Windows 8的目标计算机上启用它。 目标计算机必须具有 USB 设备连接到的 xHCI 控制器。

为客户端驱动程序启用驱动程序验证程序时,将自动启用 USB 客户端驱动程序 验证程序 。 或者,可以通过设置此注册表项来启用验证程序。

启用 Windows Driver Foundation (WDF) 验证程序控制应用程序 (WdfVerifier.exe) 不会自动启用 USB 客户端驱动程序验证程序。

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservices<Client Driver>ParametersUsbVerifierEnabled (DWORD)


UsbVerifierEnabled 注册表项采用 DWORD 值。 当 UsbVerifierEnabled 为 1 时,将启用 USB 客户端驱动程序验证程序;0 禁用它。 如果为客户端 驱动程序启用了驱动程序验证程序 ,并且 UsbVerifierEnabled 为 0,则禁用 USB 客户端驱动程序验证程序。

USB 客户端驱动程序验证程序的配置设置

启用验证程序后,USB 驱动程序堆栈通过调用USBD_xxxUrbAllocate例程来跟踪客户端驱动程序分配的 URL 。 如果客户端驱动程序泄露任何 URB,USB 驱动程序堆栈会使用该信息通过 驱动程序验证程序进行 bug 检查。 在这种情况下,请使用 !usbanalyze -v  命令来确定泄漏原因。

此外,还可以根据需要配置 USB 客户端驱动程序验证程序以修改或失败特定例程,并指定例程必须失败的频率。 若要配置验证程序,请设置注册表项,如下所示:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservices<Client driver>Parameters<USB client driver verifier setting> (DWORD)


USB 客户端驱动程序验证程序设置注册表项采用 DWORD 值。 如果添加、修改或删除任何设置,则必须使用系统重新枚举设备以应用设置。

此表显示了 USB 客户端驱动程序验证程序设置的可能值。 这些设置适用于在 Service 密钥下指定的客户端驱动程序。

USB 硬件验证程序 (USB3HWVerifierAnalyzer.exe)

有用于测试和调试特定硬件事件的 USB 硬件验证程序工具 (USB3HWVerifierAnalyzer.exe)。

大多数硬件问题会以导致最终用户体验不佳的方式出现,且通常很难确定确切的故障。 USB 硬件验证程序旨在捕获设备、端口、中心、控制器或其组合中出现的硬件故障。

USB 硬件验证程序可执行以下任务:

  • 实时捕获硬件事件并显示信息;
  • 生成包含所有事件相关信息的跟踪文件;
  • 分析现有跟踪文件以获取事件信息;
获取 USB 硬件验证程序分析器工具

USB 硬件验证程序工具包含在 MUTT 软件包中,而此包可通过 MUTT 软件包中的工具进行下载。

此工具包包含多个用于执行压力与传输测试(包括电源转换)和 SuperSpeed 测试的工具。 该包还有一个自述文档(可供单独下载)。 本文档简要概述了 MUTT 硬件的各个类型。 其中提供了有关应运行的各种测试的分步指南,并为控制器、中心、设备与 BIOS/UEFI 测试推荐了相关拓扑。

如何使用 USB 硬件验证程序来捕获事件

若要使用硬件验证程序来捕获事件,请执行以下步骤:

1.通过在提升的命令提示符处运行此命令来启动会话。

USB3HWVerifierAnalyzer.exe

该工具支持以下选项:


2.运行要为其捕获硬件事件的测试场景。

会话期间,USB 硬件验证程序会在出现硬件事件时捕获其相关信息。 如果要筛选针对特定硬件的事件,则请指定该硬件的 VendorId 和 ProductId。 该工具可能不会捕获对此设备进行完全枚举之前所出现事件的某些相关信息(如 VID/PID)。 会话结束时生成的详细报告中提供了缺少的信息。

AllEvents ETL 文件始终包含所有设备的所有 ETW 事件。 它不受 -v 和 -p 开关的影响。

按 VendorId 和 ProductId 进行筛选的命令行如下:

USB3HWVerifierAnalyzer.exe -v 0781 -p 5595

硬件验证程序工具的示例输出如下:

Session Name : TraceSessionFriJan271351112023Attempting to start session TraceSessionFriJan271351112023...
Trace Session created...Status : 0Provider Enable Success, Status : 0Provider Enable Success, Status : 0Provider Enable Success, Status : 0Provider Enable Success, Status : 0Provider Enable Success, Status : 0Provider Enable Success, Status : 0
13319329877.425596: (UsbHub3/179)Event Message: Client Initiated Recovery ActionVendorID/ProductID: 0x5e3/0x612DeviceInterfacePath: \??\USB#VID_05E3&PID_0612#6&130491ac&0&4#{f18a0e88-c30c-11d0-8815-00a0c906bed8}DeviceDescription: Generic SuperSpeed USB HubPortPath:  0x12, 0x4, 0x0, 0x0, 0x0, 0x0Provider disable Success, Status : 0Provider disable Success, Status : 0Provider disable Success, Status : 0Provider disable Success, Status : 0Provider disable Success, Status : 0Provider disable Success, Status : 0Session Stopped...Status : 0

3.按 Ctrl+C 可停止会话。

会话结束时,会向当前目录添加一个名为 AllEvents.etl 的文件。 此文件包含有关会话期间所捕获全部事件的跟踪信息。

除 AllEvents.etl 之外,此命令窗口还会显示一个报表。 此报告包含实时输出中缺失的某些信息。 以下输出显示了上述会话的对应示例测试报告。 此报告显示了 USB 硬件验证程序遇到的所有事件。

Record #1 (Key = 0x57ff0de4858)VendorID/ProductID: 0x451/0x2077DeviceInterfacePath: \??\USB#VID_0451&PID_2077#6&c4be011&0&2#{f18a0e88-c30c-11d0-8815-00a0c906bed8}DeviceDescription: Generic USB HubPortPath:  0x2, 0x0, 0x0, 0x0, 0x0, 0x0All errors encountered:
#1: (UsbHub3/176): DescriptorValidationError20HubPortPwrCtrlMaskZero
#2: (UsbHub3/179): Client Initiated Recovery Action
#3: (UsbHub3/179): Client Initiated Recovery Action
#4: (UsbHub3/179): Client Initiated Recovery Action
#5: (UsbHub3/179): Client Initiated Recovery Action
#6: (UsbHub3/179): Client Initiated Recovery Action
#7: (UsbHub3/179): Client Initiated Recovery Action
#8: (UsbHub3/179): Client Initiated Recovery Action
#9: (UsbHub3/179): Client Initiated Recovery Action
#10: (UsbHub3/179): Client Initiated Recovery Action
#11: (UsbHub3/179): Client Initiated Recovery Action
#12: (UsbHub3/179): Client Initiated Recovery Action
#13: (UsbHub3/179): Client Initiated Recovery Action
#14: (UsbHub3/179): Client Initiated Recovery ActionRecord #2 (Key = 0x57ff62a36a8)VendorID/ProductID: 0x1058/0x740DeviceInterfacePath: \??\USB#VID_1058&PID_0740#57583931453631414E5A3331#{a5dcbf10-6530-11d2-901f-00c04fb951ed}DeviceDescription: USB Mass Storage DevicePortPath:  0x2, 0x4, 0x0, 0x0, 0x0, 0x0All errors encountered:
#1: (UsbHub3/173): SuperSpeed Device is Connected on the 2.0 BusRecord #3 (Key = 0x57ff79fd4e8)VendorID/ProductID: 0x1edb/0xbd3bPortPath:  0x3, 0x0, 0x0, 0x0, 0x0, 0x0All errors encountered:
#1: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge
#2: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge
#3: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge
#4: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge
#5: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge
#6: (UsbHub3/176): DescriptorValidationErrorCompanionIsochEndpointWBytesPerIntervalTooLarge
#7: (UsbHub3/176): DescriptorValidationErrorStringMismatchBetweenBlengthAndBufferLength
#8: (UsbHub3/176): DescriptorValidationErrorStringMismatchBetweenBlengthAndBufferLength

在前面的示例报告中,记下每个记录的 Key 字段值。 此报表会按这些 Key 值对信息进行分类,以便进行阅读。 AllEvents.etl 中捕获的事件使用相同的 Key 值。

4.运行以下命令,将 AllEvents.etl 转换为文本格式:

USB3HWVerifierAnalyzer.exe -f AllEvents.etl /v > Output.txt

5.在输出文件中,搜索前面记录的 Key 值。 这些值与以下字段之一关联:fid_UcxController、fid_HubDevice和 fid_UsbDevice。

在 Netmon 中打开 AllEvents.etl,然后选择添加 <field_name> 以显示筛选器,以便按控制器、中心和设备来筛选事件。

USB 硬件验证程序标志
USBLPM 工具

USBLPM 工具监视 USB 3.0 端口的 U0/U1/U2/U3 电源状态。 它还可用于验证 U0/U1/U2 之间的转换是否正确发生。 此外,该工具还可以在系统中的所有设备上启用或禁用 U1 和/或 U2 状态。

该工具包含在 MUTT 软件包中。

USBLPM

USBLPM 仅适用于Windows 8,适用于 Microsoft USB 3.0 驱动程序堆栈。 该工具不作为此包中的批处理文件和脚本的一部分运行。 该工具适用于控制器、集线器和设备公司,用于监视新的 USB 3.0 电源状态。

USBLPM 在 监视、 测试或 配置 模式下运行。

监视

这是在没有任何参数的情况下运行该工具时的默认模式。 在此模式下,该工具会定期查询每个级别的 USB 3.0 设备,并显示端口的当前 U 状态。 默认情况下,该工具每 500 毫秒运行一次查询。

在监视模式下,可以通过以下命令行选项更改时间段:

usblpm /PollingInterval &lt;*time in milliseconds*&gt;

其中,时间值为 1 到 100000 的整数。 /PollingInterval 选项是可选的。 通常,不应更改时间段。

测试

测试设备或中心:

  1. 启动该工具。
  2. 将模式从“监视”更改为“测试”。
  3. 选择测试设备。
  4. 单击“ 启动” 以启动测试运行。

测试在 10 秒内完成,结果会显示给用户。

测试尝试 U0/U1/U2 状态的不同组合,并确保测试设备成功重新进入 U0。 这是通过发送查询 BOS 描述符的控件传输来完成的。

若要测试中心,请删除连接到中心的所有设备并运行测试。 然后,附加一个或多个设备并重新运行测试。 但是,如果其中一个下游设备未正确支持 U1/U2,则中心测试将失败。 因此,在中心上运行测试之前,建议先在中心下游的设备上运行测试,以确保它们通过测试。

运行测试时,请勿更改设备拓扑。 如果动态更改配置,则工具的行为未定义。

配置 U1/U2 状态

可以通过运行以下命令,使用 USBLPM 为系统上的所有 USB 设备启用或禁用 U1 和 U2 状态:

usblpm /enable|/disable U1|U2

例如,此命令禁用 U2: 

usblpm /disable U2

在“配置”模式下,该工具不显示任何窗口。 在运行该工具后,启用或禁用将保留。

USBLPM 的已知问题

在测试 SuperSpeed 集线器的 USBLPM 之前,应执行以下步骤来禁用选择性挂起。

  1. 在“设备管理器”中,右键单击“SuperSpeed”中心,然后选择“属性”。
  2. 单击“ 电源管理 ”选项卡。
  3. 取消选中 “允许计算机关闭此设备以节省电量”。

使用 USBLPM 完成测试后,通过选中 “允许计算机关闭此设备以节省电源以重新启用选择性挂起”,为中心启用选择性挂起。

 备注 USBLPM 当前不测试 USB 2.1 LPM。

USBStress 包

USBStress 是内核模式驱动程序的用户模式应用程序 (usbstress.exe) 和驱动程序安装包的组合,usbstress.sys。

这些文件包含在 MUTT 软件包中。USBStress 是一组测试,侧重于整个 USB 驱动程序堆栈、USB 通用父驱动程序 (Usbccgp.sys) 、控制器及其上游集线器。 USBStress 随机选择测试并配置附加的测试设备。 由于测试的随机性,建议在 24 小时内运行 USBStress,以允许更多的测试组合。

该工具执行与测试设备之间各种传输长度的控制、批量、常时等量数据传输。 对于 SuperMUTT 设备,USBTCD 将数据传输到批量终结点支持的流。

USBStress 驱动程序在很大程度上是自驱动式的,也就是说,大多数 I/O 请求是由驱动程序而不是应用程序生成的。 驱动程序使用计时器和工作项来生成 I/O 并执行其他操作。 驱动程序检查注册表以确定它是否应运行其测试。 外部程序设置该注册表项。 此驱动程序的目标是在各种操作之间创建尽可能多的并发性,以消除争用条件和同步问题。

此列表汇总了 USBStress 执行的测试:

  • 使用远程唤醒进行选择性挂起;
  • 批量、中断和常时等量终结点上的并发读/写请求以及取消;
  • 并发字符串传输请求和取消;
  • 批量终结点和取消 上的并发中止管道;
  • 随机重置为意外删除和重新枚举;
  • 随机重置为意外删除和重新枚举,重新枚举失败;
  • 随机选择可用的备用接口 ;
  • 随机指示设备每隔 n 个控制传输停止一次;
  • 如果已连接,随机指示 MUTT Pack (断开 VBUS 与公开的下游端口的连接;
  • 如果已连接,则随机指示 MUTT 包 ,以模拟公开的下游端口 上的过流情况;
  • 随机指示 MUTT Pack (是否已连接) ,以在中心上执行硬件重置;

若要为 MUTT 设备安装usbstress.sys驱动程序,请使用 MuttUtil 和 -UpdateDriver 选项:

c:\Program Files (x86)\USBTest\x64>MuttUtil.exe -UpdateDriver usbstress.inf
Return value: 0c:\Program Files (x86)\USBTest\x64>MuttUtil.exe -list:    : HARDWARE ID                    :  PROBLEM CODE  : DRIVER
DEVICE :  0 : USB\VID_045E&PID_078E&REV_8011 :             0  : USBSTRESS
Return value: 1
USBTCD 包

USBTCD 是用户模式应用程序和内核模式驱动程序的组合。 该工具执行读取和写入操作。 它启动与测试设备之间各种传输长度的控制、批量、常时、数据传输。 对于 SuperMUTT 设备,USBTCD 将数据传输到批量终结点支持的流。 它还可以将传输缓冲区作为链接的 MDL 发送。 在这种情况下,可以指定传输缓冲区中的段数。

USBTCD 文件包含在 MUTT 软件包中。

USBTCD

若要使用这些命令,必须加载 USBTCD 驱动程序 (USBTCD.sys) 作为设备的函数驱动程序。 若要加载设备的驱动程序,请运行 MUTTUtil 并指定 USBTCD.inf。 此工具为所有连接的 USB 设备加载 USBTCD.sys 。

c:\Program Files (x86)\USBTest\x64>MuttUtil.exe -UpdateDriver usbtcd.inf
Return value: 0c:\Program Files (x86)\USBTest\x64>MuttUtil.exe -list:    : HARDWARE ID                    :  PROBLEM CODE  : DRIVER
DEVICE :  0 : USB\VID_045E&PID_078E&REV_8011 :             0  : USBTCD
Return value: 1

可以使用以下命令测量与 SuperMUTT 设备的批量终结点之间的传输性能。

Usbtcd –perf –read 1 100 2 10240000 0Usbtcd –perf –write 1 100 0 10240000 0

在前面的命令中,USBTCD 从管道 2 读取 10240000 字节。 第二个命令中,USBTCD 启动写入操作,其中将 10240000 个字节发送到管道 0。 对于这两个命令,该工具执行操作 100 次,并且不指定超时值。

这些命令用于测量 MUTT 设备的批量终结点的性能。 请注意,在这种情况下,传输大小会减小。

Usbtcd –perf –read 1 100 2 512000 0Usbtcd –perf –write 1 100 0 512000 0

这些命令测量到 SuperMUTT 设备的批量终结点流的数据传输的性能。 目前,设备固件尝试每毫秒切换一次流,将 ERDY 与新的流编号一起发送到主机。 这是使用设备内部的计时器实现的。

Usbtcd –sread 1 100 7 1 1024 0Usbtcd –swrite 1 100 6 1 1024 0

在上述命令中,USBTCD 在 SuperMUTT 设备的批量终结点中读取和写入特定流。 在第一个命令中,该工具启动一个工作线程,该线程从与管道 7 关联的流 1 读取 1024 字节。 同样,第二个命令将 1024 字节写入与管道 6 关联的流 1。 对于这两个命令,该工具执行操作 100 次,并且不指定超时值。

若要查看有关 USBTCD 的帮助,请运行以下命令:

usbtcd -?

命令显示有关命令行选项的信息。 可以在命令行上指定传输大小、详细程度、传输超时等。

USB XHCIWMI

XHCIWMI 是用于诊断目的的工具。 此工具仅在Windows 8上运行,并在设备连接到 xHCI 端口和 Windows 加载 Microsoft USB 3.0 驱动程序堆栈时收集信息。

XHCIWMI在提升的命令提示符窗口中运行以下命令:

Xhciwmi.exe

该工具在命令窗口中显示当前固件版本和有关控制器的信息。 运行以下命令,针对已知问题验证控制器和集线器的固件:

Xhciwmi.exe –verify

建议使用 –verify 选项来检查控制器和连接的中心。

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

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

相关文章

【Spring Boot】网页五子棋项目中遇到的困难及解决方法

目录 一、HikariPool-1 - Starting异常二、Invalid bound statement (not found)异常三、The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary异常四、The server time zone value时区报错异常五、补充知识点…

Python入门基础教程(非常详细)

现在找工作真的越来越难了&#xff01;今年更是难上加难 前几天在网上刷到这样一条热搜&#xff1a; #23岁找工作因年龄大被HR拒绝了# 是这个世界疯了还是我疯了&#xff1f; 合着只想要有20年以上工作经验的应届毕业生是吧 这好像就是现在的就业市场现状&#xff1a;“35岁…

【iOS】——探究isKindOfClass和isMemberOfClass底层实现

isKindOfClass 判断该对象是否为传入的类或其子类的实例 // 类方法实现&#xff0c;用于检查一个类是否属于另一个类或其父类链上的任何类。(BOOL)isKindOfClass:(Class)cls {// 从当前类开始&#xff0c;tcls将沿着元类的继承链向上遍历。for (Class tcls self->ISA(); …

MQTT micro-ROS:构建高效的机器人应用

什么是 micro-ROS&#xff1f; 在之前的 MQTT & FreeRTOS&#xff1a;打造你的远程控制实时应用 中&#xff0c;我们介绍了如何在 FreeRTOS 中构建你的 MQTT 应用。 FreeRTOS 主要应用在对实时性要求较高的场景中&#xff0c;但这类 RTOS 专注于提供实时任务调度和同步机…

【SD】 Stable Diffusion(SD)原理详解与ComfyUI使用 2

Stable Diffusion&#xff08;SD&#xff09;原理详解与ComfyUI使用 Stable Diffusion&#xff08;SD&#xff09;原理详解与ComfyUI使用1. SD整体结构2. Clip&#xff08;文本编码器&#xff09;3. Unit&#xff08;生成模型&#xff09;4. VAE&#xff08;变分自编码器&#…

关于对CSDN的谴责

关于对CSDN的谴责 如果不是心血来潮登了一次旧帐号我是万万不会想到&#xff0c;所有的文章都被设置成了仅VIP可见。 CSDN你的VIP有多不受人待见您不知道吗&#xff1f;为什么要把我用于你开通VIP刷绩效的工具&#xff1f; 这种东西不应该首先经过同意再开启吗&#xff1f;默认…

粘弹性和机械塑性等力学行为如何影响细胞行为?

组织和细胞外基质&#xff08;ECM&#xff09;是细胞生存和功能的关键组成部分&#xff0c;它们不仅提供细胞生长和迁移的结构支撑&#xff0c;还通过其力学特性影响着细胞的形态、功能和行为。组织和ECM并非简单的材料&#xff0c;它们展现出复杂且多样的力学行为&#xff0c;…

2024最新教程,在docker中安装kali,并配置ssh连接

docker的基本使用&#xff1a;搭建高效攻防靶场vulfocus与Docker仓库管理实战&#xff1a;从听说到入门 拉取kali官方镜像 docker pull kalilinux/kali-rolling 启动一个kali镜像&#xff0c;将容器中的22端口映射到主机100端口&#xff0c;方便ssh直接连接 docker run -it…

任务2:python+InternStudio 关卡

任务地址 https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Python/task.md 文档 https://github.com/InternLM/Tutorial/tree/camp3/docs/L0/Python 任务 Python实现wordcount import re import collectionstext """ Got this panda plush to…

【BUG】已解决:ModuleNotFoundError: No module named‘ pip‘

已解决&#xff1a;ModuleNotFoundError: No module named‘ pip‘ 目录 已解决&#xff1a;ModuleNotFoundError: No module named‘ pip‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰…

爬虫(二)——爬虫的伪装

前言 本文是爬虫系列的第二篇文章&#xff0c;主要讲解关于爬虫的简单伪装&#xff0c;以及如何爬取B站的视频。建议先看完上一篇文章&#xff0c;再来看这一篇文章。要注意的是&#xff0c;本文介绍的方法只能爬取免费视频&#xff0c;会员视频是无法爬取的哦。 爬虫的伪装 …

LeetCode-day21-1186. 删除一次得到子数组最大和

LeetCode-day21-1186. 删除一次得到子数组最大和 题目描述示例示例1&#xff1a;示例2&#xff1a;示例3&#xff1a; 思路代码 题目描述 给你一个整数数组&#xff0c;返回它的某个 非空 子数组&#xff08;连续元素&#xff09;在执行一次可选的删除操作后&#xff0c;所能得…

Springcloud之gateway的使用详解

官网地址&#xff1a;https://docs.spring.io/spring-cloud-gateway/docs/4.0.4/reference/html/ 1.网关入门 helloword 网关不依赖start-web 导入的pom&#xff1a; <!--gateway--> <dependency><groupIdorg.springframework.cloud</groupId><arti…

JAVA零基础学习2(算术逻辑三元运算符、原码反码补码、标准的类如何描写)

JAVA零基础学习2&#xff08;算术逻辑三元运算符、原码反码补码、标准的类如何描写&#xff09; 算术运算符算术运算符自增和自减运算符算术运算符的优先级示例代码 逻辑运算符三元运算符示例代码示例1&#xff1a;简单的条件判断示例2&#xff1a;嵌套的三元运算符 原码反码补…

贪吃蛇超精讲(C语言)

前言 如果你还是个萌新小白&#xff0c;那么该项目的攻克过程一定会十分艰难。虽然作者已经将文章尽可能写的逻辑清晰&#xff0c;内容详细。但所谓“纸上得来终觉浅”&#xff0c;在讲到陌生结构和函数时&#xff0c;大家请一定自己动手去敲一遍代码&#xff0c;这很重要&…

一次Golang单体架构中的复杂长函数的重构实践和思考

在现代应用程序开发中&#xff0c;信息流&#xff08;Feed&#xff09;是许多平台核心功能的一部分。信息流往往会聚合大量的数据&#xff0c;构建这样一个信息流列表是一个复杂的任务。需要从多个微服务和数据库中获取大量数据&#xff0c;包括用户、频道、标签、等级、用户状…

【Langchain大语言模型开发教程】基于文档问答

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI Embedding&#xff1a; https://huggingface.co/BAAI/bge-large-en-v1.5/tree/main 学习目标 1、Embedding and Vector Store 2、RetrievalQA 引包、加载环境变量 import osfrom dotenv import…

react开发-配置开发时候@指向SRC目录

这里写目录标题 配置开发时候指向SRC目录VScode编辑器给出提示总体1.配置react的 2.配置Vscode的1.配置react的2,配置VSCode的提示支持 配置开发时候指向SRC目录VScode编辑器给出提示 总体1.配置react的 2.配置Vscode的 1.配置react的 1. 我么需要下载一个webpack的插件 这样…

Java案例斗地主游戏

目录 一案例要求&#xff1a; 二具体代码&#xff1a; 一案例要求&#xff1a; &#xff08;由于暂时没有学到通信知识&#xff0c;所以只会发牌&#xff0c;不会设计打牌游戏&#xff09; 二具体代码&#xff1a; Ⅰ&#xff1a;主函数 package three;public class test {…

filebeat,kafka,clickhouse,ClickVisual搭建轻量级日志平台

springboot集成链路追踪 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from…