- 博客(124)
- 资源 (1)
- 收藏
- 关注
原创 BigDecimal的精度问题以及解决方案
背景我们在开发产品时, 会遇到金额的问题. 与普通的计算不同, 涉及到钱的问题不马虎, 多一分少一分肯定是不行的.数据库: 存储金额时, bigint, 以分为单位.场景在支付一个订单时, 企业支付一部分, 个人支付一部分.如果发生退单并且产生手续费的情况, 这个手续费是针对这个订单的.所以企业和个人都需要承担一部分手续费, 然后再退款到企业和个人账户上.而计算手续费的比例, 必然要用到除法运算.比如: 先算企业手续费:``企业手续费 = 手续费 * (企业支付金额 / 订单总金额);
2020-06-19 15:10:41
2650
原创 springboot中使用filter来修改body里的参数
在这里, 以去空格为例来进行说明.背景:在项目中, 经常会遇到前端往后端传参会有字符串参数首尾有空格的情况, 一般如果字段比较少, 或者接口比较少, 自行在controller位置处理一下, 是没有问题的. 就是重复代码多, 工作重复, 没劲.所以在这里以去空格说明如何处理post方法里的参数首尾空格问题.自定义filter.public class ParamsFilter impl...
2020-04-23 16:54:46
5039
2
原创 防止重复请求提交创建订单等解决方案
背景:在开发产品,交付给用户使用之后,重复提交的现象偶尔或经常出现。开发人员觉得数据重复,用户觉得订单多了一个,产品觉得有bug。这可不是好现象。下面以创建订单为例:原因:1、误操作两次点击下单按钮;2、超时导致重复点击;3、产生订单后没有成功提醒或者客户端出错导致用户没有收到成功消息,重新下单。后果:当然是产生了重复订单,体验不好,影响不好。^_^解决方案:最通用的方法:...
2019-07-09 17:05:07
3342
原创 项目上线少量spring代码热更新解决方案
场景:公司上线的权限系统涉及的有一个功能:使用其它平台的认证,如果通过。我们的平台也算认证通过。公司同一个产品可能有多家公司在用,每家的认证平台也不一样,认证方式不一样,数据格式也不一样。在以上两种情况出现的时候,还要保证公司产品保持标准化,以便客户后面升级。这样就比较麻烦了。按理讲,这种情况就属于客户定制版本。升级也是按照自制版本升级。标准产品里的新功能要去每一个定制产品里做合并。...
2019-06-26 11:56:13
1893
原创 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
2154
3
原创 JVM调优(三)程序代码调优
根据第一节所讲的基础知识,我们根据线上不同的异常情况做程序的优化。CPU占用高us高根据之前的分析,CPU us高的原因主要是执行线程无任何挂起动作,且一直执行,导致CPU没有机会去调度执行其他的线程,造成线程饿死的现象。对于这种情况,常见的一种优化方法是对这种线程的动作增加Thread.sleep,以释放CPU的执行权,降低CPU的消耗。对于线程要不断扫描某种状态,达到自己的可继续运行下去...
2018-09-21 18:40:59
504
原创 JVM调优(二)内存收集器原理和参数调整
调优根据上节的原理分析,进行调优可以从硬件、操作系统、JVM以及程序四个方面入手。用更好的硬件如更大的内存、更快的CPU等,操作系统的话,需要自己去摸索,window不行就换linux,linux不行就换unix,甚至其它商业机。对于这两点,如果程序确实解决不了,可以把问题抛给运维。但作为一名开发者,我们现在可以从JVM和程序两方面尝试优化。JVM方面,从内存分配管理、GC策略入手。先搞清...
2018-09-21 17:22:55
304
原创 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
620
原创 Spring data jpa的高级查询的应用和底层原理分析
spring data jpa的查询目前比较简单的查询:三种查询方案固定参数查询interface XxxRepo implements JpaRepository<T,Long>{ EntityXxx findByNameAndSex(String name,String sex);}这种方式是简单的,方法名表达自己想查询的方法。支
2018-09-19 18:11:48
3375
原创 使用spring官网给出的SpingMVC的maven搭建方式自定义controller文件夹出错的解决办法
SpringMVC,在使用官方的maven例子时,用的是springboot来构建。这时候,在Application.java里,在类上要加上:@SpringBootApplication。此时,在src下的hello源目录里,定义controller都是起作用的。而新建目录存放controller都无效。页面显示:Whitelabel Error PageThis applic...
2018-07-10 14:38:21
375
原创 再探java方法参数的传递
我们知道方法传递有值传递、引用传递、名称传递。而在java中,是统一的值传递,是一个值的拷贝。对于原始类型,传递方法参数就是这个具体值。所以在方法里面改变这个值是不影响方法调用时的地方值。而对于对象类型,是一个引用的拷贝。我们可以看下面的例子。首先,我们定义一个Employee类。class Employee{ public Employee(int s){ ...
2018-07-08 12:11:29
202
原创 关于并发请求后台的研究
下面以简要的代码说明:创建用于测试的对象包括:Controller,Service,Repo,Entity。Entity: UserUser里有大量随机字段(超过50个)@Entitypublic class User implements Serializable { @Id @GeneratedValue(strategy = Generati...
2018-07-05 22:37:28
535
原创 spring IoC容器简述
spring IoC容器简述这个接口系统是以BeanFactory和ApplicationContext为核心的。在理解spring ioc概念时,可以分两条线BeanFactory和ApplicationContextBeanFactoryspingIoC的基础容器实现BeanFactory接口定义了IoC容器最基本的形式,并且提供了IoC容器所应该遵守的最基本的服务...
2018-06-13 11:35:32
438
原创 图解IOC和AOP
IOC未使用IOC使用IOCAOP由于各个对象只关注自己的情况,所以各个业务是自相关的,与业务无关的东西往往放在后面再考虑。如果把业务写完了,再关注其它方面的东西,可以侧切进来。...
2018-06-11 23:12:09
1464
原创 正确理解和使用测试--Junit的正确使用
好处体现设计验证行为作为文档原则测试代码和被测代码是同等重要的,需要被同时维护单元测试一定是隔离的单元测试一定是可以重复执行的保持单元测试的简单性和可读性尽量对接口进行测试单元测试应该可以迅速执行自动化单元测试常规测试用例:测试suite:高级使用:使用Mock对象Mock Object例子:其它技巧重构遗留代码处理遗留代码的步骤好的单元测...
2018-06-08 23:27:48
1729
原创 学习正则表达式
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
371
原创 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
1872
转载 Java annotation入门
最近对spring源码感兴趣,今天看到annotation部分,略记之。一. 最常见的annotation@Override:用在方法之上,用来告诉别人这一个方法是改写父类的@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.@SuppressWarnings:暂时把一些警告信息消息关闭@Entity:表示该类是可持
2017-04-21 16:17:28
289
原创 多线程:共享变量
变量共享,是看线程的创建方式package sample1;public class ShareVariable { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); // 数据不共享 // MyThreadFo
2017-04-11 14:58:12
618
转载 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
431
原创 不通过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
760
原创 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
908
原创 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
1010
转载 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
2631
java中线程的基本使用(刚好我需要的是主线程不能等子线程)
[java]view plaincopypublicclassTestThreadextendsThread{publicvoidrun(){System.out.println(this.getName()+"子线程开始");try{//子线程休眠五秒Thread.sleep(5000);...
2017-01-11 15:25:00
151
转载 软件打log的一些心得(非常好,必须学习)
软件打log的一些心得血狼 · 2 天前在 同事离职,我接盘了个垃圾项目,该如何是好? --血狼的回答 中,我分享了重构的方法,其中提到了软件打log的方法是第一步,也有不少朋友在评论中问打log的原则。本文适用范围:Linux系统使用语言:C/C++打log的原则:1. 异常分支或错误处理一定要打log2. 重大操作时一定要打log,下面打log场景会讲述
2017-01-11 13:31:55
713
软件打log的一些心得(非常好,必须学习)
打log的原则:1. 异常分支或错误处理一定要打log2. 重大操作时一定要打log,下面打log场景会讲述log格式的原则:1. 时间戳必须有,最好能够精确到微秒。精确到秒的时间戳,相信很多人都熟悉,这能够确认问题的时间和系统uptime的对比,能够进一步还原问题的场景。至于到微秒,在多线程程序下,如果进程停止响应,可以从日志时间看是否死锁。一般格式:[2017-...
2017-01-11 13:31:00
1001
原创 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
6601
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
827
原创 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
5562
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
2115
原创 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
11367
7
原创 图片Base64编码血泪教训
import sun.misc.BASE64Encoder; 上面这玩艺就是个坑。网上大片的文章关于图片转Base64编码用这个类。这就是奇坑。caoimport com.sun.org.apache.xml.internal.security.utils.Base64; 这个或者spring的这种类。耽误了我一下午。我真得很想骂人。
2016-12-08 18:06:01
4431
1
原创 图片Base64编码血泪教训
import sun.misc.BASE64Encoder; 上面这玩艺就是个坑。网上大片的文章关于图片转Base64编码用这个类。这就是奇坑。caoimport com.sun.org.apache.xml.internal.security.utils.Base64; 这个或者spring的这种类。耽误了我一下午。我真得很想骂人。 <script typ...
2016-12-08 18:06:00
1036
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
3885
Java后台模拟向Servlet发送POST文件上传请求
在某些情况下,需要用Java applicatioin来模拟form,向服务器(本文以servlet为例)发送http post请求,包括提交表单域中的数据以及上传文件。如果仅仅是传递form中的数据,而不包含上传文件,那是很简单的,比如Java application可以这么写:package com.pat.postrequestemulator;importjava.io...
2016-11-20 17:26:00
391
原创 SpringMVC里拦截器preHandle里的参数究竟是什么意思
今天我的create和update老是报错:create接口: @RequestMapping(value = "/oftenTraveller/create", method = {RequestMethod.POST}) public ResponseEntity<Response<OftenTravellerDTO>> createOftenTraveller(HttpServletR
2016-11-20 13:56:41
46346
12
SpringMVC里拦截器preHandle里的参数究竟是什么意思
今天我的update接口老是报错,请求和处理方法和create一模一样。create接口: @RequestMapping(value = "/oftenTraveller/create", method = {RequestMethod.POST}) public ResponseEntity<Response<OftenTravellerDTO>> c...
2016-11-20 13:56:00
3310
转载 [Log4j] 配置Log4j (写得太好了,忍不住把评论也转了,评论最后一条有大作用)
[Log4j] 配置Log4jLog4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。1. 配置文件Log4J配置文件的基本格式如下: #配置根Loggerlog4j.rootLogger = [ level ]
2016-11-18 17:34:01
1263
[Log4j] 配置Log4j (写得太好了,忍不住把评论也转了,评论最后一条有大作用)
[Log4j] 配置Log4jLog4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。1. 配置文件Log4J配置文件的基本格式如下:#配置根Loggerlog4j.rootLogger=[level],appenderName1...
2016-11-18 17:34:00
169
测试驱动开发
2016-11-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人