<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[老司机让开，Java新手来了]]></title><description><![CDATA[一步步夯实基础，3年后，我就是大神！]]></description><link>https://blog.youkuaiyun.com/bbbbln</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bbbbln]]></copyright><item><title><![CDATA[BigDecimal的精度问题以及解决方案]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/106855700</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/106855700</guid><author>bbbbln</author><pubDate>Fri, 19 Jun 2020 15:10:41 +0800</pubDate><description><![CDATA[背景
我们在开发产品时, 会遇到金额的问题. 与普通的计算不同, 涉及到钱的问题不马虎, 多一分少一分肯定是不行的.
数据库: 存储金额时, bigint, 以分为单位.
场景
在支付一个订单时, 企业支付一部分, 个人支付一部分.
如果发生退单并且产生手续费的情况, 这个手续费是针对这个订单的.
所以企业和个人都需要承担一部分手续费, 然后再退款到企业和个人账户上.
而计算手续费的比例, 必然要用到除法运算.
比如: 先算企业手续费:
``
企业手续费 = 手续费 * (企业支付金额 / 订单总金额);
]]></description><category></category></item><item><title><![CDATA[springboot中使用filter来修改body里的参数]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/105711463</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/105711463</guid><author>bbbbln</author><pubDate>Thu, 23 Apr 2020 16:54:46 +0800</pubDate><description><![CDATA[在这里, 以去空格为例来进行说明.
背景:在项目中, 经常会遇到前端往后端传参会有字符串参数首尾有空格的情况, 一般如果字段比较少, 或者接口比较少, 自行在controller位置处理一下, 是没有问题的. 就是重复代码多, 工作重复, 没劲.
所以在这里以去空格说明如何处理post方法里的参数首尾空格问题.

自定义filter.

public class ParamsFilter impl...]]></description><category></category></item><item><title><![CDATA[防止重复请求提交创建订单等解决方案]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/95208670</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/95208670</guid><author>bbbbln</author><pubDate>Tue, 09 Jul 2019 17:05:07 +0800</pubDate><description><![CDATA[背景：
在开发产品，交付给用户使用之后，重复提交的现象偶尔或经常出现。开发人员觉得数据重复，用户觉得订单多了一个，产品觉得有bug。这可不是好现象。
下面以创建订单为例：
原因：
1、误操作两次点击下单按钮；
2、超时导致重复点击；
3、产生订单后没有成功提醒或者客户端出错导致用户没有收到成功消息，重新下单。
后果：
当然是产生了重复订单，体验不好，影响不好。^_^
解决方案：


最通用的方法：...]]></description><category></category></item><item><title><![CDATA[项目上线少量spring代码热更新解决方案]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/93717419</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/93717419</guid><author>bbbbln</author><pubDate>Wed, 26 Jun 2019 11:56:13 +0800</pubDate><description><![CDATA[场景：
公司上线的权限系统涉及的有一个功能：

使用其它平台的认证，如果通过。我们的平台也算认证通过。
公司同一个产品可能有多家公司在用，每家的认证平台也不一样，认证方式不一样，数据格式也不一样。
在以上两种情况出现的时候，还要保证公司产品保持标准化，以便客户后面升级。

这样就比较麻烦了。按理讲，这种情况就属于客户定制版本。升级也是按照自制版本升级。标准产品里的新功能要去每一个定制产品里做合并。...]]></description><category></category></item><item><title><![CDATA[java模拟复杂表单post请求]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/84974576</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/84974576</guid><author>bbbbln</author><pubDate>Wed, 12 Dec 2018 16:04:30 +0800</pubDate><description><![CDATA[java模拟复杂表单post请求
能支持文件上传
/**
	 * 支持复杂表单，比如文件上传
	 * @param formParam
	 * @return
	 * @throws Exception
	 */
	public static String postWithForm(FormParam formParam) throws Exception {
		String url = for...]]></description><category></category></item><item><title><![CDATA[JVM调优（三）程序代码调优]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/82805725</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/82805725</guid><author>bbbbln</author><pubDate>Fri, 21 Sep 2018 18:40:59 +0800</pubDate><description><![CDATA[根据第一节所讲的基础知识，我们根据线上不同的异常情况做程序的优化。
CPU占用高
us高
根据之前的分析，CPU us高的原因主要是执行线程无任何挂起动作，且一直执行，导致CPU没有机会去调度执行其他的线程，造成线程饿死的现象。对于这种情况，常见的一种优化方法是对这种线程的动作增加Thread.sleep，以释放CPU的执行权，降低CPU的消耗。对于线程要不断扫描某种状态，达到自己的可继续运行下去...]]></description><category></category></item><item><title><![CDATA[JVM调优（二）内存收集器原理和参数调整]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/82804723</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/82804723</guid><author>bbbbln</author><pubDate>Fri, 21 Sep 2018 17:22:55 +0800</pubDate><description><![CDATA[调优
根据上节的原理分析，进行调优可以从硬件、操作系统、JVM以及程序四个方面入手。
用更好的硬件如更大的内存、更快的CPU等，操作系统的话，需要自己去摸索，window不行就换linux，linux不行就换unix，甚至其它商业机。对于这两点，如果程序确实解决不了，可以把问题抛给运维。但作为一名开发者，我们现在可以从JVM和程序两方面尝试优化。
JVM方面，从内存分配管理、GC策略入手。
先搞清...]]></description><category></category></item><item><title><![CDATA[JVM调优（一）底层原理分析和问题定位]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/82791982</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/82791982</guid><author>bbbbln</author><pubDate>Thu, 20 Sep 2018 18:56:19 +0800</pubDate><description><![CDATA[文章目录CPU占用问题1、CPU占用高原因分析原因a: 线程上下文切换消耗。原因b：cpu上的运行队列。原因c：cpu的利用率。查看cpu使用情况工具toppidstat分析cpu占用高的各种情况us：用户占用高sy：内核占用高文件IO消耗原因分析文件IO消耗的跟踪工具pidstat网线IO消耗内存消耗内存消耗原因分析内存查看工具toppidstat程序执行慢的原因锁竞争激烈硬件资源未充分工具的常...]]></description><category></category></item><item><title><![CDATA[Spring data jpa的高级查询的应用和底层原理分析]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/82776213</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/82776213</guid><author>bbbbln</author><pubDate>Wed, 19 Sep 2018 18:11:48 +0800</pubDate><description><![CDATA[spring data jpa的查询
目前比较简单的查询：
三种查询方案

固定参数查询

interface XxxRepo implements JpaRepository&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;T,Long&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;{
	EntityXxx findByNameAndSex(String name,String sex);
}

这种方式是简单的，方法名表达自己想查询的方法。支]]></description><category></category></item><item><title><![CDATA[使用spring官网给出的SpingMVC的maven搭建方式自定义controller文件夹出错的解决办法]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/80985695</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/80985695</guid><author>bbbbln</author><pubDate>Tue, 10 Jul 2018 14:38:21 +0800</pubDate><description><![CDATA[SpringMVC，在使用官方的maven例子时，用的是springboot来构建。这时候，在Application.java里，在类上要加上：@SpringBootApplication。

此时，在src下的hello源目录里，定义controller都是起作用的。而新建目录存放controller都无效。

页面显示：



Whitelabel Error Page
This applic...]]></description><category></category></item><item><title><![CDATA[再探java方法参数的传递]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/80958229</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/80958229</guid><author>bbbbln</author><pubDate>Sun, 08 Jul 2018 12:11:29 +0800</pubDate><description><![CDATA[我们知道方法传递有值传递、引用传递、名称传递。

而在java中，是统一的值传递，是一个值的拷贝。

对于原始类型，传递方法参数就是这个具体值。所以在方法里面改变这个值是不影响方法调用时的地方值。

而对于对象类型，是一个引用的拷贝。我们可以看下面的例子。

首先，我们定义一个Employee类。

class Employee{

    public Employee(int s){
    ...]]></description><category></category></item><item><title><![CDATA[关于并发请求后台的研究]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/80934162</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/80934162</guid><author>bbbbln</author><pubDate>Thu, 05 Jul 2018 22:37:28 +0800</pubDate><description><![CDATA[下面以简要的代码说明：



创建用于测试的对象

包括：Controller,Service,Repo,Entity。



Entity: User

User里有大量随机字段（超过50个）



@Entity
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = Generati...]]></description><category></category></item><item><title><![CDATA[spring IoC容器简述]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/80676820</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/80676820</guid><author>bbbbln</author><pubDate>Wed, 13 Jun 2018 11:35:32 +0800</pubDate><description><![CDATA[spring IoC容器简述

这个接口系统是以BeanFactory和ApplicationContext为核心的。

在理解spring ioc概念时，可以分两条线

BeanFactory和ApplicationContext



BeanFactory

spingIoC的基础容器实现

BeanFactory接口定义了IoC容器最基本的形式，并且提供了IoC容器所应该遵守的最基本的服务...]]></description><category></category></item><item><title><![CDATA[图解IOC和AOP]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/80659296</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/80659296</guid><author>bbbbln</author><pubDate>Mon, 11 Jun 2018 23:12:09 +0800</pubDate><description><![CDATA[IOC

未使用IOC



使用IOC



AOP

由于各个对象只关注自己的情况，所以各个业务是自相关的，与业务无关的东西往往放在后面再考虑。



如果把业务写完了，再关注其它方面的东西，可以侧切进来。

...]]></description><category></category></item><item><title><![CDATA[正确理解和使用测试--Junit的正确使用]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/80629272</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/80629272</guid><author>bbbbln</author><pubDate>Fri, 08 Jun 2018 23:27:48 +0800</pubDate><description><![CDATA[


好处
体现设计
验证行为
作为文档


原则
测试代码和被测代码是同等重要的，需要被同时维护
单元测试一定是隔离的
单元测试一定是可以重复执行的
保持单元测试的简单性和可读性
尽量对接口进行测试
单元测试应该可以迅速执行
自动化单元测试


常规测试用例：
测试suite:
高级使用：
使用Mock对象
Mock Object例子:


其它技巧
重构遗留代码
处理遗留代码的步骤
好的单元测...]]></description><category></category></item><item><title><![CDATA[学习正则表达式]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/77744445</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/77744445</guid><author>bbbbln</author><pubDate>Thu, 31 Aug 2017 11:48:50 +0800</pubDate><description><![CDATA[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和]]></description><category></category></item><item><title><![CDATA[Reader的子类选用]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/77717707</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/77717707</guid><author>bbbbln</author><pubDate>Wed, 30 Aug 2017 16:03:11 +0800</pubDate><description><![CDATA[今天需要从文本文件里读出内容，从一刚开始就独立编写，结果是这个样子。    private static String getText0() {
        File txt = new File("src/regex/Test");
        InputStream is;
        StringBuffer sb = new StringBuffer();
        Rea]]></description><category></category></item><item><title><![CDATA[Java annotation入门]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/70327714</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/70327714</guid><author>bbbbln</author><pubDate>Fri, 21 Apr 2017 16:17:28 +0800</pubDate><description><![CDATA[最近对spring源码感兴趣，今天看到annotation部分，略记之。
一. 最常见的annotation

@Override:用在方法之上，用来告诉别人这一个方法是改写父类的@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.@SuppressWarnings:暂时把一些警告信息消息关闭@Entity:表示该类是可持]]></description><category></category></item><item><title><![CDATA[多线程：共享变量]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/70053455</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/70053455</guid><author>bbbbln</author><pubDate>Tue, 11 Apr 2017 14:58:12 +0800</pubDate><description><![CDATA[变量共享，是看线程的创建方式package sample1;public class ShareVariable {    public static void main(String[] args) {        System.out.println(Thread.currentThread().getName());        // 数据不共享
        // MyThreadFo]]></description><category></category></item><item><title><![CDATA[Jvm运行参数与调优（整理/划重点）]]></title><link>https://blog.youkuaiyun.com/bbbbln/article/details/67632713</link><guid>https://blog.youkuaiyun.com/bbbbln/article/details/67632713</guid><author>bbbbln</author><pubDate>Tue, 28 Mar 2017 10:50:48 +0800</pubDate><description><![CDATA[堆大小设置
JVM 中最大堆大小有三方面限制：相关操作系统的数据模型（32-bt还是64-bit）限制；系统的可用虚拟内存限制；系统的可用物理内存限制。32位系统下，一般限制在1.5G~2G；64为操作系统对内存无限制。我在Windows Server 2003 系统，3.5G物理内存，JDK5.0下测试，最大可设置为1478m。
典型设置：

java -Xmx3550m -Xms355]]></description><category></category></item></channel></rss>