ActiveMQ 生产环境问题排查与调优指南(二)
五、调优策略与实践
5.1 JVM 调优
JVM 调优对于提升 ActiveMQ 性能至关重要,合理的 JVM 配置可以使 ActiveMQ 更高效地利用系统资源,减少性能瓶颈。
设置合理的堆内存大小是 JVM 调优的关键步骤。堆内存是 JVM 中用于存储对象实例的区域,其大小直接影响 ActiveMQ 处理消息的能力。通过 - Xms 和 - Xmx 参数可以分别设置 JVM 启动时的初始堆内存大小和最大堆内存大小。在一个消息量较大的电商系统中,根据业务预估和性能测试,将 - Xms 设置为 1024m,-Xmx 设置为 2048m,这样可以确保 ActiveMQ 在启动时就拥有足够的内存来处理消息,同时避免因堆内存过小导致频繁的垃圾回收。
在实际应用中,可以通过监控工具,如 JVisualVM,观察堆内存的使用情况。如果发现堆内存使用率持续过高,接近或超过设置的最大值,可能需要适当增大堆内存。相反,如果堆内存使用率长期较低,说明设置的堆内存过大,可能会浪费系统资源,此时可以适当减小堆内存。
选择合适的垃圾回收器也是 JVM 调优的重要环节。JVM 提供了多种垃圾回收器,如 Serial GC、Parallel GC、CMS GC 和 G1 GC 等,它们各有特点,适用于不同的应用场景。
对于 ActiveMQ 这种需要处理大量消息的应用,通常推荐使用 G1 GC(Garbage-First Garbage Collector)。G1 GC 是一种面向服务器的垃圾回收器,它具有以下优点:一是可预测的停顿时间,G1 GC 通过将堆内存划分为多个大小相等的 Region,在回收时可以优先处理垃圾最多的 Region,从而减少了 Full GC 的频率和停顿时间。在高并发的消息处理场景下,这可以确保 ActiveMQ 在处理消息时不会因为长时间的垃圾回收停顿而影响性能;二是高吞吐量,G1 GC 能够在回收垃圾的同时,尽量减少对应用程序线程的影响,保证系统的高吞吐量。在一个每秒处理数千条消息的订单处理系统中,使用 G1 GC 可以使 ActiveMQ 稳定地处理大量消息,满足业务的性能需求。
在选择垃圾回收器时,还需要考虑应用的具体特点和性能需求。如果应用对停顿时间非常敏感,要求低延迟,那么 CMS GC(Concurrent Mark Sweep)也是一个不错的选择,它在垃圾回收过程中尽量减少对应用程序的暂停时间。但 CMS GC 也有一些缺点,如可能会产生内存碎片,需要更多的 CPU 资源等。
5.2 网络配置优化
网络配置的优化对于减少 ActiveMQ 的网络延迟和提高吞吐量起着关键作用,它能够确保消息在生产者、ActiveMQ 服务器和消费者之间快速、稳定地传输。
调整 TCP 连接参数是网络配置优化的重要方面。TCP 连接参数中的 soTimeout、tcpNoDelay 等对消息传输有着显著影响。soTimeout 用于设置 Socket 读取数据的超时时间,合理设置该参数可以避免因长时间等待数据而导致的线程阻塞。在一个网络环境不太稳定的分布式系统中,将 soTimeout 设置为 5000 毫秒(5 秒),可以使 ActiveMQ 在等待数据超过 5 秒时及时抛出异常,避免线程长时间阻塞,从而提高系统的响应速度。tcpNoDelay 参数则用于控制是否启用 Nagle 算法,Nagle 算法会将小的数据包合并成大的数据包发送,以减少网络开销,但这也会导致数据发送的延迟。在对实时性要求较高的消息传输场景中,如金融交易系统,将 tcpNoDelay 设置为 true,禁用 Nagle 算法,可以确保消息能够及时发送,减少传输延迟。
优化网络拓扑也是提升网络性能的重要手段。合理规划生产者、消费者和 ActiveMQ 服务器的网络布局,尽量减少网络跳数和中间节点,可以降低网络延迟。在一个企业内部的分布式系统中,将 ActiveMQ 服务器部署在靠近生产者和消费者的核心网络区域,避免通过多个子网或路由器进行数据传输,这样可以显著减少网络延迟,提高消息传输的效率。使用高速网络设备,如万兆网卡、高性能交换机等,也可以提升网络的带宽和传输速度,满足高并发消息传输的需求。在电商大促等高并发场景下,高速网络设备能够确保大量的订单消息、支付消息等及时传输,保证系统的正常运行。
5.3 磁盘 I/O 优化
磁盘 I/O 性能对 ActiveMQ 的消息持久化和存储效率有着直接的影响,优化磁盘 I/O 可以有效提升 ActiveMQ 在处理持久化消息时的性能。
选择高性能存储设备是提升磁盘 I/O 性能的基础。相比于传统的机械硬盘,固态硬盘(SSD)具有读写速度快、随机访问性能好等优势。在 ActiveMQ 中,使用 SSD 作为存储设备可以显著提高消息的持久化速度。在一个订单处理系统中,大量的订单消息需要持久化到磁盘,如果使用机械硬盘,由于其读写速度较慢,消息写入磁盘的时间会较长,容易导致消息堆积和处理延迟。而使用 SSD 后,消息的写入速度可以提高数倍甚至数十倍,大大提升了系统的处理能力。
优化文件系统也是提高磁盘 I/O 性能的重要措施。文件系统的选择和配置会影响磁盘的读写效率。在 Linux 系统中,ext4、XFS 等文件系统在性能上表现较好。对于 ActiveMQ 的持久化存储目录,使用 ext4 文件系统,并合理调整文件系统的参数,如 inode 数量、块大小等,可以提高文件的读写性能。调整 inode 数量可以根据实际存储的文件数量和大小进行优化,避免 inode 不足导致文件创建失败;合理设置块大小可以提高文件的读写效率,对于小文件较多的场景,选择较小的块大小可以减少磁盘空间的浪费,提高存储效率。
定期进行磁盘碎片整理也是维护磁盘 I/O 性能的重要手段。随着时间的推移,磁盘上的文件会逐渐碎片化,这会导致磁盘读写速度下降。在 Windows 系统中,可以使用磁盘碎片整理工具定期对 ActiveMQ 的存储磁盘进行碎片整理;在 Linux 系统中,可以使用 e4defrag 等工具对 ext4 文件系统进行碎片整理,以保持磁盘的高效读写性能。
5.4 消息处理优化
消息处理优化是提高 ActiveMQ 整体性能的关键环节,通过采用合理的消息发送和消费方式,可以显著提升消息处理的效率。
批量发送消息是一种有效的优化方式。在生产者端,将多条消息打包成一个批次进行发送,可以减少网络传输的次数,提高消息发送的效率。在一个电商系统中,当用户批量下单时,将多个订单消息打包成一个批次发送到 ActiveMQ,而不是逐个发送,这样可以大大减少网络开销,提高订单处理的速度。具体实现时,可以使用 JMS 的 BatchMessage 或在应用层自行封装消息批次。在使用 JMS 的 BatchMessage 时,需要注意批次大小的控制,避免批次过大导致内存占用过高或网络传输超时。
异步消费也是提高消息处理效率的重要方法。在消费者端,采用异步消费模式可以使消费者在处理消息时不会阻塞主线程,从而提高系统的并发处理能力。在一个订单处理系统中,消费者接收到订单消息后,将消息处理任务提交到一个线程池中进行异步处理,主线程可以继续接收新的消息,这样可以大大提高订单处理的吞吐量。为了确保异步消费的可靠性,需要合理设置线程池的大小和线程的生命周期管理,避免线程过多导致资源耗尽或线程长时间空闲造成资源浪费。还需要处理好异步处理过程中的异常情况,确保消息能够得到正确的处理。
六、监控与维护
6.1 监控指标与工具
监控对于确保 ActiveMQ 在生产环境中的稳定运行至关重要,通过对关键指标的实时监控,我们能够及时发现潜在的问题并采取相应的措施。
ActiveMQ 的关键监控指标涵盖多个方面。消息队列长度是一个核心指标,它直观地反映了队列中待处理消息的数量。如果队列长度持续增长且长时间保持在较高水平,很可能预示着消息积压问题的出现,需要及时排查消费者的处理能力以及消息生产的速率。在一个电商订单处理系统中,如果订单队列长度不断增加,可能是因为订单处理模块的消费者出现故障或者处理效率低下,无法及时处理新产生的订单消息。
消费者数量也是重要的监控指标之一。消费者数量的异常变化,减少或增加,都可能对消息处理产生影响。消费者数量突然减少,可能意味着部分消费者出现了故障,导致消息无法及时被消费,从而引发消息积压;而消费者数量的异常增加,可能会对系统资源造成过大的压力,影响系统的整体性能。在一个物流配送系统中,配送任务消息的消费者数量如果突然减少,可能会导致配送任务无法及时分配,影响物流配送的时效性。
消息发送和接收速率能够反映系统的业务流量和处理能力。通过监控这两个速率,可以了解系统的负载情况以及消息处理的效率。如果发送速率远高于接收速率,可能会出现消息积压;反之,如果接收速率远高于发送速率,可能意味着生产者的生产能力不足。在一个社交平台中,用户发布动态的消息发送速率如果突然大幅增加,而接收和处理这些消息的速率跟不上,就可能导致消息处理延迟,影响用户体验。
内存和 CPU 使用率是衡量系统资源消耗的关键指标。过高的内存使用率可能导致内存溢出,进而影响 ActiveMQ 的正常运行;而过高的 CPU 使用率则可能表明系统正在进行大量的计算或处理任务,可能会导致系统性能下降。当 ActiveMQ 在处理大量复杂的消息业务逻辑时,可能会占用大量的 CPU 资源,导致 CPU 使用率升高。如果此时系统内存也被大量占用,就可能引发内存溢出等问题。
JMX 是监控 ActiveMQ 的强大工具之一,它提供了丰富的接口,通过这些接口可以深入获取 ActiveMQ 内部的各种运行状态和指标信息。通过 JMX 可以获取 Broker 的整体状态,包括总消息数、总消费者数、总生产者数等;还可以获取每个队列和主题的详细信息,如队列大小、消费者数量、消息入队和出队速率等。使用 JConsole 工具连接到 ActiveMQ 的 JMX 接口,就可以直观地查看这些指标的实时数据,并且可以对一些关键指标设置阈值,当指标超过阈值时及时发出警报。
ActiveMQ 自带的 Web Console 也是常用的监控工具,它以直观的 Web 界面展示了 ActiveMQ 的运行状态。通过 Web Console,可以方便地查看队列和主题的状态,包括消息数量、消费者和生产者的信息等;还可以进行一些基本的管理操作,如暂停和恢复队列、清除队列中的消息等。在 Web Console 的队列监控页面,可以实时看到队列的当前消息数、消费者数量以及消息的入队和出队情况,便于运维人员快速了解队列的运行状况。
6.2 定期维护与优化
定期进行性能测试和参数调整是保障 ActiveMQ 持续稳定高效运行的关键措施。随着业务的不断发展和变化,系统的负载和需求也会相应改变,因此定期对 ActiveMQ 进行性能测试,能够及时发现潜在的性能问题,并通过调整参数来优化系统性能。
制定维护计划时,应明确性能测试的周期,每月或每季度进行一次全面的性能测试。在性能测试过程中,可以模拟不同的业务场景和负载情况,使用 JMeter 等工具向 ActiveMQ 发送大量的消息,观察其在高并发情况下的性能表现,包括消息的发送和接收速度、队列的处理能力、资源的消耗情况等。通过这些测试数据,可以分析出系统的性能瓶颈所在,为后续的参数调整提供依据。
根据性能测试的结果,对 ActiveMQ 的参数进行优化调整。如果发现消息发送和接收速度较慢,可以适当调整网络相关的参数,如 TCP 连接的超时时间、缓冲区大小等;如果发现队列处理能力不足,可以调整线程池的大小,增加线程数量以提高消息处理的并发能力;如果发现内存或 CPU 使用率过高,可以优化 JVM 的配置,调整堆内存大小、选择更合适的垃圾回收器等。
除了性能测试和参数调整,定期清理无用的队列和主题也是维护工作的重要内容。在系统运行过程中,可能会产生一些不再使用的队列和主题,这些无用的资源不仅占用系统的存储空间,还可能影响系统的性能。定期检查并清理这些无用的队列和主题,可以释放系统资源,提高系统的运行效率。
七、案例分析
在某电商企业的生产环境中,ActiveMQ 被用于订单处理、库存管理和物流配送等核心业务模块之间的消息通信。该系统每天处理数万笔订单,消息流量较大。
7.1 问题现象
在一次电商促销活动期间,系统出现了严重的性能问题。订单处理模块的消息堆积严重,队列中的未处理订单消息数量在短时间内迅速增长到数十万条。这导致订单处理延迟大幅增加,用户下单后长时间看不到订单处理结果,物流配送也因为无法及时获取订单信息而出现延误,严重影响了用户体验和业务的正常运转。同时,ActiveMQ 服务器的内存使用率急剧上升,接近 100%,CPU 使用率也持续保持在高位,系统随时可能因资源耗尽而崩溃。
7.2 排查过程
运维团队首先通过 JMX 监控工具查看 ActiveMQ 的运行状态,发现订单队列的消息入队速率远远高于出队速率,这表明消息的生产速度过快,而消费速度跟不上。进一步分析消费者的日志,发现消费者在处理消息时出现了大量的数据库连接超时和业务逻辑异常。
深入检查消费者的代码和配置,发现消费者在处理订单消息时,需要进行复杂的数据库查询和事务操作,这些操作的执行时间较长,导致单个消息的处理时间增加。消费者的并发数量设置过低,无法充分利用系统资源来处理大量的消息。
检查网络状况时,发现网络带宽在促销活动期间接近饱和,网络延迟明显增加,这也对消息的传输和处理产生了一定的影响。同时,查看 ActiveMQ 服务器的日志,发现频繁出现 GC(垃圾回收)的记录,且 GC 的停顿时间较长,这表明 JVM 的内存管理存在问题,可能导致 ActiveMQ 的性能下降。
7.3 调优措施
针对上述问题,采取了以下调优措施:
- 优化消费者代码:对消费者的业务逻辑进行了优化,减少了不必要的数据库查询和复杂计算,将部分业务逻辑进行异步处理,降低了单个消息的处理时间。对数据库连接池进行了调整,增加了最大连接数和最小空闲连接数,以提高数据库操作的效率,减少连接超时的情况。
- 调整消费者并发数量:根据服务器的资源情况和消息处理的需求,将消费者的并发数量增加了 50%,充分利用服务器的多核 CPU 资源,提高消息的处理能力。通过压力测试,确定了最佳的并发数量,确保在高并发情况下系统的稳定性和性能。
- 优化网络配置:增加了网络带宽,缓解了网络拥塞的情况。调整了 TCP 连接参数,如增大了发送和接收缓冲区的大小,减少了网络延迟对消息传输的影响。对网络拓扑进行了优化,减少了消息传输的中间节点,提高了消息传输的速度。
- JVM 调优:对 ActiveMQ 的 JVM 参数进行了调整,增大了堆内存的大小,从原来的 2GB 增加到 4GB,减少了 GC 的频率。将垃圾回收器从原来的 Parallel GC 切换为 G1 GC,提高了 GC 的效率,减少了 GC 的停顿时间。通过 JVM 监控工具,实时观察堆内存的使用情况和 GC 的执行情况,确保 JVM 的性能得到优化。
7.4 效果评估
经过上述调优措施的实施,系统的性能得到了显著提升。订单队列的消息堆积问题得到了有效解决,消息的入队速率和出队速率基本保持平衡,未处理订单消息数量迅速下降。ActiveMQ 服务器的内存使用率和 CPU 使用率也恢复到正常水平,系统的稳定性得到了保障。用户下单后能够快速看到订单处理结果,物流配送也能够及时获取订单信息并进行处理,业务的正常运转得到了恢复,用户体验得到了明显改善。
7.5 经验教训
在这个案例中,我们深刻认识到在生产环境中对 ActiveMQ 进行性能监控和问题排查的重要性。及时发现问题并采取有效的调优措施,可以避免因系统性能问题而给业务带来的损失。在系统设计和开发阶段,应充分考虑系统的性能和可扩展性,合理设计消息的生产和消费逻辑,避免出现消息堆积等问题。在系统上线后,要建立完善的监控体系,实时关注 ActiveMQ 的运行状态,及时发现潜在的问题并进行处理。还需要不断积累经验,提高对 ActiveMQ 性能调优的能力,以应对不断变化的业务需求和系统环境。
八、总结与展望
ActiveMQ 作为一款广泛应用于生产环境的消息中间件,其稳定性和性能直接关系到整个分布式系统的运行效率和可靠性。通过对 ActiveMQ 生产环境中常见问题的深入排查,我们能够准确地识别出消息积压、服务宕机、消息丢失等问题的根源,这些问题的出现往往涉及到网络、磁盘 I/O、内存等多个方面的因素,需要我们全面细致地进行分析。
在性能瓶颈分析中,我们明确了网络瓶颈、磁盘 I/O 瓶颈和内存瓶颈对 ActiveMQ 性能的制约,这为我们制定针对性的调优策略提供了方向。通过 JVM 调优、网络配置优化、磁盘 I/O 优化以及消息处理优化等一系列调优策略的实施,我们能够有效地提升 ActiveMQ 的性能,使其更好地适应生产环境的需求。合理设置 JVM 参数可以提高内存的利用率,减少 GC 的频率和停顿时间;优化网络配置可以降低网络延迟,提高消息传输的速度;选择高性能的存储设备和优化文件系统能够提升磁盘 I/O 的性能,加快消息的持久化和存储速度;采用批量发送消息和异步消费等方式可以提高消息处理的效率,增强系统的并发处理能力。
监控与维护是保障 ActiveMQ 稳定运行的重要环节,通过对关键指标的实时监控,如消息队列长度、消费者数量、消息发送和接收速率、内存和 CPU 使用率等,我们能够及时发现潜在的问题,并通过定期的性能测试和参数调整,确保 ActiveMQ 始终处于最佳的运行状态。定期清理无用的队列和主题,也有助于释放系统资源,提高系统的运行效率。
案例分析进一步验证了我们在问题排查和调优过程中所采用的方法和策略的有效性。通过对实际问题的深入分析和解决,我们不仅成功地提升了系统的性能,还积累了宝贵的经验,为今后处理类似问题提供了参考。
展望未来,随着分布式系统的不断发展和业务需求的日益增长,ActiveMQ 也将面临更多的挑战和机遇。在技术发展趋势方面,我们可以期待 ActiveMQ 在以下几个方向取得突破:一是更加高效的消息处理机制,以满足不断增长的高并发和大数据量的处理需求;二是更好地支持云原生架构,适应容器化、微服务化的部署环境;三是增强安全性和可靠性,保障消息传输的安全和稳定。
作为开发者和运维人员,我们需要不断学习和关注 ActiveMQ 的最新发展动态,持续优化系统性能,以应对未来的挑战。我们要积极探索新的技术和方法,将其应用于 ActiveMQ 的实践中,不断提升系统的稳定性、可靠性和性能。只有这样,我们才能充分发挥 ActiveMQ 在分布式系统中的优势,为企业的业务发展提供强有力的支持。
相关文章:
ActiveMQ 生产环境问题排查与调优指南(二)
五、调优策略与实践 5.1 JVM 调优 JVM 调优对于提升 ActiveMQ 性能至关重要,合理的 JVM 配置可以使 ActiveMQ 更高效地利用系统资源,减少性能瓶颈。 设置合理的堆内存大小是 JVM 调优的关键步骤。堆内存是 JVM 中用于存储对象实例的区域,其…...
AugmentCode 非常昂贵的新定价
AugmentCode 现在的价格比 Cursor 和 Windsurf 的总和还要贵。 AugmentCode 曾是我开发工作流程的常用工具。出乎意料的是,他们改变了定价结构,让开发者们震惊不已。 原来的30 美元月费已经增长为50 美元月费,这是一个67%的增长。 改变我看法的不仅仅是价格上涨,还有他…...
Unity 红点系统
首先明确一个,即红点系统的数据结构是一颗树,并且红点的数据结构的初始化需要放在游戏的初始化中,之后再是对应的红点UI侧的注册,对应的红点UI在销毁时需要注销对红点UI的显示回调注册,但是不销毁数据侧的红点注册 - …...
Python-UV多环境管理
Python-UV多环境管理 Python使用UV进行环境管理,系统了解UV的使用 文章目录 Python-UV多环境管理 [toc]1-学习要点2-核心知识点3-UV多环境管理4-venv和uv脚本对比1-venv环境管理2-uv环境管理3-venv对比uv 1-学习要点 1-熟悉【UV环境管理】2-熟悉【UV和Venv脚本区别…...
多空短线决策+飞云分仓操盘,两个副图指标组合操盘技术,短线更精准有效
如上图,两个副图指标,第一个【短线多空决策】,第二个副图指标【飞云分仓操盘】,指标组合使用,精准性和有效性更加有效。 如上图,两个指标组合使用,我们选择第二个副图指标出现红色和紫色区域的标…...
istio in action之应用弹性与容错机制
在分布式系统中,服务间的依赖关系就像一张错综复杂的网络,任何一个节点的抖动都可能引发连锁反应。这也是为什么我们需要强调弹性,因为在分布式系统中,服务之间通过网络进行通信,这本身就引入了无数个潜在的失败点。我…...
将PyQt5设计的程序打包成.exe文件
打包教程 因为打包的机制是会把当前的解释器的包也打包上,而我的环境经常会有一些较大的包,比如torch之类的。所以这里会创建一个单独的环境。 conda create -n image_process python3.8 激活环境 conda activate image_process 现在先安装我需要安装…...
Java原生结合MQTTX---完成心跳对话(附带源码)
简言:✨当Java遇上MQTT:打造会"隔空传话"的魔法程序✨ 导语:想不想让两个Java程序像哈利波特里的双面镜一样实时对话?今天我们将用MQTT协议EMQX,在Ubuntu上搭建一个魔法邮局,再亲手编写会传信的…...
redis数据结构-06(LRANGE、LINDEX、LSET、LREM)
列表操作:LRANGE、LINDEX、LSET、LREM Redis 列表不仅仅是简单的数组;它们是一种强大的数据结构,可以高效地操作有序数据。本课将深入探讨使用 Redis 列表的四个基本命令: LRANGE 、 LINDEX 、 LSET 和 LREM 。掌握这些命令将使您…...
4.4 os模块
os模块: chdir:修改工作路径 --- 文件所在位置的标识 getcwd():返回当前路径,如果修改了则显示修改后的路径 curdir:获取当前目录的表示形式 cpu_count():返回当前cpu的线程数 getppid(): 获取当前进程编号 getppid():获取当前进程的父进…...
在 Windows 系统上选择与部署 DICOM 医学影像开发工具与库
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...
MYSQL数据库集群高可用和数据监控平台(详细版)
项目说明 概述 该项目共分为2个子项目,由MYSQL集群高可用和数据监控平台两部分组成 MYSQL集群高可用属于云原生高级课数据库运维部分的知识 数据监控平台属于云原生拔高项目,旨在让学生增加知识面,提高项目实习经历,充实简历 …...
学习通刷课稳定版(美化面板+完全免费)
学习通刷 (美化面板完全免费) 安装教程方法一源码文件 方法二 提示结尾 安装教程 方法一 我们首先在浏览器打开脚本猫网站并获取该插件(浏览器以Edge为例) 脚本猫首页:https://scriptcat.org/zh-CN/ 第一步ÿ…...
python 实现sha加密
在Python中,SHA(Secure Hash Algorithm)是一种加密哈希函数,通常用于生成数据的哈希值。SHA算法是单向的,这意味着它只能用于加密(生成哈希值),而不能用于解密。因此,SHA…...
Linux epoll 详解:概念、使用、数据结构、流程及应用
epoll是什么? epoll 是从 Linux 2.6 起,Linux内核提供的一种高性能I/O事件通知机制,用于解决传统 select 和 poll 在处理大量并发连接时遍历、最大数量限制、频繁拷贝数据等问题。epoll 可以用来监听多个文件描述符(socket、管道…...
Kubernetes排错(十一):lsof命令实战场景
在Kubernetes生产环境中,lsof作为Linux系统的"透视眼",是排查容器级疑难杂症的必备工具。本文将深入解析其在容器化场景下的高阶用法,助你快速定位隐藏问题。 一、基础环境准备 1. 容器内安装lsof # 临时进入容器安装࿰…...
Java基础语法之循环结构
循环结构 1.定义 控制一段代码重复执行多次 2.分类 2.1 for循环 2.1.1 定义 控制一段代码反复执行很多次。 2.1.2 for循环格式 for (初始化语句; 循环条件; 迭代语句) { 循环体语句(重复执行的代码); }示例 // 输出3次HelloWorld for (int i 0; i < 3; i) { System…...
冒泡排序的原理
冒泡排序是一种简单的排序算法,它通过重复地遍历待排序的列表,比较相邻的元素并交换它们的位置来实现排序。具体原理如下: 冒泡排序的基本思想 冒泡排序的核心思想是通过相邻元素的比较和交换,将较大的元素逐步“冒泡”到列表的…...
AUTOSAR图解==>AUTOSAR_TR_InteractionWithBehavioralModels
AUTOSAR与行为模型交互详解 深入解析AUTOSAR软件组件与行为模型的交互关系与转换机制 目录 引言 1.1 AUTOSAR编辑工具概述 1.2 源起与目标 1.3 术语定义需求追溯AUTOSAR中行为建模的用例 3.1 软件组件的行为建模 3.2 软件组件描述到行为模型 3.3 行为模型到软件组件描述 3.4 组…...
GO语言内存管理结构
文章目录 1、内存分区1.1、栈(Stack)1.2、堆(Heap) 2、堆内存管理结构2.1、内存分配器(MCache → MArena → MSpan → MHeap)2.2、大小分类(Size Class)2.3、分配流程 3、垃圾回收&a…...
分享一些资料供大家学习
群里收集来的,自己感觉还是比较经典的,希望大家喜欢!!! 20250428 夸克网盘分享一大波经典IT架构好货20250429夸克网盘分享精品文档-管理咨询师必备的思维模型20250430夸克网盘分享清华大学DeepSeek教程又来了《文科生A…...
RAGMCP基本原理说明和相关问题解惑
一、RAG架构原理和局限性 1.1 概念解释 RAG(Retrieval-Augmented Generation):检索增强生成,让大模型接受外部输入后,总结输出 向量数据库:向量数据通常是高维空间中的点,代表复杂的数据结构…...
PyGame游戏开发(含源码+演示视频+开结题报告+设计文档)
前言: 大二小学期python课上基于pygame做的一个游戏小demo,当时老师花了一天讲解了下python基础语法后(也是整个大学四年唯一学习python的时间),便让我们自学网课一周然后交项目,所以做的非常仓促ÿ…...
Git标签
Git标签 1. 添加标签 使用 tag 命令可以给某次 commit 提交的版本打上标签,相当于这个 commit id 的别名,在实践中,会使用 v1.0 之类的标签提示这是正式版的第一个版本。 git tag v1.0 [commit id]缺省输入 commit id会给最新的一次提交打…...
USB学习【6】USB传输错误的处理
1.前言 我们从物理层到信号层,到协议层,他们分别在不同的层面完成不同的功能。 总结一下: 物理层实现了高低电平的检测。 信号层更进一步,通过一些方法,实现了二进制的传输。 协议层,因为可以二进制传输了…...
深入解析 Vision Transformer (ViT) 与其在计算机视觉中的应用
在近年来,深度学习尤其在计算机视觉领域取得了巨大的进展,而 Vision Transformer(ViT)作为一种新的视觉模型,它的表现甚至在许多任务中超过了传统的卷积神经网络(CNN),如 ResNet。在…...
《Go小技巧易错点100例》第三十一篇
本期分享: 1.Go struct内存对齐 2.使用空结构体(struct{})节省内存 Go struct内存对齐 在计算机系统中,CPU 访问内存时并不是逐字节读取的,而是以特定大小的块(通常为 4/8 字节)为单位进行读取。当数据的内存地址正…...
全栈项目实战:Vue3+Node.js开发博客系统
全栈项目实战:Vue3Node.js开发博客系统 一、项目架构设计 1. 技术栈选型 前端技术栈: Vue 3 Composition APITypeScriptPinia状态管理Vue Router 4Element Plus UI组件库Vite构建工具 后端技术栈: Node.js (Express/Koa)MongoDB (Mong…...
查看YOLO版本的三种方法
查看YOLO版本的三种方法: 一、通过命令行直接查询 使用Python交互式查询: from ultralytics import __version__ print(__version__) # 示例输出: 11.0.5二、检查PyTorch环境兼容性 import torch, ultralytics print(f"PyTorch: {torch.__versi…...
基于Docker的Bitwarden的私有本地部署
基于Docker的Bitwarden的私有本地部署 文章目录 基于Docker的Bitwarden的私有本地部署 本文首发地址 https://h89.cn/archives/355.html bitwarden 默认连接的是国外服务器 https://bitwarden.com/ ,连接不是很稳定,也没有安全感,所以我选择了…...
点和体素哪个好
3D 深度学习中基于体素和基于点云的方法哪种更优?-腾讯云开发者社区-腾讯云 https://zhuanlan.zhihu.com/p/372497398 GitHub - open-mmlab/OpenPCDet: OpenPCDet Toolbox for LiDAR-based 3D Object Detection....
C++ STL编程 vector空间预留、vector高效删除、vector数据排序、vector代码练习
vector空间预留,作用是避免申请每次申请内存,提高运行效率。 对应的接口是 vector.reverse() vector的高效删除,对应的代码见下,一个时间复杂度是n,一个时间复杂度是1 #include<iostream> #include<vector…...
Android架构模式推荐及分析和MVC架构模式制作一个简单的底部tab切换
目录 主流架构模式对比 适用场景 MVP:团队协作开发,需要高可测试性的项目 MVC架构模式制作一个简单的底部tab切换 (Model-View-Controller)结构 代码 效果 主流架构模式对比 对比维度MVC MVP MVVM MVI 学习…...
【PVE】ProxmoxVE8虚拟机,存储管理(host磁盘扩容,qcow2/vmdk导入vm,vm磁盘导出与迁移等)
【PVE】ProxmoxVE8虚拟机,存储管理(host磁盘扩容,qcow2/vmdk导入vm,vm磁盘导出与迁移等) 文章目录 1、host 磁盘扩容2、qcow2/vmdk导入vm3、vm 磁盘导出与迁移 1、host 磁盘扩容 如何给host扩容磁盘,如增加…...
【JEECG 组件扩展】JSwitch开关组件扩展单个多选框样式
功能说明: 基于JeecgBoot开源框架,JSwitch开关组件扩展,支持单个多选样式。 效果展示: 使用示例: {field: JSwitch,component: JSwitch,label: JSwitch,},{field: JSwitchCheckBox,component: JSwitch,label: JSwitch…...
卷积神经网络-从零开始构建一个卷积神经网络
目录 一、什么是卷积神经网络CNN 1.1、核心概念 1.2、卷积层 二、什么是卷积计算 2.1、卷积计算的例子: 2.2、点积 2.3、卷积与点积的关系 2.4、Padding(填充) 2.4.1、Padding的主要作用 1、控制输出特征图尺寸 2、保留边缘信息 3. 支持深层网络训练 2.4.2、Str…...
Linux 常用命令集合
以下是一份 Linux 常用命令集合,涵盖文件操作、系统管理、网络管理、权限管理、进程管理等常见任务,并附上代码示例: 1. 文件与目录操作 命令作用示例ls列出目录内容ls -l(详细列表) ls -a(显示隐藏文件&a…...
STM32f103 标准库 零基础学习之按键点灯(不涉及中断)
注意,此次代码不涉及中断,不涉及中断,不涉及中断 目录 1.初始化LED 2.初始化按键 3.粗略的延时函数 4.判断引脚电平 5.通过异或反转电平 开始 │ ├── 初始化LED(GPIOA Pin1 推挽输出) ├── 初始化按键&…...
【c++】【数据结构】二叉搜索树详解
目录 二叉搜索树的定义二叉搜索树的模拟实现查找函数循环版递归版 插入函数循环版递归版 删除函数循环版递归版 二叉搜索树的定义 二叉搜索树是一种特别的二叉树,是二叉树的搜索特化版。学过排序的都知道,在数组有序的情况下二分查找可以以极高的频率找…...
高精地图数据错误的侵权责任认定与应对之道
首席数据官高鹏律师团队 在自动驾驶与智慧交通快速发展的今天,高精地图作为核心基础设施,其数据准确性直接关系到公共安全。然而,技术并非完美,一旦因地图数据错误导致事故或损失,比如当自动驾驶汽车因高精地图数据错…...
Python训练营打卡——DAY22(2025.5.11)
复习日 学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码 泰坦尼克号——来自灾难的机器学习 数据来源: kaggle泰坦里克号人员生还预测 挑战 泰坦尼克号沉没是历史上最臭名昭著的海难之一。 1912年4月15日,在被普…...
【计算机视觉】OpenCV实战项目 :Image_Cartooning_Web_App:基于深度学习的图像卡通化
Image_Cartooning_Web_App:基于深度学习的图像卡通化Web应用深度解析 1. 项目概述2. 技术原理与模型架构2.1 核心算法2.2 系统架构 3. 实战部署指南3.1 环境配置3.2 模型部署3.3 处理流程示例 4. 常见问题与解决方案4.1 模型加载失败4.2 显存溢出4.3 边缘伪影 5. 关…...
王道计算机网络知识点总结
计算机网络知识点总结 一、计算机网络体系结构 (一)计算机网络概述 计算机网络概念:互连的、自治的计算机系统的集合,目的是资源共享,组成包括多台自治计算机,规则是网络协议。 计算机网络的组成&#…...
Java学习笔记(对象)
一、对象本质 状态(State):通过成员变量(Field)描述 行为(Behavior):通过成员方法(Method)实现 class Person {String name;int age;void eat() {System.o…...
并发笔记-给数据上锁(二)
文章目录 核心挑战 (The CRUX)29.1 并发计数器 (Concurrent Counters)1. 简单非并发计数器 (Figure 29.1)2. 同步计数器(单锁版本 - Coarse-Grained Lock, Figure 29.2)3. 可伸缩计数:近似/懒惰计数器 (Approximate/Sloppy Counter, Figure 2…...
Three.js + React 实战系列 - 页脚区域 Footer 组件 ✨
对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!! 为个人主页画上完美句号:设计一个美观实用的页脚组件 在完成 Hero、About、Projects、Contact 等模块后,我们为整个页面添上…...
基于Flask、Bootstrap及深度学习的水库智能监测分析平台
基于Flask、Bootstrap及深度学习的水库智能监测分析平台 项目介绍 本项目是基于Flask框架构建的水库智能监测分析平台,集水库数据管理、实时监测预警、可视化分析和智能预测功能于一体。 预测水位的预警级别:蓝色预警没有超过正常水位且接近正常水位1米…...
JavaSE核心知识点02面向对象编程02-08(异常处理)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点02面向对象编程02-08&#…...
7系列 之 SelectIO 资源
背景 《ug471_7Series_SelectIO.pdf》介绍了Xilinx 7 系列 SelectIO 的输入/输出特性及逻辑资源的相关内容。 第 1 章《SelectIO Resources》介绍了输出驱动器和输入接收器的电气特性,并通过大量实例解析了各类标准接口的实现。 第 2 章《SelectIO Logic Resource…...
【目标检测系列】YOLOV1解读
目标检测系列文章 目录 目标检测系列文章📄 论文标题🧠 论文逻辑梳理1. 引言部分梳理 (动机与思想) 📝 三句话总结🔍 方法逻辑梳理🚀 关键创新点🔗 方法流程图关键疑问解答Q1: 关于 YOLOv1 中的 "conf…...