1.Float和Double类型的加减乘除需要依赖BigDecimal来进行精确计算,可以利用两种方式转换成BigDecimal类型:
1. BigDecimal b1 = new BigDecimal(Double.toString(数字))
2. BigDecimal b2 = BigDecimal.valueOf(数字);
除divide(BigDecimal divisor, int scale, int roundingMode)
第一参数表示除数, 第二个参数表示小数点后保留位数,
第三个参数表示舍入模式,只有在作除法运算或四舍五入时才用到舍入模式
RoundingMode.HALF_UP
ROUND_CEILING //向正无穷方向舍入
ROUND_DOWN //向零方向舍入
ROUND_FLOOR //向负无穷方向舍入
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
ROUND_UP //向远离0的方向舍入
总结:
(1)商业计算使用BigDecimal。
(2)尽量使用参数类型为String的构造函数。
(3) BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。
2.ThreadLocal
作用:操作当前线程内部的一块存储空间
简单使用:private static ThreadLocal threadLocal = new ThreadLocal();
threadLocal.set(object);
Object obj=threadLocal.get();
设置默认值:
private static ThreadLocal local=new ThreadLocal(){
@Override
protected Object initialValue() {
return "you want to write";
}
};
//获取threadLocal操作的值
local.get();
注解:对于ThreadLocal使用前或者使用后一定要先remove
3.@Value使用步骤(基于WHH包)
a.C#端先声明,以“usebean_”开头,后面跟类名(首字母小写)
b. java端
4.打印日志记录(导入org.slf4j.*包)
private static Logger log= LoggerFactory.getLogger(DemoApplicationTests.class);
打印方法:
log.info("反射错误");
log.info("{}", "反射错误");//可以使用{}占位,用参数补
log.info("{}{}", "反射", "错误");
//参数化Log方法的中的最后一个参数如果是一个Exception类型的对象的时候,logback将会打印该Exception的StackTrace信息
log.info("读取配置文件时出现异常", new FileNotFoundException("File not exists"));
//不想要打印StackTrace,就是要将其参数化,不建议使用
log.info("读取配置文件时出现异常{}", new FileNotFoundException("File not exists").toString());
5.统计运行时间
纳秒级:
毫秒级:long startTime = System.currentTimeMillis();
6.随机数
ThreadLocalRandom current = ThreadLocalRandom.current();
int v = current.nextInt(1,100);
7.加锁机制
ReentrantLock lock = new ReentrantLock();
lock.lock();//一般放到try-catch的外边进行加锁,如果加锁失败不需要解锁
lock.unlock();//一般是在try-catch的finally代码块里解锁,为防止发生异常导致解锁失败
8.java端集合遍历时删除元素(不可使用foreach遍历)
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if ("2".equals(item)) {
iterator.remove();
}
}
9.jdk1.8的时间转换类
日期到字符串:
LocalDateTime localDateTime =LocalDateTime.now();//2019-12-06T11:13:37.197
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String format = localDateTime.format(dateTimeFormatter);//2019-12-06
字符串到日期:
String str = "2019-12-06 12时40分39秒";
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH时mm分ss秒");
LocalDateTime parse = LocalDateTime.parse(str, dateTimeFormatter1);//2019-12-06T12:40:39
10.pgsql的乐观锁原理及实现
11.编译器忽略指定警告
作用:告诉编译器忽略指定的警告,不用在编译完成后出现警告信息;可以标注在类、字段、方法、参数、构造方法,以及局部变量上
使用: @SuppressWarnings(“”)
@SuppressWarnings({})
@SuppressWarnings(value={})
常用: @SuppressWarnings({ "unused", "rawtypes", "unchecked" })
@SuppressWarnings("all")
12.springboot实现定时任务
a. 启动类开启注解
b.开启定时任务
13.@Value指定特定配置文件(通用型)
14.maven解决包冲突
问题:
解决: