生 活 最 主 要 的 还 是 感 受 , 坚 持 是 一 种 刻 意 的 练 习 , 不 断 寻 找 缺 点 突 破 缺 点 的 过 程 , 而 不 是 重 复 做 某 件 事 情 生活最主要的还是感受,坚持是一种刻意的练习,不断寻找缺点突破缺点的过程,而不是重复做某件事情 生活最主要的还是感受,坚持是一种刻意的练习,不断寻找缺点突破缺点的过程,而不是重复做某件事情
1.【文件上传的注意事项】
- 为保证服务器安全,上传文件应该放在外界无法直接访问的目录下,比如放于WEB-INF目录下。
- 为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名
- 要限制上传文件的最大值。
- 可以限制上传文件的类型,在收到上传文件名时,判断后缀名是否合法。
2.JVM本地方法栈 https://www.cnblogs.com/wade-luffy/p/
对于一个运行中的Java程序而言,它还可能会用到一些跟本地方法相关的数据区。当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界。本地方法可以通过本地方法接口来访问虚拟机的运行时数据区,但不止如此,它还可以做任何它想做的事情。
本地方法本质上时依赖于实现的,虚拟机实现的设计者们可以自由地决定使用怎样的机制来让Java程序调用本地方法。
任何本地方法接口都会使用某种本地方法栈。当线程调用Java方法时,虚拟机会创建一个新的栈帧并压入Java栈。然而当它调用的是本地方法时,虚拟机会保持Java栈不变,不再在线程的Java栈中压入新的帧,虚拟机只是简单地动态连接并直接调用指定的本地方法。
如果某个虚拟机实现的本地方法接口是使用C连接模型的话,那么它的本地方法栈就是C栈。当C程序调用一个C函数时,其栈操作都是确定的。传递给该函数的参数以某个确定的顺序压入栈,它的返回值也以确定的方式传回调用者。同样,这就是虚拟机实现中本地方法栈的行为。
很可能本地方法接口需要回调Java虚拟机中的Java方法,在这种情况下,该线程会保存本地方法栈的状态并进入到另一个Java栈。
下图描绘了这样一个情景,就是当一个线程调用一个本地方法时,本地方法又回调虚拟机中的另一个Java方法。
这幅图展示了JAVA虚拟机内部线程运行的全景图。一个线程可能在整个生命周期中都执行Java方法,操作它的Java栈;或者它可能毫无障碍地在Java栈和本地方法栈之间跳转。
该线程首先调用了两个Java方法,而第二个Java方法又调用了一个本地方法,这样导致虚拟机使用了一个本地方法栈。假设这是一个C语言栈,其间有两个C函数,第一个C函数被第二个Java方法当做本地方法调用,而这个C函数又调用了第二个C函数。之后第二个C函数又通过本地方法接口回调了一个Java方法(第三个Java方法),最终这个Java方法又调用了一个Java方法(它成为图中的当前方法)。
[外链图片转存失败(img-ZafhVpvX-1569313700681)(C:\Users\Administrator\Desktop\20190922122607.jpg)]
3.uuid
//可以使用UUID(唯一识别的通用码),保证文件名唯一;
//UUID.randomUUID(),随机生一个唯一识别的通用码;
4 .DigDecimal
float 离散 大约数
double
float 单精度浮点 32bit,
double 双精度浮点64bit,
decimal是高精度 128bit,浮点型。
float double 是 基本类型(primitive type),decimal不是。
float 有效数字7位,范围 ±1.5 × 10E−45 to ±3.4 × 10E38
double 有效数字15/16 位,范围 ±5.0 × 10 E−324 to ±1.7 × 10E308
decimal 有效数字 28/29 位,范围 ±1.0 × 10E−28 to ±7.9 × 10E28
( E – 下接几次方)
decimal的有效位数很大,达到了28位,但是表示的数据范围却比float和double类型小。
使用的时候会对计算时的性能有影响。
常数写法:
常数写法:
float f = 12.3F; (带F)
double x=12.3; (不带就是double)
decimal d = 12.30M; (带M)
浮点数运算会有精度损失问题,有精度损失时程序不会报告,要程序员自己注意
为什么用java.math.BigDecimal 不用float和double?
float和 double 计算的时候 , 主要是减法 , 会丢失精度 , 比如:
float a = 1.2f;
float b = 1.1f;
float c = a-b;
System.out.println©;
这个时候 c是0.100000024
不只是在java中 , 数据库浮点型减法也会有这个问题
oat c = a-b;
System.out.println©;
这个时候 c是0.100000024
不只是在java中 , 数据库浮点型减法也会有这个问题
而 Decimal 是精确计算 , 理论上可以无限大 , 所以一般牵扯到金钱的计算 , 都使用 Decimal