花辭

風月不瘦,雖以千年後。


  • 首頁

  • 關於

  • 標籤

  • 分類

  • 歸檔

  • 站點地圖

  • 公益404

理解Java-类与变量

發表於 2016-03-27 | 分類於 语言语法 | | 閱讀次數:

Java程序初始化顺序

Java语言中当实例化对象时,对象所在的类的所有成员变量首先要进行实例化, 只有当所有类成员实例化后,才会调用对象所在类的构造函数创建对象.
Java程序的初始化一般遵循3个原则(优先级依次递减):

  • 1). 静态对象(变量)优先于非静态对象(变量)初始化.

  • 2). 分类优先于子类进行初始化.

  • 3). 按照成员变量的定义顺序进行初始化.即使变量定义散布于方法定义之中, 他们依然在任何方法(包括构造函数)被调用之前先初始化.

閱讀全文 »

理解Java-理论基础

發表於 2016-03-27 | 分類於 语言语法 | | 閱讀次數:

思维导图系列

閱讀全文 »

理解Java-IO模型

發表於 2016-03-27 | 分類於 语言语法 | | 閱讀次數:

在高性能的IO体系设计中,有几个名词概念需要先做个概述.

同步和异步、阻塞和非阻塞

同步和异步是针对应用程序与内核的交互而言的,阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值.
简而言之: 同步和异步是目的,阻塞和非阻塞是实现方式。

閱讀全文 »

集合对象纵向維度聚合

發表於 2016-01-11 | 分類於 应用实践 | | 閱讀次數:

业务开发中经常会遇到列项聚合的问题,所以常用的一些思路整理出来.

集合纵向聚合

系统中可能存在不同的业务流程聚合出来的(K,V)结构数据, 然后需要汇总, 可以采用Java8进行流式处理

逻辑抽象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 进行map集合中相同元素的value值聚合
* @param map1 基础map
* @param map2 扩展map
* @return
*/
public static <K, V> Map<K, List<V>> keyMerge(Map<K, List<V>> map1, Map<K, List<V>> map2){
Map<K, List<V>> base = Optional.ofNullable(map1).orElse(Maps.newHashMap());
Map<K, List<V>> ext = Optional.ofNullable(map2).orElse(Maps.newHashMap());
ext.keySet().forEach(
key -> base.merge(key, ext.get(key), (v1,v2)
-> Arrays.asList(v1, v2).stream().flatMap(Collection::stream).collect(Collectors.toList())
)
);
return base;
}
閱讀全文 »

RestTemplate使用說明

發表於 2015-12-07 | 分類於 应用实践 | | 閱讀次數:

RestTemplate介绍

RestTemplate是Spring提供的用于访问Rest服务的客户端,同时RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

RestTemplate初探

通过实例展示RestTemplate的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@Test
public void test01(){
RestTemplate restTemplate = new RestTemplate();
String url = "http://www.baidu.com?id={id}&name={name}&num={age}";
ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class, 1, "Elon", 20);
if(responseEntity.getStatusCode() == HttpStatus.OK){
System.out.println(responseEntity.getBody());
}
}

@Test
public void test02(){
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8080/api/v1/org/{department}/list");
HttpEntity<String> formEntity = new HttpEntity<String>(getHttpHeaders());
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, formEntity, String.class, 2);
if(responseEntity.getStatusCode() == HttpStatus.OK){
System.out.println(responseEntity.getBody());
}
}

// Mock登录授权信息
public static HttpHeaders getHttpHeaders(){
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON_UTF8));
headers.add("Cookie", "token=123244545");
return headers;
}

示例参数:

  • String url: 该方法第一个参数标识请求的url
  • Class responseType: 该参数标识该次HTTP请求的结果映射成的对象类型,
  • Object… urlVariables: 该参数用来为url中的参数赋值,支持多个值传递.
閱讀全文 »

稳定性保障优雅重试

發表於 2015-10-01 | 分類於 应用实践 | | 閱讀次數:

业务开发中为了保证衔接模块的偶尔不确定性,需要做一些重试保障机制. 为了让我们的重试代码更优雅简单, 这里介绍两个方案:Guava-Retry和Spring-Retry

Guava-Retrying

Guava Retrying 是一个灵活方便的重试组件,包含了多种的重试策略,而且扩展起来非常容易.

maven依赖

1
2
3
4
5
<dependency>
<groupId>com.github.rholder</groupId>
<artifactId>guava-retrying</artifactId>
<version>2.0.0</version>
</dependency>

应用示例

示例展示目标接口在返回true时进行逻辑重试, 重试次数为3次, 重试时间间隔为每间隔2s执行一次重试.

閱讀全文 »

SpringEvent事件編程

發表於 2015-09-11 | 分類於 应用实践 | | 閱讀次數:

SpringEvent 事件驱动介绍

Spring中的事件驱动模型也叫作发布订阅模式,是观察者模式的一个典型的应用
Spring事件驱动模型中存在三个角色: 事件原型、事件发布者、事件监听者.

Spring事件原型

Spring事件定义通过ApplicationEvent,该类继承自Jdk的EventObject; JDK要求所有事件将继承它,并通过source得到事件源, 比如我们的AWT事件体系也是继承自它;

ApplicationEvent规范定义如下:

閱讀全文 »

数据分析工具 Zeppelin

發表於 2015-09-11 | 分類於 应用实践 | | 閱讀次數:
  • Zeppelin概述
  • Zeppelin下载
  • Zeppelin部署
    • Zeppelin解释器
    • 安装特定解释器
    • 安装全部解释器
    • Zeppelin启动
  • Zeppelin应用
    • 解释器Markdown
    • 解释器Elastic

Zeppelin概述

Apache Zeppelin 是一个让交互式数据分析变得可行的基于网页的notebook。Zeppelin提供了数据可视化的框架. 官网地址: http://zeppelin.apache.org/

Zeppelin下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@icloud-store local]# wget http://mirror.bit.edu.cn/apache/zeppelin/zeppelin-0.7.3/zeppelin-0.7.3-bin-all.tgz
[root@icloud-store local]# tar -zxvf zeppelin-0.7.3-bin-all.tgz
[root@icloud-store zeppelin-0.7.3-bin-all]# ll -h
总用量 28M
drwxr-xr-x 2 501 wheel 4.0K 2月 26 03:29 bin
drwxr-xr-x 2 501 wheel 4.0K 2月 26 03:29 conf
drwxr-xr-x 23 501 wheel 4.0K 2月 26 03:28 interpreter
drwxr-xr-x 4 501 wheel 8.0K 2月 26 03:28 lib
-rw-r--r-- 1 501 wheel 59K 9月 18 10:14 LICENSE
drwxr-xr-x 2 501 wheel 4.0K 2月 26 03:28 licenses
drwxr-xr-x 8 501 wheel 102 2月 26 03:28 notebook
-rw-r--r-- 1 501 wheel 5.5K 9月 18 10:14 NOTICE
-rw-r--r-- 1 501 wheel 1.3K 9月 18 10:07 README.md
-rw-r--r-- 1 501 wheel 28M 9月 18 10:13 zeppelin-web-0.7.3.war
[root@icloud-store zeppelin-0.7.3-bin-all]# ls bin/
common.cmd functions.cmd install-interpreter.sh interpreter.sh zeppelin-daemon.sh
common.sh functions.sh interpreter.cmd zeppelin.cmd zeppelin.sh
[root@icloud-store zeppelin-0.7.3-bin-all]# ls conf/
configuration.xsl log4j.properties zeppelin-env.cmd.template zeppelin-site.xml.template
interpreter-list shiro.ini.template zeppelin-env.sh.template
[root@icloud-store zeppelin-0.7.3-bin-all]# ls interpreter/
alluxio bqsql elasticsearch flink ignite kylin lib md psql scio spark
angular cassandra file hbase jdbc lens livy pig python sh
閱讀全文 »

Linux流量复制工具

發表於 2015-09-11 | 分類於 应用实践 | | 閱讀次數:

流量复制

线下的测试难以模拟真实流量, 尤其难以模拟正常流量混杂着各色异常流量;所以复制线上流量进行测试,能够覆盖很多无法预见的异常流量.

流量复制工具有很多, 例如Gor、tcpreplay、tcpcopy等; 这些工具贴合真实场景,能模拟真实流量, 并支持流量的放大或缩小,更容易测试出程序的瓶颈和潜在问题.

  • goreplay: https://github.com/buger/goreplay

  • tcpreplay: https://github.com/appneta/tcpreplay

  • tcpcopy: https://github.com/session-replay-tools/tcpcopy

  • nginx模块: ngx_http_mirror_module(在Nginx 1.13.4中开始引入)

閱讀全文 »

缓存组件-Ehcache

發表於 2015-09-01 | 分類於 组件框架 , 缓存组件 | | 閱讀次數:

Ehcache概述

Ehcache是一个用Java实现的使用简单、高速、线程安全的缓存管理类库, 其提供了用内存、磁盘文件寸纯、以及分布式存储等多种灵活的管理方案. Ehcache从Hibernate发展而来, 快速、简单、低消耗、依赖性小、扩展性强.

Ehcache特点

  1. 快速、简单;

  2. 多种缓存策略: LRU、LFU和FIFO;

  3. 缓存数据有两级:内存和磁盘,因此无需担心容量问题;

  4. 缓存数据会在虚拟机重启的过程中写入磁盘;

  5. 可以通过 RMI、可插入 API 等方式进行分布式缓存;

  6. 具有缓存和缓存管理器的侦听接口: 缓存管理器监听器、缓存事件监听器;

  7. 支持多缓存管理器实例,以及一个实例的多个缓存区域;

  8. 提供 Hibernate 的缓存实现: Hibernate默认二级缓存是不启动的, 启动二级缓存需要采用 Ehcache来实现;

閱讀全文 »
1…4567
蘇若年

蘇若年

64 文章
13 分類
71 標籤
RSS
© 2019 HuntsWork
由 Hexo 強力驅動
|
主題 — NexT.Pisces v5.1.4