- 博客(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<Long> 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
2018-06-06
里氏代换原则原文
2018-06-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅