常读常看-Java中我的灯下黑(一)

2 篇文章 0 订阅

1 最好这么用

1.1 Java的 BigDecimal

Java中,在做金额相关计算的时候, 我们都知道使用BigDecimal类, 因为 浮点型变量(floatdouble)在进行计算的时候会出现精度丢失的问题;

但是BigDecimal也会有精度丢失的问题,这个要知道

BigDecimal什么时候会出现精度丢失?

我们先大体看下其构造器和常用方法

//构造器(部分)
BigDecimal(String val)
BigDecimal(double val)
BigDecimal(int val)
BigDecimal(long val)
//两个BigDecimal的相加
add(BigDecimal)
//两个BigDecimal的相减
subtract(BigDecimal)
//两个BigDecimal的相乘
multiply(BigDecimal)
//两个BigDecimal的相除
divide(BigDecimal)
//转字符串
toString()
//转双精度           
doubleValue() 
//转单精度
floatValue()
//转长整型
longValue()
//转整数
intValue()

看看丢失精度的BigDecimal

BigDecimal db = new BigDecimal(1.01);
BigDecimal db2 = new BigDecimal(1.04);
System.out.println(db.add(db2));
//result
//2.0500000000000000444089209850062616169452667236328125

再看下如何将上面的情况变成精度不丢失的BigDecimal

BigDecimal db = new BigDecimal("1.01");
BigDecimal db2 = new BigDecimal("1.04");
System.out.println(db.add(db2));
//result
//2.05

切记
进行金额相关的计算,一定要使用BigDecimal,而且通过字符串存值BigDecimal(String val)

原文-Java中的BigDecimal类你了解多少?

1.2 SpringBoot项目在打包时如何跳过你的test模块

只需要在pom.xml<properties>标签中加入<<skipTests>true</skipTests>>

1.3 MyBatis 的 ResultMap继承

实体

public class SubClass extends SupClass{
}

mybatis的sql xml文件

<!--父类的resultMap-->
<resultMap id="BaseResultMap" type="SupClass" >

</resultMap>

<!--子类的resultMap-->
<resultMap id="SubClassResultMap" type="SubClass" extends="BaseResultMap">
  </resultMap>

原文

2 "它们"的区别

2.1 request 中 Parameter和Attribute的区别

request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据;request.getParameter()方法返回String类型的数据;
request.setAttribute()getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享;这两个方法能够设置Object类型的共享数据;


getParameter()得到的都是String类型的;
getAttribute()则可以是对象;


getParameter()是获取POST/GET传递的参数值;
getAttribute()是获取对象容器中的数据值;


getParameter()用于客户端重定向时,即点击了链接或提交按钮时的值传递;
getAttribute()用于服务器端重定向时,即在servlet中使用了forward函数,getAttribute()只能收到程序用setAttribute()传过来的值;


setAttribute()是应用服务器把这个对象放在该页面所对应的一块内存中其,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中. 这样getParameter()就能取到你set的值或对象;
getParameter()只是应用服务器在分析你的request页面的文本时,取走你设在表单或url重定向的值;

原文

3 总是听到但是不太明白的定义

3.1 结构化数据、半结构化数据和非结构化数据

结构化数据
结构化数据是指可以使用关系型数据库表示和存储,表现为二维形式的数据;

一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的;(简单的举例就是MySQL数据库中存储的数据)

半结构化数据
半结构化数据是结构化数据的一种形式, 但是它并不符合关系型数据库或其他数据表的形式关联起来的数据模型结构, 但包含相关标记,用来分隔语义元素以及对记录和字段进行分层. 也被称为 自描述的结构;

半结构化数据,属于同一类实体可以有不同的属性, 即使这些属性被组合在一起, 其顺序并不重要;

常见的半结构化数据有XMLJSON;

非结构化数据
就是没有固定结构的数据. 各种文档,图片,视频/音频都属于非结构化数据;

对于这些数据我们一般直接整体进行存储,而且一般存储为二进制的数据格式;

4 咋还不知道

4.1 @PostConstruct

关于@PostConstruct主要参考文章 知乎

@PostConstruct注解是由JAVA提供的,它用来修饰一个非静态的void方法,他会在服务器加载Servlet的时候运行,并且只运行一次;

其初始化位置

​​​​​​​执行顺序: 父类静态变量或静态语句块 –> 子类静态变量或静态语句块 -> 父类实例变量或初始化语句块 –> 父类构造方法->子类实例变量或初始化语句块->子类构造方法–> @Autowired -> @PostConstruct…->destroy->@PreDestroy
在这里插入图片描述
使用场景:
最常用应该是在项目启动时加载数据字典

其它可参考另外一篇文章 @PostConstruct

注意:

该注解和@PreDestroy生于 JAVA EE 5, 卒于 JAVA EE 11

未完,待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值