总结|性能优化思路及常用工具及手段

性能优化是降低成本的手段之一,每年大促前业务平台都会组织核心链路上的应用做性能优化,一方面提升系统性能,另外一方面对腐化的代码进行清理。现结合业务平台性能优化的经验,探讨一下性能优化的思路及常用工具及手段。性能优化本质上是对资源的合理利用,将更珍贵的资源用在更重要的业务上,从而实现资源的充分利用,资源的合理利用。性能优化的对象包括业务运行的容器、业务依赖的中间件、业务依赖的数据库存储的优化,性能优化包括两部分:一、发现需要性能优化的点;二、改造代码设计实现性能优化;

    • CPU的开销,有限的cpu无法支撑更大的业务 (性能问题)
    • CPU利用不充分,有限的CPU,无法更好的支撑业务(RT问题)

一、发现需要性能优化的点

对于业务容器来说,需要性能优化的点,往往是对系统开销最大的业务方法,这部分代码功能上并没有任何问题,但在性能上并不是最优,在资源比较充足的情况下,这部分逻辑并不会导致性能问题,但当系统压力比较大,或者业务流量比较高的情况下,这部分就会成为压力最大的点。

1) 放大系统的流量

将流量在部分容器上做放大,利用工具采集系统中的堆栈及性能数据。放大系统流量的情况下,需要提前关闭应用及容器的限流,可以利用Sentinel脚本调整。

### 取消限流 2.Xcurl http://localhost:8719/switchSet?value=false
### 取消限流 3.Xcurl http://localhost:8718/setSwitch?value=false

一、Duct引流验证 

Duct引流, duct调整某一台机器的CS权重,将其他容器的流量引流到对应的ip上,从而实现压力的放大。

图片

二、Amazon构造压测数据验证Amazon压测,根据特定的业务场景,构造压测压测数据,压测模型,在gray4环境中打一部分压测流量,利用压测流量将系统的负载打高。Amazon更适用于大促场景下的性能优化,能确定某些接口的比例,及场景的比例。

图片

2) 利用工具采集系统热点

系统负载流量增加后,各个环节的系统性能消耗都会被放大,此时利用工具可以分析系统的性能情况。系统分析工具会带来系统压力增加,非必要情况下,尽量在隔离环境统计数据。

Arthas性能数据采集

Arthas提供了非常多的工具脚本,其中一部分数据组合起来使用,可以很方便的辅助做性能分析及线上问题排查,这里对其中常用的指令及使用场景做汇总。安装方式:curl -sLk ops.jm.taobao.org:9999/pandora-web… | sh

图片

图 1.1 Arthas指令集合列表性能分析及问题分析工具说明

指令说明性能分析及问题排查的场景
classloader查看当前JVM下ClassLoader的列表及加载的实例统计信息- 常见于排查Metaspace空间利用率问题,常见的场景是由于Groovy脚本导致的Metaspace增加,进而导致应用FGC的问题排查
jad反编译- 常见于黑盒分析,无法快速活的源码的情况下分析程序内部逻辑的场景
getstatic获取静态字段的值- 常见于分析开关、配置、部分数据的情况,在分析性能数据时可以辅助排查
stack 从当前方法点打印堆栈- 常见于分析热点方法调用来源,结合条件过滤,可以快速定位到异常数据产生的来源以及调用频率
trace从当前方法下钻- 常见于分析耗时情况,分析某一个方法耗时的原因。比如分析鹰眼某一个接口耗时很高的原因
watch查看方法调用的参数及返回值- 分析线上方法的入参及返回值,结合条件判断,可以快速知道某一个函数可能走到的场景
optionsArthas的一些选项- 在需要分析jdk内部的调用时,可以打开某些选项
logger打印日志相关的信息- 分析日志冲突,临时关闭某些日志场景等
profiler内部使用了Async Profiler工具,可以用来采集内存、cpu、锁、cache miss等火焰图数据- 性能分析,分析当前业务的热点方法
  • 启动分析,分析应用启动速度慢的原因,并行化,锁等场景
  • 内存分配分析,分析JVM应用Old区增长较快的原因 | | vmtool | 获取实例强制GC | - 获取jvm中某些类的实例列表,进而利用其他指令分析内部的数据
  • 强制应用做GC | | jfr | jfr数据采集 | - jfr快照分析,可以快速分析整个JVM的运行情况。 |

场景一、CPU资源开销分析

利用profiler指令采集应用容器的性能,profiler start 默认采集的CPU的数据, profiler stop 自动dump对应的文件数据。

[arthas@2093]$ profiler startProfiling started[arthas@2093]$ profiler stopOKprofiler output file: /home/admin/ump2/bin/arthas-output/20230213-191902.html[arthas@2093]$ exit

场景二、JVM内存中分配了比较多的对象,但很快回收,希望找到临时对象创建比较频繁的堆栈。

[arthas@2093]$ profiler -e alloc startProfiling started[arthas@2093]$ profiler stopOKprofiler output file: /home/admin/ump2/bin/arthas-output/20230213-192148.html[arthas@2093]$ exit

场景三、应用启动速度比较慢,希望找到原因。

[arthas@2093]$ profiler start -e wallProfiling started[arthas@2093]$ profiler stopOKprofiler output file: /home/admin/ump2/bin/arthas-output/20230213-192812.html[arthas@2093]$

场景四、利用JFR分析JVM整体的运行情况,采集数据用作分析。

[arthas@82348]$ jfr start -n test[arthas@82348]$ jfr stop -r 1 -f /tmp/1.jfrStop recording 1, The result will be written to:/tmp/1.jfr

图片

图1.2 JFR数据示例

天巡数据采集性能数据

工具地址: explorer.alibaba-inc.com/perf/#/prof…](p3-juejin.byteimg.com/tos-cn-i-k3… 天巡白屏化采集性能数据天巡功能采集指标说明注意: 指标采集功能从实现上基本都是在运行的JVM进程上挂载agent,随后对部分代码进行增强及注入,会引起类的退优化及C2编译,本身会导致程序的CPU增高,对于性能的采集不能在系统高负载的情况下执行。必要时在仿真环境里执行。

诊断项功能说明使用场景
内存火焰图内核火焰图,统计内存分配的情况,利用统计TLAB中的内存分配- 临时对象产生过快,分析产生的原因
  • 应用FGC间隔断,old区上涨曲线陡峭 | | CPU火焰图 | 对CPU消耗进行采样,统计代码的热度及调用堆栈 | - 性能分析,统计系统性能衰减的原因,分析消耗cpu的点以及执行频率高的代码段
  • Buy2 CPU数据分析示例 | | 线程火焰图 | 线程分布分析,将线程堆栈制作成火焰图形式,方便分析 | - 分析线程热度及死锁 | | jprofiler | jprofiler的快照采集,利用关在agent数据,采集1分钟的CPU快照 | - 性能分析,类似CPU火焰图,但可以利用Jprofiler的图形化界面,进行对比分析
  • Buy2性能数据Jprofiler快照 | | Metaspace | 利用JDK提供的jcmd dump jvm的metaspace数据 | - 分析jvm的metaspace的占用情况
  • 统计出metaspace 占用较高的原因 | | Perf | 利用perf-map-agent生成jvm的符号表,利用Linux自带的Perf工具分析系统的性能数据,结合flame-graph可以生成类似的火焰图 | - 性能分析,用于分析内核态、用户态、JVM数据功能 |

黑屏场景下的性能分析

特殊的环境下,可能无法使用配套的工具,此时应尽量利用JVM及Linux系统中自带的工具,采集数据后,在本地利用工具进行数据分析。一、利用Perf分析系统性能,Perf是linux内核提供的性能分析工具,利用该工具可以很方便的分析整机的性能数据CPU消耗来自非Java程序的场景,或者希望结合Java程序整体分析系统情况的场景📎perf-map-agent.compiled.tgz:yuque.antfin.com/attachments…

sudo yum -y install perfsh create-java-perf-map.sh# 采集性能数据sudo perf record -ag # 分析性能数据sudo perf report

图片

图1.4 利用Perf结合perf-map-agent 分析高CPU消耗数据二、利用jstack分析应用的启动情况分析应用在启动过程中,应用运行的堆栈,进而分析出启动过程中,应用执行耗时最多的热点代码,进而针对性的做启动优化

$cat 1.shfor i in `seq 10000`do
  /opt/taobao/java/bin/jstack $1 > /tmp/$1.$i.log
done

三、利用jmap、jcmd dump数据,相关数据dump出来后,可以进一步通过工具进行分析

/opt/taobao/java/bin/jcmd 82348 help/opt/taobao/java/bin/jcmd 82348 help CodeCache.dump/opt/taobao/java/bin/jcmd 82348 help Compiler.CodeHeap_Analytics/opt/taobao/java/bin/jcmd 82348 JVMTI.data_dump/opt/taobao/java/bin/jcmd 82348 help Metaspace.dump/opt/taobao/java/bin/jmap -dump:format=b,file=/tmp/heap.bin 82348

图片

图1.5 jcmd 分析CodeCache的大小及区间数据

二、常见的性能优化点及优化方式

常见的优化点说明
- 不合理的算法使用,ArrayList 频繁的更新删除,LinkedList 频繁的按照index 获取数据- 算法及数据结构的误用导致的性能问题
- 大量的日志打印,持续日志打印;日志框架性能的比较,同步Or异步- 日志打印会消耗很大的性能,会涉及到内存占用、磁盘IO、锁等待等消耗性能的情况
  • 大量的日志打印,会带来更大的网络开销及存储开销(staragent日志采集、Sls日志存储)
  • logback > log4j2 > log4j ; 异步打印优于同步打印 | | - 过程中创建大量的包装类型 | - 包装类型在解决了空和默认值的区别,在小流量场景下可以解决编码复杂性
  • 在一些极端的场景下,类的频繁Box/UnBox会带来相对较多的性能开销 | | - 使用本地缓存, 年轻代的对象被老年代引用,ygc 耗时增加 | - 本地缓存可以降低远程的数据调用,提高业务的响应RT,是性能优化的一个可选方式
  • Cms、G1 gc 等分带GC,控制了gc的范围,减少整体GC的频率,但是缓存的频繁更新会带来数据的频繁创建,进而导致ygc耗时的增加(本地缓存会存在old区对young区的引用)。 | | - 不合理的循环调用,循环内有比较多的高消耗调用 | - 常见与大型的项目中,代码共建性,循环的调用,重复的初始化,重复的数据统计等带来的性能开销。
  • 此时合理利用上下文缓存,对象缓存,能够显著降低系统性能开销 | | - 字符串的匹配、正则、split相关引入的性能问题 | - 字符串的匹配、正则等均为消耗性能比较大的代码,热点代码中应尽量少用
  • String.format/String.split 内部均会使用到正则,热点代码尽量少用
  • String.isNotBlank/String.isNotEmpty 性能上会有较大的差异。 | | - 多个条件判断,利用最短路径方式减少压力 | - 业务逻辑上会存在判断比较,从代码风格上,判断逻辑在一起返回会可读性会比较好,但本身会增加计算的复杂度
  • 条件判断应该做到尽早返回,并合理利用最短路径的特点,将尽早返回的条件提前,减少业务开销 | | - 集合类的自动扩容 | - jdk中的集合类都会自动扩容,频繁的集合操作,会带来集合的扩容,这部分会带来隐形的资源开销。
  • 利用工具类为集合设置合理的初始大小,避免集合频繁扩容
  • com.google.common.collect.Maps#newHashMapWithExpectedSize
  • com.google.common.collect.Sets#newHashSetWithExpectedSize | | - 热点的计算压力,适当的利用缓存的方式减少系统压力 | - 对于热点数据的计算,结合业务合理利用缓存,降低计算的压力。 | | - 二分查找、hash、bloomfilter、字典树、hyperloglog、bitmap、hashset | - 合理利用数据结构,解决业务问题。
  • 结合业务数据,降低计算的复杂度。
  • 合理的利用其他组件中提供的能力,解决业务问题 |

三、影响性能的因素

经常会出现同样是8C16G的容器,但表现出来的性能确差异很大,这个在集团内表现尤为明显,这种情况实际和集团内部的编排策略有一定的关系。也可能和集团内部的机型差异存在关系。一、由于机型原因引起性能差异目前集团存在多种不同的机型,F4x、F5x、F6x、M机型等。不同的机型单核性能上表现会有差异。

机型识别方式性能说明
F4xcat /proc/cpuinfo查看CPU型号及频率- F6x 8269CY 
  • F5x 8269
  • F4x E2xxxuname -a 查看Cpu架构- x86_64 X86
  • aarch64 倚天机型 | 4代机型,性能较差,主要分布在日常环境,cpu频率在2.5GHZ左右。 | | F5x | 5代机型,不带神龙Moc卡,使用本地盘,性能比F4x好,主要集中在mix25g | | | F6x | 6代机型,带神龙mock卡,性能比F6x好 | | | 倚天 | 倚天机型,主要在南通部署,FY24张北也会做部署。JDK8上单核性能弱于JDK11, JDK11上单核略弱于F6x | |

二、由于编排方式带来的性能差异

在X86架构下,由于超线程的存在,业务容器实际使用的是物理核心上的超线程,当一个8C16G的容器独占8个物理核的时候,性能会最好。当8C16G的容器占用4个物理核的时候,性能会相对最差。结合跨Numa、跨socket等编排方式,也会带来性能的差异。

图片

图1.5 应用容器编排示意

编排方式说明
8C16G容器,独占使用同一个Socket上的8个物理核(P4-P11 未编排容器)此时容器的性能表现最好,应用独占整个CPU
8C16G容器,独占使用跨Socket上的8个物理核(P20 - P28)Socket可以简单对应到主板上的Cpu插槽,跨soeck后,会导致Cpu之间跨socket访问内存及cache,性能相比前一种场景要差,具体差异还和应用特性有关,大内存带宽的应用性能会相对更差
8C16G容器,使用同一个Socket上的8个超线程,物理核对端被其他应用占用由于超线程之间会存在L1、L2cache的共享,两个超线程之间会存在资源争抢,此时性能也会受到影响
8C16G容器,使用同一个socket上的4个物理核此时应用的表现比较稳定,不会收到外部性能的差异产生影响。一般情况下性能表现最差,但比较确定

四、外部依赖优化

数据库慢查询的优化

数据库侧的性能问题,主要有以下集中情况导致,常见的优化手段为:一、合理利用前置的缓存,降低对数据库的访问量。缓存从效率及成本上都优于数据库。二、清理数据库中的数据,对过期的数据、访问量少的冷数据进行清理及迁移。降低数据库的存储大小,对在线的查询会有帮助,对离线的存储、引擎、缓存等场景也会有收益。三、合理调整索引,结合业务场景丰富查询条件,提高数据库的执行效率。四、利用数据库聚合特性,调整主键的组成,提高数据的聚合度,降低逻辑读。

场景优化方案
SQL执行效率高,但调用量大- 如果是查询请求,可以适当的利用缓存,降低数据库的压力,和数据库相比,缓存的效率更高,成本更低
  • 如果是写请求,评估业务的合理性,是否能降低业务请求的频率,不如通过限速、削峰的方式降低数据库的压力 | | 索引不合理导致的SQL执行效率低 | - 适当调整索引,让SQL能走到正确的索引上
  • 结合业务场景适当增加SQL条件,让SQL走到先存的索引上 | | 走到索引,但是召回数据量过大,导致的SQL执行效率低 | - 索引区分度不够,索引不合理
  • 适当清理数据,降低逻辑读 | | 走到索引,但时间跨度大,SQL执行效率低 | - 一般是由于数据跨度大,存在冷查询,导致物理读增加
  • 适当清理数据,或者将冷热数据做分离
  • 结合业务场景,调整SQL条件,减少数据查询的范围 |

缓存类优化(Tair、Redis)

缓存类存储对随机的访问上效率上都非常高,在日常及大促的核心场景中发挥比较大的作用。缓存类常见的问题:

问题说明
缓存的整体qps量级大- 分析调用的合理性,适当使用前置缓存进行拦截(IC、UIC的前置缓存)
缓存个别key的读qps量级大- 典型的热点场景,一般热点场景客户端可以增加对热点的缓存,降低整体的qps。 
  • 对于Tair 也可以利用tair自身的Hotzone来进行处理
  • 对于Redis可以考虑Proxy层来做优化 | | 个别Key的写Qps量级大 | - 写Qps大的场景,需要对key进行拆分,让单个key的写hash到不同的ds上,分摊压力。
  • 业务侧考虑,能否降低业务写的量级,削峰。 | | 个别Key的读QPS量级大,而且单key的也比较大 | - 一方面按照热点key进行处理,另外一方面需要对大key进行拆分
  • 大key会带来带宽打满,对于tair来说表现为带宽限流
  • 对于Redis,在slb、poxy、ds层均有可能被打满,紧急情况下有限扩容。 |

五、应用链路之间的优化

应用间链路依赖,一般是在单应用容量优化完成后,从整个链路上考察,优化链路的RT及链路的CPU开销。一般应用链路的优化,需要结合应用链路分析来考虑,这里主要利用鹰眼的数据进行分析。

场景说明
链路调用次数多带来的RT增加- 一般情况下是由于链路上某一个环节存在调用放大导致,且后续的调用会同步执行导致RT增加
  • 体验优化,可以考虑适当增加并行化
  • 性能考虑, 评估是否能降低调用量的方式(重复调用,模型合理性等) | | 链路上重复调用带来的序列化开销 | - 结合单机性能分析,评估序列化开销的占比
  • 适当精简链路上Module对象的字段,减少传输数据的大小。 | | 不合理的调用链路(A-B-C) --> (A-C) | - 精简链路,减少不必要的代理调用(ump2直连Fp2的数据库) |

图片

图1.6 利用鹰眼查找核心接口上耗时比较大的链路

六、最后

Q:例如ASI排查场景中,看到pod cpu高 或者 load高,但根因是出在其他地方,可能是安全插件rasp负载高、也可能是后台异常内存回收、也可能是宿主机负载高导致,现在全凭经验做排除法,有没有类似字典的方式手段定位问题?A:一般情况下出现这种情况,可以从几个角度缩小问题产生的范围。1)是不是该宿主机上的所有容器都有类似的表现?如果所有容器都有类似的表现,那基本上是宿主机的问题,可能是由于离线导致,可能是由于内存回收,可能是由于部分agent导致,此时case by case分析,也可以让TRE团队协助分析。2)如果宿主机上只有本容器出现问题,大概率是本容器自身的问题,此时可以从几个角度入手:

    • 系统资源开销的分布(sys 高大概率是内核作业相关,irq高大概率是网络包多导致,iowait大概率是文件io比较高导致,单核CPU 100%大概率是gc导致),同时排查资源占用比较高的程序是否是业务程序。
    • 针对内核、网络、gc导致的问题,可以进一步case by case 的分析。

Q:平台中使用到了云平台中相关的中间件比如Kafka、Redis等,由于平台运行环境(Daily、PPE、Online)不同最少需要申请两个实例,一个Daily实例和Online实例。Online环境申请的规格是最低配置就可以满足,同时Daily环境中平台流量很小所以最低规格配置就大大浪费了,但是云平台又不支持更小规格配置申请,能否和云平台的同事沟通下此类问题。A:弹内一般情况下,数据库节点、缓存节点实际规格非常小,成本相对比较低。如果对成本有更进一步的诉求,可以考虑多业务公用的方式,一般情况下日常的存储及QPS量级均非常小,若干个业务共用同一套存储不会带来太大的问题,对于缓存需要重点考虑的就是隔离的问题,这部分可以通过工具方式解决。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于下载EsayOCR模型总是连接中断报错

关于下载EsayOCR模型总是连接中断报错 因为网络问题,自动下载总是失败报错,所以只好去网上手动下载训练好的模型。 以下是一些模型的下载地址:text detection model (CRAFT) chinese (traditional) model chinese (simplified) model jap…

TCP报文与三次握手四次断开、TCP最大连接数与文件打开数限制、keepalive、tcpdump、wireshark抓包分析工具

TCP报文 tcp详解、tcp与udp对比等 TCP:传输控制协议 UDP:用户数据报协议 源端口和目的端口字段:各占 2 字节(16位)。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。 序列号:在建立…

linux学习:进程(新建+运行某文件+退出处理函数+等待)

目录 api 创建新进程 注意 运行某文件 例子 注意 例子,等待进程 进程是由进程控制块、程序段、数据段三部分组成 进程有都有一个父进程,除了init,父进程可以创建子进程 每个进程都有一个PID,可以用ps来查看,等…

目标检测应用场景—数据集【NO.30】织物缺陷图像目标检测数据集

写在前面:数据集对应应用场景,不同的应用场景有不同的检测难点以及对应改进方法,本系列整理汇总领域内的数据集,方便大家下载数据集,若无法下载可关注后私信领取。关注免费领取整理好的数据集资料!今天分享…

2024第十五届蓝桥杯 JAVA B组

目录 前言:试题 A: 报数游戏试题 B: 类斐波那契循环数试题C:分布式队列 前言: 没参加这次蓝桥杯算法赛,十四届蓝桥杯被狂虐,对算法又爱又恨,爱我会做的题,痛恨我连题都读不懂的题😭,十四届填空只…

Linux基础(持续更新~)

常见的Linux目录 1、“/”:根目录 2、“/root”:root 用户的家目录 3、“/home/username ”:普通用户的家目录 4、“/etc”:配置文件目录(类似于Windows的注册表) 5、“/bin ”:命令目录 …

不再写满屏import导入

密密麻麻的import语句不仅仅是一种视觉上的冲击,更是对代码组织结构的一种考验。 我们是如何做到让import“占领满屏“的了,又该如何优雅地管理这些import语句呢? 本文将从产生大量import语句的原因、可能带来的问题以及如何优化和管理impo…

java版数字藏品深色UI仿鲸探数藏盲盒合成短视频卡牌模式支持高并发

Java版数字藏品深色UI仿鲸探数藏盲盒合成短视频卡牌模式支持高并发,是一种结合了Java技术、深色用户界面(UI)设计、数字藏品概念、盲盒合成玩法以及短视频卡牌模式的综合性应用。该模式旨在为用户提供一种新颖、有趣的数字藏品体验&#xff0…

深度学习pytorch实战第P3周--实现天气识别

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)** 引言 1.复习上周 深度学习pytorch实战-第…

算法-反转单向链表

需求 思路 链表必有节点&#xff0c;节点两要素&#xff1a;当前元素值&#xff0c;下一个节点地址 import java.util.Scanner;// 定义一个单向链表 public class MyLinkedList<E> {int size 0;// 顶一个私有的内部类&#xff0c;表示链表的节点public class Node {E da…

pyinstaller后打开qt的exe报错Available platform

具体弹窗&#xff1a; 处理&#xff1a; 添加临时的环境变量&#xff1a; cd dir && set QT_PLUGIN_PATH.\platforms && XXX.exe

【JAVA基础篇教学】第十三篇:Java中I/O和文件操作

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第十三篇&#xff1a;Java中I/O和文件操作。 理解 Java 中的 I/O&#xff08;输入/输出&#xff09;和文件操作对于开发各种类型的应用程序都至关重要。I/O 操作涉及从文件、网络或其他数据源中读取数据&#xff0c;以及…

动态数据源实现分表走shardingsphere,不分表走其他

shardingsphere从4.1.1升级到5.2.1但是还没有完结&#xff0c;因为在执行存储过程的时候&#xff0c;系统提示错误如下。shardingsphere是不支持存储过程呢&#xff0c;但项目中不能避免使用存储过程&#xff0c;因为有大量的数据需要初始化&#xff0c;这种情况该如何应对&…

Java反序列化Commons-Collections-CC1链

环境搭建 JDK8u71以下&#xff0c;这个漏洞已经被修复了&#xff0c;这个JDK的以上版本都修复了漏洞 JDK8u65 下载地址 https://www.oracle.com/cn/java/technologies/javase/javase8-archive-downloads.html这个时候来到 pom.xml 配置Maven依赖下载CommonsCollections3.2.…

UE5 GAS开发P31 将hud绑定在自己的角色上

在WidgetController内新建一个OverlayAuraWidgetController,然后修改HUD的初始状态 AuraHUD // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/HUD.h" #…

“Python+”集成技术高光谱遥感数据处理与机器学习深度应用

涵盖高光谱遥感数据处理的基础、python开发基础、机器学习和应用实践。重点解释高光谱数据处理所涉及的基本概念和理论&#xff0c;旨在帮助学员深入理解科学原理。结合Python编程工具&#xff0c;专注于解决高光谱数据读取、数据预处理、高光谱数据机器学习等技术难题&#xf…

亚马逊测评必看:全面剖析亚马逊测评,你不知道的那些事!

随着电商市场的拓展&#xff0c;曹哥今天针对测评小白们写一些入门知识&#xff0c;今天就带大家从内到外的亚马逊这个平台讲一讲 首先这个行业里分别有几个角色&#xff1a; 1.卖家&#xff1a;所有的服务基本上都是围绕着卖家来转 2.买家&#xff1a;也就是购买下单上评论…

GpuMall镜像社区上线啦!超值福利抢鲜体验!

想快速体验最新最优镜像&#xff1f;想随手分享你的原创镜像&#xff1f;想寻找一个交流镜像的优质平台&#xff1f;我们听到了广大友友们迫切的心声&#xff01; GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 现在&#xff01;我们的镜像社…

Rust腐蚀服务器插件安装教程

Rust腐蚀服务器插件安装教程 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师。之前教大家怎么搭建Rust腐蚀服务器&#xff0c;那么很多小伙伴在搭建完成后发现自己的游戏跟平台玩的还是有差别&#xff0c;其实这里主要缺少mod插件了。那么本期我们教一下大家mod插件…

跑腿平台隐藏服务用法,搭建平台这些跑腿服务也能做!

跑腿场景竞争愈发激烈激烈 事实上&#xff0c;跑腿行业早已群狼环伺&#xff0c;尽管跑腿领域仍有很大的发展空间&#xff0c;但新晋玩家都普遍把目光投向了外卖配送这个细分领域&#xff0c;难免会增加后来者的市场拓展和发展难度。那么&#xff0c;在跑腿服务行业中还有哪些…