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

本文深入探讨Java中BigDecimal的正确使用方式,避免精度丢失;介绍SpringBoot项目打包时排除test模块的方法;解析MyBatis的ResultMap继承机制;阐述request中Parameter与Attribute的区别;并解释结构化、半结构化及非结构化数据的概念。

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

未完,待续…

数据驱动】【航空航天结构的高效损伤检测技术】数据驱动的结构健康监测(SHM)方法,用于进行原位评估结构健康状态,即损伤位置和程度,在其中利用了选定位置的引导式兰姆波响应(Matlab代码实现)内容概要:本文介绍了种基于数据驱动的结构健康监测(SHM)方法,利用选定位置的引导式兰姆波响应对航空航天等领域的结构进行原位损伤检测,实现对损伤位置与程度的精确评估,相关方法通过Matlab代码实现,具有较强的工程应用价值。文中还提到了该技术在无机、水下机器、太阳能系统、四轴飞行器等多个工程领域的交叉应用,展示了其在复杂系统状态监测与故障诊断中的广泛适用性。此外,文档列举了大量基于Matlab/Simulink的科研仿真资源,涵盖信号处理、路径规划、机器学习、电力系统优化等多个方向,构成一个综合性科研技术支持体系。; 适合群:具备定Matlab编程基础,从事航空航天、结构工程、智能制造、自动化等相关领域研究的研究生、科研员及工程技术员。; 使用场景及目标:①用于航空航天结构、无机机体等关键部件的实时健康监测与早期损伤识别;②结合兰姆波信号分析与数据驱动模型,提升复杂工程系统的故障诊断精度与可靠性;③为科研项目提供Matlab仿真支持,加速算法验证与系统开发。; 阅读建议:建议读者结合文档提供的Matlab代码实例,深入理解兰姆波信号处理与损伤识别算法的实现流程,同时可参考文中列出的多种技术案例进行横向拓展学习,强化综合科研能力。
【无机论文复现】空地多无平台协同路径规划技术研究(Matlab代码实现)内容概要:本文围绕“空地多无平台协同路径规划技术”的研究展开,重点在于通过Matlab代码实现对该技术的论文复现。文中详细探讨了多无平台(如无机与地面车辆)在复杂环境下的协同路径规划问题,涉及三维空间路径规划、动态避障、任务分配与协同控制等关键技术,结合智能优化算法(如改进粒子群算法、遗传算法、RRT等)进行路径求解与优化,旨在提升多平台系统的协作效率与任务执行能力。同时,文档列举了大量相关研究主题,涵盖无机控制、路径规划、多智能体协同、信号处理、电力系统等多个交叉领域,展示了该方向的技术广度与深度。; 适合群:具备定Matlab编程基础和路径规划背景的研究生、科研员及从事无机、智能交通、自动化等相关领域的工程技术员。; 使用场景及目标:①用于学术论文复现,帮助理解空地协同路径规划的核心算法与实现细节;②支撑科研项目开发,提供多平台协同控制与路径优化的技术参考;③作为教学案例,辅助讲授智能优化算法在无系统中的实际应用。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法实现流程与参数设置,同时可参照文中列出的其他相关研究方向拓展技术视野,建议按目录顺序系统学习,并充分利用网盘资源进行仿真验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值