![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA业务开发常见错误
文章平均质量分 63
java的探索之旅
专注编程n多年
展开
-
JAVA业务开发常见错误整理(17.OOM 18.反射、注解、泛型遇到OOP)
朱晔《Java业务开发常见错误100例》课程学习整理一、OOM1.程序确实需要超出JVM配置的内存上限的内存。不管是程序实现的buhel,haishi因为各种框架对数据的重复处理、加工和转换,相同的数据在内存中不一定只只占一份空间。针对内存量使用超大的业务逻辑,比如缓存逻辑。文件上传下载和导出逻辑,我们在做容量评估时,可能还需要实际做一下Dump,2.出现内存泄漏,也就是我们认为没有用的对象最终没有被GC,GC并不会回收强引用对象,当我们在程序中定义一些容器作为缓存,但容器中的数据无限增长,要特原创 2021-05-28 10:28:05 · 352 阅读 · 0 评论 -
JAVA业务开发常见错误整理(15.序列化 16.Java8时间类)
朱晔《Java业务开发常见错误100例》课程学习整理一、序列化(1)序列化和反序列化需要确保算法一致,因为不同序列化算法输出必定不同,要正确处理序列化后的数据就要使用相同的反序列化算法例:Redis的Redis Template和StringRedisTemplate两种方式存取的数据完全无法通用,因为默认情况下RedisTemplate针对Key和Value使用了JDK序列化处理,StringRedisTemplate对于Key和Value,使用String序列化方式。自定义RedisTe原创 2021-05-26 10:27:57 · 284 阅读 · 0 评论 -
JAVA业务开发常见错误整理(13.日志记录 14.文件IO)
朱晔《Java业务开发常见错误100例》课程学习整理一、日志记录日志记录重复(1)logger配置继承关系导致日志重复记录(2)错误配置LevelFilter造成日志重复记录异步日志问题(1)记录异步日志撑爆内存(2)记录异步日志出现日志丢失(3)记录异步日志出现阻塞Logback提供的AsyncAppender实现异步日志记录,重要参数:includeCallerData 控制是否收集调用方数据,默认false,queueSize 控制阻塞队列大小,使用Arra原创 2021-05-19 17:58:46 · 233 阅读 · 0 评论 -
JAVA业务开发常见错误整理(12.异常处理)
朱晔《Java业务开发常见错误100例》课程学习整理原创 2021-05-18 22:27:47 · 561 阅读 · 0 评论 -
JAVA业务开发常见错误整理(9.数值计算 10.集合类)
朱晔《Java业务开发常见错误100例》课程学习整理一、数值计算1.精确表示浮点数应该使用BigDecimal。并且使用BigDecimal的Double入参构造方法同样存在精度丢失问题,应该使用String入参的构造方法或者BigDecimal.valueOf方法来初始化2.对浮点数做精确计算,参与计算的各种数值应该始终使用BigDecimal,所有的计算都要通过BigDecimal方法进行。任何一个环节出现精度损失,最后的计算结果可能都会出现误差3.对于浮点数的格式化,如果使用Strin原创 2021-05-08 11:35:22 · 208 阅读 · 0 评论 -
JAVA业务开发常见错误整理(7.数据库索引 8.判等问题)
朱晔《Java业务开发常见错误100例》课程学习整理一、数据库索引InnoDB存储数据虽然数据存储在磁盘中,但处理是在内存中的,为了减少磁盘随机读取次数,InnoDB采用页而不是行的粒度来保存数据,即数据被分成若干页,以页为单位保存在磁盘中。InnoDB的页大小,一般是16K.。各个数据页组成一个双向链表,每个数据页中的记录按照主键顺序组成单向链表;每一个数据页中有一个页目录,方便按照逐渐查询记录。页目录通过槽把记录分成不同的小组,每个小组有若干条记录。通过槽我们可以采用二分法快速搜索,无需从最原创 2021-05-07 17:11:20 · 118 阅读 · 0 评论 -
JAVA业务开发常见错误整理(5.HTTP调用 6.Spring声明式事务)
朱晔《Java业务开发常见错误100例》课程学习整理一、HTTP调用配置连接超时和读取超时参数连接超时和连接超时误区1.连接超时配置很长,比如60秒。一般TCP三次握手建连时间很短,通常在毫秒最多到秒级,长时间无法建连需排查网络和防火墙问题,连接超时通常可配置为1-5秒2.排查连接超时,没有理清连的是哪里。通常常务会有多个节点,如果别的客户端通过客户端负载均衡技术连接服务端,那么客户端和服务端会直接建连,此时出现连接超时大概率是服务端的问题,而如果服务端通过蕾西Nginx反向代理来负载均原创 2021-05-07 13:41:28 · 209 阅读 · 0 评论 -
JAVA业务开发常见错误整理(3.线程池 4.连接池)
朱晔《Java业务开发常见错误100例》课程学习整理一、线程池线程池的声明需要手动进行《阿里巴巴Java开发手册》中提到。禁止使用Java中的Executors类定义的快捷工具方法,而应该手动new ThreadPoolExecutor来创建线程池。最典型的问题就是new FixedThreadPool和new CachedThreadPool,可能因为资源耗尽导致OOM问题。(1)new FixedThreadPool时,线程池的工作队列直接new了一个LinkedBlockingQ.原创 2021-05-06 16:38:58 · 238 阅读 · 1 评论 -
JAVA业务开发常见错误整理(1.线程安全 2.代码加锁)
线程安全问题1、线程重用导致数据错乱Bug例:使用ThreadLocal缓存数据,因为tomcat的工作线程是基于线程池,若ThreadLocal存储的数据在代码运行完成,未显示地去清空,会产生数据错乱问题。其他类似线程工具使用时也会存在该问题2、使用线程安全的并发工具不代表解决了所有线程安全问题例:ConcurrentHashMap只能保证提供的原子性读写操作是线程安全的...原创 2021-04-21 22:27:19 · 284 阅读 · 1 评论