自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 IFC 2x3 和IFC4_ADD2 和IFC 4.3 ADD2

地位: 迄今为止部署最广泛、最成熟的版本。是过去十多年BIM行业的“事实标准”,几乎所有主流BIM软件都支持它,并且是大多数国际项目(如COBie)的交付要求基础。特点: 相对稳定,但架构上存在一些历史遗留的冗余和不一致。对许多新型、复杂的建筑系统和过程支持有限。地位: IFC4 的第一个稳定且可用的官方发布版本(ADD2代表第二版附加规范)。它是从 IFC2x3 到 IFC4 系列的重要过渡。特点: 解决了 IFC2x3 的许多架构问题,引入了大量新实体和属性,显著提升了数据丰富度和一致性。

2025-10-14 16:46:51 382

原创 skywalking收集异步任务信息

通过包装模式,业务代码无需关心Trace传递细节。是核心注解,确保Trace上下文跨线程传递。用于设置操作名称和标签,增强可观测性。用于获取当前Trace信息。

2025-09-24 15:08:23 259

原创 深入浅出数据库宽表

历史演进:RBO是数据库优化器的早期形态,CBO是技术发展的必然结果。现代数据库优化器几乎都是CBO。CBO并非完美:CBO的强大严重依赖于准确的统计信息。如果统计信息过期(例如,表刚被批量删除大量数据,但未重新收集统计信息),CBO可能会“算错代价”,做出比RBO更蠢的决定。因此,定期(或自动)收集统计信息是DBA的一项重要工作。并非完全抛弃规则:即使在CBO中,也融入了大量RBO的启发式规则(Heuristics)。

2025-08-22 16:02:50 685

原创 高效实时数据同步方案:秒级响应多字段搜索

支撑产品提出的全局搜索需求,需支持项目、任务单、任务、文档、图纸、表单、审批、知识、工具、用户 基本字段以及扩展字段的筛选,并支持关键字搜索功能。由于数据筛选的字段可能来自不同的数据库(例如–任务的筛选字段有所属项目以及任务单),需要将来自不同模块的数据进行数据整合。(同步/异步)物化视图-同步视图单表/异步视图实时性都是以小时/天为单位的。跨库(MySQL基础库 +MySQL业务库 )联合查询无法实现。支持(现在版本不支持倒排索/分词引,2.0 版本以上)视图(无索引/不能添加分词索引)

2025-08-22 15:48:23 1104

原创 React Native 与 UniApp 对比

短期/简单项目: UniApp是目前更成熟的鸿蒙跨平台方案已有React Native项目: 可尝试华为的react-native-harmony适配高性能/全功能需求: 建议原生鸿蒙开发关注长期维护: 需评估华为对这两种方案的支持力度。

2025-08-19 09:24:00 1086

原创 智能化问题分析(Cherry Stdio+ MCP)

1,了解整体项目的路由策略,目的后续根据url需要查询出所有的代码,例如controller->service->dao2,将工程代码进行解析,目的了解项目的结构和为库系统做数据准备3, 了解kinbana 和skywalking的数据存储位置,需要获取相应的链接。4,涉及到两个项目,一个是java项目(analyseProjectCode),一个是python项目(logAnalyse-MCP)

2025-07-31 20:32:12 1099

原创 数据库连接池性能优化实战

MySQL 当前存在执行慢 / 缓存线程耗尽 / 排序临时表密集的问题,间接导致应用端连接获取慢,连接池设置不当进一步放大了问题。

2025-07-31 14:41:20 1032

原创 微服务雪崩防护最佳实践之sentinel

1、当服务访问量达到一定程度,流量扛不住的时候,该如何处理?2、服务之间相互依赖,当服务A出现响应时间过长,影响到服务B的响应,进而产生连锁反应,直至影响整个依赖链上的所有服务,该如何处理?这是分布式、微服务开发不可避免的问题。我们系统假如是这样的调用图。当G服务出现程序Bug,大流量请求,硬件故障,缓存击穿时,导致服务不可用。进而导致D服务不可用,导致A服务不可用。B、C、D三个服务共享A服务的线程池,当D服务出现故障时,则导致A服务中所有线程池都在等待G服务响应而被阻塞。进而导致A服务不可用。

2025-07-20 13:24:45 820

原创 主流熔断方案选型指南

*** 设置命令执行的超时时间为3000毫秒(5秒)* 如果命令执行超过这个时间,将被标记为超时失败* @return*//*** 熔断器触发的最小请求数量阈值(滚动窗口内)* 只有在20个请求之后,熔断器才会根据错误率判断是否开启* @return*//*** 熔断器开启后的休眠时间(10秒)* 熔断开启后,经过这段时间会允许一个测试请求尝试访问服务* @return*//*** 错误百分比阈值(50%)

2025-07-18 18:43:54 856

原创 MCP基础知识二(实战通信方式之Streamable HTTP)

MCP 使用 JSON-RPC 2.0 作为其传输格式。传输层负责将 MCP 协议消息转换为 JSON-RPC 格式进行传输,并将接收到的 JSON-RPC 消息转换回 MCP 协议消息。其中SSE被废弃了(Server-Sent Events (SSE) - Deprecated)自协议版本 2024-11-05 起,SSE 作为独立传输已被弃用。它已被流式 HTTP 取代,后者将 SSE 作为可选的流式机制。有关向后兼容性信息,请参阅下方的向后兼容性部分。

2025-07-14 17:52:03 499

原创 MCP踩坑

坑呀,工具中命名返回的时str类型但是报一下的错误。最终发现了原因,原来是我的schema描述有问题。显示数据是数组类型,很奇怪,为什么呢?调用skywaling的工具。于是在js中打印了日志。

2025-07-01 20:21:39 238

原创 为什么异步任务会尝试访问已回收的请求对象?

这个错误发生在异步任务执行过程中,系统尝试访问一个已经被回收的HTTP请求对象,导致。

2025-07-01 13:49:30 2200

原创 一个复合索引导致数据查询为空?

我们上周上线时,对文件系统表添加了索引,文件列表加载为空,通过监控发现数据库CPU、内存、磁盘IO正常。最令人奇怪的上线的内容不涉及文档中心模块的功能,仅仅添加了一个索引呀。

2025-06-29 13:20:15 691

原创 MCP基础知识一(实战通信方式之Stdio)

根据MCP协议定义,Server可以提供三种类型的标准能力,

2025-06-28 18:37:49 1105

原创 深入探讨Java中控制多线程顺序执行的6种实现方案

A:这是为了防止"虚假唤醒"(spurious wakeup),即线程可能在没有收到通知的情况下被唤醒。在多线程编程中,线程的执行顺序本质上是不确定的,由操作系统调度器决定。是Java 8引入的增强版Future,支持函数式编程风格的任务编排。通过计数器实现线程等待,允许一个或多个线程等待其他线程完成操作。对象实质上是一个独立的等待队列,可以实现精确的线程唤醒控制。:简单的线性任务流,且可以接受阻塞主线程的情况。创建单线程的线程池,自然保证任务按提交顺序执行。:需要顺序执行但可能动态添加任务的场景。

2025-06-27 11:44:17 1266

原创 线程池塞爆导致的隐蔽性能陷阱

确保。

2025-06-26 12:52:51 583

原创 大数据量的分页,怎么办?

分页功能这个是大家工作中经常碰到的,相信大家脑海中直接跳出limit offset,size . 当进行深度分页时会卡崩,为什么?因为执行这条sql需要先读取offset+size条数据,根据实际业务在需要进行排序,然后丢弃到offset条数据。例如:假设有一张表,三个字段,分别为id,name,age. 其中id是主键。age 普通索引。需求:我们需要查找出按照年龄排序offset=1000000 size =10 的记录。如果使用limit offset,size,需要进行次操作。

2025-06-21 13:21:50 1001 1

原创 Java 线程池基础知识

线程池类型核心线程数最大线程数工作队列线程存活时间适用场景固定固定无CPU密集型060秒短生命期IO密集型11无顺序执行任务固定无定时/周期性任务通用缺点除CachedThreadPool外,其他三种都使用无界队列,可能导致OOM默认的线程工厂创建的线程没有有意义的名称,不利于问题排查默认的拒绝策略可能不符合业务需求最佳实践对于生产环境,建议根据业务需求自定义ThreadPoolExecutor为线程设置合理的名称前缀根据任务类型选择合适的队列和拒绝策略。

2025-06-20 19:05:55 751

原创 高性能系统优化指南

LVS(Linux Virtual Server)即Linux虚拟服务器:约80万QPS(4层负载均衡)sort_buffer_size = 4M //作用:用于 ORDER BY 和 GROUP BY 操作。innodb_io_capacity=400 //作用:控制后台进程的 I/O 吞吐量。join_buffer_size = 4M //用于无索引 JOIN 操作。tmp_table_size= 32M //内存临时表的最大大小。F5硬件:约200万QPS(企业级硬件负载)# 排序缓冲和连接缓冲。

2025-06-20 18:30:01 341

原创 架构设计的核心原则与基础理论

例如Redis采用的是单进程的,nginx采用的多进程的。具体的操作方式:列出我们需要关注的质量属性点,然后分别从这些质量属性的维度去评估每个方案,在综合挑选适合当时的情况的最优方案。架构设计方案一定需要做至少两个方案以上,现实的经验告知当你的方案少于两个的时候,说明你还需要足够的时间了解相关的技术方案。梳理系统,将现在的复杂度问题列出来,结合现有的业务、技术、团队等进行排序,优先解决当前面临的最主要的复杂度问题。每个单机的性能是有上限的,在一定的业务场景下,必须采用集群的方式达到高性能。

2025-06-15 12:58:15 739

原创 LangGraph基础知识( Multi-agent)(六)

将编译后的子图作为一个节点添加到父图中import os# 定义工具列表"system",),我们根据`create_agent`辅助函数依次去创建`db_agent`和`code_agent`两个代理,分别赋予它们不同的身份设定、基座模型和所能使用的工具。

2025-06-14 19:35:59 1504

原创 LangGraph基础知识(Human-in-the-loop)(五)

这个组件能够在一个独立的线程中保存图中每个节点的状态。由于这些信息被持久化保存(包括将内存用作持久存储),我们就可以随时提取并修改图产生的数据。更改完成后,再将这些数据重新传回到图中以继续运行流程。这一机制是`LangGraph`已成功实现的功能。**由此可见 `Human-in-the-loop (HIL)` 并不是一个全新的组件,而是基于`LangGraph`底层的构建组件延展出来的一种实现方法。

2025-06-14 18:08:40 1780 2

原创 LangGraph基础知识(Store )(四)

LangGraph`通过`BaseStore`接口提供内置文档存储。与通过线程 ID 保存状态的`checkpointer`不同,存储使用自定义命名空间来组织数据。常见用例包括存储用户配置文件、构建知识库以及管理所有线程的全局首选项。具体的**实现形式是:`LangGraph` 将长期记忆作为 `JSON` 文档存储在`Store`中,每个`memory`都组织在自定义`namespace`(类似于文件夹)和不同的`key` (例如文件名)下。

2025-06-14 15:48:40 652

原创 LangGraph基础知识(MemorySaver/SqliteSaver )(三)

不论是简单还是复杂的图,一个明显的限制是:之前内容中的所有实现都只能执行单一任务。也就是说,一旦图被编译并根据用户的输入运行以后,它虽然可以按照既定的图流程输出结果,但在下一次交互时,这个图将无法记住之前的对话内容。通过两次询问,我们可以确定当前的`graph`实例不具备任何的上下文记忆能力。

2025-06-11 20:07:13 1735 1

原创 LangGraph基础知识(Reducer/MessageGraph)(二)

在`LangGraph`框架中,**不论构建的代理简单或复杂,其本质都是通过节点(Node)和边(Edge)的有机组合来形成一个完整的图(Graph)**。这种构建方式所形成的工作流逻辑十分清晰:每个节点在完成其任务后,都会通过边来指示下一个工作步骤,从而赋予整个应用系统更高的灵活性和可扩展性。掌握三个核心组件——状态(State)、节点(Node)和边(Edge)。

2025-06-11 19:02:34 877

原创 迁移达梦数据库过程中,如何快速识别需要改写的Mapper SQL方法

在从的方案中,我们如何快速发现哪些Mapper的中sql需要改写呢?

2025-06-09 19:44:49 635

原创 LangGraph基础知识(Graph/GraphState)(一)

定义输入的模式# 定义输出的模式# 将 InputState 和 OutputState 这两个 TypedDict 类型合并成一个更全面的字典类型。pass("system","你是一位乐于助人的智能小助理",),# 明确指定它的输入和输出数据的结构或模式# 添加节点# 添加便# 编译图graph.invoke({"question":"你好,我用来测试"}){'answer': '你好!

2025-06-09 19:23:11 907

原创 spring Security对RBAC及其ABAC的支持使用

如何在 request 之间共享 SecurityContext?既然SecurityContext 是存放在 ThreadLocal 中的,而且在每次权限鉴定的时候,都是从 ThreadLocal 中获取 SecurityContext 中保存的 Authentication。那么既然不同的 request 属于不同的线程,为什么每次都可以从 ThreadLocal 中获取到当前用户对应的 SecurityContext 呢?在 Web 应用中这是通过。

2025-06-08 18:28:30 1103

原创 基于票据的SSO (如CAS协议)-代码实现

在上面我们已经把CAS Server服务端搭建好了,接下来需要把CAS Client客户端项目接入到CAS Server服务端,如果我们没有定义服务记录,客户端在访问时会提示“未验证授权的服务”。在CAS Server中,支持多种注册服务的方式,本案例中我们采用JSON声明的方式来把客户端注册到CAS Server中。第五次:cas-client带着st去cas-server上进行验证,验证通过之后可以访问资源。客户端应用通过后台请求 CAS 服务端验证 ST(防止伪造),验证成功后建立本地会话。

2025-06-08 14:55:59 1187

原创 单点登录(SSO)的背景与实现方案

获取访问令牌(Access Token)和/或ID令牌(ID Token):企业信息化发展导致内部系统数量快速增长,员工需要记忆多套账号密码。:多套密码导致用户倾向于使用简单密码或重复密码,增加安全风险。服务提供商(SP)将用户重定向到身份提供商(IdP):IT部门需要为每个系统单独管理用户账户,效率低下。:用户希望在多个关联系统间无缝切换,避免重复登录。子域系统通过读取父域Cookie验证用户身份。用户访问系统A,被重定向到SSO服务器。用户登录后获得票据(Ticket)应用系统通过令牌获取用户信息。

2025-06-08 12:37:50 429

原创 OAuth 2.1 协议介绍

客户端向认证服务器发起获取授权码请求时,跳转至授权确认页面,用户通过用浏览器在授权页 面进行授权确认。)认证服务器返回授权码的过程中,如果恶意程序截取到授权码,那么他接下来就可 以继续操作步骤(5。在授权码模式的交互工程中,有一个环节比较薄弱,这个环节就是用户在代理页面确认授权的时候,容易受到恶意程序的攻击,从而导致授权码被恶意程序窃取,进而通过授权码窃取令牌,当然这个前。中的密码模式、简化模式,增加了设备授权码模式,同时也对授权码模式增 加了PKCE。的值,因此在认证服务器无法校验通过,从而获取。

2025-06-07 18:47:15 539

原创 OAuth2.0 协议

OAuth 2.0)是一种开放标准的授权协议允许用户授权第三方应用访问其在某 个服务提供者上的受保护资源,而无需将其实际的凭证(如用户名和密码)分享给第三方应用。这种 方式可以增加安全性,同时允许用户更好地控制其数据的访问权限。

2025-06-07 18:36:12 852

原创 mybaits中浮点数精度问题排查记录

摘要:开发人员在迁移至达梦数据库时遇到接口查询异常,发现SQL日志和参数都正确但无法返回结果。排查发现是Float类型精度问题导致,实际传入值为1.2000000476837158203125,但日志显示优化为1.2。解决方案是编写BigDecimalToFloatTypeHandler进行精确类型转换,并注册到MyBatis框架中。该问题揭示了Java的Float.toString()方法会优化输出,可能掩盖实际精度差异。

2025-06-06 12:25:32 347 1

原创 skywalking gateway 日志traceId 丢失

MDC(Mapped Diagnostic Context)是日志框架提供的用于跨方法传递上下文信息的工具,特别适合在分布式系统中传递 TraceID、用户信息等公共参数。当前运维监控系统会将超时接口的告警信息发送至企业邮箱,但邮件中未包含Gateway的TraceID,导致在排查分布式链路问题时难以快速定位和追踪。若缺少Gateway组件包,会导致无法捕获和传递TraceID。于是就考虑到自己将traceId 拿到到,利用MDC工具拼接到日志中。如果获取失败(空值),则通过。(推测是项目自定义的键名)

2025-05-30 09:38:49 811

原创 mybatis 插件不生效原因排查

在将mysql 迁移到达梦的过程中,有同事反馈达梦方法级别的插件失效。在MyBatis调用Mapper方法时进行拦截自动将原方法调用重定向到对应的DM版本方法。

2025-05-29 08:49:29 800

原创 字节码操作库比较:Java Proxy、Cglib、Javassist 和 Byte Buddy

特性Java ProxyCglibJavassistByte Buddy代理接口✓✗✓✓代理类✗✓✓✓性能中等高中等非常高学习曲线低中等低中等维护状态JDK内置不活跃活跃非常活跃API友好度简单复杂中等非常友好依赖无需要需要需要对于新项目,Byte Buddy通常是首选,因为它结合了高性能和现代API设计。如果只需要简单的接口代理,Java内置Proxy就足够。

2025-05-28 16:44:27 518

原创 MyBatis 源码核心模块解析

虽然 BaseExecutor 是抽象类,但它在 MyBatis 中是被具体子类继承并实例化的(如 SimpleExecutor, ReuseExecutor, BatchExecutor),并且这些子类会继承并调用父类的方法逻辑。因为在 sqlSessionFactory.openSession()中,创建执行器过程中,调用的是Executor的所有插件。因此,直接对它进行增强可以确保拦截到实际执行 SQL 的准备阶段(即 prepare() 方法)。:提供BoundSql对象(最终要执行的SQL)

2025-05-28 16:42:32 687

原创 mysql-innodb-探索用户存储记录在磁盘上如何记录的

本文以MySQL 5.7的COMPACT行格式为例,分析了InnoDB叶子节点数据页(FIL_PAGE_INDEX)的存储结构。通过创建包含int和char字段的测试表并插入数据,使用hexdump工具查看.ibd文件中的真实存储内容。重点解析了数据页中infimum/supremum系统记录的作用,以及如何通过next_record指针遍历页内记录。特别说明了当next_record第一位为1时表示负数补码的处理方法,最终通过计算记录指针位置验证了页内记录的完整遍历过程。

2025-05-26 19:05:10 907

原创 服务从mysql迁移达梦数据库

结合我们的项目使用的特点,我们选择了拦截器方法,且我们结合JavaAgent字节码增强技术来实现。当前系统技术栈:springboot+mybatis(3.5.9)+mybaits plus。我们采用的是拦截器方案,结合JavaAgent字节码增强技术,实现最小化代码改动。在运行代码过程中,会根据databaseId来选择数据源运行对象的sql。根据信创国产适配要求,针对业务系统迁移至达梦数据库,保持系统稳定、可靠。对sql的进行拦截并处理,处理简单函数转换。话不多说,直接上代码。

2025-05-26 18:56:04 1444

原创 springCloud 上传文件

@Configuration classMultipartSupportConfig{ @Autowired privateObjectFactory<HttpMessageConverters>messageConverters; @Bean publicEncoderfeignForm...

2020-04-18 16:26:46 191

这个是cas-server-5.3.14 的认证中心的压缩包,直接放在tomcat的webapps下即可

这个是cas-server-5.3.14 的认证中心的压缩包,直接放在tomcat的webapps下即可

2025-06-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除