- 博客(728)
- 资源 (34)
- 问答 (1)
- 收藏
- 关注
原创 大中台应用的层次抽象
所以这必然导致单体应用越来越大,且业务jar包引入的越多,jar冲突的可能就会出现,且越来越多。有一些通用能力可以沉淀,大家都用的是一样的。业务层:即业务自己的扩展逻辑,其中可以有自己业务的特定逻辑,依赖也是自己的,不与其他业务干扰。一个单体中台应用要支持的业务越来越多,必然要引入各种业务第三方jar包,用来支持不同功能。作为一个独立的平台应用,应该要保持自己的核心功能模块,但是显然也要满足不同业务方的需求。且这些业务jar包,可能由于不同业务需求而有不同的配置、版本、特性能力。
2025-06-12 23:38:09
188
原创 风控识别的基础认识
通过流计算的计算模式,能对数据进行count/count distinct/sum/max/min之类的聚合计算,计算完的结果存储到缓存中去,这样下游的应用可以快速读取到。一般在性能要求上整个实时风控检测只需5~200ms内,如果要读取十几个指标,分给每个指标的时间将<1ms,如何能快速的获取这些指标?当然一些基础的信息能直接从上游带下来:如买家id、订单id、卖家id,商品id,收获地址等等信息。指标A:查询一个小时内,同一IP购买的同一商品的数量。考虑如下的一些事项,即有。新注册账户首单即大额消费。
2025-06-07 13:55:02
147
原创 规则引擎--规则逻辑形如“1 & (2 | 3)“的执行优化
本文探讨了规则表达式执行顺序的优化策略。以"1 & (2 | 3)"为例,分析了基于操作符短路原则的执行效率问题。通过将表达式建模为二叉树,展示了如何通过节点旋转和交换来优化执行顺序(如变为"(3 | 2) & 1"),特别是当知道各子表达式执行速度时。文章提出了三种优化判断方法:1)预先标记子表达式执行速度;2)试运行机制;3)长期耗时统计。这些方法需要考虑实际场景中变量获取、外部服务调用等不同耗时因素,并在生产环境中支持双跑和灰度机制。
2025-06-07 12:28:26
257
原创 mysql 主从复制和分库分表
查看是否开启binlogbinlog是二进制日志文件,是由mysql server维护的用于记录mysql的数据更新或者潜在更新(比如DELETE语句执行删除而实际并没有符合条件的数据),在mysql主从复制中就是依靠的binlog;执行SELECT等不涉及数据更新的语句是不会记binlog的,而涉及到数据更新则会记录。要注意的是,对支持事务的引擎如innodb而言,必须要提交了事务才会记录binlog。binary-log。
2025-06-07 08:46:44
767
原创 MySQL锁及其分类
Insert Intention Locks意为插入意向锁,插入意向锁是Innodb gap锁的一种类型,这种锁表示要以这样一种方式插入:如果多个事务插入到相同的索引间隙中,如果它们不在间隙中的相同位置插入,则无需等待其他事务。比如说有索引记录4和7,有两个事务想要分别插入5,6,在获取插入行上的独占锁之前,每个锁都使用插入意图锁锁定4和7之间的间隙,但是不要互相阻塞,因为行是不冲突的,意向锁的涉及是为了插入的正确和高效。共享锁支持读完整性。GAP锁的目的,是为了防止同一事务的两次当前读,出现幻读的情况。
2025-06-05 23:17:26
1063
原创 场景设计:二维码扫码登录
缺点:这种传统的模式带来很明显的缺点,即客户端的浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。缺点:与长轮询一样,服务器一直保持连接是会消耗资源的,如果有大量的长连接的话,对于服务器的消耗是巨大的,而且服务器承受能力是有上限的,不可能维持无限个长连接。服务器收到请求后,确保合法性之后,生成一个二维码唯一ID,关联ID的登录状态信息,并且设置过期时间。PC端轮询到状态变为已确认,获取到PC端token。
2025-06-01 15:25:35
632
原创 场景题:订单超时自动取消
这种方式实现简单直接,但缺点是资源消耗较高,特别是当订单量大时,频繁的数据库查询会影响性能,且实时性较差。这种方式效率高,任务处理及时,但对系统的要求较高。延时队列虽然效率高,但实现复杂,需要依赖外部系统(如RabbitMQ),增加了系统的依赖性和维护成本。此外,延时队列的准确性高度依赖于时间服务,可能会受到网络延迟等因素的影响。这种方式在性能、可扩展性和稳定性上较好,是一个不错的选择。比如平时的购票,外卖,商品购买等等,都会出现比如30分钟内订单锁定,支付后才有效,否则就自动取消。
2025-06-01 09:26:56
242
原创 mysql慢sql的实际处理方案之一
当大批量慢sql过来,显然就是占用了线程池的链接,然后长久不释放,所以会出现线程池满的问题,AI搜索可以。将线程池分开,慢sql到专门的线程池,而不影响到正常的sql。基于一些正则匹配历史慢sql。另外还可以加上限流和告警。那么如何识别慢sql呢?基于历史经验的历史sql。可以黑白名单,相互转化。复习mysql架构图。
2025-05-31 09:13:21
162
原创 设计模式-发布订阅
发布/订阅者模式最大的特点就是实现了松耦合,也就是说你可以让发布者发布消息、订阅者接受消息,而不是寻找一种方式把两个分离 的系统连接在一起。当然这种松耦合也是发布/订阅者模式最大的缺点,因为需要中间的代理,增加了系统的复杂度。而且发布者无法实时知道发布的消息是否被每个订阅者接收到了,增加了系统的不确定性。发布订阅解偶,通常使用消息中间件,能实现跨平台、异步通信。, 理解发布订阅模式和观察者模式的区别。
2025-05-29 07:13:53
945
原创 设计模式-迭代器模式
定义:迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又无需暴露该对象的内部实现,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。,可以内部各种方式实现,但是对外就是如下两个方法。如:集合中常见的迭代器。
2025-05-28 22:10:10
615
原创 设计模式-观察者模式
在此模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用在事件处理系统。Subject的操作会通知所有注册的Observer,Subject可以添加删除Observer。观察者模式使用三个类: Subject(被观察的主体)、Observer(观察者) 和 测试类。
2025-05-28 22:06:10
534
原创 设计模式-代理模式
在某些情况下,一个客户类不想或者不能(比如找房子:某些时候找不到房东,而只能找到中介)直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则(代理实例的调用处理程序实现的一个接口,每一个proxy代理实例都有一个关联的调用处理程序;文件,代理类和委托类的关系在运行前就确定了。
2025-05-28 21:56:26
1001
原创 设计模式-原型模式
用带原型管理器的原型模式来生成包含"圆"和"正方形"等图形的原型,并计算其面积。用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
2025-05-28 21:52:12
308
原创 设计模式-单例模式
创建一个变量需要:一个是申请一块内存,调用构造方法进行初始化操作,另一个是分配一个指针指向这块内存。,其余线程必须等待,只有在活动线程执行完对类的初始化操作之后,才会通知正在等待的其它线程。编译器收集的顺序是由语句在源文件中出现的顺序所决定的,静态语句块中只能访问到定义在静态语句块之前的变量;方法,即类/接口初始化方法,该方法只能在类加载的过程中由JVM调用。JVM必须确保一个类在初始化的过程中,如果是多线程需要同时初始化它,如果一个类没有声明任何的类变量,也没有静态代码块,那么可以没有类。
2025-05-28 21:46:32
1138
原创 限流算法相关知识点
请求执行作为消费者,每个请求都需要去桶中拿取一个令牌,取到令牌则继续执行;如果桶中无令牌可取,就触发拒绝策略,可以是超时等待,也可以是直接拒绝本次请求,由此达到限流目的。系统服务作为生产者,按照指定频率向桶(容器)中添加令牌,如 QPS 为 2,每 500ms 向桶中添加一个令牌,如果桶中令牌数量达到阈值,则不再添加。如 Guava RateLimiter。
2025-05-28 21:26:35
426
原创 消息队列-kafka为例
因为offet由Consumer控制,所以Kafka broker是无状态的,它不需要标记哪些消息被哪些消费过,也不需要通过broker去保证同一个Consumer Group只有一个Consumer能消费某一条消息,因此也就不需要锁机制,这也为Kafka的高吞吐率提供了有力保障。分区类似hadoop分布式文件系统,也类似于spark中RDD以partition方式将数据分块存储,一是分块存储提高数据概率性安全,比如分布式的文件块,如果某台机器宕机数据丢失,也是丢失一部分,不会出现整个文件全军覆没。
2025-05-27 22:54:39
1014
原创 redis知识点整理
redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体,就是一个队列。当执行的时候,一次性按照添加顺序依次执行,中间不会被打断或者干扰。一个队列中,一次性,顺序性,排它性的执行一系列命令。
2025-05-27 22:23:59
701
原创 分布式事务知识点整理
牺牲一致性,只是不再要求关系型数据库中的强一致性,而是只要系统能达到最终一致性即可,考虑到客户体验,这个最终一致的时间窗口,要尽可能的对用户透明,也就是需要保障"用户感知到的一致性"。通常是通过数据的多份异步复制来实现系统的高可用和数据的最终一致性的,"用户感知到的一致性"的时间窗口则取决于数据复制到一致状态的时间。在确认阶段,如果所有的参与者都成功执行了他们的操作并且在尝试阶段中没有失败发生,那么所有的参与者将提交他们的操作,完成事务。每个参与者都会锁定必要的资源,并记录下将要执行的操作。
2025-05-24 23:32:15
746
原创 分布式锁总结
本文介绍了分布式锁的概念及其实现方式。分布式锁用于多JVM进程环境下对共享资源的互斥访问,需具备排它性、避免死锁和高可用性。实现方法包括基于数据库,基于Redis,基于zookeeper等方案。
2025-05-24 22:20:57
938
原创 缓存及其问题解决
缓存没有,数据库也是没有的;若黑客利用此漏洞构造恶意数据进行攻击可能压垮数据库,即恶意构造一个逻辑上不存在的数据,然后大量发送这个请求,这样每次都会被发送到数据库去处理,最终导致数据库挂掉。缓存中没有,数据库中有;在并发访问的情况下,可能大部分请求都是走数据库的,这将引起数据库压力的瞬间增大,造成过大压力。击穿是指一个热点key(非常频繁被访问的key)在缓存中突然失效,而此时大量的并发请求同时访问这个key,这些请求会直接穿透到数据库,造成数据库瞬间压力过大。
2025-03-13 21:45:57
1498
原创 项目总结:Directed Acyclic Graph的应用
有向无环图(DAG)在视觉上表现为一组圆和线条,圆表示一个顶点,线条表示一条边。有向无环图(DAG)中每条边都有一个定义的方向,每条边都是从一个顶点到另一个顶点的单方向流。并且有向无环图是非循环的,对于任何顶点来讲,如果沿着通过顶点连接到另一个顶点的边,是无法返回该初始顶点。既是总结也是复习下各种知识点和算法基础。
2025-03-09 13:38:15
683
原创 nginx基础&http基础
Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。Nginx的应用场景http服务器。Nginx是一个http服务可以独立提供http服务,可以做网页静态服务器。虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。基于端口的,不同的端口基于域名的,不同域名反向代理,负载均衡。
2025-03-06 23:27:32
1137
原创 网络分层 & DNS & CDN简单概念梳理
它允许将特定的主机名映射到指定的IP地址,从而绕过DNS解析过程,实现本地对特定主机名的自定义解析。DNS客户端设置使用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果。全局负载均衡负责将用户请求分发到最合适的CDN节点(边缘节点),而本地负载均衡则在节点内部将请求分发到具体的服务器或缓存实例上。通过编辑这个文件,你可以添加自定义的主机名和IP地址映射,以便在本地系统中进行解析,而无需依赖公共的DNS服务器。域名认识,例如域名 example.com.
2025-03-02 14:10:53
856
原创 TCP如何保证可靠性
TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验范围包括TCP首部及数据部分,但是UDP的检验和字段为可选的,而TCP中是必须有的。计算方法为:在发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在检验和字段中,接收方用相同的方法进行计算,如最终结果为检验字段所有位是全1则正确(UDP中为0是正确),否则存在错误。这也是TCP可靠传输的一个重要保障。在TCP中,窗口的大小是在TCP三次握手后协定的,并且窗口的大小并不是固定的,而是会随着网络的情况进行调整。
2025-03-01 21:34:08
1039
1
原创 B/B+树与mysql索引
预读的长度一般为页(page)的整倍数。页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(在许多操作系统中,页得大小通常为4k) ,主存和磁盘以页为单位交换数据。页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(在许多操作系统中,页得大小通常为4k) ,主存和磁盘以页为单位交换数据。B树中搜索时,离根节点近的节点找的就快,离根节点远的节点找的就慢,查找数据花费的时间不稳定。
2025-03-01 20:30:09
802
原创 BIO系统调用strace查看IO阻塞
服务端监听8090端口,每一个客户端用一个线程处理,不断的获取客户端的输入数据并打印。了解到 accept 的返回:系统会产生一个文件描述符,关联接收到的socket文件。的一个文件,即代表了连接上的一个客户端socket(在。目录下可见,pid为Java程序进程ID,本地同。通过进程ID号能知道有多少个线程(linux的。在工作目录会看到很多stracefile,以。(4772是服务端开启的主线程),可以找到。从上可以看出是文件描述符。
2025-02-25 23:20:15
350
原创 IO/网络IO基础全览
使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件的回写以及释放内存块等步骤,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。中断是指由于某种事件的发生(硬件或者软件的),计算机暂停执行当前的程序,转而执行另一程序,以处理发生的事件,处理完毕后又返回原程序继续作业的过程。用户空间的应用程序通过调用内核提供的接口来间接操作硬件设备。
2025-02-24 23:52:59
1171
原创 zookeeper3.6 leader选举源码探究
初略的看到了zookeeper启动过程中的选举流程,本文将从源码进行细节分析,看看zookeeper选举逻辑代码设计。
2025-02-23 21:20:58
1056
原创 rpc到自己java实现rpc调用再到rpc框架设计
程序其实完成了如下图:通过最基础的java反射、态代理、socket编程等就实现了简单的类似rpc调用接下来不管多少种服务;只要双方约定好,客户端直接调用即可,基本不需要修改Stub相关代码;client 调用远程方法,就像调用本地方法一样(客户端同学都不需要懂网络底层,直接服务端有什么,就能用什么)
2025-02-22 19:54:21
1575
原创 springboot+dubbo+zookeeper的注册服务和调用实践
在ZooKeeper中,节点(node)的元数据(metadata)包含了关于该节点的各种信息,这些信息通常通过ZooKeeper的Stat类表示。pzxid - 最后子节点变更的事务ID(在某些实现中可能不直接暴露,但在某些情况下,特别是在使用某些特定命令或API时可以看到)。这是最后一次修改该节点内容或其子节点时ZooKeeper服务器分配的事务ID。这是最后一次修改该节点的子节点时ZooKeeper服务器分配的事务ID。这是节点最后一次被修改的时间戳(以毫秒为单位),包括内容或子节点的修改。
2025-02-22 11:18:49
1487
原创 zookeeper leader选举流程
当集群中的服务器数量达到三台或以上时,通过内部的选举算法,可以确保有一个Leader和若干Follower,从而保证集群的正常运行。1. 投票:每个服务器都会发出一个投票,包含自己的ID和ZXID(事务ID)。3. 状态更新:当选为Leader的服务器会更新其状态为LEADING,而其它服务器则根据投票结果更新为FOLLOWING或OBSERVING状态。因此,为了确保Zookeeper集群的正常运行,建议安装奇数台服务器,通常是3台或以上,以满足选举的要求并保证集群的可用性。
2025-02-19 23:04:06
859
原创 zookeeper有序临时结点实现公平锁的实践例子
3.临时节点(EPHEMERAL):临时节点的生命周期与客户端的会话绑定,一旦客户端会话失效(非TCP连接断开),那么这个节点就会被自动清理掉。zk规定临时节点只能作为叶子节点。场景选择:在选择使用 ZooKeeper 实现分布式锁时,应评估系统的实际需求,特别是在高并发写入操作的场景下,可能需要考虑其他更适合的方案(如 Redis 的分布式锁等)。父节点会维护一个自增整性数字,用于子节点的创建的先后顺序。4.临时顺序节点(EPHEMERAL_SEQUENTIAL):基本特性同临时节点,添加了顺序的特性。
2025-02-18 21:52:24
1351
wireshark tcp三次握手
2016-08-03
mvc servlet jdbc web框架
2015-06-26
java web session失效
2016-05-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人