自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 职责链模式

public interface CheckHandler { CheckResult deal(Chain chain); interface Chain{ // 获取当前 request CheckRequest request(); // 转发request CheckResult proceed(CheckRequest request); }}public class RealChain

2021-08-25 11:55:56 107

原创 redis之集群源码分析(一)

redis集群源码分为两个部分来讲,第一部分主要分析一个命令在集群模式下是如何定位到一个server来处理该命令。第二部分主要分析集群故障转移部分的源码。本篇文章主要包括1、一个命令请求在集群模式下是如何被处理的2、集群模式下我们要注意哪些问题?我们知道在redis集群模式下,每个实例分担了部分的命令请求。比如说我们要查找一个key,那么查找这个key的命令究竟要在哪个示例上被处理呢?说到这里我们有必要先给出redis集群的数据结构。// 集群模式下节点数据结构struct clusterNo

2021-07-18 12:52:55 527

原创 redis源码之惰性删除策略分析(一)

本文浅显的谈谈redis删除key的源码部分,希望本篇文章对于学习redis并且看源码的你能够起到抛砖引玉的作用,并在此记下自己阅读源码的足迹。本文主要由以下几个部分组成一、为什么要删除key?二、内存淘汰的策略主要有哪些?三、删除key的时机或者说手段有哪些?四、删除key的源码整体脉络五、源码的阅读ANSWER 一首先,为什么要删除key呢?这是因为redis是基于内存的数据库,计算机的内存容量是有限的,试想你一直往里面写入数据而没有一定的策略去删除你写的数据,内存早晚会被用完的,所以有

2021-06-19 16:52:28 464

原创 redis源码跳表

在这里插入代码片package com.company.structure.skiplist;import java.util.List;/** * @author zhangjw * @date 2021/2/20 0:42 */public class ZSkipListNode { private String value; private double score; private ZSkipListNode backward; privat

2021-03-06 19:05:01 354 4

原创 2020-10-10

Redis的sdsSDS与c字符串的区别(1)sds可以常数复杂度o(1)获取字符串的长度,因为sds中有len属性(2)c字符串容易造成缓冲区溢出,比如 strcat。sds的空间分配策略完全杜绝了发生缓冲区溢出的可能性:当sds api需要对sds进行修改时,api会先检查sds的空间是否满足修改所需的要求,如果不满足的话,api会自动将sds的空间扩展至执行修改所需的大小,然后才执行实际的修改操作,所以使用sds既不需要手动修改sds的空间大小,也不会出现前面所说的缓冲区溢出问题。(3)减少修

2020-10-10 17:33:08 88

原创 面试总结

java基础1.线程池1 线程池的几个参数参数及其作用》2线程池怎样中的线程怎样处理异常》3线程池中的线程怎样终止的2.ThreadLocal的实现和原理以缺陷3.HashMap的实现原理,扩容原理4.currentHashMap的实现原理,以及put操作的大致流程5.线程的几种状态6.sycronized关键字7.volitle 关键字8retrrentLock 以及他的加锁过程9.java内存模型10 内存的分类11 垃圾回收算法12 垃圾收集器 cms和g1问的多,主

2020-06-23 14:53:57 108 1

原创 面试算法必备

一、数组之二分查找二分查找在面试算法题目中占有的比例有很大一部分,特总结如下1.基本的二分查找,时间复杂度,此部分代码略2.基于二分查找求一个key的个数 /** * 二分查找的变种题,统计有序数组中有多少个相同的数字 * */ public static void main(String[] args) { int array[] = {1, 2, 3, 3, 3, 3, 4, 5}; System.out.println(getNum(arr

2020-06-23 14:46:31 166

原创 Mysql锁之事

create table zjw_test(a int,b int,primary key(a),key(b))insert into zjw_test(a,b)values(1,1),(3,4),(5,8)sessionAbeginselect * from zjw_test where a>2 for update;(先执行,不提交)commit;sessionB...

2020-03-26 13:10:15 65

原创 redis集群模式工作原理(三)

本篇博客聊聊redis集群如何实现故障转移的?也就是集群的高可用性的。主节点会有自己的从节点,他的从节点保存在 clusterNode的 slaves属性中。那么在集群中是如何发现主节点下线,以及从节点如何被选举为主节点,接替已经下线的主节点的呢?首先,在集群中集群中的每个节点都会向其他节点发送ping消息,来确定彼此的存在。如果一个节点向(源节点)另一个节点(目标节点)发送ping消息,但是...

2020-03-20 22:57:58 160

原创 redis集群模式工作原理(二)

接着上一篇,我们聊聊如何重新分片所谓的重新分片就是说当集群中添加一个节点时,怎样给这个节点分配相应的槽位。以及在分配槽位的过程中该如何客户端发送过来的命令?本篇博客呢,就围绕这些问题进行展开讨论。Q1:怎样重新分片,在分片过程中服务器是上进行,还是需要停机处理?首先,redis在分片过程中是不需要停机处理的,在线上就可以完成分片的工作,也就是集群不需要下线。所谓的重新分片就是把相应的槽位以...

2020-03-20 22:24:21 133

原创 redis集群模式的工作原理(一)

本篇博客主要是用来说明redis集群的工作原理。Q1.为什么要有redis集群,redis集群解决了哪些问题?A1:redis集群是分布式数据库的解决方案,我个人理解其主要解决了写库的性能瓶颈,也就是横向扩展了写的能力。并且提供了复制功能和故障转移功能。下面我们就一一来研究他们一、集群的节点的组成二、槽指派三、在集群中命令如何执行的?四、重新分片五、master节点宕机后如何实现故...

2020-03-18 21:12:50 409

原创 cookie和session

----其实这是个基本的问题,奈何自己对他们了解不深,特开此贴,加深理解。Q1:为什么要有cookie和session?A1:因为http是个无状态协议,也就是说在回话中我做了啥事,我不会记住,所以得有个地方记录一下这次回话的状态,而cookie和session就是来记录回话状态的技术。那么先来聊聊cookie。Q2:cookie是由谁产生?什么时候产生?保存在哪里?A2:cookie是...

2020-03-15 09:59:27 167

原创 Mysql一些有用的查询

===mysql的一些查询笔记SELECT *FROM zjw_course;SELECT * FROM zjw_teacher;SELECT * FROM zjw_score;Q1 :查询 "01" 课程比 "02" 课程成绩高的学生的信息及课程分数 SELECT s.s_id, s.s_name, temp.ss1, temp.ss2 FROM zjw...

2020-03-14 23:12:04 127

原创 redis之字典数据结构

这篇博客我们就来讲讲redis的字典数据结构。本节内容主要包括:1.字典的数据结构2.字典的扩容机制Redis字典底层采用的是哈希表的数据结构来实现的。dictht{//哈希表数组dictEntry **table;//哈希表的大小long size;//哈希表大小掩码,用于计算索引值,总是等于 size-1long sizemask;//该哈希表中已有节点的数量long...

2020-02-17 23:16:51 257 1

原创 Spring源码系列之推断构造方法

本篇博客讲一讲spring是怎么样推断构造方法的?什么意思呢,就是说一个类如果有多个构造方法,spring是怎样推断出来究竟该使用哪个构造方法进行bean的实例化呢?看下面的例子,先给出以下几个类@Componentpublic class OrderService {}@Componentpublic class Student {}***我们在注入模型是0的情况下讨论。***...

2020-02-15 23:01:50 580

原创 select模型

select模型int main(int argc,const char * argv[]){if(argc <2){printf(“eg ./a.out.port\n”);exit(1)struct sockaddr_in serv_addr;socklen_t serv_len=sizeof(serv_addr);int port=atoi(argv[1]);//创建套...

2019-12-29 15:49:16 151 1

原创 aop代理类生成的调用链

1,是谁生成的代理类,这里暂且记住是AnnotationAwareAspectJAutoPrxoyCreator这个类来生成的代理类。2.下面是调用链**加粗样式(1)AbstractApplicationContext.finishBeanFactoryInitialization(ConfigurableListableBeanFactory)(2) DefaultListableBea...

2019-11-27 15:51:37 180

原创 LRU算法实现(java手动实现)

import java.util.HashMap;import java.util.Map;public class LRUCache<K, V> {int capacity;class Node { private Node pre; private Node next; private K key; private V val; ...

2019-11-19 17:17:07 272

原创 jdk1.7扩容出现死循环

本文一步一步简要说明jdk1.7中hashmap扩容出现死循环的原因,起到抛转引金的作用(世人独爱牡丹,吾独爱金,真尼玛俗)

2019-11-19 10:22:47 324 1

原创 redis复制的实现

一、复制的意义为了实现高可用和并且可以减轻主服务器的读压力,实现了横向扩展的读能力。二、复制的实现1.文件同步2.命令传播。redis复制的实现主要是通过同步数据文件和命令传播另个步骤。复制的行为在新版和旧版中存在差异。2.8以前的版本只有全复制一种方式,2.8版本以后有全复制和部分复制两种方式。初始复制,即是一个从服务器第一次复制主服务器会用到全复制,当从服务器断电后重连原来的主服务...

2019-11-04 13:31:21 83

原创 征服spring源码(一)

写在前面本篇文章是征服spring源码的第一篇。对于java开发,觉得弄懂一个以java编写的框架是提高自己java技术的良好通道。spring无疑是一个优秀的java框架,值得我们程序员去深入的理解和学习。在平时工作中,也许我们称呼别人为大神和大牛,却忘记了提升自己本身的技能。不要羡慕别人有多牛逼,因为一味的羡慕是没有毛用的,切实的沉下心来,用自己工作之外的时间多学习多总结才是王道。不抱怨,不...

2019-11-04 13:30:55 221

原创 mysql Innodb存储引擎行锁的算法

mysql InnoDB行锁有三种算法1.Record Lock 单个行记录上的锁2.Gap Lock 间隙锁 ,锁定一个范围但是不包含记录本身3.Next-Key Lock 锁定一个范围,并且锁定记录本身Next-Key Lock 结合了 Record Lock和Gap Lock 在 Next-Key Lock算法下,InnoDB对于行的查询都是采用这种算法。例如一个索引有10,11,1...

2019-06-07 20:57:55 167

原创 spring系列学习之一BeanFactory

BeanFactory的方法:Object getBean(String name) throws BeansException;<T> T getBean(String name, Class<T> requiredType) throws BeansException;<T> T getBean(Class<T> require...

2019-05-27 18:47:59 189

原创 linux系统免登录配置

1.环境两台虚拟机 192.168.8.105和192.168.8.1062.目的虚拟机192.168.8.105想免密码登录到192.168.8.106这个机器3.实现(1)在机器192.168.8.105这台机器的根目录下执行命令: ssh-keygen -t rsa 然后四个回车键(2)进入.ssh目录 ls 会有两个密钥文件 一个公钥,一个私钥执行命令 ...

2019-03-23 09:50:31 936

原创 linux系统安装jdk

1.下载相关jdk版本2.用FileZllia上传jdk到 根目录下3. cd /usr mkdir java3.tar zxvf jdk.tar.gz -C /usr/java4.检查linux自带的jdk,如果有就删除rpm -qa | grep javatzdata-java-2012j-1.el6.noarchjava-1.7.0-openjdk-1.7.0....

2019-03-22 23:53:45 83

空空如也

空空如也

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

TA关注的人

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