
获得徽章 0
- #每天一个知识点# 在看阿里巴巴开发手册时看到一点,在建表时,若是小数类型的数据不要设置为float和double类型,原因是在存储时,float和double类型存在精度缺失的问题,虽然缺失很小,但在比较值的时候很可能导致得不到正确结果,建议使用decimal类型的数据,如果存储的数据范围超过decimal的范围,建议将数据拆分成整数和小数分开存储。
为什么在存储时会出现精度缺失的问题呢?
1.浮点数精度问题:浮点数在计算机内部以二进制形式进行表示,而十进制数无法精确表示为二进制数。因此,某些十进制数在使用 FLOAT 或 DOUBLE 存储时可能会导致精度损失。例如,十进制数 0.1 在二进制中无限循环,因此存储为 FLOAT 或 DOUBLE 类型时可能会产生舍入误差。
2.运算结果精度问题:在进行浮点数运算时,FLOAT 和 DOUBLE 类型的结果可能会有舍入误差,导致精度损失。这是因为浮点数运算涉及舍入、舍入模式以及浮点数的有限精度。展开评论点赞
分享一下通过stream流的filter方法去重
我们首先创建一个方法作为 Stream.filter() 的参数,其返回类型为 Predicate,原理就是判断一个元素能否加入到 Set 中去,代码如下:
private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
去掉学生列表里学生名字相同的对象
studentList = studentList.stream().filter(distinctByKey(Student::getName)).collect(Collectors.toList());展开评论点赞- 面试的时候面试官让我谈谈Spring IOC,我并没有回答得很好,只回答了个大概。在这里分享一下,希望jy们面试遇到可以回答得更好些。
Spring的IOC(Inversion of Control,控制反转)是一种设计模式,基本思想是将对象的创建、组装和管理的责任交给容器,而不是由应用程序自己去创建和管理对象,在Spring中,IOC容器是Spring框架的核心部分,负责对bean生命周期的管理,bean是由IOC容器管理的对象,可以通过注解和XML或java配置来定义bean。IOC的实现是通过依赖注入(Dependency Injection,DI)机制来实现的。依赖注入是指容器在创建和组装对象时,将对象所需的依赖关系(即依赖的其他对象)注入到对象中,而不是由对象自己去获取依赖对象,Spring提供了多种注入方式,包括构造器注入、属性注入和方法注入。
通过IOC可以使得应用程序更加松散耦合、可扩展和易于测试展开赞过评论2 - 当我们使用Spring AOP时,切面(Aspect)是一个模块,用于实现特定横切逻辑的定义和应用。切面可以看作是一种特殊的类,其中包含了与横切关注点相关的代码。
切面主要用于将横切逻辑从核心业务逻辑中分离出来。在软件开发中,我们通常会遇到一些横跨多个类和方法的共同需求,比如日志记录、权限控制、事务管理等。而这些横切关注点与核心业务逻辑的代码是相互独立的,通过使用切面,我们可以将这些横切逻辑模块化,提高代码的可维护性和可重用性。
在Spring AOP中,切面由一个普通的Java类表示,其中包含了各种通知(Advice)和切点(Pointcut)。
通知(Advice):通知是切面中实际执行的代码块。Spring AOP提供了几种类型的通知,包括@Before、@After、@Around等,分别表示在方法执行前、方法执行后、方法执行前后等时机执行特定的代码逻辑。
切点(Pointcut):切点用于确定在哪些连接点上应用切面的逻辑。连接点(Join point)可以是方法的执行、字段的访问、对象的初始化等。通过切点表达式,我们可以指定需要拦截的连接点的规则或模式。
切面通过将切点和通知关联起来来实现横切逻辑的应用。切点确定在哪些连接点上应用通知,而通知则定义在连接点上执行的具体逻辑。当目标连接点与切点匹配时,切面的通知将被执行。
简而言之,切面是一个模块,它包含了横切逻辑的定义和实现。通过使用切面,我们可以将横切关注点与核心业务逻辑分离开来,提高代码的可维护性和可重用性。切面由通知和切点组成,通知定义了在连接点上执行的代码逻辑,切点确定了哪些连接点应用该切面的逻辑。展开评论点赞