随笔分类 - Java避坑100+
前辈踩过的坑
摘要:太多相同的对象导致oom 背景: -- 有一个项目在内存中缓存了全量用户数据, -- 在搜索用户时可以直接从缓存中返回用户信息。 -- 但现在为了改善用户体验, -- 需要实现输入用户名自动在下拉框提示不全用户名的功能(自动完成功能)。 分析: -- 对于快速检索的需求,最好使用Map实现,比Lis
阅读全文
摘要:时区问题 1. Date 并无时区问题,世界上任何一台计算机使用 new Date() 初始化得到的时间都一样。Date 中保存的是 UTC 时间,UTC 是以原子钟为基础的统一时间,不以太阳参照计时,并无时区划分。 2. Date 中保存的是一个时间戳,代表的是从 1970 年 1 月 1 日 0
阅读全文
摘要:确保序列化和反序列化算法的一致性 不同序列化算法输出必定不同,要正确处理序列化后的数据就要使用相同的反序列化算法。 Jackson序列化与反序列化注意 Jackson 有大量的序列化和反序列化特性,可以用来微调序列化和反序列化的细节。需要注意的是,如果自定义 ObjectMapper 的 Bean,
阅读全文
摘要:确保文件中字符的字符集和字符流的字符集是一致 //确保文件中字符的字符集和字符流的字符集是一致的,否则可能产生乱码。 private static void right1() throws IOException { char[] chars = new char[10]; String conte
阅读全文
摘要:Java体系日志框架 Logback、Log4j、Log4j2、commons-logging、JDK自带的java.util.logging等;(Logback和Log4j使用最广泛,同一人开发的,其中Logback是Log4j的改进版) 如果程序启动时出现 SLF4J 的错误提示,那很可能是配置
阅读全文
摘要:框架层统一异常处理 1. 在框架层注意进行异常的自动、统一处理,做兜底工作; 2. 处理一些异常上升到最上层逻辑还是无法处理,以统一的方式i纪念性异常转换,如@RestControllerAdvice+@ExceptionHandler来捕获‘未处理’异常; - 对于自定义的业务异常,以Warn级别
阅读全文
摘要:参数Integer包装类型,自动拆箱出现空指针异常 使用Optional.ofNullable构造一个Optional,然后使用orElse(0)把null替换位默认值再进行+1操作 字符串比较出现空指针异常 对于String和字面量的比较,把字面量放前边,对于两个可能为null的字符串比较,可以使
阅读全文
摘要:Arrays.asList使用注意事项 1. 不能直接使用Arrays.asList来转换基本类型数组; //解决1,装箱 int[] arr1 = {1, 2, 3};//直接声明为包装类则可使用Arrays.asList直接转 List list1 = Arrays.stream(arr1).b
阅读全文
摘要:BigDecimal的使用 1. 使用BigDecimal表示和计算浮点数,需要使用字符串的构造方法来初始化BigDecimal new BigDecimal("0.1").add(new BigDecimal("0.1"))// + new BigDecimal("0.1").subtract(n
阅读全文
摘要:场景 更新表中某条数据时,把其他数据也更新了! 还原 调接口:根据id更新订单状态,入参 { "id": 2, "orderStatus": 2 } 实体: private Long id;private int orderType; private int price;//单位:分 private
阅读全文
摘要:equals与==的区别 1. equals是方法,==是操作符; 2. 对基本类型,int、long等进行判等,只能使用==,比较的是直接值(基本类型的值就是其数值); 3. 对引用类型,Integer、Long和String等进行判等,需要使用equals进行内容判等; 4. 引用类型的直接值是
阅读全文
摘要:创建索引的代价 1. 维护代价、空间占用、查询时回表的代价; 2. 多字段的联合索引,需要考虑尽可能利用索引本身完成数据查询,减少回表的成本; 3. 按需创建,足够轻量。 保证索引的有效性 1. 对于后缀的匹配查询、查询中不包含联合索引的第一列、查询条件涉及函数计算等情况无法使用索引; 2. sql
阅读全文
摘要:@Transactional 生效原则1:除非特殊配置(比如使用AspectJ静态织入实现AOP),否则只有定义在public方法上的@Transactional才能生效。 原因:Spring默认通过动态代理的方式实现AOP,对目标方法进行增强,private方法无法代理到,Spring自然也无法动
阅读全文
摘要:概念: HTTP调用,应用层走的HTTP协议,但网络层面始终是TCP/IP协议。TCP/IP是面向连接的协议,在传输数据之前需要建立连接。几乎所有网络框架都会提供两个超时参数。 :建立TCP连接的时间;确认需要明白连接的是谁。 连接超时:ConnectTomeout 时间不易过长:让用户配置建连阶段
阅读全文
摘要:什么时候需要用线程池? 答:线程的创建比较昂贵(创建线程需要系统资源,频繁创建和销毁消耗大量时间,导致性能问题);短平快的任务(接收大量小任务)进行分发处理使用线程池而不是一个任务对应一个新线程。 线程池的使用需要注意哪些? 1. 需要手动声明线程池 《阿里巴巴Java开发手册》中讲,禁止使用快捷的
阅读全文
摘要:为什么锁能解决线程安全问题? 答:因为只有一个线程拿到锁,加锁后的代码中的资源操作时线程安全的。所以加锁前要清楚锁和被保护的对象是不是一个层面的(线程、业务逻辑、锁三者之间的关系)。 锁和被保护的对象层面怎么确认? 答:静态字段属于类,类级别的锁才能保护;而非静态字段属于类级别,实例级别的锁就可以保
阅读全文
摘要:ThreadLocal使用场景: 在一个线程中传递同一个对象即适用于变量在线程间隔离,而在方法或类间共享的场景。(横跨若干方法调用,需要传递的对象,我们通常称之为上下文(Context),它是一种状态,可以是用户身份、任务信息等) 例如:可以在ThreadLocal中缓存数据,避免了同一参数在所有方
阅读全文

浙公网安备 33010602011771号