自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

老司机让开,Java新手来了

一步步夯实基础,3年后,我就是大神!

  • 博客(124)
  • 资源 (1)
  • 收藏
  • 关注

原创 BigDecimal的精度问题以及解决方案

背景我们在开发产品时, 会遇到金额的问题. 与普通的计算不同, 涉及到钱的问题不马虎, 多一分少一分肯定是不行的.数据库: 存储金额时, bigint, 以分为单位.场景在支付一个订单时, 企业支付一部分, 个人支付一部分.如果发生退单并且产生手续费的情况, 这个手续费是针对这个订单的.所以企业和个人都需要承担一部分手续费, 然后再退款到企业和个人账户上.而计算手续费的比例, 必然要用到除法运算.比如: 先算企业手续费:``企业手续费 = 手续费 * (企业支付金额 / 订单总金额);

2020-06-19 15:10:41 2550

原创 springboot中使用filter来修改body里的参数

在这里, 以去空格为例来进行说明.背景:在项目中, 经常会遇到前端往后端传参会有字符串参数首尾有空格的情况, 一般如果字段比较少, 或者接口比较少, 自行在controller位置处理一下, 是没有问题的. 就是重复代码多, 工作重复, 没劲.所以在这里以去空格说明如何处理post方法里的参数首尾空格问题.自定义filter.public class ParamsFilter impl...

2020-04-23 16:54:46 4836 2

原创 防止重复请求提交创建订单等解决方案

背景:在开发产品,交付给用户使用之后,重复提交的现象偶尔或经常出现。开发人员觉得数据重复,用户觉得订单多了一个,产品觉得有bug。这可不是好现象。下面以创建订单为例:原因:1、误操作两次点击下单按钮;2、超时导致重复点击;3、产生订单后没有成功提醒或者客户端出错导致用户没有收到成功消息,重新下单。后果:当然是产生了重复订单,体验不好,影响不好。^_^解决方案:最通用的方法:...

2019-07-09 17:05:07 3115

原创 项目上线少量spring代码热更新解决方案

场景:公司上线的权限系统涉及的有一个功能:使用其它平台的认证,如果通过。我们的平台也算认证通过。公司同一个产品可能有多家公司在用,每家的认证平台也不一样,认证方式不一样,数据格式也不一样。在以上两种情况出现的时候,还要保证公司产品保持标准化,以便客户后面升级。这样就比较麻烦了。按理讲,这种情况就属于客户定制版本。升级也是按照自制版本升级。标准产品里的新功能要去每一个定制产品里做合并。...

2019-06-26 11:56:13 1843

原创 java模拟复杂表单post请求

java模拟复杂表单post请求能支持文件上传/** * 支持复杂表单,比如文件上传 * @param formParam * @return * @throws Exception */ public static String postWithForm(FormParam formParam) throws Exception { String url = for...

2018-12-12 16:04:30 2094 3

原创 JVM调优(三)程序代码调优

根据第一节所讲的基础知识,我们根据线上不同的异常情况做程序的优化。CPU占用高us高根据之前的分析,CPU us高的原因主要是执行线程无任何挂起动作,且一直执行,导致CPU没有机会去调度执行其他的线程,造成线程饿死的现象。对于这种情况,常见的一种优化方法是对这种线程的动作增加Thread.sleep,以释放CPU的执行权,降低CPU的消耗。对于线程要不断扫描某种状态,达到自己的可继续运行下去...

2018-09-21 18:40:59 458

原创 JVM调优(二)内存收集器原理和参数调整

调优根据上节的原理分析,进行调优可以从硬件、操作系统、JVM以及程序四个方面入手。用更好的硬件如更大的内存、更快的CPU等,操作系统的话,需要自己去摸索,window不行就换linux,linux不行就换unix,甚至其它商业机。对于这两点,如果程序确实解决不了,可以把问题抛给运维。但作为一名开发者,我们现在可以从JVM和程序两方面尝试优化。JVM方面,从内存分配管理、GC策略入手。先搞清...

2018-09-21 17:22:55 269

原创 JVM调优(一)底层原理分析和问题定位

文章目录CPU占用问题1、CPU占用高原因分析原因a: 线程上下文切换消耗。原因b:cpu上的运行队列。原因c:cpu的利用率。查看cpu使用情况工具toppidstat分析cpu占用高的各种情况us:用户占用高sy:内核占用高文件IO消耗原因分析文件IO消耗的跟踪工具pidstat网线IO消耗内存消耗内存消耗原因分析内存查看工具toppidstat程序执行慢的原因锁竞争激烈硬件资源未充分工具的常...

2018-09-20 18:56:19 570

原创 Spring data jpa的高级查询的应用和底层原理分析

spring data jpa的查询目前比较简单的查询:三种查询方案固定参数查询interface XxxRepo implements JpaRepository<T,Long>{ EntityXxx findByNameAndSex(String name,String sex);}这种方式是简单的,方法名表达自己想查询的方法。支

2018-09-19 18:11:48 3304

原创 使用spring官网给出的SpingMVC的maven搭建方式自定义controller文件夹出错的解决办法

SpringMVC,在使用官方的maven例子时,用的是springboot来构建。这时候,在Application.java里,在类上要加上:@SpringBootApplication。此时,在src下的hello源目录里,定义controller都是起作用的。而新建目录存放controller都无效。页面显示:Whitelabel Error PageThis applic...

2018-07-10 14:38:21 333

原创 再探java方法参数的传递

我们知道方法传递有值传递、引用传递、名称传递。而在java中,是统一的值传递,是一个值的拷贝。对于原始类型,传递方法参数就是这个具体值。所以在方法里面改变这个值是不影响方法调用时的地方值。而对于对象类型,是一个引用的拷贝。我们可以看下面的例子。首先,我们定义一个Employee类。class Employee{ public Employee(int s){ ...

2018-07-08 12:11:29 168

原创 关于并发请求后台的研究

下面以简要的代码说明:创建用于测试的对象包括:Controller,Service,Repo,Entity。Entity: UserUser里有大量随机字段(超过50个)@Entitypublic class User implements Serializable { @Id @GeneratedValue(strategy = Generati...

2018-07-05 22:37:28 494

原创 spring IoC容器简述

spring IoC容器简述这个接口系统是以BeanFactory和ApplicationContext为核心的。在理解spring ioc概念时,可以分两条线BeanFactory和ApplicationContextBeanFactoryspingIoC的基础容器实现BeanFactory接口定义了IoC容器最基本的形式,并且提供了IoC容器所应该遵守的最基本的服务...

2018-06-13 11:35:32 397

原创 图解IOC和AOP

IOC未使用IOC使用IOCAOP由于各个对象只关注自己的情况,所以各个业务是自相关的,与业务无关的东西往往放在后面再考虑。如果把业务写完了,再关注其它方面的东西,可以侧切进来。...

2018-06-11 23:12:09 1422

原创 正确理解和使用测试--Junit的正确使用

好处体现设计验证行为作为文档原则测试代码和被测代码是同等重要的,需要被同时维护单元测试一定是隔离的单元测试一定是可以重复执行的保持单元测试的简单性和可读性尽量对接口进行测试单元测试应该可以迅速执行自动化单元测试常规测试用例:测试suite:高级使用:使用Mock对象Mock Object例子:其它技巧重构遗留代码处理遗留代码的步骤好的单元测...

2018-06-08 23:27:48 1675

原创 学习正则表达式

First described by German zoologist Friedrich Boie in 1826, (212) 555-1212, 232-515-1212和242 545 1262String telephone = "[(]?[\\d]{3}[)-]?[\\s]?[\\d]{3}[\\s-]?[\\d]{4}";结果:(212) 555-1212, 232-515-1212和

2017-08-31 11:48:50 335

原创 Reader的子类选用

今天需要从文本文件里读出内容,从一刚开始就独立编写,结果是这个样子。 private static String getText0() { File txt = new File("src/regex/Test"); InputStream is; StringBuffer sb = new StringBuffer(); Rea

2017-08-30 16:03:11 1820

转载 Java annotation入门

最近对spring源码感兴趣,今天看到annotation部分,略记之。一. 最常见的annotation@Override:用在方法之上,用来告诉别人这一个方法是改写父类的@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.@SuppressWarnings:暂时把一些警告信息消息关闭@Entity:表示该类是可持

2017-04-21 16:17:28 260

原创 多线程:共享变量

变量共享,是看线程的创建方式package sample1;public class ShareVariable { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); // 数据不共享 // MyThreadFo

2017-04-11 14:58:12 562

转载 Jvm运行参数与调优(整理/划重点)

堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms355

2017-03-28 10:50:48 391

原创 不通过setter方法改变私有变量值

Spring源码发现了BeanWrapperpackage com.sts.web;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.BeanWrapper;import org.springframework.beans.PropertyAccessorFactory

2017-03-16 22:40:00 729

原创 java web手工搭建--基本骨架

一、目录结构:二、 1.web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.c

2017-03-06 10:39:32 860

原创 spring定时器的使用

首先是需要配置:applicationContext-quartz-cron-local.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc

2017-03-01 10:12:10 974

转载 java中线程的基本使用(刚好我需要的是主线程不能等子线程)

[java] view plain copy public class TestThread extends Thread  {      public void run()      {          System.out.println(this.getName() + "子线程开始");          try          

2017-01-11 15:25:01 2569

java中线程的基本使用(刚好我需要的是主线程不能等子线程)

[java]view plaincopypublicclassTestThreadextendsThread{publicvoidrun(){System.out.println(this.getName()+"子线程开始");try{//子线程休眠五秒Thread.sleep(5000);...

2017-01-11 15:25:00 130

转载 软件打log的一些心得(非常好,必须学习)

软件打log的一些心得血狼 · 2 天前在 同事离职,我接盘了个垃圾项目,该如何是好? --血狼的回答 中,我分享了重构的方法,其中提到了软件打log的方法是第一步,也有不少朋友在评论中问打log的原则。本文适用范围:Linux系统使用语言:C/C++打log的原则:1. 异常分支或错误处理一定要打log2. 重大操作时一定要打log,下面打log场景会讲述

2017-01-11 13:31:55 682

软件打log的一些心得(非常好,必须学习)

打log的原则:1. 异常分支或错误处理一定要打log2. 重大操作时一定要打log,下面打log场景会讲述log格式的原则:1. 时间戳必须有,最好能够精确到微秒。精确到秒的时间戳,相信很多人都熟悉,这能够确认问题的时间和系统uptime的对比,能够进一步还原问题的场景。至于到微秒,在多线程程序下,如果进程停止响应,可以从日志时间看是否死锁。一般格式:[2017-...

2017-01-11 13:31:00 935

原创 SpringMVC拦截器返回值不能自定义的解决办法

@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { int httpCode = xxx; response.sendError(httpCode,"erro

2017-01-04 16:27:38 6538

SpringMVC拦截器返回值不能自定义的解决办法

@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { int httpCode = xxx; response.sendError(httpCode,"e...

2017-01-04 16:27:00 799

原创 Go语言:前后端对接

package mainimport ( “fmt” “net/http” “strings” “log” )func sayhelloName(w http.ResponseWriter, r *http.Request) { r.ParseForm() //解析参数,默认是不会解析的 fmt.Println(r.Form) //这

2017-01-03 19:19:55 5486

Go语言:前后端对接

package mainimport ( “fmt” “net/http” “strings” “log” )func sayhelloName(w http.ResponseWriter, r *http.Request) { r.ParseForm() //解析参数,默认是不会解析的 fmt.Println(r.Form...

2017-01-03 19:19:00 2052

原创 Maven依赖,不同jar包里相同的类名导致的大问题

架构是这样的: 用Maven控制:obs和mobile依赖common。完整的pom依赖配置 parent的pom.xml <dependencies> <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId>

2016-12-31 22:23:13 11095 7

原创 图片Base64编码血泪教训

import sun.misc.BASE64Encoder; 上面这玩艺就是个坑。网上大片的文章关于图片转Base64编码用这个类。这就是奇坑。caoimport com.sun.org.apache.xml.internal.security.utils.Base64; 这个或者spring的这种类。耽误了我一下午。我真得很想骂人。

2016-12-08 18:06:01 4351 4

原创 图片Base64编码血泪教训

import sun.misc.BASE64Encoder; 上面这玩艺就是个坑。网上大片的文章关于图片转Base64编码用这个类。这就是奇坑。caoimport com.sun.org.apache.xml.internal.security.utils.Base64; 这个或者spring的这种类。耽误了我一下午。我真得很想骂人。 &lt;script typ...

2016-12-08 18:06:00 1003 1

转载 Java后台模拟向Servlet发送POST文件上传请求

在某些情况下,需要用Java applicatioin来模拟form,向服务器(本文以servlet为例)发送http post请求,包括提交表单域中的数据以及上传文件。如果仅仅是传递form中的数据,而不包含上传文件,那是很简单的,比如Java application可以这么写:package com.pat.postrequestemulator;importjava.io.B

2016-11-20 17:26:39 3637

Java后台模拟向Servlet发送POST文件上传请求

在某些情况下,需要用Java applicatioin来模拟form,向服务器(本文以servlet为例)发送http post请求,包括提交表单域中的数据以及上传文件。如果仅仅是传递form中的数据,而不包含上传文件,那是很简单的,比如Java application可以这么写:package com.pat.postrequestemulator;importjava.io...

2016-11-20 17:26:00 322

原创 SpringMVC里拦截器preHandle里的参数究竟是什么意思

今天我的create和update老是报错:create接口: @RequestMapping(value = "/oftenTraveller/create", method = {RequestMethod.POST}) public ResponseEntity<Response<OftenTravellerDTO>> createOftenTraveller(HttpServletR

2016-11-20 13:56:41 45980 12

SpringMVC里拦截器preHandle里的参数究竟是什么意思

今天我的update接口老是报错,请求和处理方法和create一模一样。create接口: @RequestMapping(value = "/oftenTraveller/create", method = {RequestMethod.POST}) public ResponseEntity&lt;Response&lt;OftenTravellerDTO&gt;&gt; c...

2016-11-20 13:56:00 3223

转载 [Log4j] 配置Log4j (写得太好了,忍不住把评论也转了,评论最后一条有大作用)

[Log4j] 配置Log4jLog4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。1. 配置文件Log4J配置文件的基本格式如下: #配置根Loggerlog4j.rootLogger  =   [ level ]

2016-11-18 17:34:01 1223

[Log4j] 配置Log4j (写得太好了,忍不住把评论也转了,评论最后一条有大作用)

[Log4j] 配置Log4jLog4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。1. 配置文件Log4J配置文件的基本格式如下:#配置根Loggerlog4j.rootLogger=[level],appenderName1...

2016-11-18 17:34:00 147

测试驱动开发

内容介绍:    软件工程是计算机学科中一个十分重要的研究领域。自20世纪60年代以来,人们在这一领域做了大量的工作,逐渐形成了系统的软件开发理论、技术和方法,它们在软件开发实践中发挥了重要作用。然而,随着软件规模的不断扩大和软件复杂性的不断提高,传统的软件开发方法已逐渐不能适应当代软件开发的需要,本书介绍的正是在这种背景下提出的一种全新的软件开发方法──测试驱动开发。 测试驱动开发是极限编程(extreme programming )的重要特点,它以不断地测试推动代码的开发,既简化了代码,又保证了软件质量。本书的作者kent beck长期致力于软件工程的理论研究和实践,又具有讲授极限编程的丰富经验,是极限编程的权威,他的书深受广大软件开发人员的喜爱。 目录: 第一部分 资金实例 第一章 多币种资金 第二章 变质的对象 第三章 一切均等 第四章 私有性 第五章 法郎在诉说 第六章 再谈一切均等 第七章 苹果和桔子 第八章 制造对象 第九章 我们所处的时代 第十章 有趣的times方法 第十一章 万恶之源 第十二章 加法,最后的部分 第十三章 完成预期目标 第十四章 变化 第十五章 混合货币 第十六章 抽象,最后的工作 第十七章 资金实例回顾 第二部分 xunit实例 .第十八章 步入xunit 第十九章 设置表格 第二十章 后期整理 第二十一章 计数 第二十二章 失败处理 第二十三章 怎么组成一组测试 第二十四章 xunit回顾 第三部分 测试驱动开发的模式 第二十五章 测试驱动开发模式 第二十六章 不可运行状态模式 第二十七章 测试模式 第二十八章 可运行模式 第二十九章 xunit模式 第三十章 设计模式 第三十一章 重构 第三十二章 掌握tdd

2016-11-10

空空如也

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

TA关注的人

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