Java
bbbbln
这个作者很懒,什么都没留下…
展开
-
BigDecimal的精度问题以及解决方案
背景我们在开发产品时, 会遇到金额的问题. 与普通的计算不同, 涉及到钱的问题不马虎, 多一分少一分肯定是不行的.数据库: 存储金额时, bigint, 以分为单位.场景在支付一个订单时, 企业支付一部分, 个人支付一部分.如果发生退单并且产生手续费的情况, 这个手续费是针对这个订单的.所以企业和个人都需要承担一部分手续费, 然后再退款到企业和个人账户上.而计算手续费的比例, 必然要用到除法运算.比如: 先算企业手续费:``企业手续费 = 手续费 * (企业支付金额 / 订单总金额);原创 2020-06-19 15:10:41 · 2575 阅读 · 0 评论 -
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 · 1834 阅读 · 0 评论 -
多线程:共享变量
变量共享,是看线程的创建方式package sample1;public class ShareVariable { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); // 数据不共享 // MyThreadFo原创 2017-04-11 14:58:12 · 567 阅读 · 0 评论 -
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 · 395 阅读 · 0 评论 -
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 · 2589 阅读 · 0 评论 -
20161115做移动端接口总结
1、spring-mvc.xml<?xml version="1.0" encoding="UTF-8" ?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi=原创 2016-11-15 20:34:48 · 1563 阅读 · 0 评论 -
在设计程序的时候,要遵循的原则(设计模式的原则)
非常重要:1、单一职责:每个类的极限原则是职责单一性; 2、里氏替换原则:凡是父类出现的地方,子类一定适用。在编译器进行语法检查时可查出; 3、依赖倒置原则:不同层次的功能对接时,必须是接口(抽象类)的对接,减少对具体代码的依赖。对于以后项目扩大,对代码的改动最少。(符合开闭原则); 4、接口隔离原则:客户端不应该依赖其不需要的接口,类间的依赖关系应该建立在最小的接口上(如订单,门户网站只需要原创 2016-11-12 22:17:48 · 883 阅读 · 0 评论 -
输出国别,自己没事写的
package com.smartprint.biztrip.common.service.impl.companyDirectory;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * * @author Administrator */public class PrintNational { st原创 2016-09-09 16:23:39 · 610 阅读 · 0 评论 -
部门树状图用JAXB解决
因为最近在做部门树状图,Java后台要输出这个树状图去前台显示。所以在找各种解决方案,此方案为比较好的。遂记录下来JAXB主要用来实现对象和XML之间的序列化和反序列化,关于JAXB的介绍就不多说了,网上一搜一大把,这里主要总结下基本使用方法和一些注意事项首先定义两个示例类ClassA,ClassB,用于后续的示例演示ClassApackage cn.lzrabbit;public class Cl转载 2016-07-19 10:22:54 · 398 阅读 · 0 评论 -
Java 协变性 逆变性
在面向对象的计算机程序语言中,经常涉及到类型之间的转换,例如从具体类小猫到动物之间的类型转换(上行转换),或者从形状向三角形之间的转换(下行转换)。 我们之前往往都比较关注类型本身,却常常忽略类型转换的性质。最近在拜读《thinking in java》看到一些关于类型转换性质的比较抽象理论的内容,仔细研究一下,分享给大家。 我们将围绕如下三个核心名词:协变性(covariance)、逆变性(c转载 2016-07-18 16:20:32 · 1181 阅读 · 0 评论 -
Criteria用法的小结
前几天做项目的时候,用到了Creiteria来查询和分页。实在好用。但本人愚笨,用了不少时间,今天有空把用法记录下来,备忘。多条件循环查询:String comId = param.getCompany().getId(); List<TDepartment> depts = param.getDepartments(); String name = param.ge原创 2016-07-25 20:01:57 · 17904 阅读 · 3 评论 -
不通过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 · 734 阅读 · 0 评论 -
Java annotation入门
最近对spring源码感兴趣,今天看到annotation部分,略记之。一. 最常见的annotation@Override:用在方法之上,用来告诉别人这一个方法是改写父类的@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.@SuppressWarnings:暂时把一些警告信息消息关闭@Entity:表示该类是可持转载 2017-04-21 16:17:28 · 264 阅读 · 0 评论 -
防止重复请求提交创建订单等解决方案
背景:在开发产品,交付给用户使用之后,重复提交的现象偶尔或经常出现。开发人员觉得数据重复,用户觉得订单多了一个,产品觉得有bug。这可不是好现象。下面以创建订单为例:原因:1、误操作两次点击下单按钮;2、超时导致重复点击;3、产生订单后没有成功提醒或者客户端出错导致用户没有收到成功消息,重新下单。后果:当然是产生了重复订单,体验不好,影响不好。^_^解决方案:最通用的方法:...原创 2019-07-09 17:05:07 · 3180 阅读 · 0 评论 -
项目上线少量spring代码热更新解决方案
场景:公司上线的权限系统涉及的有一个功能:使用其它平台的认证,如果通过。我们的平台也算认证通过。公司同一个产品可能有多家公司在用,每家的认证平台也不一样,认证方式不一样,数据格式也不一样。在以上两种情况出现的时候,还要保证公司产品保持标准化,以便客户后面升级。这样就比较麻烦了。按理讲,这种情况就属于客户定制版本。升级也是按照自制版本升级。标准产品里的新功能要去每一个定制产品里做合并。...原创 2019-06-26 11:56:13 · 1849 阅读 · 0 评论 -
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 · 2104 阅读 · 3 评论 -
JVM调优(三)程序代码调优
根据第一节所讲的基础知识,我们根据线上不同的异常情况做程序的优化。CPU占用高us高根据之前的分析,CPU us高的原因主要是执行线程无任何挂起动作,且一直执行,导致CPU没有机会去调度执行其他的线程,造成线程饿死的现象。对于这种情况,常见的一种优化方法是对这种线程的动作增加Thread.sleep,以释放CPU的执行权,降低CPU的消耗。对于线程要不断扫描某种状态,达到自己的可继续运行下去...原创 2018-09-21 18:40:59 · 461 阅读 · 0 评论 -
JVM调优(二)内存收集器原理和参数调整
调优根据上节的原理分析,进行调优可以从硬件、操作系统、JVM以及程序四个方面入手。用更好的硬件如更大的内存、更快的CPU等,操作系统的话,需要自己去摸索,window不行就换linux,linux不行就换unix,甚至其它商业机。对于这两点,如果程序确实解决不了,可以把问题抛给运维。但作为一名开发者,我们现在可以从JVM和程序两方面尝试优化。JVM方面,从内存分配管理、GC策略入手。先搞清...原创 2018-09-21 17:22:55 · 274 阅读 · 0 评论 -
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 · 573 阅读 · 0 评论 -
再探java方法参数的传递
我们知道方法传递有值传递、引用传递、名称传递。而在java中,是统一的值传递,是一个值的拷贝。对于原始类型,传递方法参数就是这个具体值。所以在方法里面改变这个值是不影响方法调用时的地方值。而对于对象类型,是一个引用的拷贝。我们可以看下面的例子。首先,我们定义一个Employee类。class Employee{ public Employee(int s){ ...原创 2018-07-08 12:11:29 · 169 阅读 · 0 评论 -
正确理解和使用测试--Junit的正确使用
好处体现设计验证行为作为文档原则测试代码和被测代码是同等重要的,需要被同时维护单元测试一定是隔离的单元测试一定是可以重复执行的保持单元测试的简单性和可读性尽量对接口进行测试单元测试应该可以迅速执行自动化单元测试常规测试用例:测试suite:高级使用:使用Mock对象Mock Object例子:其它技巧重构遗留代码处理遗留代码的步骤好的单元测...原创 2018-06-08 23:27:48 · 1677 阅读 · 0 评论 -
学习正则表达式
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 · 340 阅读 · 0 评论 -
IOC和DI(控制反转和依赖注入)通俗解析
IoC——Inversion of Control 控制反转 DI——Dependency Injection 依赖注入 要想理解上面两个概念,就必须搞清楚如下的问题:参与者都有谁?依赖:谁依赖于谁?为什么需要依赖? 注入:谁注入于谁?到底注入什么?控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)?依赖注入和控制反转是同一概念吗? 下面就来简要的回答一下转载 2016-07-12 14:40:21 · 486 阅读 · 0 评论 -
Model层生成各数据库表之间的关系
三个表company、department、staff。 员工表中的公司ID和部门ID为外键。company的Model:import java.util.Date;import java.util.HashSet;import java.util.List;import java.util.Set;@Entity@Table(name = "t_company", catalog =原创 2016-06-24 15:35:22 · 2261 阅读 · 1 评论 -
反射机制知识点(new和newInstance之区别)
在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法。通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象转载 2016-04-13 16:09:50 · 1253 阅读 · 0 评论 -
枚举enum
关于枚举的简单写法:public class EnumTest { public static void main(String[] args) { judgeColor(colorful.BLUE); } public static void judgeColor(colorful color)//写成静态方法,是因为上面的main函数即时调用原创 2016-04-13 14:28:47 · 347 阅读 · 0 评论 -
构造器的用法
关于构造器: 还有this的用法public class Main { private String name; private double salary; public Main(String aName, Double aSalary) {//构造器1 this.name = aName; this.salary = aSalary;原创 2016-04-09 16:52:11 · 493 阅读 · 0 评论 -
Java中的默认值和构造器
默认值: 数据类型的默认值为0; boolean的默认为false; 对象类型的默认值为null。 但在写程序的时候,一定要手动给个值,不然在后期容易出错。构造器:如果不手动写构造器,程序在编译的时候会加上默认的构造器,但是只要手动写的构造器,编译的时候不再加上默认的构造器。 如: public class Employee{ public class Employee(Stri原创 2016-04-09 15:26:36 · 1567 阅读 · 0 评论 -
ArrayList和变参
其实没什么好说的,只是写下来作个备忘录ArrayList的声明和实例化import java.util.ArrayList;……ArrayList<String> str=new ArrayList<>(99);//写法1ArrayList<String> str1=new ArrayList<String>();//写法2 其拥有add(Object o),add(int index,Ob原创 2016-04-13 11:48:41 · 497 阅读 · 0 评论 -
正则表达式
是这我看到的,很详细。作为新手,我很幸运看到这篇。http://blog.csdn.net/mad1989/article/details/7773749我很感谢!!!谢谢这位Never-say-Never!!!转载 2016-04-08 17:06:04 · 313 阅读 · 0 评论 -
Binary String Matching
这题我没有做出来,在Eclipse上可以运行,目测结果正确,但是通不过ACM的那个网站测试,我不清楚为什么。懂的人可以告诉我一下。我的程序写的不怎么好,我正在慢慢改正。时间限制:3000 ms | 内存限制:65535 KB描述 Given two strings A and B, whose alphabet consist only ‘0’ and ‘1’. Your task is o原创 2016-04-08 15:17:48 · 383 阅读 · 0 评论 -
ASCII码排序
时间限制:3000 ms | 内存限制:65535 KB描述 输入三个字符(可以重复)后,按各字符的ASCII码从小到大的顺序输出这三个字符。 输入 第一行输入一个数N,表示有N组测试数据。后面的N行输入多组数据,每组输入数据都是占一行,有三个字符组成,之间无空格。 输出 对于每组输入数据,输出一行,字符中间用一个空格分开。 样例输入 2 qwe asd 样例输出 e q原创 2016-04-08 13:46:31 · 2349 阅读 · 0 评论 -
括号配对问题
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int count = in.nextInt();// 输入几个中括号和小括号的组合 in.next原创 2016-04-08 11:00:24 · 282 阅读 · 0 评论 -
Java反射机制--肤浅认知
本来不是很懂,看了很多文章解析,感觉貌似有点懂了。 记下备忘。待后来回头查看,以便更正。Java反射机制,是进一步的解耦,比如在:比如在JDBC中,Class.forName(‘com.mysql.jdbc.Driver.class’).newInstance(); 通过这个名字来搜索,原创 2016-04-13 17:30:58 · 382 阅读 · 0 评论 -
Java反射机制--佐证
这个例子很好的证明了,类加载和实例化的区别:public class NewInstancesTest { public static void main(String[] args) { TestOne one=null; try { //类加载 Class cl=Class.forName("reflectTe原创 2016-04-14 14:20:32 · 262 阅读 · 0 评论 -
Java接口
1、接口不是类,不能用new来实例化,但是可以引用实现接口的类对象: Comparable x; x=new Employee(……); 2、接口中可以有常量 3、接口中绝对不能含有实例域,也不能实现任何方法案例: 对对象进行排序:Array.sort(任意对象的数组); 要用这个方法,那括号中的数组中的类必须实现Comparable这个接口,并对类中的某个量进行两两比较 完整方法为:原创 2016-04-14 16:26:44 · 349 阅读 · 0 评论 -
Spring之config.xml配置
以下三行必写,不能更改<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">Bean的类:<bean id="aGoodName" class="com.xxx.xxx">原创 2016-04-20 16:45:22 · 4810 阅读 · 0 评论 -
bean的定义、使用、销毁
定义: 其初始化最好在javabean中写出来,用一个Init()方法,而不是实现Spring的接口,这样独立多了。 如下: 使用: 在Spring中有三种使用方式: 方法一,使用BeanWrapper:HelloWorld helloWorld=new HelloWorld();BeanWrapper bw=new BeanWrapperImpl(helloWorld);bw.s原创 2016-04-20 17:16:58 · 1336 阅读 · 0 评论 -
Spring之初识JavaBean
JavaBean为:package com.gc.action;public class HelloWorld { public String msg=null; public void setMsg(String msg) { this.msg=msg; } public String getMsg() { return t原创 2016-04-20 09:55:13 · 280 阅读 · 0 评论 -
Hibernate内的各种文件
1、Hibernate的6个接口 2、Hibernate的Configuration的三种初始化方法: 其中, 实线部分是Hibernate自动创建, 虚线部分需要开发人员用硬编码实现。3、SessonFactory管理Session,而session相当于数据库的数据表在外面的状态。sessionFactory需要用一次Configuration然后就不再使用。 4、关于事务(可选原创 2016-05-01 12:44:01 · 465 阅读 · 0 评论