- 博客(511)
- 资源 (46)
- 收藏
- 关注

转载 程序员该有的艺术气质—SOLID原则
昨天Amazon在我们学校有场讲座,主要是跟我们分享一些经验:作为一个程序员该有的编码硬技术和工作软技术。当然他们也有来我们学校招聘人才的目的,想要吸引我们去他们公司,于我而言,这么牛逼的一个公司我当然特别想去啦,这场讲座我是必听无疑,的确学到了一些知识。没有过实际项目的在校生往往不能写出漂亮的代码(包括编码规范、注释、设计模式、性能等等),因为他们更多注重的正确性,只要结果出来了且是正确的,那么
2014-10-14 13:22:34
1965
原创 RocketMQ报No route info of this topic
最近某天突然收到报警邮件,线上某个应用发送MQ消息报错,完整异常栈如下:2018-04-08 18:17:44.126 | DubboServerHandler-10.141.6.116:20968-thread-172 | ERROR | com.xxx.node.application.mq.MqMessageProcessor | 发送MQ消息keys: 26 异常 com.aliba...
2018-04-10 14:27:47
7117
原创 Spring Boot教程 - Spring Boot Profiles实现多环境下配置切换
在后端开发中,应用程序在不同的环境可能会有不同的配置,例如数据库连接、日志级别等,开发,测试,生产每个环境可能配置都不一致。使用Spring Boot的Profile可以实现多场景下的配置切换,方便开发中进行测试和部署生产环境。 下面就大致介绍一下yml配置文件跟properties配置文件怎么使用profile配置不同环境的配置文件。开发环境JDK 1.8Maven 3.xSpring Bo
2017-11-18 17:34:29
46605
9
原创 Spring Boot教程 - Spring Boot集成Mybatis(注解配置)
上一篇文章:介绍了 Spring Boot集成Mybatis 基于XML方式的配置,本文将重点介绍 注解方式配置Mybatis 。开发环境JDK 1.8Maven 3.3Spring Boot 1.5.8.RELEASEMybatis 3.4.4配置首先引入spring-boot-starter-parent: <!-- Inherit defaults from Spring Bo
2017-11-18 16:45:27
4636
原创 Spring Boot教程 - Spring Boot集成Mybatis(XML方式)
项目开发中不可避免需要跟数据库打交道,作者开发的项目的中广泛使用Mybatis作为ORM框架。 本文主要讲解在Spring Boot项目中 如何整合Mybatis。开发环境JDK 1.8Spring Boot 1.5.8.RELEASEMybatis 3.4.4
2017-11-18 16:06:58
6323
原创 图片添加水印(Java 实现)
某些应用场景下需要对图片加上水印防止盗用,例如微博用户图片。Java中实现添加水印需要用到BufferedImage、Graphics2D 和ImageIO类。1. 添加文字水印import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import
2017-05-12 19:31:41
10140
3
原创 Spring事务系列 - Spring 事务管理
一、Spring 的编程式事务管理1. 基于底层 API 的编程式事务管理根据PlatformTransactionManager、TransactionDefinition 和 TransactionStatus 三个核心接口,我们完全可以通过编程的方式来进行事务管理。代码如下:@Servicepublic class BankServiceImpl implements BankService
2017-05-12 18:20:51
2550
原创 Spring MVC HandlerInterceptor 实现原理(源码)
上一篇文章中介绍了 Spring MVC HandlerInterceptor的使用和应用场景,本篇中我们将结合Spring MVC 源码来研究一下其内部实现。本文分析使用Spring Framework源码 为 Spring Framework 4.3.4.RELEASE 。首先,我们看一下 org.springframework.web.servlet.DispatcherServlet do
2017-04-06 00:33:41
5859
原创 Spring MVC 拦截器(HandlerInterceptor)使用
最近需要画UML图,从网上找了几个工具软件,比较之后发现StarUML 2 很不错,支持UML 2.0。 StarUML 2 is compatible with UML 2.x standard and supports totally 11 kinds of UML diagrams: Class, Object, Use Case, Component, Deployment, Compo
2017-02-28 16:39:52
5657
原创 MyBatis源码剖析 - MyBatis 插件之拦截器(Interceptor)实现原理
在上一篇文章:MyBatis 教程 - MyBatis插件(Plugins)开发 中已经介绍了如何去开发一个MyBatis 插件,本文将结合MyBatis 源码来揭秘MyBatis Plugins内部实现原理。Mybatis3 插件采用责任链模式,通过动态代理组织多个拦截器(插件),通过这些拦截器可以改变Mybatis的默认行为(诸如SQL重写之类的)。本文分析使用的MyBatis 源代码版本为3.
2017-02-18 12:18:49
24123
1
原创 MyBatis 教程 - MyBatis插件(Plugins)开发
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)ParameterHandler (getParameterObject, setP
2017-02-17 20:13:22
32444
4
原创 使用SnakeYAML读取yaml配置文件
很多应用都开始使用YAML作为程序配置文件,关于YAML详细介绍可以参考YAML 1.2 (3rd Edition),本文使用SnakeYAML。示例sample.ymlversion: 1.0released: 2017-02-14# Connection parametersconnection: driverClass: com.mysql.jdbc.Driver url:
2017-02-14 16:23:08
17029
原创 maven javadoc plugin build fails with Java 8 when Javadoc tags are incomplete
本地开发环境JDK版本是1.7,生成Javadoc没有问题,在测试环境使用Jenkins自动构建时报错(测试服务器JDK版本是1.8),log如下:/home/andreas/workspaces/cdm/cdm-vaadin/src/main/java/eu/etaxonomy/cdm/vaadin/ui/ConceptRelationshipUIRedirect.java:28: error:
2017-01-20 18:09:28
5940
原创 从零开始实现RPC框架 - RPC原理及实现
RPC概述RPC(Remote Procedure Call)即远程过程调用,允许一台计算机调用另一台计算机上的程序得到结果,而代码中不需要做额外的编程,就像在本地调用一样。现在互联网应用的量级越来越大,单台计算机的能力有限,需要借助可扩展的计算机集群来完成,分布式的应用可以借助RPC来完成机器之间的调用。RPC框架原理在RPC框架中主要有三个角色:Provider、Consumer和Registr
2017-01-19 14:30:07
43248
9
原创 Spring Boot学习笔记 - 整合Swagger2自动生成RESTful API文档
在App后端开发中经常需要对移动客户端(Android、iOS)提供RESTful API接口,在后期版本快速迭代的过程中,修改接口实现的时候都必须同步修改接口文档,而文档与代码又处于两个不同的媒介,除非有严格的管理机制,不然很容易导致代码与接口文档不一致现象。本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring生态链中,并与Spring MVC程序配合组织出
2017-01-04 19:28:17
17590
原创 Java注解处理器 - 五分钟快速入门
基本概念Java 注解(Annotation)分为两类:编译时(Compile time)处理的注解和在运行时(Runtime)通过反射机制运行处理的注解。本文将重点介绍在编译时(Compile time)处理的注解,关于在运行时(Runtime)通过反射机制运行处理的注解,比较简单这里不做介绍大家可以自行找资料学习。注解处理器(Annotation Processor)是javac的一个工具,它用
2017-01-01 21:13:38
5248
原创 Spring 动态数据源和AOP实现数据库读写分离
互联网架构演进中 数据库优化是不可或缺的一环,数据库层面优化分为两个阶段:读写分离、分库分表。今天要说的是 数据库读写分离技术,其原理就是一个Master数据库,多个Slave数据库。Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询。因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,
2016-12-30 19:17:42
5157
原创 RESTful API接口设计
RESTful API接口设计URL设计URL(Uniform / Universal Resource Locator)既统一资源定位符。数据交换格式可选:XML、JSON,Protobuf XML、JSON大家应该都很熟悉了,这里介绍一下Protobuf。 Protocol buffers are Google’s language-neutral, platform-neutral,
2016-12-29 15:10:56
6916
原创 常见的负载均衡算法及其代码实现
什么是负载均衡负载均衡,英文名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。负载均衡能够平均分配客户请求到服务器阵列,借此提供快速获取重要数据,解决大量并发访问服务问题,这种集群
2016-12-29 10:35:56
6519
原创 Maven Ban Circular Dependencies
Maven 禁止循环依赖配置如下:<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>1.4
2016-12-16 11:28:19
1040
原创 单例模式的几种实现方式总结
单例模式可能是设计模式中最容易理解,应用最广泛的模式。单例模式虽然简单,但其中的坑却不少,尤其是线程安全方面的问题。本文主要对单例的各种写法做个小结,并分析其优缺点。模式定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点。在Java中,单例模式的实现分两种,一种称为懒汉式,一种称为饿汉式,其实就是在具体创建对象实例的处理上,有不同的实现方式。代码实现1、懒汉式实现当被问到要实现一个单例
2016-12-13 23:24:44
2153
原创 Maven打包生成源码包和Javadoc包
开发中我们经常需要将项目<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version
2016-12-12 19:35:46
23486
1
原创 Java扫描classpath指定包路径下所有class
在写框架时,经常需要扫描classpath指定包路径下带有 代码如下:import java.io.File;import java.io.IOException;import java.net.JarURLConnection;import java.net.URL;import java.net.URLDecoder;import java.util.*;import java.
2016-12-11 18:24:10
9774
原创 Curator教程(三)服务注册&发现(Service Discovery)
服务发现随着微服务的日趋火爆,系统拆分之后,各个服务模块的Provider和Consumer之间需要能够查找到对方,我们称之为服务发现。 In SOA/distributed systems, services need to find each other. i.e. a web service might need to find a caching service, etc. DNS ca
2016-12-10 16:10:54
12722
原创 Curator教程(二)Path Cache监听ZNode
在实际应用开发中,当某个ZNode发生变化后我们需要得到通知并做一些后续处理,Curator Recipes提供了Path Cache 来帮助我们轻松实现watch ZNode。Path CachePath Cache可以监控ZNode子结点的变化,例如:add,update,delete。 A Path Cache is used to watch a ZNode. Whenever a ch
2016-12-09 11:59:57
2438
原创 Curator教程(一)快速入门
Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端编程。它包含以下几个组件: Component description Recipes Implementations of some of the common ZooKeeper “recipes”. The i
2016-12-09 11:57:20
10974
原创 Maven Require Release Dependencies
项目上线之前必须排除所有SNAP-SHOT版本的依赖 并全部升级为RELEASE版本,手工一个一个去排效率太低,Maven提供了maven-enforcer-plugin插件来做这件事情。Require Release DependenciesThis rule checks the dependencies and fails if any snapshots are found.The foll
2016-12-01 13:31:49
1613
原创 Spring 可扩展XML配置机制实践
用过dubbo的同学应该很熟悉下面的配置:<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
2016-11-22 18:50:08
3454
原创 Dubbo实战(四)服务启动依赖检查配置
启动检查Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true。 如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭check,否则服务临时不可用时,会抛出异常,拿到null引用,如果check=false,总是会返回引用,当服务恢复时,能自动连上。关闭检查可以通过check
2016-11-22 17:52:10
2903
原创 java 优雅停机实现
某些应用场景下,我们设计服务的时候要考虑到应用停止/被停止 时做一些善后操作,比如:关闭线程、释放连接资源等。 Java语言中,我们可以通过Runtime.getRuntime().addShutdownHook()方法来注册钩子,以保证程序平滑退出,如下:Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
2016-11-22 13:57:33
5006
原创 Servlet 3.1规范-异步处理
Servlet 3.x 新特性概述Servlet 3.1 作为 Java EE 7 规范体系中一员,随着 Java EE 7 规范一起发布。Servlet 3.x 在Servlet 2.5的基础上提供了若干新特性用于简化 Web 应用的开发和部署。主要新特性如下:异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet线程。在接收
2016-11-20 21:35:12
2374
原创 高并发后端设计-限流篇
系统在设计之初就会有一个预估容量,长时间超过系统能承受的TPS/QPS阈值,系统可能会被压垮,最终导致整个服务不够用。为了避免这种情况,我们就需要对接口请求进行限流。限流的目的是通过对并发访问请求进行限速或者一个时间窗口内的的请求数量进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待。常见的限流模式有控制并发和控制速率,一个是限制并发的数量,一个是限制并发访问的速率。控制并发数量属于一种
2016-11-20 17:22:03
13107
原创 Spring Boot学习笔记-入门篇
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。Boot对Spring应用的开发进行了简化,提供了模块化方式导入依赖的能力,
2016-11-04 21:21:25
1181
原创 SpringMVC文件打包下载
最近做了一个ABTest的应用,用户希望对ABTest的结果能够打包批量进行下载,这个时候就需要先对下载的多个文件进行压缩打包,再进行下载。@RequestMapping("/download")public Object export(HttpServletRequest request, HttpServletResponse response, @RequestParam String ba
2016-11-02 16:56:35
2646
原创 logback教程
Logbacklogback是一个开源的日志组件,是log4j的作者开发的用来替代log4j的。 logback由三个部分组成,logback-core, logback-classic, logback-access。其中logback-core是其他两个模块的基础。logback中三个重要概念: Logger,Appender,LayoutLogger: 日志记录器,把它关联到应用对应的con
2016-11-01 17:13:54
7892
Android仿QQ消息列表ListView滑动删除效果
2014-02-11
Android SlidingMenu仿网易新闻布局
2013-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人