Java面试过程中碰到的值得记录的知识点

文章讨论了浮点数在二进制表示下可能出现的精度损失问题,特别是float类型的精度限制。建议使用BigDecimal避免精度损失,可以通过转换为String类型并利用其提供的计算方法。此外,文章提到了线程安全和泛型的话题,包括如何在多线程环境中确保安全以及泛型的类型安全和效率优势。还提及了其他并发控制手段如CAS和volatile,以及Java中的内存管理问题。
摘要由CSDN通过智能技术生成
  1. 基本数据类型中为什么会出现精度损失,怎么样会避免出现精度损失

float 32位

出现精度损失的原因:输入的值为十进制,而在计算的过程中,是要把十进制的小数位值在有限位的情况下转变为二进制的小数,就会出现精度的损失。

结论:二进制的小数,无法十分精准的表达十进制的小数

避免出现精度损失:

a. 可以使用BigDecimal,注意:在进行计算的时候,转为String类型,使用BigDecimal提供的方法来实现计算

b. 把小数位转化为整数位存储,如用Long类型,如金钱3.99 金钱单位值的计算可以用分位来表示即399分

额外知识点:BigDecimal底层原理是通过intCompact(扩大N倍的Long类型如:199.99->19999)、scale(小数位数),将值扩大变为Long类型再进一步进行计算。

  1. toString()方法的底层原理

toString返回的内容:如果没有重写的情况下,返回的字符串内容的类型+@+内存地址值。重写的情况下,返回的内容就是重写后的内容

  1. Mybaits中如果在顺序动态参数的情况下使用$还是#,使用$的情况下,怎么解决sql注入问题

在顺序动态参数的情况下使用$。

在使用$的情况下怎么避免sql注入问题:

a. 对传入的参数做校验,人为控制输入的参数

b. 尝试使用AOP切面统一处理

  1. AOP在业务中哪些地方使用过,具体实现方面,有没有自定义过注解

请查看本人其它文章有说明过次问题

  1. 线程池的底层原理

请查看本人其它文章有说明过次问题

  1. cpu飙高怎么处理

请查看本人其它文章有说明过次问题

  1. 泛型的使用

泛型的定义:一个多功能代码能被多种参数类型使用,泛型的本质是参数化,也就是说操作的数据类型被指定为一个参数,作用于方法,类,接口上

java标记符:

-E -Element(在集合中使用,因为集合中存放的是元素)

-T-type(java类)

-K-key(键)

-V-value(值)

-N-Number(数值类型)

-?-表示不确定的java类型 通配符

优点:

a. 类型安全,泛型提供了编译时类型的安全机制,能在编译时就能捕获到非法的类型

b. 消除强制类型转换,会使得代码变得更加清晰简洁

c. 更高的运行效率,在非泛型编程中,有些简单类型作为会引起装箱和拆箱操作,带来大的开销。

  1. 除了使用锁,还有其它哪些方式能实现线程安全

线程安全的三个核心概念:原子性,有序性,可见性

常见的使用synchronize、Lock

其它方式:CAS(依赖底层硬件的方式)、volatile(保证可见性、有序性)、final修饰不可变(?待定)

  1. JVM内存泄露、内存溢出问题

请查看本人其它文章有说明过次问题

  1. fullGC触发条件

请查看本人其它文章有说明过次问题

11. 2个list,怎么取交集,自己写一个实现方式

retainAll(Collection<?> c)方法底层原理:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半生程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值