自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java NIO

nio 在操作层次上原理:epoll的多路复用技术epoll的简单介绍:https://blog.csdn.net/wyz0516071128/article/details/81058898下面上java 的NIO 的实现。channel ,selector,buffer这三个是java NIO 关键点。1.创建一个ServerSocketChannel ,绑定监听地址2.创建Sel...

2018-10-18 11:46:36 146

原创 dubbo 接口唯一性定位

1.group :当一个接口有多个是实现的时候,通过分组来让不同的consumer,调用各自需要的接口2.revision:版本号,更多的时候为了同一组的接口升级时候用,相对group来说粒度更小3.接口名字方法列表...

2018-10-15 11:45:12 1856

原创 Spring context refresh

1.prepareRefresh:Prepare this context for refreshing.初始化context的一些属性,状态2.beanfactory 的获取和属性的设置3.postProcessBeanFactory 让子类去处理beanFactory4.invokeBeanFactoryPostProcessors:Invoke factory processors ...

2018-10-14 17:39:45 353

转载 为什么说Redis是单线程的以及Redis为什么这么快!

https://yq.aliyun.com/articles/619831

2018-10-14 14:50:48 163

原创 分析jvm内存大致命令

ps -ef|grep javajps: 查询当前机器所有 JAVA 进程信息;jmap: 输出某个 java 进程内存情况 (如:产生那些对象及数量等);jstack: 打印某个 Java 线程的线程栈信息;jinfo: 用于查看 jvm 的配置参数。...

2018-10-14 14:11:56 597

转载 mysql 乐观锁和悲观锁

转载自:http://www.hollischuang.com/archives/934悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度(悲观),因此,在整个数据处理过程中,将数据处于锁定状态。 悲观锁的实现,往往依靠数据库提供的锁机制 (也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法...

2018-10-13 15:13:48 115

原创 redis

1.redis key-value ,2.支持string,list ,set,sored set ,hash 数据结构3.支持事务,操作的原子性4.丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除redis 提供 6种数据淘汰策略volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰volati...

2018-10-09 17:45:56 103

转载 可达性能分析

jvm 内存划分:程序计数器,java 栈,本地方法栈,堆,方法区(方法区,放着类的信息)。java 虚拟机回收的内存块是堆内存,采用的是可达性分析来判断一个对象是否存活着。GC roots 一般由下面来充当:1.虚拟机栈(栈桢中的本地变量表)中的引用的对象2.方法区中的类静态属性引用的对象3.方法区中的常量引用的对象4.本地方法栈中JNI(Native方法)的引用的对象https...

2018-10-09 12:41:50 106

转载 hash冲突的其他解决方式

hash 冲突的解决方法:1.开放定址法:在冲突的时候,用再散列函数再次哈希,直到不再冲突为止2.链地址法3.再哈希法 这种方法构造多个不同的哈希函数:Hi=RH1(key) i=1,2,…,k不易产生聚集,但是增加了计算的时间。4.建立公共溢出区https://www.cnblogs.com/wuchaodzxx/p/7396599.html...

2018-10-09 11:06:43 141

原创 CAS ABA模式

CAS操作可能带来ABA问题,一个变量原本值是A。两个线程进行操作,线程1拿到A值,线程2,拿到A值,然后设置为B,然后再设置为A。这时候线程1,设置值,发现还是A,于是成功的设置值了。解决的方式在值上加版本号,1A,2B,3A 。jdk AtomicStampedReference 是解决这个问题的类。...

2018-10-09 10:48:30 376

原创 java 线程生命周期

java 线程包含五个生命周期:新建,就绪,运行,阻塞,死亡。新建状态:线程创建之后就进入创建状态。就绪状态:当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才...

2018-10-04 00:25:34 582

原创 synchronized 原理

synchronized:JVM 是通过进入、退出对象监视器( Monitor )来实现对方法、同步块的同步的。编译的时候会在同步的对象插入monitor.enter 指令,在方法退出,或者异常的时候插入monitor.exit指令。任意线程对一个(synchronized修饰的)对象访问前,先访问Monitor,尝试获取对象的使用权限,如果成功获取,线程将进入同步列队;如果失败的话,线程将执...

2018-10-03 23:23:43 123

原创 reactor模式

1.初级的服务器:while(true){socket = accept();handle(socket)}对于请求只能一个个的来接受。2.第二级别的服务器while(true){socket = accept();new thread(socket);}这时候可以支持多个请求一起回答了,但是对资源的要求明显变高了,而且一点线程的粒度变得十分的大。一次服务端正常的相应,是这...

2018-10-03 18:08:46 403

原创 dubbo 四种均衡负载

1.ConsistentHashLoadBalance 运用hash算法ConsistentHashSelector 哈希算法类,在调用的时候,他会根据invokers生产对应一个hashkey,这个hashkey对应着存储着ConsistentHashSelector 。ConsistentHashSelector 再根据参数来分析对应的invoker。当服务有变化的时候,invoker...

2018-10-02 21:12:45 267

原创 数据索引自增

b-tree 数据结构索引:从这个数据接口上,细细咀嚼了一下索引自增。如果数据ID是自增的情况下,可以看上面图,数据的整合是很整齐的。前面两层对应的数据是满的。但是如果ID不是自增的情况,那就不是了。从而导致需要更多前两层的数据。优点:1.自增,趋势自增,可作为聚集索引,提升查询效率2.节省磁盘空间。500W数据,UUID占5.4G,自增ID占2.5G.3.查询,写入效率高:查询略优。写...

2018-10-02 19:10:15 1134

原创 缓存,数据库

前些时间看到一小段写缓存的东西。缓存redis,couchbase 这些已经成熟的缓存。我这里叙述一下自己的缓存架构的理解。数据库,数据的放在磁盘的,从而导致获取数据的速度变慢了。我们从电脑的硬件层级来理解,cpu,内存,磁盘。很自然的,我们如果想要获得更快的速度,采用的是将数据保存的内存中。这样的才操作速度,自然而然的变得很快了。1.我们可以假设我们创建了一个map的对象,key ----...

2018-10-02 15:00:23 145

原创 java 线程池

参数:1.核心线程参数:corePoolSize2.最大线程数:maximumPoolSize3.keepAliveTime and unit 线程空闲的时候,存活时间。4.workQueue 用于存放任务的阻塞队列。5.handler 当队列和最大线程池都满了之后的饱和策略...

2018-09-30 23:30:53 190

原创 java volatile解析

解析volatile之前需要先叙述一下cpu的内存机制。cpu 的操作数和操作指令是保存的内存中,在cpu计算的时候,先将数据复制一份在各自的高速缓存中。当设计到多核的cpu的时候,因为各自线程在各自cpu操作,那么同一个内存的变量就在不同的cpu里面有各自的一份缓存了。从而导致数据操作就有了缓存不一致的问题。常见的缓存一致性问题解决方案:1)通过在总线加LOCK#锁的方式2)通过缓存一...

2018-09-30 21:28:52 143

原创 dubbo ExchangeClient 发送消息过程

exchangeClient 发送数据到netty 过程1.ReferenceCountExchangeClient2.HeaderExchangeClient3.HeaderExchangeChannel4.NettyClient5.NettyChannel6.NioSocketChannel发送到netty之后,接下来是netty 的数据处理了,分两部分。1.序列化2.ha...

2018-09-30 17:26:32 1016

原创 dubbo 注册中心notify 过程

在注册中心subscribe的时候,将directory挂在注册中心上了。当发生notify的时候,根据URL分析找到对应的directory。1.ProtocolListenerWrapper listener 包装2.ProtocolFilterWrapper filter 包装3.DubboProtocol 形成真正调用Invoker3.1 根据地址形成ExchangeClient...

2018-09-29 23:48:18 1428

原创 dubbo ReferenceConfig

RegistryProtocol 在ReferenceConfig 形成的时候做了什么事情,1.RegistryDirectory 构建2.directory.subscribe()向注册中心订阅,注册中心有了directory。等待注册中心的notify,根据directory来形成invoker。3.MockClusterInvoker的形成,包含FailoverClusterInvok...

2018-09-29 23:27:53 1716

原创 dubbo RegistryConfig

1.RegistryConfig 来根据接口,注册中心,consumerConfig 来构成,形成接口的代理。1.1 ProtocolListenerWrapper 监听器的包装1.2 ProtocolFilterWrapper 过滤器的包装1.3RegistryProtocol 注册中心和协议1.3.1 RegistryDirectory 的构建,directory.subscribe...

2018-09-28 23:01:53 3976

原创 寄存器

cs:ip 定位存储内存的位置,地址加法器cs:ip 获取内存中下一指令的过程:顺序模式cs:ip通过自增,然后将内存里面的指令一条一条拿到cpu来执行。很明显判断模式还有循环模式,需要改变cs:ip的方式来实现。这是cpu的结构上来叙述,只需要的执行code之后,根据code的条件结果,然后改变cs:ip,来指向各自代码块的地址。debug 模式是进行汇编语言编程一个很实用的方式。...

2018-09-17 23:12:45 258

原创 CPU对存储器的读写

存储单元的地址是从0开始的一个一维数据地址。cpu对存储器的读取过程。1.cpu通过cpu传递存储地的位置,2.通过控制线发出内存读取命令,通知内存单元,3.内存单元通过数据线将数据传递给cpu,或者cpu将数据通过数据线存给内存单元地址线大小代表内存的大小限制。数据总线的大小限制一次传递的数据量,一般是两个字节。控制总线,提供了对外部器件的多少种控制。pc内存分类:各个存储...

2018-09-17 22:44:57 7442

原创 c++运行时类型识别

运行时类型识别(Run-time type identification ,RTTI)是我们只有一个指向基类的指针和引用的时候确定一个对象的准确类型。 大多数的类库通过一些虚函数来提供运动时候的类型信息。 typeId 返回实际对象 dynamic_cast 将基类指针安全转为到子类的类型指针 c++尽可能的使用虚函数,必要的才使用RTTI,...

2018-09-16 22:42:30 650

原创 c++包容器类和模板

#include <assert.h>#include <iostream>#include <string>using namespace std;template<class T>class arrayT { enum { size = 100 }; T A[size];public: ...

2018-09-16 15:13:54 567

原创 c++继承和组合,多态,虚函数(c++后期绑定的本质)

组合和继承,实现了代码的可扩展性和兼容性。 多态是在虚函数上得到了支持。 多态的原理,函数的调用绑定: 把函数的调用和函数体相关联称为捆绑。当捆绑是在程序运行之前完成的,称为早期捆绑。c语言只支持早期绑定。晚期捆绑,对象通过自身得到类的信息,然后找到合适的函数体,执行调用,这个过程是后期绑定,或者动态绑定。 c++是如何实现晚期绑定的: 当一个类的函数是虚函数的时候,这个类就有一个静态函...

2018-09-16 10:48:41 290

原创 寄存器内存访问

背景:构造函数不允许通过向对象传递内存地址来初始化它。 这一背景导致如果用原始分配内存的方法,将分配内存,内存管理这一块变得复杂化。而这个过程却又是固定模式的,为了精简的模式,原有的方式很明显不是那么合适了。寻找一种精简而且安全的方式是必须的,所谓的精简,无非是将一系列事情交给编译器。从而让程序员避免使用c的动态分配函数。 动态创建一个对象,所做的事情无非是这样: (1)为一个对象获取一块内...

2018-09-16 09:56:18 493

原创 c++运算符重载

运算符的重载只是一种“语法修饰”,这意味着它是另外一种调用函数的方式。不同的是对于函数的调用是在函数的圆括号里面,但是运算符的调用却是在字符的附近。 赋值符在c++中常常产生混淆。这是毫无疑问的。因为“=”会因为拷贝函数调用。 图片中第二行是调用了拷贝函数,第三行是operator = 函数的调用。...

2018-09-16 09:15:58 88

原创 c++引用和拷贝构造函数

1.引用是c++的一个特征,它就像能自动被编译器逆向引用的的常量指针一样。怎么来理解这个概念。引用是引用变量和原始变量两个绑定的一种固定关系。这种绑定关系又是通过知道原始变量的指针地址来处理的。 通过常量指针将a和b的关系稳定下来,这是第一步(这以为着操作引用其实本质上是操作原始变量的指针,不是原始变量的值)。第二步是操作引用,操作引用的时候,不是直接操作指针。反而这里是通过编译器,避开了直接指...

2018-09-15 17:56:05 1535

空空如也

空空如也

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

TA关注的人

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