- 浏览: 467186 次
- 性别:
- 来自: 深圳
最新评论
-
simon518:
titan闭源了吗,git找不到了
云集的全链路压测之路 -
feilian09:
发布到Github?求个地址
HBase轻量级框架Parrot -
daniaowansui:
楼主说的太简单了,也太浅显了。只从WINDOW系统的一次实验就 ...
剖析Java线程到底是并行还是并发 -
hopkinsa:
在PA 看你写的内部文档。学习。请让我叫你一声大师兄
笔者带你剖析淘宝TDDL——Matrix层的分库分表配置与实现 -
krystal_0424:
谢谢~分享
HBase轻量级框架Parrot
文章列表
《剖析Java线程到底是并行还是并发》
我们都知道线程是最基本的执行单元,包含在进程内部,也就是说,进程是由线程构成。那么当我们编写多线程的时候,大部分教科书上都是称其为并发,而非是并行,这2种截然不同的概念,完全误导了一些同学。
并发:多线程运行在同一个CPU内,CPU不停做上下文切换执行任务,单位时间内只有一个线程在运行;
并行:多线程运行在多核心CPU内,同时执行任务;
在笔者面试过的部分开发人员中,有些人会觉得Java线程被包裹在1个JVM进程内部,然而一个JVM进程运行在某一个CPU上,那么Java的线程就是并发的,只有利用特殊API比如fork-join ...
《剖析Java8的lamda表达式03》
前面几个章节笔者对lamda表达式的语法进行了详细的讲解,那么本章也是最后一章,一来是做一些总结,但更多是lamda表达式的一些实战性相关的案例,毕竟清楚语法,不清楚怎么用,在哪里用,将会是一个很悲催的事情。
先来首先来看看一个排序操作,比如我们想对一个List集合执行字典排序,那么Java8之前最常见的做法就是编写匿名类,当然我们既然已经学习了lamda,就应该学而用之:
List<Double> list = Arrays.asList(3.5D, 2.7D, 1.65D);
/* 使用匿名类进行字典排序 */
...
《剖析Java8的lamda表达式02》
在《剖析Java8的lamda表达式01》中,相信大家已经对lamda表达式有了一定的认识和明确基本语法和用法。那么接下来本章我们再继续了解和学习lamda表达式。
来看看上一章中的一个例子:
Runnable ...
《笔者带你剖析Java8的lamda表达式01》
其实Java8从诞生到至今,3年多的时间里笔者一直没有在任何项目中正式使用到Java8和lamda。时光飞逝,当我们还停留在Java6和Java7的语法层面时,9的正式版也即将来到我们身边,真的是感觉到惭愧,所以笔者抽空整理了一下lamda的一些表达式语法,同时也准备在项目中柔和进它。
首先我们来看看,使用Lamda有什么好处,没好处的事情相信谁也不愿意牺牲稳定性去尝鲜。lamda对语法层面的改变2个字总结就是:简洁。因此可以把lamda表达式理解为简洁的表示可传递的匿名函数的一种方式。
lamda的构成,如下所示 ...
《剖析Java泛型通配符》
Iteye的编辑器,是我见过最垃圾的编辑器
使用泛型的目的有2个,首先是保证了安全性,其次是表述性方面的优势,毕竟对于一些语义上的错误(比如:类型转换),应该尽可能在编译期就发现。
泛型相信大家都不会陌生,我们在Java5后使用集合API时,基本上时时刻刻都是在和泛型打着交道,那么笔者便不再对泛型的一些基础语法进行介绍,直接进入本章主题,泛型的无限制通配符。
当我们在使用泛型的时候,如果不明确实际的类型参数,那么就可是使用<?>来代替,这种方式便称作无限制通配符,比如List<?>就意味着其类型参数可以是任意类型。 ...
《Redis事务失效问题记录》
限时抢购场景下,热点数据的写操作如果是在RDBMS中进行,会造成多线程之间相互竞争InnoDB的行锁,并发越高等待的线程就会越多,这会导致RT上升,TPS下降,最终引起系统雪崩。因此将库存扣减动作放置Redis,使用乐观锁方式进行扣减,是一个不错的选择,毕竟Redis的吞吐量摆在那里,也没有行锁问题。
这段时间在对库存扣减进行二次优化(提成库存扣减成功率、减少同一时间watch碰撞概率),发现一个问题,直接在redis-cli使用watch+multi进行操作,居然会发生超卖现象,并且产生了很多诡异现象:
1、multi后,没有加入事务队列, ...
《聊聊synchronized为什么无法锁住Integer》
假设并发环境下,业务代码中存在一些统计操作,为了保证线程安全,开发人员往往会对计数值进行加锁(synchronized),值得注意的是,直接对Integer类型进行加锁,似乎并
《分布式配置管理平台与优雅停机》
分布式配置管理平台与优雅停机存在什么必然联系?假设配置在配置中心的数据信息发生改变后,客户端感知并订阅到后,必然需要reset来及时响应,最典型的场景就是服务降级(开关)。
...
https://github.com/gaoxianglong/shark/wiki/%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97
<Connector port="" protocol="HTTP/1.1" maxTreads="1000" acceptCount="1000" compression="on" compressableMimeType="text/html,application/xml,application/json,application/javascript,text/css,text/plain" compressionMinSize="2048&q ...
分享Java、互联网领域问题排查的case,以及分享各种高并发系统架构、中间件的技术。
redis3.x cluster
- 博客分类:
- redis
《redis3.x cluster》
前言
redis集群后,我们就需要一种数据路由算法将不同key分散存储到不同的redis节点内,通常的做法是获取某个key的hashcode,然后mod,不过这种做法无法很好的支持动态伸缩性需求,一旦节点的增或者删操作,都会导致key无法在redis中命中,所以在redis3.x之前,基本上都是采用编写一致性hash算法实现redis的集群,但是redis3.x正式支持cluster后,却采用的是hash slot(hash槽)。
redis集群中一共内置了16384个哈希槽,当set操作时,redis先对key使用crc16验证出一个 ...
《Java Remote Debug》
简介
如果是本地调试,那么在IDE工具(比如Eclipse)的帮助下,是非常容易的。但是如果想对部署在测试/生产环境中的程序进行调试时,你会怎么办呢?在这种情况下,源码已经被编译为中间代码,因此本地调试肯定是不行的,庆幸的是,JVM为开发者提供有远程调试参数,也就是说,我们可以利用这个特性,在本地的IDE工具中调试部署在远端的程序。
一、开启remote debug模式
每一个程序都寄宿在独立的JVM中,那么Java程序的远程调试,其实我们可以理解为多个JVM进程之间的TCP通信。如果希望你的程序支持远程调试,那么你需要在JVM启动 ...
示例地址:https://github.com/gaoxianglong/dubbo-test