java NIO nio 在操作层次上原理:epoll的多路复用技术epoll的简单介绍:https://blog.csdn.net/wyz0516071128/article/details/81058898下面上java 的NIO 的实现。channel ,selector,buffer这三个是java NIO 关键点。1.创建一个ServerSocketChannel ,绑定监听地址2.创建Sel...
dubbo 接口唯一性定位 1.group :当一个接口有多个是实现的时候,通过分组来让不同的consumer,调用各自需要的接口2.revision:版本号,更多的时候为了同一组的接口升级时候用,相对group来说粒度更小3.接口名字方法列表...
Spring context refresh 1.prepareRefresh:Prepare this context for refreshing.初始化context的一些属性,状态2.beanfactory 的获取和属性的设置3.postProcessBeanFactory 让子类去处理beanFactory4.invokeBeanFactoryPostProcessors:Invoke factory processors ...
分析jvm内存大致命令 ps -ef|grep javajps: 查询当前机器所有 JAVA 进程信息;jmap: 输出某个 java 进程内存情况 (如:产生那些对象及数量等);jstack: 打印某个 Java 线程的线程栈信息;jinfo: 用于查看 jvm 的配置参数。...
mysql 乐观锁和悲观锁 转载自:http://www.hollischuang.com/archives/934悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度(悲观),因此,在整个数据处理过程中,将数据处于锁定状态。 悲观锁的实现,往往依靠数据库提供的锁机制 (也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法...
redis 1.redis key-value ,2.支持string,list ,set,sored set ,hash 数据结构3.支持事务,操作的原子性4.丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除redis 提供 6种数据淘汰策略volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰volati...
可达性能分析 jvm 内存划分:程序计数器,java 栈,本地方法栈,堆,方法区(方法区,放着类的信息)。java 虚拟机回收的内存块是堆内存,采用的是可达性分析来判断一个对象是否存活着。GC roots 一般由下面来充当:1.虚拟机栈(栈桢中的本地变量表)中的引用的对象2.方法区中的类静态属性引用的对象3.方法区中的常量引用的对象4.本地方法栈中JNI(Native方法)的引用的对象https...
hash冲突的其他解决方式 hash 冲突的解决方法:1.开放定址法:在冲突的时候,用再散列函数再次哈希,直到不再冲突为止2.链地址法3.再哈希法 这种方法构造多个不同的哈希函数:Hi=RH1(key) i=1,2,…,k不易产生聚集,但是增加了计算的时间。4.建立公共溢出区https://www.cnblogs.com/wuchaodzxx/p/7396599.html...
CAS ABA模式 CAS操作可能带来ABA问题,一个变量原本值是A。两个线程进行操作,线程1拿到A值,线程2,拿到A值,然后设置为B,然后再设置为A。这时候线程1,设置值,发现还是A,于是成功的设置值了。解决的方式在值上加版本号,1A,2B,3A 。jdk AtomicStampedReference 是解决这个问题的类。...
java 线程生命周期 java 线程包含五个生命周期:新建,就绪,运行,阻塞,死亡。新建状态:线程创建之后就进入创建状态。就绪状态:当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才...
synchronized 原理 synchronized:JVM 是通过进入、退出对象监视器( Monitor )来实现对方法、同步块的同步的。编译的时候会在同步的对象插入monitor.enter 指令,在方法退出,或者异常的时候插入monitor.exit指令。任意线程对一个(synchronized修饰的)对象访问前,先访问Monitor,尝试获取对象的使用权限,如果成功获取,线程将进入同步列队;如果失败的话,线程将执...
reactor模式 1.初级的服务器:while(true){socket = accept();handle(socket)}对于请求只能一个个的来接受。2.第二级别的服务器while(true){socket = accept();new thread(socket);}这时候可以支持多个请求一起回答了,但是对资源的要求明显变高了,而且一点线程的粒度变得十分的大。一次服务端正常的相应,是这...
dubbo 四种均衡负载 1.ConsistentHashLoadBalance 运用hash算法ConsistentHashSelector 哈希算法类,在调用的时候,他会根据invokers生产对应一个hashkey,这个hashkey对应着存储着ConsistentHashSelector 。ConsistentHashSelector 再根据参数来分析对应的invoker。当服务有变化的时候,invoker...
数据索引自增 b-tree 数据结构索引:从这个数据接口上,细细咀嚼了一下索引自增。如果数据ID是自增的情况下,可以看上面图,数据的整合是很整齐的。前面两层对应的数据是满的。但是如果ID不是自增的情况,那就不是了。从而导致需要更多前两层的数据。优点:1.自增,趋势自增,可作为聚集索引,提升查询效率2.节省磁盘空间。500W数据,UUID占5.4G,自增ID占2.5G.3.查询,写入效率高:查询略优。写...
缓存,数据库 前些时间看到一小段写缓存的东西。缓存redis,couchbase 这些已经成熟的缓存。我这里叙述一下自己的缓存架构的理解。数据库,数据的放在磁盘的,从而导致获取数据的速度变慢了。我们从电脑的硬件层级来理解,cpu,内存,磁盘。很自然的,我们如果想要获得更快的速度,采用的是将数据保存的内存中。这样的才操作速度,自然而然的变得很快了。1.我们可以假设我们创建了一个map的对象,key ----...
java 线程池 参数:1.核心线程参数:corePoolSize2.最大线程数:maximumPoolSize3.keepAliveTime and unit 线程空闲的时候,存活时间。4.workQueue 用于存放任务的阻塞队列。5.handler 当队列和最大线程池都满了之后的饱和策略...
java volatile解析 解析volatile之前需要先叙述一下cpu的内存机制。cpu 的操作数和操作指令是保存的内存中,在cpu计算的时候,先将数据复制一份在各自的高速缓存中。当设计到多核的cpu的时候,因为各自线程在各自cpu操作,那么同一个内存的变量就在不同的cpu里面有各自的一份缓存了。从而导致数据操作就有了缓存不一致的问题。常见的缓存一致性问题解决方案:1)通过在总线加LOCK#锁的方式2)通过缓存一...
dubbo ExchangeClient 发送消息过程 exchangeClient 发送数据到netty 过程1.ReferenceCountExchangeClient2.HeaderExchangeClient3.HeaderExchangeChannel4.NettyClient5.NettyChannel6.NioSocketChannel发送到netty之后,接下来是netty 的数据处理了,分两部分。1.序列化2.ha...
dubbo 注册中心notify 过程 在注册中心subscribe的时候,将directory挂在注册中心上了。当发生notify的时候,根据URL分析找到对应的directory。1.ProtocolListenerWrapper listener 包装2.ProtocolFilterWrapper filter 包装3.DubboProtocol 形成真正调用Invoker3.1 根据地址形成ExchangeClient...