- 博客(17)
- 资源 (7)
- 收藏
- 关注
原创 java concurrent 学习(1) – FutureTask原理
java concurrent 学习(1) – FutureTask原理
2017-11-19 21:33:49 565 2
原创 dubbo系列(三) DUBBO IOC、AOP
1. 介绍 在dubbo系列上一篇文章中已经介绍了SPI的基本使用,我们可以创建指定的扩展点对象,那如果扩展点中包含另一个扩展点属性,属性是如何创建的,如果我们期望在扩展点目标方法前后增加切面,dubbo又是如何处理的,本章将介绍这些内容。2.Dubbo IOC示例 业务场景说明:bird有一个Animal属性,我们在运行时会通过Url总线设置这个属性的类型为cat,然后通过bird调用...
2020-03-17 23:17:29 859
原创 dubbo系列(二) 自适应SPI
1. 介绍 在上一篇博客中,我们介绍了SPI的基本使用,通过指定扩展点类型,可以创建扩展点的实现类,但是在dubbo中,有些时候并不期望直接创建出一个具体的扩展点实现,而是期望创建出一个未知类型的扩展点实现,在调用这个未知类型扩展点的扩展方法时,通过参数判断具体创建哪个类型的扩展点实现,然后在执行具体方法,看起来有些绕,请看接下来的具体使用。2.自适应扩展点示例 在扩展点接口中新增加一个...
2020-03-16 23:35:03 299
原创 dubbo系列(一) SPI
1. 介绍 SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。 Dubbo 就是通过 SPI 机制加载所有的组件。不过,Dubbo 并未使用 Java ...
2020-03-15 23:04:34 243
原创 NIO系列(三) 零拷贝
1.介绍 在通过IO进行数据读写时(例如从文件读取数据),需要进行多次的数据拷贝,在多次的数据拷贝中,有些拷贝是通过DMA的方式进行的,有些拷贝是CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方,这种方式效率较低。那所谓的零拷贝就是指在进行IO读写时,尽量避免第二种拷贝方式来提高效率。 零拷贝主要是由操作系统来支持,和java api无关。2.前置知识 ...
2020-02-01 00:29:02 305
原创 NIO系列(二) 直接缓冲DirectByteBuffer
1 介绍 ByteBuffer底层是通过byte数组的方式来存储数据的,所谓直接缓冲是指byte数组是通过堆外存存储的,并没有存在jvm堆上,不受jvm垃圾回收的约束。2 直接缓冲和堆缓冲的创建方式 ByteBuffer的创建有两种方式,allocate和allocateDirect,其中通过allocate创建出来的是HeapByteBuffer(堆缓冲),源码如下:// 创建堆...
2020-01-12 01:57:51 704
原创 NIO系列(一) 核心概念介绍
一、核心概念概述Java NIO是JDK1.4引入的新语法,与传统IO不同,NIO是非阻塞的且面向缓冲区(buffer)的编程,有三个核心概念:Buffer,Channel与Select。
2020-01-05 21:50:05 350
原创 Spark1.6源码编译
一、前言 不论是spark还是hadoop、flume等,都建议新手在学习时自己进行手动编译,在第一次编译时肯定会遇到很多问题,大家要摆正心态,一定会有所收货。本文将中重点讲解apache版本和cdh版本下的spark编译。二、环境介绍 操作系统:centos6.5(建议内存4G以上) jdk:1.7.0_67 spark版本:1.6.1 hadoop版本:2.
2017-01-08 16:34:24 2185 5
原创 flume的概念和基本使用
一、flume概述 flume是一个分布式的、可靠的、可用的以及高效的对大量数据日志进行收集、聚集、移动信息的服务。flume是一个可容错的、健壮的并且非常简单的流式数据框架,他只需要简单配置source、channel以及sink后,编写一条命令就可实时采集数据。 agent的三个组成部分为:source、channel和sink。 source:用于采集数据,source是
2017-01-02 23:36:56 1174
转载 深入分析MapReduce shuffle过程
与上一篇博客不同,本篇博客重点介绍mapreduce shuffle的详细过程,完全是理论知识。MapReduce的Shuffle过程介绍 为什么MapReduce计算模型需要Shuffle过程?我们都知道MapReduce计算模型一般包括两个重要的阶段:Map是映射,负责数据的过滤分发;Reduce是规约,负责数据的计算归并。Reduce的数据来源于Map,Map的输出即是Reduce的输入
2016-12-29 14:21:21 312
原创 切面和自定义注解的配合使用
一.概述 基于切面的编程(AOP)也许大家并不陌生,大家经常使用切面编程来解决事务问题。但是切面也有弊端,以笔者的经验看来,使用切面的不方便之处在于切面的精确度问题,我们很难把事务加到大量的指定类的指定方法上,本文就通过Spring AOP和自定义注解的配合使用来解决该问题。二.Spring AOP切面的使用和问题使用: 以事务为例,我们在搭建J2EE项目框架时,势必要处理事务。通常我们的
2016-12-04 00:41:49 10221 2
转载 MYSQL索引结构原理、性能分析与优化
第一部分:基础知识索引官方介绍索引是帮助MySQL高效获取数据的数据结构。笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页查阅找出需要的资料。唯一索引(unique index)强调唯一,就是索引值必须唯一。创建索引: create unique index 索引名 on 表名(列名); alter table 表名 add unique index 索引名 (列名);
2016-11-27 15:13:05 458
原创 java范型类型擦除
一. 概述 在上一篇范型博客中,主要讲解了范型的基本使用和设计,在本篇博客中主要讲解使用范型带来的问题和解决方法。 在使用java范型时,我们通常会遇到诸多问题,例如不能使用T.class,不能直接使用T t.method(),不能通过范型参数实现方法重载等等,这一切的原因都归结于-“范型类型擦除”。二.什么是类型擦除 我们知道,jdk1.5以前是不支持范型的,以List为例,在Li
2016-11-27 12:45:57 541 1
原创 范型的使用和设计
java泛型是JDK1.5以后出现的新特性,泛型的简单使用(例如在集合中的使用)本文不做讲解,这里主要讲解一下泛型的设计。一、泛型类设计 在定义泛型类时,使用尖括号来指定泛型类型参数,泛型类型参数与方法参数不同,方法类型参数传入的是值,而泛型类型参数传入的是类的class类型。请看以下代码:// 父类animal abstract class Animal{ public a
2016-11-26 23:28:41 448
原创 JVM内存模型
本文重点介绍JVM内存模型,对象标识算法以及垃圾回收算法的原理,至于一些实际JVM优化操作或遇到的问题会在后续其他文章进行讲解。一、JVM分为那些区域?每个区域存储什么内容? JVM运行时(例如运行一个main方法),在操作系统中是一个进程,该进程在物理内存中开辟一块空间,在这块空间中又划分了很多区域,有些区域是线程共享的,有些区域是线程独享的。如下图所示: 永
2016-11-26 22:52:37 387
Oracle database 10g sql 开发指南源码
2011-10-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人