跳到主要内容

Map集合put方法返回值探究

· 阅读需 2 分钟
xilio
全栈开发工程师 @ xilio

遇到一个特别需要注意的Map集合使用问题,就是Map#put方法的返回值到底是什么,主要有以下几种情况:

1、如果之前已经有对应的key,如果此时再放入一个相同key的值,此时是做更新覆盖操作,返回旧值 2、如果之前没有对应的key,则执行添加操作,返回NULL

    Map<String, Integer> cache = new HashMap<>();
Integer r1=cache.put("key1",100); //返回NULL
Integer r2=cache.put("key1",200); //返回100 覆盖

备注:规则适用于Map下的各种实现,例如HashMapConcurrentHashMap都有相同的规则。

补充:如果需要实现如果已经有对应key存在的时候不做任何操作,可以使用框架提供的另一个方法Map#putIfAbsent,案例如下:

    HashMap<Object, Object> map = new HashMap<>();
Object o = map.putIfAbsent("1", "2");
System.out.println(o);//返回的是null
System.out.println("--");
Object o1 = map.putIfAbsent("1", "3");//key已经存在了,所以返回的是之前的值 不做任何操作
System.out.println(o1);//返回的是之前的值 o1=2

JDK JMH基准测试

· 阅读需 1 分钟
xilio
全栈开发工程师 @ xilio

介绍

什么是【基准测试】?基准测试主要用于测试代码在JVM上的性能,例如比较不同算法的性能效率,执行时间,吞吐量,执行效率,多线程性能表现,垃圾回收等等

JMH是openJdk自带的一款代码基准测试工具,具有很高的性能,完全隔离测试环境,使用简单,提供纳秒级别的测试精度,

使用

在SpringBoot项目中,通过引入下面的依赖即可继承

<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.36</version>
</dependency>

MySQL 性能优化实践

· 阅读需 3 分钟
xilio
全栈开发工程师 @ xilio

2025-05-19 MySQL 性能优化实践

介绍一些常见的MySQL性能优化实践方法,优化和没有优化过的数据库性能具有天壤之别,特别是真实生产环境中,数据量特别大,动不动就是成千上万,如果不进行性能优化,那么用户体验将会极致拉低,开发中开发者首要做的优化就是查询优化,大部分场景都是读多写少。 下面介绍几种不同维度的优化方法以及开发规范。

索引优化

  • 尽量采用前缀索引
  • 采用覆盖索引
  • 不容易区分的列不要建立索引,也就是相同数据太多的列,例如性别、状态等字段

SQL查询优化

  • 避免使用OR,应该采用union代替,union all不过滤相同数据,union会过滤重复数据
  • 避免使用select(*),需要什么字段就用什么字段,否则无法使用索引
  • 避免使用count(*),应该用count(id)
  • 避免在where条件中使用函数和计算 否则索引会失效
  • like模糊查询不要在前面加百分号,错误写法: “%key”,应该改为“key%”,否则索引会失效,效率大打折扣
  • 查询的时候不要用非类型的查询,例如!= 、NOT NULL
  • 查询条件的列视情况需要加索引

开发规范

  • 不同的开发环境采用不同的数据库
  • 数据库和表命名采用小写,字符不要太长,可以采用缩写的方式解决

数据类型优化

  • 不要在数据库中保存图片
  • 避免使用字符串类型ID作为主键
  • 字符集统一采用UTF-8