详解最新链路追踪skywalking框架介绍、架构、环境本地部署配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等
1.skywalking介绍
- 多种监控手段,可以通过语言探针和service mesh 获得监控数据
- 支持多种语言自动探针,包含java/net/nodejs
- 轻量高效,无需大数据平台和大量的服务器资源
- 模块化,UI、存储、集群管理都有多种机制可选
- 支持告警
- 优秀的可视化解决方案
整体架构
-
上部分 Agent :负责从应用中收集链路信息,发送给SkyWalking OAP服务器,目前支持SkyWalking、Zikpin、Jaeger等提供的Tracing 数据信息。而目前采用的是SkyWalking Agent收集 SkyWalking Tracing数据,传递给服务器
-
下部分SkyWalking OAP :负责接收Agent发送的Tracing数据信息,然后进行分析(Analysis Core) ,存储到外部存储器(Storage ),最终提供查询( Query )功能
-
右部分 Storage :Tracing 数据存储。目前支持ES、MySQL、Sharding Sphere、TiDB、H2多种存储器,目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主
-
左部分 SkyWalking UI :负责提供控台,查看链路等等
skywalking demo
默认登录账户: skywalking skywalking
https://demo.skywalking.apache.org/
资料
官网:https://skywalking.apache.org/
下载 skywalking本地安装包:
https://skywalking.apache.org/downloads/
文档:https://skywalking.apache.org/docs/#SkyWalking
github: https://github.com/apache/skywalking
https://skywalking.apache.org/docs/main/latest/en/setup/backend/backend-setup/#applicationyml
- SkyWalking 环境搭建部署(单机版)
1.安装elasticSearch
-
参考之前博文安装&启动
elasticsearch.bat 或者elasticsearch.sh启动服务 -
访问默认地址:http://localhost:9200/
2.搭建skywalking 服务
-
下载skywalking 安装包
对于 SkyWalking 的软件包,有两种方式获取:
- 手动编译
- 官方包 (建议官方包,bug少)
-
修改 skywalking config目录application.yml配置
-
修改skywalking 安装目录中的webapp目录中的webapp.yml配置
-
启动skywalking server &webapp 执行如下命令:
备注说明:如果启动有问题,可以查看日志
-
skywalking ui访问地址:
默认 http://localhost:8080
3.启动一个 Spring Boot 应用,并配置 SkyWalking Agent
首先,下载skywalking agent 包如下:
其次,启动探针
通过探针方式配置微服务链路追踪*
java -javaagent:/path/to/skywalking-agent.jar \-Dskywalking.agent.service_name=order-service \-Dskywalking.collector.backend_service=localhost:11800 \-jar order-service.jar
linux启动
idea中配置探针
#设置skywalking-agent.jar路径
-javaagent:D:\resource\skywalking\skywalking-agent\skywalking-agent.jar
#在skywalking上显示微服务名称
-DSW_AGENT_NAME=wemedia-oss-user
#skywalking的collector服务的ip以及端口
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=localhost:11800
启动服务之后,调用服务api:http://127.0.0.1:8889/api/user/vipRecharge ,在skywalking ui上查看服务如下:
查看拓扑图如下:
发现拓扑图不显示gateway服务,分析这是skywalking的bug,解决方法:
到agent optional-plugins目录下 复制最新的gateway lib到agent plugins目录里
重启skywalking
重启微服务
重新访问接口微服务:http://127.0.0.1:8889/api/user/vipRecharge
再次访问skywalking ui:
3.skywalking 日志收集
-
引入skywalking日志收集依赖
<!--skywalking 日志收集,引入工具类--><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>9.3.0</version></dependency>
-
调整logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod=" 5 seconds"><!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径,请根据需求配置路径--><springProperty scope="context" name="log.path" source="path.log"/><springProperty scope="context" name="app.anme" source="spring.application.name"/><property name="app.name" value="${app.anme}"/><!-- 业务日志路径--><property name="logging.path" value="${log.path}"/><!-- 系统日志路径--><property name="system.log" value="system"/><!-- 日志保存时间(天) --><property name="log.save.time.day" value="30"/><!-- 彩色日志依赖的渲染类 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /><conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /><!-- 彩色日志格式 --><property name="CONSOLE_LOG_PATTERN"value="${app.name} >> ${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}]){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(LN:%L){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" /><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><!--把控制台的日志输出到sKywalking--><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"><pattern>${CONSOLE_LOG_PATTERN}</pattern></layout><!-- <pattern>${CONSOLE_LOG_PATTERN}</pattern>--><charset>utf8</charset></encoder></appender><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0</discardingThreshold><queueSize>1024</queueSize><neverBlock>true</neverBlock><appender-ref ref="STDOUT"/></appender><!--skywalking日志上报--><appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"><pattern>${CONSOLE_LOG_PATTERN}</pattern></layout><charset>utf8</charset></encoder></appender><!-- 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名--><FileNamePattern>${log.path}/sys-info-%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件保留天数--><MaxHistory>${log.save.time.day}</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern></layout></encoder></appender><!-- 系统错误日志 --><appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-error.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>${log.save.time.day}</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!-- 显示形成的sql、使用的参数、结果集 生产环境需要删掉 --><logger name="java.sql" level="debug"/><logger name="org.springframework.jdbc" level="debug"/><!-- 日志输出级别 ,注意:如果不写<appender-ref ref="FILE" /> ,将导致springbootadmin找不到文件,无法查看日志 --><root level="INFO"><appender-ref ref="grpc-log" /><appender-ref ref="ASYNC" /><appender-ref ref="FILE"/></root></configuration>
备注说明: [%X{tid}] :添加skywalking 追踪id,方便追踪整个调用链路
- 访问接口,查看skywalking ui log界面,日志正常显示如下:
4.skywalking 自定义链路追踪
-
自定义链路追踪主要是为了对项目中的业务方法,实现链路追踪,方便排查问题
-
引入依赖
<!--自定义skywalking链路,引入工具类--><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>9.3.0</version></dependency>
-
自定义链路
方法1:使用@Trace注解在要追踪的接口上,只需要记录方法的出参 ,入参;如果要打印返回结果,一定要重写返回结果toString()方法,不然返回对象的地址
加入@Tags或@Tag记录参数和返回信息
@Tag注解中key= 方法名 value= returnedObj 返回值 arg[0] 参数
/***
*controller方法
*/@GetMapping("/vipRecharge")public CommonResult<String> vipReCharge() {userService.vipReCharge("123");return CommonResult.success("vip用户充值成功!");}/***
* servrice方法
*/@Trace@Tags({@Tag(key = "vipReCharge",value = "returnedObj"),@Tag(key = "vipReCharge",value = "arg[0]")})@SentinelResource(value = "vipReCharge",blockHandler ="vipReChargeFallback" )@Overridepublic CommonResult<String> vipReCharge(String num) {List<TUser> userList=tUserMapper.selectAll();System.out.println("userList:"+userList.size());CommonResult<String> result=payFeignApi.callWechatPay();System.out.println("调用第三方payFeignApi.callWechatPay 返回结果:"+result);return CommonResult.success("调用支付服务成功!");}
再次查看skywalking链路追踪trace,发现上面该方法已经被加载进链路中
增加Tags之后, 查看方法请求和返回值
方法2:编码的方式,适合逻辑比较多,多个地方需要记录一些参数或关键信息,info,debug 或堆栈日志等
使用skywalking 的 ActiveSpan.error(); ActiveSpan.info();ActiveSpan.debug()等在需要追踪的关键地方记录日志
@GetMapping("/callWechatPay")public CommonResult<String> callWechatPay(HttpServletRequest request) {log.info("X-Token value:"+request.getHeader("X-Token"));ActiveSpan.tag("PayController.callWechatPay()","调用支付controller中callWechatPay()方法!");try {//模拟异常情况:int i=10/0;
// TimeUnit.SECONDS.sleep(2);} catch (Exception e) {//ActiveSpan.error();//skywalking追踪事件为error级别 或debug或info级别// ActiveSpan.error("是除零异常");//错误messageActiveSpan.error(new RuntimeException("是除零异常"));// throw new RuntimeException(e);}return CommonResult.success("调用微信支付成功!");}
再次查看skywalking ui结果如下:
方法3 使用OpenTracing Java API定义链路追踪
-
在pom文件中引入依赖
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-opentracing</artifactId><version>9.3.0</version></dependency>
-
在代码中增加自定义的链路追踪代码,最后一定要进行finish,否则也收集不到信息。
//在service中增加自定义链路追踪代码 @Overridepublic CommonResult<String> vipReCharge(String num) {//在代码中使用opentracing代码自定义链路追踪Tracer tracer=new SkywalkingTracer();Tracer.SpanBuilder spanBuilder=tracer.buildSpan("UserServiceImpl.vipRecharge(String num)方法");Span span=spanBuilder.withTag("startTag",false).startManual();List<TUser> userList=tUserMapper.selectAll();System.out.println("userList:"+userList.size());CommonResult<String> result=payFeignApi.callWechatPay();System.out.println("调用第三方payFeignApi.callWechatPay 返回结果:"+result);span.log("调用第三方payFeignApi.callWechatPay 返回结果:"+result);span.finish();return CommonResult.success("调用支付服务成功!");}
-
查看结果如下:
5.skywalking 告警
配置告警接口:
实现高级接口nofity或go-wechat
6.参考资料
-
SkyWalking 极简入门:https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/
https://github.com/SkyAPM/document-cn-translation-of-skywalking/blob/master/docs/zh/8.0.0/setup/backend/backend-setup.md
-
本地安装参考文档:https://blog.csdn.net/seashouwang/article/details/111156985
-
分布式监控Skywalking安装及使用教程:
https://blog.csdn.net/m0_74825488/article/details/145787488?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-145787488-blog-111156985.235 -
skywalking 中文教程 https://www.echo.cool/docs/category/skywalking-%E6%95%99%E7%A8%8B
相关文章:
详解最新链路追踪skywalking框架介绍、架构、环境本地部署配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等
1.skywalking介绍 多种监控手段,可以通过语言探针和service mesh 获得监控数据支持多种语言自动探针,包含java/net/nodejs轻量高效,无需大数据平台和大量的服务器资源模块化,UI、存储、集群管理都有多种机制可选支持告警优秀的可…...
【OSG学习笔记】Day 11: 文件格式与数据交换
OSG 常用文件格式简介 在开始转换前,先了解 OSG 生态中常见的文件格式: .osg:OSG 标准二进制格式,存储场景图数据,体积小、加载快,适合实时渲染。 .ive:OSG 标准文本格式,可读性强,便于手动编辑或调试场景图结构(本质是 XML 格式的文本描述)。 .osgb:OSG 二进制格…...
2025.04.26-美团春招笔试题-第二题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. 曼哈顿距离探测器 问题描述 K小姐正在研发一种城市交通探测器,该探测器能够检测城市中任意两个位置之间的曼哈顿距离是否恰好为特定值。曼哈顿距离是在直角坐标系中,两点之间…...
搭建基于火灾风险预测与防范的消防安全科普小程序
基于微信小程序的消防安全科普互动平台的设计与实现,是关于微信小程序的,知识课程学习,包括学习后答题。 技术栈主要采用微信小程序云开发,有下面的模块: 1.课程学习模块 2.资讯模块 3.答题模块 4.我的模块 还需…...
05--Altium Designer(AD)的详细安装
一、软件的下载 Altium Designer官网下载 1、临近五一的假期,想着搞个项目,且这个项目与PCB有关系,所以就下这个软件来玩玩。下面保姆级教大家安装。 2、选择适合自己的版本下载(我安装的是24的) 3、软件安装 1.下…...
药监平台上传数据报资源码不存在
问题:电子监管码上传药监平台提示“导入的资源码不存在” 现象:从生产系统导出的关联关系数据包上传到药监平台时显示: 原因:上传数据包的通道的资源码与数据包的资源码不匹配。 解决方法:检查药监平台和生产系统的药…...
DeepSeek预训练追求极致的训练效率的做法
DeepSeek在预训练阶段通过多种技术手段实现了极致的训练效率,其中包括采用FP8混合精度训练框架以降低计算和内存需求 ,创新性地引入Multi-head Latent Attention(MLA)压缩KV缓存以提升推理效率,以及基于Mixture-of-Experts(MoE)的稀疏计算架构以在保证性能的同时显著降低…...
Windows11系统中GIT下载
Windows11系统中GIT下载 0、GIT背景介绍0.0 GIT概述0.1 GIT诞生背景0.2 Linus Torvalds 的设计目标0.3 Git 的诞生(2005 年)0.4 Git 的后续发展0.5 为什么 Git 能成功? 1、资源下载地址1.1 官网资源1.2 站内资源 2、安装指导3、验证是否下载完…...
Maven的概念与初识Maven
目录 一、Maven的概念 1. 什么是Maven 2. 项目构建:从代码到部署的标准化流程 2.1 Maven构建生命周期 2.2 传统构建 vs Maven构建 3. 依赖管理:解决“JAR地狱”的利器 3.1 依赖声明 3.2 依赖传递与冲突解决 4. Maven仓库:依赖的存储…...
【Android】app调用wallpaperManager.setBitmap的隐藏权限
这是一个杞人忧天的问题,app中,可以通过wallpaperManager.setBitmap来设置壁纸, private void setWallpaper() {// 获取 WallpaperManager 实例WallpaperManager wallpaperManager WallpaperManager.getInstance(getApplicationContext());t…...
ORACLE数据库备份入门:第四部分:2-备份场景举例
下面以4个常见的场景为例,介绍如何规划备份方案。备份方案没有标准答案,需要根据实现情况来制定,也和管理员的个人使用习惯有很大相关性。 1 交易型数据库备份 以银行的交易系统为例,除了前一章节提到的关于RPO和RTO的指标外&am…...
STL中emplace实现原理是什么?
template <class... Args>void emplace_back (Args&&... args);这个是vector的emplace_back方法,用到的c11的语法有三个,分别是万能引用、完美转发、参数包。 参数包中的参数是用来构造vector<T>中的T对象。 假如我直接传的就是一个…...
血泪之arduino库文件找不到ArduinoJSON.h: No such file or directory错误原因
#include <ArduinoJson.h> 始终报这个错误, C:\techxixi_project\Arduino\test\camer\camertoserver\camertoserver.ino:6:10: fatal error: ArduinoJSON.h: No such file or directory 6 | #include <ArduinoJSON.h> | ^~~~~~~~~…...
通过门店销售明细表用PySpark得到每月每个门店的销冠和按月的同比环比数据
假设我在Amazon S3上有销售表的Parquet数据文件的路径,包含ID主键、门店ID、日期、销售员姓名和销售额,需要分别用PySpark的SparkSQL和Dataframe API统计出每个月所有门店和各门店销售额最高的人,不一定是一个人,以及他所在的门店…...
【前后端分离项目】Vue+Springboot+MySQL
文章目录 1.安装 Node.js2.配置 Node.js 环境3.安装 Node.js 国内镜像4.创建 Vue 项目5.运行 Vue 项目6.访问 Vue 项目7.创建 Spring Boot 项目8.运行 Spring Boot 项目9.访问 Spring Boot 项目10.实现 Vue 与 Spring Boot 联动11.安装 axios12.编写请求13.调用函数请求接口14.…...
图解 Redis 事务 ACID特性 |源码解析|EXEC、WATCH、QUEUE
写在前面 Redis 通过 MULTI、EXEC、WATCH 等命令来实现事务功能。Redis的事务是将多个命令请求打包,然后一次性、按照顺序的执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而该去执行其他客户端的命令请求。 就像下面这样&#…...
w~嵌入式C语言~合集3
我自己的原文哦~ https://blog.51cto.com/whaosoft/13870307 一、单片机多任务事件驱动 单片机的ROM与RAM存贮空间有限,一般没有多线程可用,给复杂的单片机项目带来困扰。 经过多年的单片机项目实践,借鉴windows消息机制的思想ÿ…...
CMCC RAX3000M CH EC 算力版刷机(中国移动 RAX3000M 算力版)刷机
刷机前面的工作参考: https://blog.csdn.net/asdcls/article/details/147434218 刷机 eMMC Flash instructions: 1. SSH to RAX3000M, and backup everything, especially factory part. (data partition can be ignored, its useless.) 2. Write new GPT tabl…...
cron定时任务
cron定时任务 一、Cron表达式的定义 基础结构 Cron表达式是由空格分隔的6或7个字段组成的字符串,格式为: 秒 分 时 日 月 星期 [年]其中,年通常可以被省略 字段说明: 秒(0-59) 秒字段表示每分钟的哪一…...
1.4 大模型应用产品与技术架构
目录 一,产品架构 1.1 AI Embedded产品架构 1.2 AI Copilot产品架构 1.3 AI Agent产品架构 二,技术架构 2.1 纯Prompt 2.2 Agent Function Calling 2.3 RAG (Retrieval-Augmented Generation 检索增强生成) 2.4 Fine-tu…...
Android HAL HIDL
1 Android HAL HIDL 1.1 Android中查看有哪些HIDL HAL HIDL是Treble Interface的一部分。 adb root adb shell # lshal 1.2 Android打印C调用栈 #include <utils/CallStack.h> 在需要打印的地方加如下的定义。 android::CallStack stack("oem"); logcat | g…...
std::mutex底层实现原理
std::mutex是一个用于实现互斥访问的类,其具备两个成员函数——lock和unlock 锁的底层实现原理 锁的底层实现是基于原子操作的,这些原子操作是由指令支持的,因为单个指令是不能被中断的 一些与锁的实现有关的原子指令为: 待补充…...
性能提升手段--池化技术
看到hadoop代码里有ByteBufferPool,使用池子来避免频繁创建、销毁ByteBuffer,减轻GC压力,提高性能。 顺便总结一下池化技术 一、什么是池化技术? 池化(Pooling) 是一种资源管理策略,通过预先创建并复用资源(如数据库连接、线程、内存对象等)来提…...
精益数据分析(28/126):解读商业模式拼图与关键指标
精益数据分析(28/126):解读商业模式拼图与关键指标 在创业和数据分析的探索旅程中,每一次深入研究都可能带来新的启发和突破。今天,我们依旧带着共同进步的初心,深入解读《精益数据分析》中关于商业模式的…...
QT6 源(52)篇二:存储 c 语言字符串的类 QByteArray 的使用举例,
(3) (4) 谢谢...
工业摄像头通过USB接口实现图像
工业摄像头系列概览:类型与应用 工业摄像头系列涵盖了多种类型,以满足不同行业和应用的需求。以下是对工业摄像头系列的一些介绍: 一、主要类型与特点 USB工业摄像头 :这类摄像头通常通过USB接口与计算机连接,适用于…...
【BBDM】main.py -- notes
命令行接口 python main.py [OPTIONS]参数 参数类型默认值说明-c, --configstr"BBDM_base.yml"配置文件路径-s, --seedint1234随机种子,用于结果复现-r, --result_pathstr"results"结果保存目录-t, --trainflagFalse训练模式开关:…...
X86物理机安装iStoreOS软路由
目录 安装前准备 制作启动盘 安装系统到硬盘 启动与初始配置 常见问题与注意事项 参考资料 安装前准备 硬件设备 X86物理机(如普通电脑、J4125/N5105等小主机) U盘(建议容量≥2GB) 显示器、键盘(用于初始配置…...
QML Date:日期处理示例
目录 引言相关阅读QML Date对象知识概要格式化选项 DateExamples示例解析代码解析示例1:日期格式化示例2:不同地区的日期显示示例3:日期解析示例4:自定义格式示例5:日期与时间戳转换 运行效果总结下载链接 引言 在Qt …...
python 与Redis操作整理
以下是使用 Python 操作 Redis 的完整整理,涵盖基础操作、高级功能及最佳实践: 1. 安装与连接 (1) 安装库 pip install redis(2) 基础连接 import redis# 创建连接池(推荐复用连接) pool redis.ConnectionPool(hostlocalhost, …...
【Linux】环境监控系统软件框架
目录 tasks.h type.h main.c tasks.c makefile 运行结果 调用多线程框架,在主函数写好环境监控文件的函数,使用结构体封装环境指标的参数 最后使用makefile管理工程文件 tasks.h #include<pthread.h>#ifndef __TASK_H__ #define __TASK_H_…...
WPF实现数字孪生示例
WPF 数字孪生系统实现示例 数字孪生(Digital Twin)是通过数字化手段在虚拟空间中构建物理实体的精确数字模型,并实现虚实映射、实时交互和智能决策的技术。本文将展示如何使用WPF实现一个基础的数字孪生系统示例。 一、系统架构设计 1. 整体架构 +-------------------+ | …...
对卡尔曼滤波的理解和简单示例实现
目录 一、概述 二、基本公式解释 1)状态转移方程 2)状态更新方程 3)卡尔曼系数更新方程 4)误差协方差估计方程 三、一个简单示例 一、概述 经典卡尔曼滤波算法在线性系统中运用非常广泛,可以对数据实现很好的平…...
Linux基础命令总结
Linux系统命令 1. systemctl 1. 基本语法 systemctl start | stop | restart | status 服务名 2. 经验技巧查看服务的方法:/usr/lib/systemd/system 3. 案例实操 (1)查看防火墙服务的状态 systemctl status firewalld (2)停止防火墙服务 systemctl stop firewalld (…...
视觉大模型专栏导航
关于视觉大模型专栏,暂时还没有比较明确的更新计划,最近会在本专栏上更新关于Sam模型的基本原理,包括Image Encoder、Prompt Encoder及Mask Decoder等模块的实现;还有记录下如何利用Sam代码跑通一个demo。 后期接触了其他视觉大模…...
Eigen的主要类及其功能
Eigen 是一个高性能的 C 模板库,主要用于线性代数、矩阵和向量运算。它提供了许多类来支持各种数学运算,以下是 Eigen 的主要类及其功能分类。 1. 核心矩阵和向量类 这些是 Eigen 中最常用的类,用于表示矩阵和向量: Matrix - 通用…...
深入理解TransmittableThreadLocal:原理、使用与避坑指南
一、ThreadLocal与InheritableThreadLocal回顾 在介绍TransmittableThreadLocal之前,我们先回顾一下Java中的ThreadLocal和InheritableThreadLocal。 1. ThreadLocal ThreadLocal提供了线程局部变量,每个线程都可以通过get/set访问自己独立的变量副本…...
大模型奖励建模新突破!Inference-Time Scaling for Generalist Reward Modeling
传统的RM在通用领域面临准确性和灵活性挑战,而DeepSeek-GRM通过动态生成principle和critic,结合并行采样与meta RM引导的投票机制,实现了更高质量的奖励信号生成。论文通过Self-Principled Critique Tuning (SPCT)方法,显著提升了…...
C++:string 1
练习题: 这个题的思路是从前往后,从后往前同时找,不是字母的话就继续,是的话就交换。 代码: #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include <string> using namespace std; //1、4个…...
C语言学习之调试
在C语言的编程学习中,我们能不可避免的要遇到bug。通常我们面对编译错误等问题是很容易发现的,但是当我们面对代码结果不满足预期等情况下是很难去改的,因此我们就要学习如何调试代码。 bug与调试 什么是bug? bug本意是“昆虫”和…...
【project】--模拟搭建一个中小型校园网的网络平台
文章目录 项目介绍设备及IP地址分配node01配置网卡配置DHCP配置路由转发 node02配置网卡配置安装并配置授权 Unbound DNS node03配置网卡配置安装防火墙SNAT配置DNAT配置(端口转发)纯缓存 Unbound DNS 配置 node04配置node05配置node06配置 项目介绍 本项目通过1台物理机和VMw…...
DeepSeek 的长上下文扩展机制
DeepSeek 在基础预训练完成后,引入 YaRN(Yet another RoPE extensioN method)技术,通过额外的训练阶段将模型的上下文窗口从默认的 4K 逐步扩展至 128K。整个过程分为两个阶段:第一阶段将上下文窗口从 4K 扩展到 32K;第二阶段则进一步从 32K 扩展到 128K。每个阶段均采用…...
AQS条件队列源码详细剖析
AQS条件队列源码详细剖析 0.简介 欢迎来到我的博客:TWind的博客 最好先看过我博客中的 ReentrantLock的超详细源码解析 ,不然想要理解条件队列的源码会非常困难。 AQS中的条件队列相比同步队列略显简单,但依然优异且高效,复杂而…...
LeetCode --- 446 周赛
题目列表 3522. 执行指令后的得分 3523. 非递减数组的最大长度 3524. 求出数组的 X 值 I 3525. 求出数组的 X 值 II 一、执行指令后的得分 照着题目要求进行模拟即可,代码如下 // C class Solution { public:long long calculateScore(vector<string>&…...
ngrok 内网穿透技术系统性文档
ngrok 内网穿透技术系统性文档—目录 1. 概述与背景1.1 内网穿透的需求背景1.2 ngrok的核心定义1.3 定位与核心价值 2. 核心原理与技术架构2.1 技术架构图2.2 核心原理详解2.2.1 隧道建立流程2.2.2 多协议支持机制2.2.3 动态DNS与路由 3. 功能体系与配置详解3.1 基础功能3.1.1 …...
C++ 为什么建议类模板定义在头文件中,而不定义在源文件中
类模板 XXXX 模板的编译模式模板不是实际的代码,而是一个“代码生成模板” 分离定义会导致链接错误补充为什么普通类可以分离定义?对比C11的export关键字(已弃用) 模板的编译模式 C模板采用两阶段编译(Two-Phase Tran…...
Android studio学习之路(八)---Fragment碎片化页面的使用
fragment的用法很常见,你可能经常看见这样的画面: 通过滑动来进行切换页面,今天我们就来实现这样的形式 介绍 使用 Fragment 的核心价值在于 模块化设计 和 动态适配能力,尤其适合以下场景: 需要…...
数据结构和算法(九)--红黑树
一、红黑树 1、红黑树 前面介绍了2-3树,可以看到2-3树能保证在插入元素之后,树依然保持平衡状态,它的最坏情况下所有子结点都是2-结点,树的高度为IgN,相比于我们普通的二叉查找树,最坏情况下树的高度为N,确…...
字节跳动开源数字人模型latentsync1.5,性能、质量进一步优化~
项目背景 LatentSync1.5 是由 ByteDance 开发的一款先进的 AI 模型,专门针对视频唇同步(lip synchronization)任务设计,旨在实现音频与视频唇部动作的高质量、自然匹配。随着 AI 技术的快速发展,视频生成和编辑的需求…...
Pygame入门:零基础打造你的第一个游戏窗口
Pygame入门:零基础打造你的第一个游戏窗口 大家好,欢迎来到本期的技术分享!今天,我们将一起探索如何使用Python中的Pygame库来创建一个简单的游戏窗口。无论你是编程新手,还是对游戏开发感兴趣的朋友,这篇文章都将帮助你迈出第一步。让我们开始吧! 什么是Pygame? 在…...