`
gao_xianglong
  • 浏览: 467186 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
文章列表
《剖析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来及时响应,最典型的场景就是服务降级(开关)。 ...

shark用户指南

http://gaoxianglong.github.io/shark/

shark使用指南

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

《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

《Java Remote Debug》   简介 如果是本地调试,那么在IDE工具(比如Eclipse)的帮助下,是非常容易的。但是如果想对部署在测试/生产环境中的程序进行调试时,你会怎么办呢?在这种情况下,源码已经被编译为中间代码,因此本地调试肯定是不行的,庆幸的是,JVM为开发者提供有远程调试参数,也就是说,我们可以利用这个特性,在本地的IDE工具中调试部署在远端的程序。   一、开启remote debug模式 每一个程序都寄宿在独立的JVM中,那么Java程序的远程调试,其实我们可以理解为多个JVM进程之间的TCP通信。如果希望你的程序支持远程调试,那么你需要在JVM启动 ...

dubbo示例

示例地址:https://github.com/gaoxianglong/dubbo-test
Global site tag (gtag.js) - Google Analytics