HotSpot GC可达性分析的实现原理
一、基本概念
基本思想就是通过一系列的称为 “GC Roots” 的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相连的话,则证明此对象是不可用的。 继续阅读→
阅读全文基本思想就是通过一系列的称为 “GC Roots” 的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相连的话,则证明此对象是不可用的。 继续阅读→
阅读全文通过对getBean方法对源码分析,我们可以清晰的理解bean的加载过程
继续阅读→
Spring容器的创建过程、Bean的创建过程,主要在refresh函数中完成,通常我们使用下面的方法去创建、以及初始化容器:
继续阅读→
布隆过滤器的作用是判断一个值肯定不存在、或者可能存在。 继续阅读→
阅读全文一、漏桶算法 继续阅读→
阅读全文java7中,concurrentHashMap使用的是若干个segement,每个segement中又一个数组,数组下面是链表。
继续阅读→
堆中对象堆的存储布局可分为三个部分:对象头(Header)、实例数据(Instance Data)、填充(Padding)
继续阅读→
1.方法内联
继续阅读→
1.解析
继续阅读→
我们来看这样一个类
继续阅读→
运行时数据区如图: 继续阅读→
阅读全文redis的主从复制方式
继续阅读→
位图法的原理主要就是利用int类型数据,一个int类型数据是4个字节,一个字节8位,然后一个int数据利用自身字节位就可以表示0-31的数是否存在,bit位表示数值,位山0,1值表示这个数值是否存在。
继续阅读→
redis的序列化协议指的是在客户端与服务的交互发送内容协议,定义了请求和响应时内容的格式
继续阅读→
redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。 继续阅读→
阅读全文Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。
继续阅读→
redis rehash的过程是渐进式的,rehashindex为-1表示未触发扩容过程 继续阅读→
阅读全文JDK代理是基于接口形式进行代理的,那么生成的代理类在使用的时候,就可以用接口形式去使用。 继续阅读→
阅读全文当线程池并发任务处理时,如果使用的是同一个线程池,那么很有可能出现线程的死锁 继续阅读→
阅读全文1. Producer(生产者) : 产生消息的一方。 继续阅读→
1.从xml配置文件,或者注解加载BD,beanDefinition 继续阅读→
阅读全文我们在new一个对象时,都会在堆中开辟一个内存空间给这个对象。
那么多个线程如果开辟到了同一个地址的内存,不就冲突了?
继续阅读→
我们比较两个对象是否相等,有两种方式:
1.直接通过运算符 == 比较
2.通过equals比较
通过==比较的是引用地址,通过equals方法看具体类重写的实现,例如string就是比较具体值
阅读全文AQS指的就是AbstractQueuedSynchronizer
中文直译就是:抽象队列同步器 继续阅读→
java异常类都继承至throwable类:
继续阅读→
java克隆有2种方式,使用clone方法去克隆,或者使用序列化的方式进行克隆
继续阅读→
实现原理:
反射的Method类的invoke方法实际上是走的MethodAccessorImpl的invoke方法
继续阅读→
一、反射是什么?
java反射是加载类的一种方式,我们正常加载类的方式就是new一个对象
例如
Apple a = new Apple();阅读全文
锁有4个状态:无锁、偏向锁、轻量级锁、重量级锁,锁等级又低到高
继续阅读→
runnable执行的是run方式,callable执行的是call方法。 继续阅读→
阅读全文Running、ShutDown、Stop、Tidying、Terminated。
继续阅读→
方法就是hash槽。
登陆任意对redis client,在get和set 时都会
对key通过CRC16算法取余后,得出的结果槽,然后确定槽属于哪个具体对client,然后将请求转发过去。
Statement 和 PreparedStatement之间的关系和区别.
关系:PreparedStatement继承自Statement,都是接口
区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高
继续阅读→
首先我们定义一个类用于测试:
继续阅读→
例如我要找
com.zengbingo.*下面的所有的类?我们可以用spring提供的PathMatchingResourcePatternResolver
继续阅读→
1.IDEA中默认assert(断言)是关闭,开启方式如下:
简单来说:就是设置一下jvm的参数,参数是-enableassertions或者-ea(推荐)。
继续阅读→
首先下载安装jprofiler:
http://www.ej-technologies.com/download/jprofiler/files 继续阅读→
MAT:Memory Analyzer tool
首先先去下载:https://www.eclipse.org/mat/downloads.php
继续阅读→
docker的常用网络模式
None网络:这种网络模式下容器只有lo回环网络,没有其他网卡。none网络可以在容器创建时通过 –network=none 来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
继续阅读→
首先安装maven
apt-get install maven
执行后,使用命令查看安装
mvn -version阅读全文
首先定义一个数组
double[] a = {1,2,3};
数组转list(java 1.8)
List<Double> list = Arrays.stream(a).boxed().collect(Collectors.toList());
list转数组
Double[] b = new Double[list.size()]; list.toArray(b);
list颠倒顺序
Collections.reverse(list);阅读全文
一、复制文件
这里使用输入输出缓冲区(BufferedInputStream、BufferedOutputStream),以提高性能,如果文件比较小的话,可以不用
先下载lombo插件,然后在编译构建的适合使用注解处理器 继续阅读→
阅读全文一、菜单栏中选择File->New->Project/Module,然后按图片操作 继续阅读→
阅读全文@Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=< 参数数<=5时使用最佳。 继续阅读→
阅读全文WebSocket协议是基于TCP的一种新的网络协议,它实现了浏览器与服务器全双工(full-duplex)通信,即运行服务器主动发送消息给客户端,通常我们的http访问,都只能是又客户端访问驱动
下面将演示一下如何使用java spring搭建一个简单的服务端点
如果你对前端如何实现一个websocket客户端感兴趣,作为关联学习你可以查看(http://zengbingo.com/?p=1494)
在企业的实践生产中,可能需要使用一些定时任务,例如,月报,账单之类的,
除了使用第三方的定时任务例如唯品会提供的开源的分布式任务调度(saturn:https://github.com/vipshop/Saturn),
我们还可以自己在spring中简单的使用定时任务
继续阅读→
短信、邮件、微信等通知,常常会用到发布订阅模式。
发布者发布消息后,订阅者根据消息去做对应等事情,比如一个订单购买成功的通知发布后,短信、邮件、微信等订阅者消费消息,并且推送给用户。
继续阅读→
我们知道,例如下面这样2条命令,实际上会分别前后开启2个不同的链接去设置值
redisTemplate.opsForValue().set("key1", "value1"); redisTemplate.opsForValue().set("key2", "value2");阅读全文
我们使用redisTemplate去set一个value时,在redis里面用key * 去获取,会发现不是正常的字符串。 继续阅读→
阅读全文