自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式事务基础

2PC(Two-Phase Commit)即两阶段提交协议,是将整个事务流程分为两个阶段3PC(Three-Phase Commit)是2PC的改良版,分为CanCommit、PreCommit、DoCimmit三个阶段。

2022-12-09 19:07:07 131 1

原创 二叉树相关

它或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树。一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

2022-10-24 15:21:07 335

原创 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 391

原创 缓存异常场景

一张图描述缓存异常场景。

2022-09-04 15:52:22 65

原创 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 166

原创 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 410

原创 面试宝典-目录

面试宝典

2022-08-31 15:49:12 420

原创 java中有几种基本数据类型,各自占多少字节

byte和boolean是八位,short和char是16位,int和float是32位,double和long是64位。

2022-08-31 15:47:41 1019

空空如也

空空如也

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

TA关注的人

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