- 博客(753)
- 资源 (34)
- 问答 (1)
- 收藏
- 关注
原创 java log相关:Log4J、Log4J2、LogBack,SLF4J
理解门面模式:也可以只用slf4j无日志实现:slf4j-api.jar + slf4j-nop.jar。
2025-09-05 15:09:16
807
原创 solidity地址、智能合约、交易概念
概念说明address20 字节的账户标识可接收 ETH 的地址.balance查询余额安全转账msg.sender当前调用者地址tx.origin原始交易发起者(不推荐使用)口诀“address 是身份,payable 才能收钱”“.transfer 最安全,.call 要小心”“合约不能主动发交易,只能被调用”概念说明交易(Transaction)由 EOA 发起,改变链上状态msg.sender直接调用者(推荐用于权限)tx.origin。
2025-08-29 16:54:34
1494
原创 Solidity合约编程基础知识
在 Solidity 中,msg 是一个 全局对象(全局变量),它包含了与当前 外部函数调用(transaction 或 call) 相关的关键信息。它是智能合约与外部世界(如用户、钱包、其他合约)交互时最重要的数据来源之一。如果一个key未被保存在mapping中,一样可以正常读取到对应value,只是value是空值(字节全为0)。它无法迭代keys,因为它只保存键的哈希,而不保存键值,如果想迭代,可以用开源的可迭代哈希类库。eg3: 映射 + 数组:一对多关系。eg1: 简单映射:地址 → 余额。
2025-08-28 16:30:27
528
转载 Solidity的生命周期的简单实践理解
调用信息会被放入一笔交易,经由交易编码、交易签名、交易推送、交易池缓存、打包出块、网络共识等过程,最终被交由各节点的EVM执行。在EVM中,由SSTORE字节码将参数0x123存储到合约字段_state中。该字节码先从栈上拿到状态字段_state的地址与新值0x123,随后完成实际存储。黄色部分就是合约Demo的bytecode;后面的部分也可以看到输入的0x123。
2025-08-28 11:10:47
60
原创 base64认识实际使用
Base64,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"+“、”/"一共64个字符的字符集,(任何符号都可以转换成这个字符集中的字符,这个转换过程就叫做base64编码。Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
2025-08-22 22:08:00
309
原创 web3相关基础整理
SHA-256被认为是安全的,因为它基于单向函数的数学原理,这使得从哈希值反推原始数据变得非常困难,甚至是理论上不可能的(在当前的计算能力下)。然而,随着计算能力的提升和量子计算技术的发展,理论上存在破解的可能性。因此,尽管SHA-256在当前的密码学实践中仍然是非常安全的,但研究人员和标准制定者也在不断地寻找和实施更安全的方法,如SHA-3。SHA-256算法通过一系列的步骤将任意长度的输入数据(如文本、文件等)转换为一个固定长度的256位(32字节)哈希值。线上: 用户A, 银行, 用户B(记账)
2025-08-09 16:00:17
647
原创 协程coroutine认识和例子代码
它用极其创新的方式证明了在 JVM 上实现协程是可行的,并展示了其巨大价值。因此,在今天,对于新的项目,我们应该直接使用。一个程序可以包含多个协程,可以对比与一个进程包含多个线程,因而下面我们来比较协程和线程。而协程也相对独立,有自己的上下文,但是其切换由自己控制,由当前协程切换到其他协程由当前协程来控制。既然 JVM 本身(在 Loom 之前)不支持保存和恢复线程的执行状态,Quasar 是如何做到的呢?是在单线程中的多个任务同时执行的相互配合,避免了线程之间切换造成的资源浪费。
2025-08-02 19:11:31
815
原创 Java CompletableFuture实现任务调度Dag
需要实现 a、e 一起跑,然后 b、c跑, 最后是d跑。如上整个任务完成需要8秒多。
2025-07-21 20:21:52
322
原创 非实时的防控场景
另外需要一个大宽表的存储系统,因为非实时场景下,不同特征获取到的时序是不一样的,所以需要有一个收集汇总的地方。跑很多算法,会出现可能某些算法跑了相同的内容,比如一张图片可能有不同的算法模型,但是会有相同的图片特征处理逻辑,重复处理显然是一种浪费。例如我们往网上发布一篇日记,很多时候时候是直接发出去了,但是后面因为违规会被下掉,提醒有风险(),这通常也需要能快速识别到风险,以加少风险暴露的时常。其次是需要开发一套流程编排体系,让用户所见即所跑,清楚看到跑了什么,最后能识别到什么风险。
2025-07-15 12:31:59
291
原创 spring bean初始化异步执行
即postProcessBeforeInitialization记录bean的开始时间,postProcessAfterInitialization记录bean初始化完成时间,然后就能得到bean初始化方法耗时。
2025-07-14 19:18:51
480
原创 spring-ai RAG(Retrieval-Augmented Generation)
/ 生成一个机器人产品说明书的文档new Document("产品说明书:产品名称:科学计算器\n" +"产品描述:科学计算器具备多种数学运算和工程计算功能,主要包含以下核心能力:\n" +"功能:\n" +"1. 数学运算:支持四则运算、三角函数(正弦、余弦、正切)、反三角函数(反正切、反余弦)、对数、指数运算等基础数学功能。部分型号如Panecal支持二进制至十六进制的数制转换。\n" +
2025-07-11 23:22:26
1245
原创 spring-ai agent概念
长期记忆(Long-Term Memory, LTM)在AI代理中指跨任务、跨会话持久存储和检索信息的能力,其核心目标是通过积累历史经验与知识提升代理的智能化水平与个性化服务效果。短期记忆(Short-Term Memory, STM)是指在任务执行过程中临时存储和处理当前交互信息的能力,其核心特点是容量有限且时效短暂。反思和改进:代理人可以对过去的行为进行自我批评和反思,从错误中吸取教训,并为未来的步骤进行改进,从而提高最终结果的质量。可以是各种第三方服务,搜索服务等。agent 智能体,突出。
2025-07-10 22:42:20
704
原创 spring-ai 工作流
创建工作流中的核心节点,包括两个文本分类节点和一个记录节点分类// 评价正负分类节点.build();// 负面评价具体问题分类节点" +.build();@Override} else {// 添加节点// 定义边(流程顺序).addEdge(START, "feedback_classifier") // 起始节点// 结束节点@Bean// 评价正负分类节点.build();
2025-06-30 23:28:36
723
1
原创 java arthas redefine实现热替换某个类
结果,程序一直保证运行,当arthas redifine后,程序输出新class的内容。简单的看下arthas redefine类的效果。
2025-06-29 16:10:35
389
原创 spring-ai MCP的简单实例
其实也可以理解为大模型的一个扩展点,和spring bpp/bfpp类似,让大模型与外部服务交互,更好的辅助回答。一个简单的天气服务,工程启动后可以看到如下注册了工具。客户端请求和log如下。
2025-06-28 08:49:00
827
原创 spring ai入门实例
也可以使用Spring AI Alibaba ,其是一款以 Spring AI 为基础,深度集成百炼平台,支持 ChatBot、工作流、多智能体应用开发模式的 AI 框架。maven工程的pom.xml, 使用了spring-ai-alibaba。我这里选择阿里云百炼的,可以有免费,直接参考文档创建好API Key。
2025-06-27 23:50:07
928
原创 多个线程执行,如何取到最先完成的任务的那个结果
实际工作中,可能有些链路逻辑有对比需求,或者多种方案,需要取最快执行的那个方案,肯定是多线程并行跑,取最快的那个。线程安全的阻塞添加和获取(可以看到较慢的线程不加任何处理还是执行完的)
2025-06-14 12:44:06
482
原创 实时风控场景:抢茅台例子
如上描述了一个策略,执行基本都是本地化,要么是从缓存读取的实时指标,所以风控过程在200ms内,在活动期间,基本是40ms内。而类似抢茅台的这种活动,策略组装基本都是如下,即快速判黑的,所以做到了实时风控。另外也需要运营同学配置好防控策略,并调整优化。每次抢茅台的时候,你会遇到如下各种报错,当然你也可能抢到。, 因为不确定你是不是黄牛,所以有一系列的规则来限制。可以看成左变量、操作符号、右变量三元组。另外一些则是抢占了库存,但是要经过。回到技术环节,如上有很多报错在。层面就中止了,比如无库存等。
2025-06-14 10:02:54
400
原创 一致性hash
1. 与IPv4地址的兼容性:服务器IP地址由32位二进制数构成,因此2^32的哈希空间能确保每个IP地址获得唯一映射,避免冲突。足够大的范围:2^32(约42.9亿)的哈希值空间能均匀分布数据,减少哈希冲突概率。* 计算效率:32位无符号整型的运算在现代计算机中高效且通用。技术优势动态扩展性:在集群增减节点时,仅影响哈希环上相邻节点的数据迁移,而非全局重新分配。负载均衡:大范围的哈希空间更易实现数据的平衡分布,满足一致性哈希的平衡性要求。。
2025-06-13 23:21:04
931
原创 大中台应用的层次抽象
所以这必然导致单体应用越来越大,且业务jar包引入的越多,jar冲突的可能就会出现,且越来越多。有一些通用能力可以沉淀,大家都用的是一样的。业务层:即业务自己的扩展逻辑,其中可以有自己业务的特定逻辑,依赖也是自己的,不与其他业务干扰。一个单体中台应用要支持的业务越来越多,必然要引入各种业务第三方jar包,用来支持不同功能。作为一个独立的平台应用,应该要保持自己的核心功能模块,但是显然也要满足不同业务方的需求。且这些业务jar包,可能由于不同业务需求而有不同的配置、版本、特性能力。
2025-06-12 23:38:09
381
原创 风险识别:事件到规则引擎
事件可以简单的理解为一组键值对,即Map<特征名称,特征值>的概念。在java中就是一个类,类里面有很多变量和方法。原始的属性简单的脚本处理后的特征:如数据切分,类型转换,特征组合等等本地函数:加工逻辑指标:flink任务窗口+缓存第三方服务:可以规定不得超过200ms(rpc调用)结构体特征:很多事件共用的则可以抽象出结构体,事件可以直接编辑配置,即一个结构体特征算法服务:如黄图,涉政等需要算法模型运算的特征。
2025-06-12 22:58:45
1222
原创 风控识别的基础认识
通过流计算的计算模式,能对数据进行count/count distinct/sum/max/min之类的聚合计算,计算完的结果存储到缓存中去,这样下游的应用可以快速读取到。一般在性能要求上整个实时风控检测只需5~200ms内,如果要读取十几个指标,分给每个指标的时间将<1ms,如何能快速的获取这些指标?当然一些基础的信息能直接从上游带下来:如买家id、订单id、卖家id,商品id,收获地址等等信息。指标A:查询一个小时内,同一IP购买的同一商品的数量。考虑如下的一些事项,即有。新注册账户首单即大额消费。
2025-06-07 13:55:02
244
原创 规则引擎--规则逻辑形如“1 & (2 | 3)“的执行优化
本文探讨了规则表达式执行顺序的优化策略。以"1 & (2 | 3)"为例,分析了基于操作符短路原则的执行效率问题。通过将表达式建模为二叉树,展示了如何通过节点旋转和交换来优化执行顺序(如变为"(3 | 2) & 1"),特别是当知道各子表达式执行速度时。文章提出了三种优化判断方法:1)预先标记子表达式执行速度;2)试运行机制;3)长期耗时统计。这些方法需要考虑实际场景中变量获取、外部服务调用等不同耗时因素,并在生产环境中支持双跑和灰度机制。
2025-06-07 12:28:26
325
原创 mysql 主从复制和分库分表
查看是否开启binlogbinlog是二进制日志文件,是由mysql server维护的用于记录mysql的数据更新或者潜在更新(比如DELETE语句执行删除而实际并没有符合条件的数据),在mysql主从复制中就是依靠的binlog;执行SELECT等不涉及数据更新的语句是不会记binlog的,而涉及到数据更新则会记录。要注意的是,对支持事务的引擎如innodb而言,必须要提交了事务才会记录binlog。binary-log。
2025-06-07 08:46:44
955
原创 MySQL锁及其分类
Insert Intention Locks意为插入意向锁,插入意向锁是Innodb gap锁的一种类型,这种锁表示要以这样一种方式插入:如果多个事务插入到相同的索引间隙中,如果它们不在间隙中的相同位置插入,则无需等待其他事务。比如说有索引记录4和7,有两个事务想要分别插入5,6,在获取插入行上的独占锁之前,每个锁都使用插入意图锁锁定4和7之间的间隙,但是不要互相阻塞,因为行是不冲突的,意向锁的涉及是为了插入的正确和高效。共享锁支持读完整性。GAP锁的目的,是为了防止同一事务的两次当前读,出现幻读的情况。
2025-06-05 23:17:26
1247
原创 场景设计:二维码扫码登录
缺点:这种传统的模式带来很明显的缺点,即客户端的浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。缺点:与长轮询一样,服务器一直保持连接是会消耗资源的,如果有大量的长连接的话,对于服务器的消耗是巨大的,而且服务器承受能力是有上限的,不可能维持无限个长连接。服务器收到请求后,确保合法性之后,生成一个二维码唯一ID,关联ID的登录状态信息,并且设置过期时间。PC端轮询到状态变为已确认,获取到PC端token。
2025-06-01 15:25:35
763
原创 场景题:订单超时自动取消
这种方式实现简单直接,但缺点是资源消耗较高,特别是当订单量大时,频繁的数据库查询会影响性能,且实时性较差。这种方式效率高,任务处理及时,但对系统的要求较高。延时队列虽然效率高,但实现复杂,需要依赖外部系统(如RabbitMQ),增加了系统的依赖性和维护成本。此外,延时队列的准确性高度依赖于时间服务,可能会受到网络延迟等因素的影响。这种方式在性能、可扩展性和稳定性上较好,是一个不错的选择。比如平时的购票,外卖,商品购买等等,都会出现比如30分钟内订单锁定,支付后才有效,否则就自动取消。
2025-06-01 09:26:56
309
原创 mysql慢sql的实际处理方案之一
当大批量慢sql过来,显然就是占用了线程池的链接,然后长久不释放,所以会出现线程池满的问题,AI搜索可以。将线程池分开,慢sql到专门的线程池,而不影响到正常的sql。基于一些正则匹配历史慢sql。另外还可以加上限流和告警。那么如何识别慢sql呢?基于历史经验的历史sql。可以黑白名单,相互转化。复习mysql架构图。
2025-05-31 09:13:21
242
原创 设计模式-发布订阅
发布/订阅者模式最大的特点就是实现了松耦合,也就是说你可以让发布者发布消息、订阅者接受消息,而不是寻找一种方式把两个分离 的系统连接在一起。当然这种松耦合也是发布/订阅者模式最大的缺点,因为需要中间的代理,增加了系统的复杂度。而且发布者无法实时知道发布的消息是否被每个订阅者接收到了,增加了系统的不确定性。发布订阅解偶,通常使用消息中间件,能实现跨平台、异步通信。, 理解发布订阅模式和观察者模式的区别。
2025-05-29 07:13:53
1009
原创 设计模式-迭代器模式
定义:迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又无需暴露该对象的内部实现,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。,可以内部各种方式实现,但是对外就是如下两个方法。如:集合中常见的迭代器。
2025-05-28 22:10:10
653
原创 设计模式-观察者模式
在此模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用在事件处理系统。Subject的操作会通知所有注册的Observer,Subject可以添加删除Observer。观察者模式使用三个类: Subject(被观察的主体)、Observer(观察者) 和 测试类。
2025-05-28 22:06:10
590
原创 设计模式-门面模式
eg1: 如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。eg2: 造个房子:找水泥工,找瓦匠,木匠,装修等各样的活,也是要与这些角色意义打交道。n.(建筑物的) 正面,立面;(虚假的) 表面,外表;美[fəˈsɑːd]
2025-05-28 22:01:44
321
wireshark tcp三次握手
2016-08-03
mvc servlet jdbc web框架
2015-06-26
java web session失效
2016-05-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅