- 博客(21)
- 资源 (1)
- 收藏
- 关注
原创 JDK1.8 HashMap源码解析(不分析红黑树部分)
一、HashMap数据结构 HashMap由 数组+链表+红黑树实现,桶中元素可能为链表,也可能为红黑树。为了提高综合(查询、添加、修改)效率,当桶中元素数量超过TREEIFY_THRESHOLD(默认为8)时,链表存储改为红黑树存储,当桶中元素数量小于UNTREEIFY_THRESHOLD(默认为6)时,红黑树存储改为链表存储。table即Node<k,v>[] tab...
2018-06-07 16:33:00 687
原创 求最接近cap的2次幂(tableSizeFor函数的实现)
不比cap小的2次幂(HashMap中的tableSizeFor函数)// 初始化临界值的具体实现static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1;//现将n无符号右移1位,并将结果与右移前的n做按位或操作,结果赋给n; n |= n >>>...
2018-06-07 11:16:41 770
原创 git基本操作
git配置Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。git提供了三级的配置:/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选...
2018-06-02 17:00:56 168
原创 Spring AOP中的JDK代理和Cglib代理
JDK动态代理是java JDK自身提供的基于接口的代理,代理类的生成速度快,而代理类的运行速度慢,适合于prototype类型Cglib代理是基于之类继承的方式的代理,能代理非基于接口的类,适合于非final修饰的类,能对public的方法进行代理,代理类的生成速度慢,而代理类的运行速度快,适合于singleton类型Spring通过判断目标类是否有实现接口来选择JDK代理和Cglib代理,如果...
2018-04-19 10:14:01 223
原创 Spring AOP如何让内部方法调用也发生代理
方法之间的调用直接使用的是原始对象,而非代理对象,因而内部调用不会产生代理public class Waiter { public void greetTo(String name) { System.out.println("greet to :" + name); } public void serveTo(String name) { ...
2018-04-17 15:47:39 5735
原创 Spring无效的事务传播行为
insertRole方法上的propagation=Propagation.REQUIRES_NEW表示不管当前上下文环境有没有事务,都重新开启一个新的事务,但实际上是不生效的。原因如下:Spring的事务管理是在通过动态代理类进入invoke方法里面的,然后判断是否需要拦截方法,需要的时候才根据注解和XML配置生成事务切面,而insertRole方法的调用是直接作用于原始对象,而不是代理对象,因...
2018-03-07 21:21:12 482
原创 Mybatis学习笔记——解析及运行原理
构造SqlSessionFactory过程采用Builder模式设计Builder设计模式:对于复杂对象,直接通过构造函数构造会导致大量逻辑放在构造函数中。为了简化构造逻辑,我们更希望一步一步有秩序地构造对象,从而降低其复杂度SqlSessionFactoryBuilder就是SqlSessionFactory的构造类构造过程: 通过org.apache.ibatis.builder.xml.XM...
2018-03-07 21:13:14 185
原创 Mybatis学习笔记——动态Sql
关于条件的判断if 判断语句choose (when, otherwise) 类似于switch case语句if 和 when 都需要与test属性连用,test为具体判断逻辑在判断之前都加1=1的原因是:如果不加1=1,当断语句返回false时,后面判断部分的sql为空,这样整体sql语句就变成了xxx where,因而会出错可以通过使用where或trim元素去掉1=1这样的语句对...
2018-03-04 19:57:05 411
原创 Mybatis学习笔记——映射
在映射器中,我们主要可以定义如下几类元素:select 查询,可以自定义查询参数和返回结果insert 插入,执行后返回一个整型,代表插入的条数update、deletesql 允许定义一部分SQL,在其它地方应用它resultMap 用来描述数据库结果集返回对象(和select中的resultType作用相同,select中只能二选一)cache、cache-ref 定义和引用缓存策...
2018-03-02 19:40:29 683
原创 Mybatis学习笔记——入门+配置
1. MyBatis入门2. Mybatis配置PS:XML文件的层次结构不能调到顺序,如果颠倒,会解析失败2.1 properties配置2.1.1 三种配置的方式及加载顺序 3. 通过程序加载 常用于对数据库密码进行解密,配置文件中配置密文,程序解析成明文之后再传给Mybatis properties.setProperty("username", decode(p...
2018-02-28 21:20:15 191
原创 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 380
原创 String,StringBuffer、StringBuilder的那些事
public class StringText { public static void main(String[] args){ String s1,s2,s3,s4; s1 = new String("123"); s2 = new String("123"); s3 = "123"; s4 = "123"; S
2016-12-23 21:47:39 187
原创 String、StringBuffer、StringBuilder区别
StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对String的改变都 会引发新的String对象的生成;StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。既然可变和不可变都有了,为何还有一个StringBuilder呢?相信初期的你,在进行append时,一般都会选择StringBuffer
2016-12-23 21:39:25 184
原创 节点的网络拓扑距离
The idea is that the bandwidth available for each of the following scenarios becomes progressively less:1. Processes on the same node2. Different nodes on the same rack3. Nodes on different racks in
2016-12-23 21:36:31 3548
原创 HDFS写文件过程
客户端调用create()来创建文件DistributedFileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件。元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。DistributedFileSystem返回DFSOutputStream,客户端用于写数据。客户端开始写入数据,DFSOutputStream将数据分成块,写入data que
2016-12-23 21:32:05 519
原创 Replica Placement(副本放在位置)
There’s a trade- off between reliability and write bandwidth and read bandwidth herethe first replica on the same node as the client (for clients running outside the cluster, a node is chosen at rando
2016-12-23 21:27:04 434
原创 RawCompare
TextPair 包含了两个Textpublic static class FirstComparator extends WritableComparator {private static final Text.Comparator TEXT_COMPARATOR = new Text.Comparator(); public FirstComparator() { super
2016-12-23 21:24:43 297
原创 Row-oriented layout & Column-oriented layout
现需查询column2 对于基于行存储的表,需要先把每行加载到内存,然后反序列化相应的列(可以节约反序列化整行的时间),但还是浪费了读磁盘的时间对于基于列存储的表,可以直接读取相应的列,然后进行反序列化
2016-12-23 21:20:28 318
原创 MultithreadedMapper的使用
当Map处理每条记录时都很耗时,可以考虑MultithreadedMapper摘自Definition中的一段话: 对于计算密集型型任务,使用MutithreadedMapper不会带来性能提升 2.对于IO密集型任务而言,如联网操作,使用MutithreadedMapper可能会带来性能提升
2016-12-23 21:09:20 492
转载 MapReduce 中的两表 join 几种方案简介
1. 概述在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的。而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的技巧。本文首先介绍了Hadoop上通常的JOIN实现方法,然后给出了几种针对不同输入数据集的优化方法。2. 常见的join方法介绍假设要进行join的数据分别来自File
2016-12-23 20:58:13 234
转载 SQL 查询横表变竖表
SQL 查询横表变竖表/*普通行列转换假设有张学生成绩表(tb)如下:Name Subject Result张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94*/------------------------------------------------
2016-12-23 20:55:56 3260
推荐系统数据全集
2017-12-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人