- 博客(24)
- 收藏
- 关注
原创 redis命令请求的执行过程
一个命令请求从发送到获得回复的过程中,客户端和服务器需要完成一系列操作。举个例子,如果我们使用客户端执行以下命令:那么从客户端发送SET KEY VALUE命令到获得回复OK期间,客户端和服务器共需要执行以下操作:1)客户端向服务器发送命令请求SET KEY VALUE。2)服务器接收并处理客户端发来的命令请求SET KEY VALUE,在数据库中进行设置操作,并产生命令回复OK。...
2020-03-14 17:02:05
992
原创 Redis RDB,AOF持久化原理
RDB持久化因为Redis是内存数据库,它将自己的数据库状态储存在内存里面,所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。为了解决这个问题,Redis提供了RDB持久化功能,这个功能可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功...
2020-01-10 15:56:25
2897
1
转载 你的系统如何支撑高并发?
这篇文章,我们聊聊大量同学问我的一个问题,面试的时候被问到一个让人特别手足无措的问题:你的系统如何支撑高并发?大多数同学被问到这个问题压根儿没什么思路去回答,不知道从什么地方说起,其实本质就是没经历过一些真正有高并发系统的锤炼罢了。因为没有过相关的项目经历,所以就没法从真实的自身体会和经验中提炼出一套回答,然后系统的阐述出来自己复杂过的系统如何支撑高并发的。所以,这篇文章就从这个角度切...
2020-01-10 11:45:39
326
原创 Redis的过期键删除策略原理
Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种删除策略,服务器可以很好地在合理使用CPU时间和避免浪费内存空间之间取得平衡。惰性删除惰性删除策略对CPU时间来说是最友好的:程序只会在取出键时才对键进行过期检查,这可以保证删除过期键的操作只会在非做不可的情况下进行,并且删除的目标仅限于当前处理的键,这个策略不会在删除其他无关的过期键上花费任何CPU时间。惰性删...
2020-01-09 17:09:45
1539
1
原创 redis 设置生存和过期时间的原理
在了解原理前 先来看使用方法通过EXPIRE命令或者PEXPIRE命令,客户端可以以秒或者毫秒精度为数据库中的某个键设置生存时间,在经过指定的秒数或者毫秒数之后,服务器就会自动删除生存时间为0的键。SETEX命令可以在设置一个字符串键的同时为键设置过期时间(只能用于字符串键)与EXPIRE命令和PEXPIRE命令类似,客户端可以通过EXPIREAT命令或PEXPIREAT命令,以秒...
2020-01-08 17:35:40
2771
原创 redis数据库结构
Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库:struct redisServer{//一个数组,保存着服务器中的所有数据库redisDb *db;//服务器的数据库数量int dbnum;}dbnum属性的值由服务器...
2019-12-04 19:55:54
872
原创 redis String数据结构 sdshdr解析
Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simpledynamicstring,SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。set name val会产生值为“name”和“val”的2个sdshdr对象对象属性如下为什么不直接用C字符串作为字符串存储对象 有下面几个...
2019-11-15 11:48:28
1247
原创 Mysql事务原理介绍 基于书籍:高性能mysql(第三版) 总结
基于书籍:高性能mysql(第三版) 总结事务 一个事务会涉及到大量的cpu计算和IO操作,这些操作被打包成一个执行单元,要么同时都完成,要么同时都不完成. 事务是一组原子性的sql命令或者说是一个独立的工作单元,如果数据库引擎能够成功的对数据库应用该组的全部sql语句,那么就执行该组命令 如果其中有任何一条语句因为崩溃或者其它原因无法执行,那么该组中所有的...
2019-10-22 15:29:05
350
转载 Idea+JRebel全自动热部署
Idea+JRebel全自动热部署链接:https://pan.baidu.com/s/1eT418Ls密码:2q1wIdea离线安装插件就不占篇幅了,大概如下:下载完以后是个ZIP压缩包,打开IDEA,关闭所有项目,Settings – plugins – install from disk,选择刚刚下载的ZIP就行了.装完以后打开IDEA,Help-JRebel-Activatio...
2019-08-07 11:53:06
375
原创 自己的面试经验做的面试题总汇(java)
1 mysql和oracle有什么区别2 oracle怎么做分页3 mysql事物实现原理4 mysql可重复读事物,事物快照生成时间?5 mysql b+tree联合索引,为什么出现了范围查询,后面的索引就失效了。6 怎么优化sql7 当横向分表的时候,如何跨表查询8 当纵向分库的时候,怎么垮库查询9 mysql主重同步实现原理10 mycat实现原理11 什么情况下用mog...
2019-07-16 11:02:59
267
原创 spring和springioc源码解析
spring体系结构特别繁琐,其中最核心的就是ioc和aop。首先了解如何基于注解启动spring容器。注解方式环境搭建@Configuration使用Configuration 配置容器 @Configurationpublic class MySpringConfig { //@Configuration 等同于配置的spring配置文件 ...
2019-07-07 17:24:53
283
原创 设计模式实战:网关拦截控制_装饰者模式
装饰者模式什么是装饰者模式在不改变原有对象的基础上附加功能,相比生成子类更灵活。装饰者模式应用场景动态的给一个对象添加或者撤销功能。装饰者模式优缺点优点:可以不改变原有对象的情况下动态扩展功能,可以使扩展的多个功能按想要的顺序执行,以实现不同效果。缺点:更多的类,使程序复杂装饰者模式类图装饰者模式定义(1)抽象组件:定义一个抽象接口,来...
2019-05-27 21:27:26
318
原创 纯手写轻量级JDK动态代理
纯手写JDK动态代理JDK动态代理原理分析在使用jdk动态代理的时候,必须要实现InvocationHandler接口,invoke方法Invoke 方法中该三个参数分别表示为: 代理对象、被代理执行的方法、参数使用jdk动态代理获取代理类对象(JDK自动生成代理类) $Proxy0.class纯手写动态代理原理分析创建代理类$Proxy0源...
2019-05-22 21:32:28
312
1
原创 设计模式实战:支付平台选择_模板模式
什么是模版方法1.定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。2.模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术,没有关联关系。 因此,在模板方法模式的类结构图中,只有继承关系。核心设计要点:AbstractClass: 抽象类,定义并实现一个模...
2019-05-19 16:38:05
1192
原创 设计模式实战:网关权限控制_责任链模式
责任链模式什么是责任链模式客户端发出一个请求,链上的对象都有机会来处理这一请求,而客户端不需要知道谁是具体的处理对象。这样就实现了请求者和接受者之间的解耦,并且在客户端可以实现动态的组合职责链。使编程更有灵活性。定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。其过程实际上是一...
2019-05-17 21:29:44
2283
原创 设计模式实战:支付平台选择_策略模式
聚合支付平台比如搭建聚合支付平台的时候,这时候需要对接很多第三方支付接口,比如支付宝、微信支付、小米支付等。通过传统if代码判断的,后期的维护性非常差! public String toPayHtml2(String payCode){ if(payCode.equals("ali_pay")){ return "调用支付宝接口...";...
2019-05-12 13:49:27
1718
1
转载 JVM垃圾回收机制算法以及常用垃圾收集器分析
什么是垃圾回收机制不定时去堆内存中清理不可达对象。不可达的对象并不会马上就会直接回收, 垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块。程序员唯一能做的就是通过调用System.gc 方法来"建议"执行垃圾收集器,但其是否可以执行,什么时候执行却都是不可知的。这也是垃圾收集器的最主要...
2019-04-24 13:22:54
516
原创 纯手写轻量级springmvc
github地址:https://github.com/919337588/cxSpringmvc大致目录结构如此注释算是非常清晰,比直接看源码容易理解的多 我写的是注解版servlet初始化逻辑1扫描包下的类2查看类是否存在CxControl注解 如果有 将bean放入bean容器3查看bean方法 是否含有CxRequestMapping 如果有 将对象和...
2019-04-15 19:49:30
251
原创 纯手写轻量级springioc aop
github地址:https://github.com/919337588/cxaopioc大致目录结构如此注释算是非常清晰,比直接看源码容易理解的多 我写的是注解版大致逻辑就是1扫描包下的类2如果类存在注入bean所需的注解 将bean放入bean容器3查看beanA中的属性 如果属性需要注入 就在bean容器中找到对应的beanB 并且注入到beanA的属性...
2019-04-14 14:35:03
425
原创 bat面试题
第一题 有一个压测场景开启了三个线程,每个线程需要加载完毕资源后需要其他线程也加载完毕后才能同时发起对目标服务的压测请用java代码简单实现 第二题请问如下代码会存在什么问题? List<User> getUsers(String[] ids){ // 根据ids去数据库查询符合要求的user数据 // 将数据库数据转换为user对象并添加至列表返回}...
2019-03-19 20:29:54
353
1
转载 jvm内存结构
Java内存结构Java堆(Java Heap) java堆是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。java堆是垃圾收集器管理的主要区域,因此也被成为“GC堆”(Garbage Collected Heap)。...
2019-03-19 19:57:10
176
原创 java类加载器,反射,双亲委派相关知识点
想想我们在java里面是怎么获取一个类对象的,通常是new 一个对象。或者spring ioc已经帮忙声明好了,直接注入。我这里说说另外两种方式 一个为反射 一个类加载器加载。代码如下package reflect;import java.lang.reflect.Field;import java.lang.reflect.Method;public class Mai...
2019-03-18 22:29:21
288
原创 数据库索引相关知识点
主流的索引数据结构 1 b+tree 2 hash 3 bitmap (拥有此索引的数据库比较少,比如oracle)b+树是二叉树和B树的衍生 比起二叉树可以自动平衡,比起B树多了叶子节点自动平衡: 正常的二叉树 ,如果插入数据本身就排序极端,比如1,2,3,4,5,6,这样就跟链表就没什么区别了,相当于全部扫描。如果这个时候查询6,就要经...
2019-03-18 16:05:35
249
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人