基本数据类型中为什么会出现精度损失,怎么样会避免出现精度损失
![](https://i-blog.csdnimg.cn/blog_migrate/3e19dfcb3925fa7c3b60c2f4d7b0a113.jpeg)
float 32位
出现精度损失的原因:输入的值为十进制,而在计算的过程中,是要把十进制的小数位值在有限位的情况下转变为二进制的小数,就会出现精度的损失。
结论:二进制的小数,无法十分精准的表达十进制的小数
避免出现精度损失:
a. 可以使用BigDecimal,注意:在进行计算的时候,转为String类型,使用BigDecimal提供的方法来实现计算
b. 把小数位转化为整数位存储,如用Long类型,如金钱3.99 金钱单位值的计算可以用分位来表示即399分
额外知识点:BigDecimal底层原理是通过intCompact(扩大N倍的Long类型如:199.99->19999)、scale(小数位数),将值扩大变为Long类型再进一步进行计算。
toString()方法的底层原理
toString返回的内容:如果没有重写的情况下,返回的字符串内容的类型+@+内存地址值。重写的情况下,返回的内容就是重写后的内容
Mybaits中如果在顺序动态参数的情况下使用$还是#,使用$的情况下,怎么解决sql注入问题
在顺序动态参数的情况下使用$。
在使用$的情况下怎么避免sql注入问题:
a. 对传入的参数做校验,人为控制输入的参数
b. 尝试使用AOP切面统一处理
AOP在业务中哪些地方使用过,具体实现方面,有没有自定义过注解
请查看本人其它文章有说明过次问题
线程池的底层原理
请查看本人其它文章有说明过次问题
cpu飙高怎么处理
请查看本人其它文章有说明过次问题
泛型的使用
泛型的定义:一个多功能代码能被多种参数类型使用,泛型的本质是参数化,也就是说操作的数据类型被指定为一个参数,作用于方法,类,接口上
java标记符:
-E -Element(在集合中使用,因为集合中存放的是元素)
-T-type(java类)
-K-key(键)
-V-value(值)
-N-Number(数值类型)
-?-表示不确定的java类型 通配符
优点:
a. 类型安全,泛型提供了编译时类型的安全机制,能在编译时就能捕获到非法的类型
b. 消除强制类型转换,会使得代码变得更加清晰简洁
c. 更高的运行效率,在非泛型编程中,有些简单类型作为会引起装箱和拆箱操作,带来大的开销。
除了使用锁,还有其它哪些方式能实现线程安全
线程安全的三个核心概念:原子性,有序性,可见性
常见的使用synchronize、Lock
其它方式:CAS(依赖底层硬件的方式)、volatile(保证可见性、有序性)、final修饰不可变(?待定)
JVM内存泄露、内存溢出问题
请查看本人其它文章有说明过次问题
fullGC触发条件
请查看本人其它文章有说明过次问题
11. 2个list,怎么取交集,自己写一个实现方式
retainAll(Collection<?> c)方法底层原理:
![](https://i-blog.csdnimg.cn/blog_migrate/0192fb408a4b78aba616d3b79b862bca.png)