- 博客(14)
- 收藏
- 关注
原创 类加载器系列二:什么是双亲委派机制以及原理
大家好,我是骄阳,今天我们来聊一下双亲委派机制。当一个类加载器A去加载某个类时,首先判断有没有加载过,如果没有加载过,自己先不加载,一层层向上委托,如果最顶层父加载器在它的类加载路径下找不到目标类,再一层层向下走,最后由A自己去寻找并载入目标类。
2022-05-31 20:41:44
1016
原创 redis6.0的多线程新特性
大家好,我是骄阳,我们上一期讲了redis单线程,这一期我们聊一下redis6.0的多线程新特性redis6之后1. Redis6.0为什么要引入多线程呢?Redis将所有数据放在内存中,内存的响应时长大约为100纳秒,对于小数据包,Redis服务器可以处理80,000到100,000 QPS,这也是Redis处理的极限了,对于80%的公司来说,单线程的Redis已经足够使用了。但随着越来越复杂的业务场景,有些公司动不动就上亿的交易量,因此需要更大的QPS。常见的解决方案是在分布式架构中
2022-05-27 21:17:59
1114
原创 类加载器系列一:类加载器有几种以及它们之间的关系?
大家好,我是骄阳。今天我们聊一下类加载器。一、类加载器的种类1、引导类加载器负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如rt.jar、charsets.jar等思考一下:string由什么类加载器加载?string类由引导类加载器加载,因为string类是核心类库里的类留个悬念:我们可以自定义string类吗?2、扩展类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包3、应用程序类加载器:负责加载Cla
2022-05-27 21:09:43
3593
原创 java高频面试题:redis是单线程的吗?
大家好,我是骄阳。我们面试中经常遇到这样一个问题:redis是单线程的吗?redis6之前1. Redis6.0之前真的是单线程吗?Redis在处理客户端的请求时,包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都是由主线程处理,按照顺序串行处理,这就是所谓的“单线程”,这也是 Redis 对外提供键值存储服务的主要流程。但如果严格来讲从Redis4.0之后到redis6之前,都不是真正意义上的单线程。因为除了主线程外,它也有后台线程在处理一些较为缓慢的
2022-05-21 17:23:07
839
原创 JVM之类加载过程
大家好,我是骄阳今天我们来聊一下jvm类加载过程。之前我都是直接背这个面试问题的八股文,然后面试的时候装作不是提前背好的,循序渐进地说出来,但我发现,背完很容易忘,而且我根本禁不住面试官问,他随便延伸一点我就答不上来主要原因还是因为我没有理解它。那么首先什么是类加载?其实就是从我们写出来的.java文件到被程序使用的整个过程总共分为七步1 加载:2 验证:3 准备:4 解析:5 初始化:6 使用7 卸载package mysqltes
2022-05-18 11:26:44
1121
原创 缓存穿透,缓存击穿,缓存雪崩
大家好,我是骄阳,今天我们来聊下redis在使用中的注意事项缓存穿透缓存穿透是指查询一个根本不存在的数据, redis和数据库都不会命中,而我们 通常出于容错的考虑, 如果从数据库查不到数据则不写入缓存层。这样就会导致不存在的数据每次请求都打到数据库, 失去了缓存保护数据库的意义。造成缓存穿透的基本原因有两个:第一, 自身业务代码写错了,或者数据出现问题。第二, 一些恶意攻击、 爬虫等造成大量空命中。缓存穿透问题解决方案:1、缓存空对象if (value == ..
2022-05-18 11:21:20
518
原创 redis过期策略
大家好,我是骄阳,今天我们聊一下redis的过期策略。一、三大清理原则被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key 主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期(默认每100ms)主动淘汰一批已过期的key,这里的一批只是部分过期key,所以可能会出现部分key已经过期但还没有被清理掉的情况,导致内存并没有被释放 当前已用内存超过maxmemory限定时,触发主动清理策略二、主动清理策略主动清理策...
2022-05-18 11:17:10
673
原创 一提到mysql,总有人说磁盘IO,到底什么是磁盘IO?
为什么mysql的innodb存储引擎选择了B+树,这个和磁盘的特性有着非常大的关系。我们先来看下磁盘上的物理结构。如果我们简化一下,可以这么看再看几张模型图一个磁盘由大小相同且同轴的圆形盘片组成,磁盘可以转动,各个磁盘必须同步转动,不然你转你的,我转我的,不就乱套了吗?在磁盘的一侧有磁头支架,磁头支架固定了一组磁头,每个磁头负责存取一个磁盘的内容。磁头不能转动,能读取到磁盘的内容,是依靠于磁盘的转动。这样说可能不太好理解...
2022-05-11 19:06:56
5932
1
原创 mysql存储引擎为什么选择b+树?
总揽大家好,我是骄阳。我们面试的时候,经常会遇到一个经典问题:mysql存储引擎为什么选择b+树?包括我自己面试的时候,也遇到过很多次这个问题。那我们应该如何回答这个问题?我比较建议从两个角度来回答:第一个就是别的树为什么不可以?第二个就是b+树为什么能成为天选之子。一、为什么不选择别的树?首先就是第一个方面:为什么别的树不可以?1、二叉树为什么不可以?我们先来看下二叉树为什么不可以?二叉树是我们接触的树中比较简单的树,我们先来看下二叉树的数据结构
2022-05-10 12:58:15
730
原创 redis之五大数据结构
五种数据结构概览1、String 结构常用命令字符串常用操作SET key value //存入字符串键值对原子加减INCR key //将key中储存的数字值加1 DECR key //将key中储存的数字值减1 INCRBY key increment //将key所储存的值加上increment DECRBY key decrement //将key所储存的值减去decrementString 应用场景单值缓存SET key value G.
2022-05-09 11:44:32
549
原创 并发编程之内存屏障
一、 定义最直观的就是:你如果不想要两行代码进行重排序,那么就在两行代码之间加一个屏障,这个屏障就相当于一个标记,那么jvm在执行到这行代码时,看到这个屏障,就不会重排序了二、内存屏障的种类JVM层面的内存屏障在JSR规范中定义了4种内存屏障:LoadLoad屏障:(指令Load1; LoadLoad; Load2),在Load2及后续读取操作要读取的数据被访问前,保证Load1要读取的数据被读取完毕。LoadStore屏障:(指令Load1; LoadStore; ..
2022-05-08 16:48:22
1471
1
原创 并发编程之volatile和lock前缀指令
volatile的特性1、可见性1.1 定义可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入1.2 volatile可见性实现原理JMM内存交互层面实现volatile修饰的变量的read、load、use操作和assign、store、write必须是连续的,即修改后必须立即同步回主内存,使用时必须从主内存刷新,由此保证volatile变量操作对多线程的可见性。硬件层面实现通过lock前缀指令,会锁定变量缓存行区..
2022-05-07 21:32:05
2594
1
原创 并发编程之并发三大特性:原子性,可见性,有序性
并发三大特性概览并发编程Bug的源头:可见性、原子性和有序性问题1、可见性1.1 定义当一个线程修改了共享变量的值,其他线程能够看到被修改的值,这就是可见性。1.2 Java 内存模型如何保证可见性Java 内存模型就是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新新的变量值,这种依赖主内存作为传递媒介的方法来实现可见性的。1.3 如何保证可见性总共就两大类:(1)一个是内存屏障。JVM层面:storeload硬件层面:lock前缀指
2022-05-07 18:30:28
819
原创 并发和并行的区别
1、并行并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行,所以无论从微观还是从宏观来看,二者都是一起执行的。2、并发并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。最开始我们系统都是单核处理器,只能做一件事,后来就引入了时间片,交替执行。用户几乎感知不到,因为大概10ms-.
2022-05-07 17:55:37
21626
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅