7 艾翁

尚未进行身份认证

暂无相关描述

等级
博文 21
排名 35w+

JDK1.8 HashMap源码解析(不分析红黑树部分)

一、HashMap数据结构    HashMap由数组+链表+红黑树实现,桶中元素可能为链表,也可能为红黑树。为了提高综合(查询、添加、修改)效率,当桶中元素数量超过TREEIFY_THRESHOLD(默认为8)时,链表存储改为红黑树存储,当桶中元素数量小于UNTREEIFY_THRESHOLD(默认为6)时,红黑树存储改为链表存储。table即Node<k,v>[]tab...

2018-06-07 16:33:00

求最接近cap的2次幂(tableSizeFor函数的实现)

不比cap小的2次幂(HashMap中的tableSizeFor函数)//初始化临界值的具体实现staticfinalinttableSizeFor(intcap){intn=cap-1;n|=n>>>1;//现将n无符号右移1位,并将结果与右移前的n做按位或操作,结果赋给n;n|=n>>&gt...

2018-06-07 11:16:41

git基本操作

git配置Git提供了一个叫做gitconfig的工具,专门用来配置或读取相应的工作环境变量。git提供了三级的配置:/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 gitconfig 时用 --system 选项,读写的就是这个文件。~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 gitconfig 时用 --global 选...

2018-06-02 17:00:56

Spring AOP中的JDK代理和Cglib代理

JDK动态代理是javaJDK自身提供的基于接口的代理,代理类的生成速度快,而代理类的运行速度慢,适合于prototype类型Cglib代理是基于之类继承的方式的代理,能代理非基于接口的类,适合于非final修饰的类,能对public的方法进行代理,代理类的生成速度慢,而代理类的运行速度快,适合于singleton类型Spring通过判断目标类是否有实现接口来选择JDK代理和Cglib代理,如果...

2018-04-19 10:14:01

Spring AOP如何让内部方法调用也发生代理

方法之间的调用直接使用的是原始对象,而非代理对象,因而内部调用不会产生代理publicclassWaiter{publicvoidgreetTo(Stringname){System.out.println("greetto:"+name);}publicvoidserveTo(Stringname){...

2018-04-17 15:47:39

Spring无效的事务传播行为

insertRole方法上的propagation=Propagation.REQUIRES_NEW表示不管当前上下文环境有没有事务,都重新开启一个新的事务,但实际上是不生效的。原因如下:Spring的事务管理是在通过动态代理类进入invoke方法里面的,然后判断是否需要拦截方法,需要的时候才根据注解和XML配置生成事务切面,而insertRole方法的调用是直接作用于原始对象,而不是代理对象,因...

2018-03-07 21:21:12

Mybatis学习笔记——解析及运行原理

构造SqlSessionFactory过程采用Builder模式设计Builder设计模式:对于复杂对象,直接通过构造函数构造会导致大量逻辑放在构造函数中。为了简化构造逻辑,我们更希望一步一步有秩序地构造对象,从而降低其复杂度SqlSessionFactoryBuilder就是SqlSessionFactory的构造类构造过程: 通过org.apache.ibatis.builder.xml.XM...

2018-03-07 21:13:14

Mybatis学习笔记——动态Sql

关于条件的判断if   判断语句choose(when,otherwise)类似于switchcase语句if和when都需要与test属性连用,test为具体判断逻辑在判断之前都加1=1的原因是:如果不加1=1,当断语句返回false时,后面判断部分的sql为空,这样整体sql语句就变成了xxxwhere,因而会出错可以通过使用where或trim元素去掉1=1这样的语句对...

2018-03-04 19:57:05

Mybatis学习笔记——映射

在映射器中,我们主要可以定义如下几类元素:select 查询,可以自定义查询参数和返回结果insert  插入,执行后返回一个整型,代表插入的条数update、deletesql 允许定义一部分SQL,在其它地方应用它resultMap 用来描述数据库结果集返回对象(和select中的resultType作用相同,select中只能二选一)cache、cache-ref 定义和引用缓存策...

2018-03-02 19:40:29

Mybatis学习笔记——入门+配置

1.MyBatis入门2.Mybatis配置PS:XML文件的层次结构不能调到顺序,如果颠倒,会解析失败2.1properties配置2.1.1三种配置的方式及加载顺序      3.通过程序加载     常用于对数据库密码进行解密,配置文件中配置密文,程序解析成明文之后再传给Mybatisproperties.setProperty("username",decode(p...

2018-02-28 21:20:15

Storm中的worker Executor Task

Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作:Worker(进程)Executor(线程)Task下图简要描述了这3者之间的关系:1个worker进程执行的是1个topology的子集(注:不会出现1个worker为多个topology服务)。1个worker进程会启动1个或多个executor线程来执行1个

2016-12-23 21:53:02

String,StringBuffer、StringBuilder的那些事

publicclassStringText{publicstaticvoidmain(String[]args){Strings1,s2,s3,s4;s1=newString("123");s2=newString("123");s3="123";s4="123";S

2016-12-23 21:47:39

String、StringBuffer、StringBuilder区别

StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对String的改变都会引发新的String对象的生成;StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。既然可变和不可变都有了,为何还有一个StringBuilder呢?相信初期的你,在进行append时,一般都会选择StringBuffer

2016-12-23 21:39:25

节点的网络拓扑距离

Theideaisthatthebandwidthavailableforeachofthefollowingscenariosbecomesprogressivelyless:1.Processesonthesamenode2.Differentnodesonthesamerack3.Nodesondifferentracksin

2016-12-23 21:36:31

HDFS写文件过程

客户端调用create()来创建文件DistributedFileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件。元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。DistributedFileSystem返回DFSOutputStream,客户端用于写数据。客户端开始写入数据,DFSOutputStream将数据分成块,写入dataque

2016-12-23 21:32:05

Replica Placement(副本放在位置)

There’satrade-offbetweenreliabilityandwritebandwidthandreadbandwidthherethefirstreplicaonthesamenodeastheclient(forclientsrunningoutsidethecluster,anodeischosenatrando

2016-12-23 21:27:04

RawCompare

TextPair包含了两个TextpublicstaticclassFirstComparatorextendsWritableComparator{privatestaticfinalText.ComparatorTEXT_COMPARATOR=newText.Comparator();publicFirstComparator(){super

2016-12-23 21:24:43

Row-oriented layout  &  Column-oriented layout

现需查询column2对于基于行存储的表,需要先把每行加载到内存,然后反序列化相应的列(可以节约反序列化整行的时间),但还是浪费了读磁盘的时间对于基于列存储的表,可以直接读取相应的列,然后进行反序列化

2016-12-23 21:20:28

MultithreadedMapper的使用

当Map处理每条记录时都很耗时,可以考虑MultithreadedMapper摘自Definition中的一段话:对于计算密集型型任务,使用MutithreadedMapper不会带来性能提升2.对于IO密集型任务而言,如联网操作,使用MutithreadedMapper可能会带来性能提升

2016-12-23 21:09:20

MapReduce 中的两表 join 几种方案简介

1.概述在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的。而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的技巧。本文首先介绍了Hadoop上通常的JOIN实现方法,然后给出了几种针对不同输入数据集的优化方法。2.常见的join方法介绍假设要进行join的数据分别来自File

2016-12-23 20:58:13
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!