自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (2)
  • 收藏
  • 关注

原创 Spring security的图片验证码方案二

方案二是使用spring security的过滤器来拦截登录请求,从而校验验证码。在方案一的时候我已经尝试过使用过滤器,但是当时对spring security内部实现原理一无所知,尝试了多次还是以失败告终。这里简单叙述一下spring security的登录验证机制:Spring security使用众多的过滤器对url进行拦截,以此来进行权限管理。Spring security不允许我们修

2017-11-24 16:09:26 1614

原创 Web应用请求平均时间统计

使用Filter统计web应用平均请求时间:使用两个Map分别存储请求时间和请求次数,当请求来临时,使用请求总时间/请求次数即可获取平均请求时间。import java.io .IOException;import java.math.BigDecimal;import java.util.Date;import java.util.Map;import java.util.con

2017-09-28 15:49:13 1716

转载 Java 8: Stream API 快速入门

为什么需要Stream?Java语言中集合是使用最多的API,几乎每个Java程序都会用到集合操作, 这里的Stream和IO中的Stream不同,它提供了对集合操作的增强,极大的提高了操作集合对象的便利性。集合对于大多数编程任务而言都是基本的,为了解释集合是怎么工作,我们想象一下当下最火的外卖APP, 当我们点菜的时候需要按照距离、价格、销量等进行排序后筛

2017-09-06 12:40:41 589

原创 Spring security的图片验证码方案一

在项目中使用spring security做用户登录的身份认证,配置完spring security,点击登录按钮spring直接帮我们验证用户身份。于是当我想给登录页面添加图片验证码时,spring security的“自作主张”让我遇到了麻烦。本想在处理表单请求的controller中获取并验证用户输入的验证码,验证通过了再交给spring security验证用户身份。但是配置了spri

2017-09-05 11:26:17 2990

转载 使用Nmon监控Linux服务器性能

Nmon的安装及使用一、下载Nmon根据CPU的类型选择下载相应的版本:http://nmon.sourceforge.net/pmwiki.php?n=Site.Downloadwget http://sourceforge.net/projects/nmon/files/download/nmon_x86_12a.zip二、初始化工具

2017-08-17 15:02:43 486

原创 Redis工具类对各种数据类型的操作

Redis工具类对string,list,hash,set,zset数据类型的操作。

2017-08-17 12:39:51 2901

原创 HttpUtil工具类发送post请求

使用apache下的HttpClient发送post请求

2017-08-17 10:55:08 4355 1

转载 Spring Boot中使用Swagger2构建强大的RESTful API文档

由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端。这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发、Andr

2017-07-14 09:27:02 298

原创 教你如何配置Spring Boot的properties文件

基于spring data Jpa的spring boot应用配置。

2017-06-23 21:38:50 7888 2

原创 Spring websocket ssl和摘要认证

前段时间公司的项目要给websocket连接加ssl和digest认证,我们用的是spring websocket的实现。网上介绍了两种给websocket加ssl的方法,一种是websocketClient.setWebsocketFactory(websocketFactory),另一种是websocketClient.getUserProperties().put("org.apache.t

2017-03-15 20:27:45 8587

原创 Rest API: 基本认证和摘要认证

使用spring security实现Rest API的基本认证和摘要认证。

2017-03-08 20:49:37 5721 1

原创 Mysql自连接查询

自连接查询假想以下场景:某一电商网站想要对站内产品做层级分类,一个类别下面有若干子类,子类下面也会有别的子类。例如数码产品这个类别下面有笔记本,台式机,智能手机等;笔记本,台式机,智能手机又可以按照品牌分类;品牌又可以按照价格分类,等等。也许这些分类会达到一个很深的层次,呈现一种树状的结构。那么这些数据要怎么在数据库中表示呢?我们可以在数据库中创建两个字段来存储id和类别名称,使用第三个字段存

2017-01-07 17:04:51 32573 8

转载 Spring核心框架结构

很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下一次创建相同类型的工程时也不知道要配置哪些spring的依赖,只有拷贝,其实,当初我就是这么干的!spring的jar包只有20个左右,每个都有相应的功能,一个jar还可能依赖了若干其他jar

2016-12-30 21:07:20 346

原创 Mysql不能插入中文和中文显示乱码问题

1、my.ini文件# For advice on how to change settings please see# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html# *** DO NOT EDIT THIS FILE. It's a template which will be cop

2016-12-24 22:32:13 509

转载 windows查看端口占用情况

开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选"查看"-"选择列"         经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口,很多人都比较头疼,下面就介绍一种非常简单的方法,希望对大家有用

2016-12-11 13:52:59 984 1

原创 org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError...

org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: org/antlr/v4/runtime/CharStream at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:63) a

2016-11-01 15:39:20 5557

原创 Eclipse RCP - Multiple platforms build

Eclipse RCP applications can be cross-built for several platforms using any platform on which eclipse runs.

2016-11-01 15:14:16 523

原创 Stomp Over Websocket的Spring实现

Spring实现的stomp over websocket client.

2016-10-21 16:29:08 2782

原创 简单的websocket实现

一个简单的websocket实现server和client通信。

2016-09-19 10:26:25 3493 1

原创 PowerMock详解

powermockito的使用PowerMock有两个重要的注解:@RunWith(PowerMockRunner.class)@prepareForTest({MyObect.class})@PrepareForTest注解和@RunWith注解是结合使用的,不要单独使用它们中的任何一个,否则不起作用。当用PowerMock去mock静态,final或者私有方

2016-09-04 20:38:15 19301 3

原创 spring-mvc工作原理

1、浏览器发送请求给DispathcherServlet2、DispatcherServlet根据请求信息到HandlerMapping中查找对应的控制器Controller3-4、DispatcherServlet调用Controller处理请求(Controller会把请求交给相应的service处理)5、Conroller将处理结果封装到ModelAndView对象中

2016-08-29 22:28:42 473

原创 Hibernate运行原理

Hibernate是一个开放源代码的对象关系映射框架,她对JDBC进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库,hibernate可以应用在任何使用JDBC的场合,既可以在java的客户端程序使用,也可以在Servlet/jsp中的Web应用中使用。最具革命意义的是,hibernate可以在应用的EJB的j2ee架构中取代cmp,完成数据持久化的重任。

2016-08-20 22:57:52 8931 3

原创 关于synchronized的几点说明

任何线程进入同步代码块,同步方法之前,必须先获得对同步监视器的锁定。由于程序无法显式释放对同步监视器的锁定,那么究竟何时会释放同步监视器锁呢?当前线程的同步代码块或同步方法正常执行结束;当前线程在同步代码块或同步方法中遇到break或return语句返回;当前线程在执行同步代码块或同步方法时发生了未处理的Error或Exception,导致程序异常结束;当前线程在同步代码块或同步方法中调用wait()方法。

2016-08-20 22:13:11 554

原创 ConCurrent并发包 - Lock详解

synchronized的缺陷我们知道,可以利用synchronized关键字来实现共享资源的互斥访问。Java 5在java.util.concurrent.locks包下提供了另一种来实现线程的同步访问,那就是Lock。既然有了synchronized来实现线程同步,Java为什么还需要提供Lock呢?synchronized是Java的一个关键字,当我们使用synchroni

2016-08-15 21:56:23 3727

原创 Java对象的浅拷贝与深拷贝

浅拷贝与深拷贝浅拷贝(浅克隆):被复制对象的所有变量都含有与原来的对象相同的值,而所有的对拷贝对象的引用仍然指向原来的对象。换言之,浅拷贝仅仅复制基本数据类型,而不复制引用类型的对象。深拷贝(深克隆):被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深拷贝把要复制的

2016-08-02 22:12:31 1115

原创 ConcurrentHashMap数据结构分析

引言HashMap是线程不安全的数据结构,在单线程环境下有较好的执行效率,但不适用于多线程的应用。HashTable使用synchronized来保证线程安全,但在线程竞争激烈的情况下效率非常低下。当一个线程访问HashTable的同步方法时,其他的线程要访问同步方法只能进入阻塞或轮询状态。如线程1使用put进行添加元素,线程2不但不能进行put操作,连get操作也不允许。基于以上原因,Con

2016-08-02 21:21:04 4783 1

原创 设计模式 - 观察者模式

概述很早以前,当一个对象的行为依赖于另一个对象的状态时,只能开启一个线程不断的监听对象所依赖的状态。比如通过Callable线程的call()方法获取线程的返回值。当调用Future接口的get()方法时,程序会阻塞在那里,直到拿到线程的执行结果。这种方法虽然可行,但是会给系统带来额外的线程开销,在一个复杂的系统中,这种开销不可小视。观察者模式可以在单线程中使某一对象及时得知自身所依赖

2016-07-07 20:01:52 310

原创 设计模式 - 代理模式

简介代理模式是一种很常用的设计模式。在软件设计中,使用代理模式的意图有很多。比如处于安全考虑,屏蔽客户端直接访问真实对象;在远程调用中,使用代理类处理远程方法调用的技术细节;为了提升系统性能,对真实对象进行封装,达到延迟加载的目的;在调用方法的前后增加log输出等等。代理模式分为4个部分:主题接口: 定义代理类对外公开的方法接口。展示主题: 真正实现业务逻辑的类。代理类

2016-06-22 20:34:02 276

原创 Java对象初始化

引言先做一道测试题:class Foo { int i; Foo() { i = 1; int x = getValue(); System.out.println(x); } protected int getValue() { return i; }}class Bar extends Foo { int j; Bar() { super()

2016-06-14 20:56:02 546

原创 javax.swing.Timer的使用

一、Timer的使用Timer(int delay, ActionListener listener):创建一个每delay毫秒将通知其侦听器的Timer.#delay:延迟的毫秒数,0表示启动后立刻执行。#listener:侦听器对象,可以为null。javax.swing.Timer的官方文档是这样解释的:public class Timerextends O

2016-06-03 09:59:28 3700

转载 Java基础--定时任务Timer

一、Timer介绍 java.util.Timer java.util.TimerTaskTimer是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类,如下所示:  public abstract class TimerTask implements Runnable 

2016-06-03 09:39:15 440

转载 8张图理解Java

一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选。如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟。1、字符串不变性下面这张图展示了这段代码做了什么12String s = "abcd";s = s.concat("ef");

2016-05-28 11:36:28 285

原创 java.lang.OutOfMemoryError: unable to create new native thread

概述首先要明确一点,OutofMemory的问题基本上都是程序逻辑不对引起的。如果你碰到这种问题,要去检查代码逻辑。引起OutofMemoryError异常的原因有2种:(1)Java虚拟机内存空间不足。(2)可分配的native thread不足,无法开启更多的线程。究竟是何种原因导致OutofMemory的,jconsole可以帮助我们很好的分析这个问题。jcons

2016-05-24 11:07:14 832

转载 JVM内存区域的划分

原文出处: 海 子学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢?由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程:如上图所示,

2016-05-23 19:16:25 323

原创 多线程 - 线程池的实现

概述系统启动一个新线程的成本是比较高的,因为它需要与系统交互,使用线程池可以有效地控制系统中并发线程的数量。尤其是当系统中需要创建大量生命周期很短的线程时,这种效果尤为明显。线程池会在程序启动时创建一定数量的线程。当程序将一个Runnable对象或Callable对象传给线程池,线程池会启动一个线程来执行它的run()方法或call()方法。当run()方法或call()方法执行结

2016-05-22 20:40:41 462

原创 多线程 - Callable接口

概述从Java 5开始,Java就提供了Callable接口,可以把它看作是Runnable接口的增强版:Callable接口提供了一个call()方法作为线程执行体,它可以有返回值,并且可以抛异常。但是如何获取call()方法的返回值呢?Java 5提供了Future接口来代表call()方法的返回值,并为Future接口提供了FutureTask实现类,该类实现了Callabl

2016-05-20 21:00:51 309

转载 Java虚拟机模型

众所周知,Java支持平台无关性、安全性和网络移动性。而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么。正是得益于Java虚拟机,它号称的“一次编译,到处运行”才能有所保障。

2016-05-20 20:13:29 927

转载 Java回调机制(callback)

最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题。但是,对于初学的我来说,缺了一个循序渐进的过程。此处,将我对回调机制的个人理解,按照由浅到深的顺序描述一下,如有不妥之处,望不吝赐教!开始之前,先想象一

2016-05-20 19:55:09 346

原创 集合框架 - HashSet和HashMap实现原理

HashSet的实现HashSet是基于HashMap实现的,只使用HashMap的key来实现各种特性,用PRESENT构造一个虚假的value。所以HashSet判断两个Key是否相等的机制和HansMap是一模一样的:equals返回true并且和hashCode返回值相同。下面是HashSet的部分实现,看代码:private transient HashMap map;

2016-05-20 15:31:46 429

原创 集合框架 - ArrayList的实现原理

ArrayList是基于数组实现的,并且可以动态扩容。下面简述一下ArrayList的特性:(1)get和set操作性能很高,可以按索引获取;(2)在末尾add和remove的效率也很高,不需要移动元素;(3)常规的add和remove性能不佳,视具体情况而定。(4)动态扩容,和数组相比最大的优势。

2016-05-19 21:35:53 299

zkui 2.0工具

zkui是Zookeeper的管理工具。解压zip包,修改config.cfg中zkServer的地址和端口号,在cmd中运行命令: nohup java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar &

2017-08-17

dubbo-admin-2.5.4.war

从github编译的dubbo-admin-2.5.4 war包,直接拷贝到Tomcat的webapps目录,修改dubbo.properties文件即可。

2017-08-17

空空如也

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

TA关注的人

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