- 博客(14)
- 收藏
- 关注
原创 分布式事务基础
2PC(Two-Phase Commit)即两阶段提交协议,是将整个事务流程分为两个阶段3PC(Three-Phase Commit)是2PC的改良版,分为CanCommit、PreCommit、DoCimmit三个阶段。
2022-12-09 19:07:07
132
1
原创 二叉树相关
它或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
2022-10-24 15:21:07
338
原创 RabbitMq基础概念
virtual host是一个虚拟主机的概念,一个broker中可以有多个virtual host,每个virtual host都有自己的exchange和queue,同一个virtual host中的exchange和queue不能重名,不同的virtual host之间不作限制。多queue的情况下,每个queue会通过binding key与某个exchage绑定,生产者指定消息的routing key,queue 用来存储 producer 发送的消息。consumer是接收并处理消息的应用。
2022-09-05 17:06:36
392
原创 redis内存划分
因为储存内容的频繁修改,可能导致部分内存块无法被利用,时间久了就形成大量的内存碎片。redis本身占有的内存,代码,常量等,数据量大概只有几m非常少。AOF缓冲区:进行aof持久化的时候缓存最近执行的命令。客户端缓冲区:客户端输入输出的缓冲。复制积压缓冲区:用于部分复制功能。储存redis的键值对数据。
2022-09-04 15:16:29
169
原创 redis调优
如果redis仅用作cache,在业务允许的情况下甚至可以关闭持久化,风险是容易使请求全部打到db上导致db崩溃。如果非集群模式,或者能确定请求的操作都在一个node上,可以尝试合并请求,使用mget等命令,使用事务包装多个操作。redis官方都说redis的性能瓶颈主要是网络io,而减少服务和redis的网络通信成本就是切实有效的调优方案。并且关掉aof,aof能保证数据的完整性,但是会较大程度影响性能。键名简短,同时键的内容尽量精简,最好10k以内。如果不设置最大内存可能挥发生OOM,导致崩溃。
2022-09-04 15:01:49
167
原创 redis的key过期策略和内存淘汰机制
问:比如你redis只能存5G数据,可是你写了10G,那会删5G的数据。怎么删的,这个问题思考过么?还有,你的数据已经设置了过期时间,但是时间到了,内存占用率还是比较高,有思考过原因么?答:redis采用的是定期删除+惰性删除策略问:为什么不用定时删除策略?答:定时删除,用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放,但是十分消耗CPU资源。在大并发请求下,CPU要将时间应用在处理请求,而不是删除key,因此没有采用这一策略.问:定期删除+惰性删除是如何工作的呢?答:定期删除,redi
2022-09-04 14:48:59
127
原创 redis单线程or多线程
严格来讲并不是,后台还是有一些别的线程来执行一些比较慢的如持久化,大key删除等,但是主要操作如,socket读,解析,执行,socket写等操作是单线程的,所以我们说redis是单线程。redis主要操作完全基于内存操作速度非常快,cpu并不是瓶颈,使用多线程还增加了线程切换成本,并且多线程操作还要考虑线程安全,非常复杂,而带来的好处并不明显,所以使用单线程。完全基于内存,数据结构相对简单,使用多路复用模型非阻塞性io。
2022-09-04 13:10:14
231
原创 redis基础
Redis的字符串用SDS封装,SDS内部除了有char[]以外,还有数组已使用的长度len和未使用的长度free两个字段,字符串的key和value最大长度都是512M,事实上大于10k的key或者value就是bigKey了,不推荐。
2022-09-04 12:14:25
181
原创 多线程一般用在哪些地方
总之使用多线程就是为了充分利用cpu的资源,提高程序执行效率,当你发现一个业务逻辑执行效率特别低,耗时特别长,就可以考虑使用多线程。spring:spring的各类监听器也是多线程处理。订单履约:下单支付以后,进行后续一系列订单操作。tomcat:tomcat就是典型的多线程处理。记录日志:log4j的异步日志就是多线程处理。支付:支付结果要用单独的线程去查询和更新。定时任务:定时任务都是多线程调度的。
2022-09-03 11:01:32
827
原创 进程和线程的区别
操作系统在创建一个新的进程的时候要给他分配独立的地址空间,然后建立一大堆的数据表来维护它的代码段,堆栈段和数据段,系统开销比较大。而多个线程拥有自己的堆栈空间,但是共享数据段,使用同一个地址空间,相比较进程来讲更轻量,创建和切换的开销更低,切换速度也比较快。不过相对的,进程之间更独立,一个进程崩溃了,在保护模式下其他进程不会受到影响,而一个线程只是进程中不同的执行路径,一个线程崩溃了,整个进程就崩溃了。线程只能属于一个进程,一个进程至少要有一个线程,真正在处理机上运行的是线程。
2022-09-03 10:05:19
113
原创 为什么要使用多线程
对于一个cpu核心,如果只有一个线程,如果当前线程阻塞了,可能是在等待资源等等,那这个核心的cpu工作就停止了,如果是多线程的话,当前阻塞,cpu就可以切换到其他线程继续执行;以浏览器举例,如果浏览器只有一个线程,那这个线程首先要负责获取资源,还要一边获取一边解析,解析完还要渲染,同时可能还会有用户的操作穿插其中。难以想象这个代码要怎么写,而如果拆分成多线程,每个线程分别负责获取资源,解析,渲染,响应用户操作。在多核cpu上,多线程能够让多段逻辑同时执行,提升执行效率。
2022-09-03 09:31:53
411
原创 java中有几种基本数据类型,各自占多少字节
byte和boolean是八位,short和char是16位,int和float是32位,double和long是64位。
2022-08-31 15:47:41
1020
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人