笔记
Vigoss1996
这个作者很懒,什么都没留下…
展开
-
数值计算
浮点数运算避坑第一原则:使用 BigDecimal 表示和计算浮点数,且务必使用字符串的构造方法来初始化 BigDecimal浮点数避坑第二原则:浮点数的字符串格式化也要通过 BigDecimal 进行。BigDecimal 的 equals 方法 比较的是 BigDecimal 的 value 和 scale,1.0 的 scale 是 1,1 的 scale 是 0,所以结果一定是 false:只比较 BigDecimal 的 value,可以使用 compareTo 方法。因为 BigDe原创 2020-12-07 15:54:53 · 113 阅读 · 0 评论 -
判等问题
首先,要注意 equals 和 = =的区别。业务代码中进行内容的比较,针对基本类型只能使用 = =,针对 Integer、String 在内的引用类型,需要使用 equals。Integer 和 String 的坑在于,使用 = = 判等有时也能获得正确结果。其次,对于自定义类型,如果类型需要参与判等,那么务必同时实现 equals 和 hashCode 方法,并确保逻辑一致。如果希望快速实现 equals、hashCode 方法,可以借助 IDE 的代码生成功能,或使用 Lombok 来生成。如果类型原创 2020-11-30 09:39:24 · 110 阅读 · 0 评论 -
数据库索引学习
InnoDB 是如何存储数据的?虽然数据保存在磁盘中,但其处理是在内存中进行的。为了减少磁盘随机读取次数,InnoDB 采用页而不是行的粒度来保存数据,即数据被分成若干页,以页为单位保存在磁盘中。InnoDB 的页大小,一般是 16KB。各个数据页组成一个双向链表,每个数据页中的记录按照主键顺序组成单向链表;每一个数据页中有一个页目录,方便按照主键查询记录。B+ 树的特点包括:最底层的节点叫作叶子节点,用来存放数据;其他上层节点叫作非叶子节点,仅用来存放目录项,作为索引;非叶子节点分为不同层次原创 2020-11-23 11:30:22 · 66 阅读 · 0 评论 -
Spring声明式事务
java开发常见错误 Spring声名式事务@Transactional 生效原则1,除非特殊配置(比如使用 AspectJ 静态织入实现 AOP),否则只有定义在 public 方法上的 @Transactional 才能生效。原因是,Spring 默认通过动态代理的方式实现 AOP,对目标方法进行增强,private 方法无法代理到,Spring 自然也无法动态增强事务处理逻辑。2,必须通过代理过的类从外部调用目标方法才能生效。事务处理易错总结第一,因为配置不正确,导致方法上的事务没生效。原创 2020-11-16 14:31:56 · 283 阅读 · 0 评论 -
HTTP 调用最常遇到的超时、重试和并发问题
对于 HTTP 调用,虽然应用层走的是 HTTP 协议,但网络层面始终是 TCP/IP 协议。TCP/IP 是面向连接的协议,在传输数据之前需要建立连接。几乎所有的网络框架都会提供这么两个超时参数:连接超时参数 ConnectTimeout,让用户配置建连阶段的最长等待时间;读取超时参数 ReadTimeout,用来控制从 Socket 上读取数据的最长等待时间。正确理解和配置这两个参数,对业务应用特别重要,毕竟超时不是单方面的事情,需要客户端和服务端对超时有一致的估计,协同配合方能平衡吞吐量和错误原创 2020-11-09 10:19:07 · 2769 阅读 · 0 评论 -
java业务开发常见错误:线程池
线程池的声明需要手动进行new ThreadPoolExecutor形式。生产中常因为使用Executors类下方法,如newFixedThreadPool和newCachedThreadPool导致OOM问题。newFixedThreadPool中虽然线程数可以限制,但任务数量是无限的,因为使用的是LinkendBlockingQueue无限队列来存储任务,任务不能及时处理,过多堆积,最终OOM;newCachedThreadPool线程数是无上界的,而工作队列是SynchronousQueue没有存原创 2020-10-26 15:10:19 · 527 阅读 · 0 评论 -
XML转对象,对象转XML的学习
上周学习了XML转对象,对象转XML的方法主要是使用了javax的包package com.xml; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; impor原创 2020-08-17 10:29:03 · 164 阅读 · 0 评论 -
Hystrix实现断路器、服务降级、线程隔离
了解Hystrix之前首先需要明白几个概念,雪崩效应、断路器(熔断机制)、服务降级、线程隔离。雪崩效应:默认情况下,tomacat只有一个线程池去处理请求,这样在高并发的情况下大量的请求访问同一个服务器接口,线程池中所有的线程都用来处理访问这个接口的请求,就会导致请求全部堆积起来。这样其他接口有请求时也会阻塞,没有线程来处理,导致服务器崩溃。假设线程池有10个线程,每个线程每秒可以处理10个请求,一个接口有30000个请求,则需要处理五分钟。在这五分钟内如果有其他请求访问时,由于所有线程被占用,用户那边原创 2020-08-03 09:49:43 · 244 阅读 · 0 评论 -
学习笔记:策略模式
本周参加思特沃克的培训,作业中需要使用策略模式,对策略模式进行了学习。策略模式在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。介绍意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难原创 2020-07-26 21:55:35 · 134 阅读 · 0 评论