自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(130)
  • 资源 (5)
  • 收藏
  • 关注

原创 Kafka本地安装笔记

本地手工玩一下kakfa,这里我用的MacOS,因此用brew安装。这里整理了下自己的安装笔记。首先java环境这里就不说了。一、安装zookeeperbrew的安装这里就不说了,直接安装zookeeper。运行以下命令即可。这里可能因为网络原因比较费时。brew install zookeeper这里采用zookeeper单机模式即可。也可以在/usr/local/etc/z...

2019-08-03 16:02:49 448

原创 Hive SQL函数整理

hive sql跟mysql还是有点区别的。这里整理下一些自己常用的函数。一、关系函数匹配某列是否等于某值或列,比如A <> B。关系函数 函数 语法及含义 注意及举例 = 等值比较 不要用于NULL <> 不等 不要用于NULL < 小于 不要用于NULL <= 小于等于 ...

2019-08-01 23:54:45 909

原创 Mockito和PowerMock使用总结

Mockito和PowerMock编写单元测试时,最常用就是利用mockito、PowerMock进行mock对象。可以帮我们mock private方法、static方法、静态类等。一个常见的单元测试如下:这里也mock了static方法。被测试代码:@Componentpublic class SelfService { @Autowired privat...

2019-06-05 00:19:14 4616

原创 慎用Java Collection的contains函数

背景最近碰到一个坑,看代码: @Test public void should_can_get_true_when_given_matched_type() { List<Integer> numberList = Lists.newArrayList(1, 2, 34, 4); Boolean contain = number...

2019-05-11 15:54:08 4256

原创 ParameterizedType使用简单了解

之前项目中有一段逻辑:接收消息、解析、校验、业务处理。一开始代码显得冗余,然后改成模板方法。发现不同消息体解析成不同的类。public abstract class Tests { public void handler(String message) { InfoA infoA = parse(message); try { ...

2019-04-13 13:59:30 4423

原创 Java Stream Map和flatmap及集合处理

编程中多数要对集合进行各种操作,获取Map、Set、List等。Map比如一个对象List,获取所有人的名字集合 @Test public void should_can_get_name_map() { PersonInfo kaka = new PersonInfo("Kaka", 22); PersonInfo hustzw = ne...

2019-02-16 19:47:43 3059

原创 IntelliJ Save Action

在Team开发项目中,都是多人维护一个项目。因此,保持良好的代码规范与风格很重要。IntelliJ 默认是自动保存的,因此很多时候修改后就出现:代码没有格式化、存在无用的import。其实IntelliJ 中有很多实用的插件可以帮我们提高效率。Save Action就是一个。安装简单:File -> Settings -> Plugins,搜索“Save actions...

2018-09-23 20:42:51 17898

原创 MyBatis中使用LocalDateTime

背景项目中使用MySQL数据库,然后用mybatis做数据持久化。最近使用时,想把一些model类的gmtCreate、gmtModified等字段从java.util.Date 改成java8的java.time.LocalDateTime,此类是不可变类,且自带很好用的日期函数api。原本依赖如下: compile "org.mybatis:mybatis:3.3....

2018-09-23 20:25:41 35057

原创 一次使用PowerMock的事故

项目结构:Spring boot+Dubbo+Zookeeper+PowerMock为了在项目中更好地编写单元测试,在项目中引入了PowerMock做单元测试。例子先看一个正常例子:Spring boot+PowerMock包依赖如下: testCompile "org.powermock:powermock-api-mockito2:1.7.1" ...

2018-09-21 22:27:05 1556 1

原创 Java集合的交集、并集、差集

集合运算retainAll最近写代码时,遇到对集合进行操作:交集、并集、差集。对于并集,最开始写法如下: @Test public void should_get_union_with_removeAll_and_addAll() { List&lt;Long&gt; result = Lists.newArrayList(); List&l...

2018-08-25 18:04:17 3126

原创 Assertj了解

单元测试一个单元测试分三步:1. 准备数据2. 执行测试方法3. 断言测试结果Java里面写单元测试都会以来JUnit,而且该包夜提供了一些的Assert的API。但不得不说确实不好用,可读性差。所以不推荐使用。很多人也喜欢用Hamcrest,非常好用(我现在还是用它)。遗憾的是从2012年开始就没有后续更新了。之后了FEST,只是它也不更新了。前段时间去ThoughtWorks 面试...

2018-07-28 20:18:11 6539 1

原创 Jersey入门

RestREST全称是Representational State Transfer,中文:表述性状态转移。啥意思?不解释。简单来说:REST使用Web地址(URI)访问资源,使用动词(HTTP请求)操作资源。动词所谓动词,其实就是HTTP请求。可以将REST理解成一种Web服务协议。REST是直接依赖底层HTTP协议功能的:请求方法、URI地址和响应代码。我们知道HTTP协议是无...

2018-07-28 16:51:06 13547 3

原创 Spring boot入门

Spring boot过完年的时候,跟Thoughtworks的coach一起给项目的所有Web Service加继承测试。一直缺少一个Provider,一开始都是用Moco。不过Moco都是利用配置提供契约接口,毕竟是假的数据。而Spring boot利用很少的代码,就可以根据需要提供一个非常好的Provider。简单来说,Spring boot用于快速开发一个web服务。约定大于配置...

2018-07-28 16:48:09 399

原创 Spring Cloud入门一

Spring cloudSpring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。特性Spring Cloud专注于提供良好的开箱即用经验的典型用例和可扩展性机制覆盖。分布式/版本化配置 服务注册和发现 路由 service - to - service调用 负载均衡 断路器 分布式消息传递...

2018-07-26 21:00:18 156

原创 Java线程池的使用

我们知道创建线程有三种方式:Thread、Runnable和线程池。前两者使用起来相对简单,而线程池在一个系统内部使用时就需要加倍小心了。代码规范先看下线程池中最核心的一个类:java.uitl.concurrent.ThreadPoolExecutor。该类是深入了解Java中的线程池的关键。下边是它提供的四个可用构造函数。...

2018-07-01 22:22:55 241

原创 数据源与连接池

背景十一之后需要apply VPD到我们的项目中,在每一次数据库查询前,进行一次存储过程调用修改上下文。这样,VPD利用上下文中的变量值对查询结果遍历。因此需要对所有用到的JPA实现做一下整理,包括数据源。我们知道JDBC查询的时候都是需要四个步骤:1. 加载数据库驱动2. 获取数据库连接3. 查询4. 释放连接,遍历查询结果。我们要做的就是在第3步查询前,先call 一次存储过程。这个就显得修改...

2018-06-27 21:31:06 5222 2

原创 Java IO与装饰者模式整理

Java的I/O是实现输入和输出的基础。Java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。这样就可以做到设备、平台无关的。分类Java中I/O类分两两类:字节流和字符流。每种又分输入流和输出流。字符流类图...

2018-06-25 11:52:20 937

原创 Java8之函数接口

函数接口Java8新特性提供了函数式接口,用于更好的支持函数式编程。定义所谓函数式接口就是只有一个抽象方法的接口。Java8中可以通过注解(@FunctionalInterface)来限定它(即便不加注解,只有一个抽象方法默认也是函数式接口)。比如:public interface MyInterface { void myFunction();}加上注解@FunctionalInter...

2018-06-24 17:45:47 1667

原创 物化视图

年前项目中跟一个Domain的数据查询数据没及时刷新的问题。后来就考虑使用物化视图,然后每天刷新两次来保持同步。这里整理下。视图视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定。比如下边代码就是创建一个视图,然后每次查询都直接基于视图,查询语句也会简单化。CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHER...

2018-06-17 18:59:37 746

原创 StarUML技巧

最近在share一个模块设计时,同事觉得使用时有些图标没Rational Rose好看易用。这里整理share一下。StarUMLStarUML是一款开放源码的UML开发工具。相比于其他UML工具,有以下几个优点:1.可以免费下载。另外源码开放,可以安装或者自己喜欢的插件。2.可以导出很多种图片格式,3.能够绘制9款UML图:用例图、类图、序列图、状态图、活动图、通信图、构件图、部署图以及复合结构...

2018-06-14 16:13:02 4811

原创 设计模式之代理模式

代理模式代理模式是常用的设计模式之一。《Head First 设计模式》中定义如下:代理模式,即为另一个对象提供一个替身或者占位符以控制对这个对象的访问。说起代理模式,最熟悉的莫过于Java中的RMI了,即远程方法调用(Remote Method Invocation)。它能够让在某个Java虚拟机上的对象像调用本地对象一样调用另一个java 虚拟机中的对象上的方法。过程大致如下:1. 客户对象调...

2018-06-13 23:52:55 194

原创 面向对象设计七大原则

最近团队在学习Agile 和 Clean Code。然后对面向对象设计的一些原则进行了一些学习和整理。包括SOLID、合成复用原则与迪米特法则。可维护性Robert C.Martin认为⼀个可维护性较低的软件设计,通常由于如下四个原因造成:• 过于僵硬(Rigidity)• 过于脆弱(Fragility)• 复用率低(Immobility)• 黏度过高(Viscosity) 可复用性Peter C...

2018-06-07 17:28:00 3052 2

原创 Spring MVC启动

Spring MVCJava Web项目一般都是基于Spring MVC 的。而Spring MVC是建立在IoC容器基础上的。我们知道,Spring MVC和Spring IoC 都是独立的模块,因此web下需要将IoC容器启动与Web容器的启动过程集成在一起。下边看下是怎么做到的。Servlet规范这里我们先看下 Servlet 规范,即Java Servlet Specification。也...

2018-06-06 08:53:03 1232

原创 支付宝用到的开源框架

最近翻了下支付宝,在“设置”》“关于”》“版权信息”中,发现支付宝列出了一些使用到的开源框架,一共38个(有个重复不知道为啥)。这里列举一下:名称许可证是否经过修改FFmpegGNU LGPL v2.1否ProtocolBuffersApache v2.0否SPDYApache v2.0否GTM/AliSecXCryptoGTMDefines.hApache v2.0否gumbo-parserAp...

2018-06-05 11:44:28 2105 1

原创 Java 8之Stream入门

StreamJava8新特性增加了一个新的抽象称为流Stream。目的在于弥补Java函数式编程的缺陷。将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。同时它提供串行和并行两种模式进行汇聚...

2018-06-03 17:54:45 578

原创 Java虚拟机内存-二

最近对Weblogic上Server的内存使用情况进行了下monitor。在这里整理下。首先看下Weblogic上内存的设置,我的机子设置如下:-Xms4096m-Xmx4096m-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.managem...

2018-05-29 20:31:50 1252

原创 Java类的加载

类加载我们知道,Java文件被编译成 .class 文件,然后被加载到JVM内存中(如果对JVM内存了解,就会发现是方法区)。之后进行验证、准备、解析、初始化,然后就可以被使用了。当然,不在需要的时候,也可以将类从内存中卸载。其实在加载阶段,JVM需要完成以下三件事情:1. 通过一个类的全限定名来获取其定义的二进制字节流。(一般是根据类名)2. 将这个字节流所代表的静态存储结构转化为方法区的运行时...

2018-05-28 15:02:03 226

原创 Nginx入门

负载均衡之前将Node server的服务改成 Master-Worker模式,不过它是在一个主机上fork多个进程。不过它毕竟是在一个主机上。而微服务是需要负载均衡的,将请求根据负载规则分配到具体主机上。常用的有Ixia、BigIP、Node的cluster模块、Nginx等。我们产品现在用的是BigIP,使用F5 编写iRules 来定义分发规则。不过一般情况下,用的更多的是Nginx。Ngi...

2018-05-09 21:53:41 186

原创 Timestamp的equals不对称性

Timestamp最近写代码的时候用了java.sql.Timestamp 类(容易存DB),遇到一个bug,查了很久才发现原因。 Date date = new Date(); Timestamp t1 = new Timestamp(date.getTime()); System.out.println("Date equals Timestam...

2018-04-15 19:30:29 1067 1

原创 Java虚拟机内存

StackOverflowError前段时间一个同事给了个错误。看完整个log信息,感觉很懵。相信很多人更熟悉的是另一个错误,即OutOfMemoryError。Caused by: java.lang.StackOverflowError at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.Socket...

2018-04-03 23:59:33 189

原创 Spring容器初始化整理

Spring最近做IT测试时,每次Spring 加载配置等都很慢,抽空把Spring 容器的启动整理一下。容器Spring中听的最多的就是依赖注入、控制反转。一般情况下,A对象使用B对象,都是A先创建B,然后调用B的方法。这样两个对象间有依赖的。控制反转简单来说就是对象-对象的依赖关系变成对象-容器-对象。这样每次A只需要调用传给它的B即可。所以容器的管理对象的作用就显而易见了。联系它的功能,容器...

2018-03-29 21:34:10 425

原创 VPD学习笔记

VPD最近一直做MC的项目,根据context不同,利用VPD对查询数据进行过滤。问题:之前我们做权限控制常用的做法是建立视图,然后多在查询语句中加where语句来控制。不过这样当程序改变时,DB改动也比较大。另外,这个只是在应用程序层面上进行过滤。抛开不安全不说,让应用程序自己控制权限,总有点职责不明。VPD 即虚拟专用数据库(Virtual Private Database),简单来说通过在数...

2018-03-25 17:57:04 1234 1

原创 Moco入门

接口测试前段时间对系统中所有的接口Web Service添加了测试用例。这些用例在执行的的过程中多少也会受依赖环境的影响。比如RestAssured:public class RestInterfaceIT { @Before public void setUp() throws Exception { RestAssured.baseURI = "http://h...

2018-03-18 12:54:51 11598

原创 JMS学习整理

面向消息的中间件随着系统变大变复杂,一个大的系统,开始向着领域模型和微服务架构演进。而各个子系统之间的通信开始变得复杂、重要。不过总的来说还是分两类:同步通信和异步通信。对于同步通信,现在通俗的做法有REST、RPC、SOAP等。对于异步,现在用的最多就是面向消息的中间件(Message Oriented Middleware,MOM)。我们知道异步通信一般有两个问题,一是发送方进程与消息服务端进...

2018-03-16 10:52:37 1083

原创 HTTP 2.0 协议

HTTP说起HTTP 协议(超文本传输协议),很多人应该觉得很熟。不过随着HTTP2.0 的普遍应用,我们对其应该有更多的了解。HTTP是浏览器或其他客户端程序与Web服务器之间的应用层通信协议。基于TCP 协议的。主要经历HTTP 1.0, HTTP 1.1和 HTTP 2.0。HTTP 1.0我们知道,HTTP 是基于 TCP 连接的。每次建立连接,TCP 协议都会进行三次握手,获取一个可靠连...

2018-01-29 22:25:30 541

原创 Hamcrest 总结

JunitJUnit框架用一组assert方法封装了一些常用的断言。这些assert方法可以帮我们简化单元测试的编写。这样的话,Junit就可以根据这些断言是否抛出 AssertionFailedError 错误来判断测试用例的执行结果。 Hamcrest使用过Junit 的应该有过体验:在实际开发中,一些基本的断言,如eqaul,null,true它们的可读性并不是很好。而且很多时...

2018-01-23 22:49:09 17399

原创 Oracle Hint入门

优化器Oracle数据库中的优化器又叫查询优化器(Query Optimizer)。它是SQL分析和执行的优化工具,它负责生成、制定SQL的执行计划。Oracle的优化器原来有两种,基于规则的优化器(RBO : Rule-Based Optimization)与基于代价的优化器(CBO : Cost-Based Optimization)。ORACLE已经舍弃了RBO,选择CBO。CBO是一种

2017-11-30 17:37:37 371

原创 Oracle之位图索引

前两天看到有个SQL 查询的,当走位图索引的时候非常慢,当不走索引的事情反而更快一点。趁机会了解学习下。先看一个数据表的结构,WORKERSIDNAMESEXDEPTAGEHIREDATE1zhangsanMaleDOM1232017092lisiFemaleDOM1352017073wangwuMaleDOM2262017044maliuFemaleDOM2282013015zhaoqiMale...

2017-11-02 14:58:02 513

原创 Maven打包war和ear

在软件开发过程中,我们需要经常对项目进行打包并部署。这里的打包即-构建项目软件包。说白了,其实就是对项目中的各种文件,比如编译生成的字节码、配置文件、文档等,根据maven规范的格式或者配置的要求生成归档。最常见的就是对JAR包和WAR包打包。后者是一般都是web 项目。通常情况下,我们的项目可能很大,也会划分成web 项目模块和一些后台模块。这个时候一般都是将web 项目打包成 wa

2017-10-19 22:24:28 3026 1

原创 Maven profile实现多环境配置

实际开发项目是需要配置多套环境配置的,如开发、测试、生产等。 在Maven中,有种多环境配置的方法,可以做到在开发、测试、运营的时候,使用各自对应的环境配置,可以大大的提高开发效率。用个例子说明下。为了对比方便,这里创建了一个聚合项目,然后其中一个Project根据构建参数不同,加载不同配置。另一个Project不加载配置。目录如下:这里有三个project,各自的pom如下:

2017-10-18 11:34:29 545

Interface Segregation Principle

Robert Martin 的文章《ISP: The Interface Segregation Principle》。

2018-06-06

里氏代换原则原文

里氏代换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的OOPSLA大会上发表的一篇文章《Data Abstraction and Hierarchy》里面提出来的,主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中的蕴涵的原理。2002年,软件工程大师Robert C. Martin,出版了一本《Agile Software Development Principles Patterns and Practices》,在文中他把里氏代换原则最终简化为一句话:“Subtypes must be substitutable for their base types”。也就是,子类必须能够替换成它们的基类。

2018-06-06

Moco入门代码

简单介绍Moco两种使用方式:支持 API 和独立运行。演示接口测试

2018-03-18

Spring动态代理

Spring MVC中利用动态代理记录日志,通过注解的方式记录日志。Spring MVC+ Restful。

2016-05-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除