Java浅拷贝、深拷贝 新对象和旧对象的成员变量的值一致,新对象中的引用变量指向的对象也是被复制了新对象,其中一个对象改变引用变量指向的对象内容,另一个对象中同样的变量不会跟着改变,即对于引用变量,深拷贝复制的对象本身。新对象和原对象的成员变量一致,引用变量也指向同一个对象,其中一个对象改变引用变量指向的对象内容,另一个对象中同样的变量也会跟着改变,即对于引用变量,浅拷贝复制的是其地址,并非对象本身。
mybatis-plus @SqlParser(Failed to process, please exclude the tableName or statementId) 自定义sql会经过mybatis-plus的某些语法解析插件的语法判断,如果包含某些关键字、格式、语法会认为sql有问题,从而抛出异常,而@SqlParser(filter = true)则是告诉mybatis-plus跳过这些语法解析判断。使用mybatis-plus写复杂sql时错误,但把sql在复制到mysql中执行又没问题,例如。
面试题库之JAVA基础篇(三) 将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会被序列化。新对象和旧对象的成员变量的值一致,新对象中的引用变量指向的对象也是被复制了新对象。新对象和旧对象的成员变量的值一致,引用变量指向的也是同一个对象。
面试题库之JAVA基础篇(二) 集合的fail-fast机制:迭代器遍历的每次循环开始时候,expectModCount会和modCount比较,如果不相等,就认为有别的线程修改了集合,则会抛出ConcurrentModificationException异常。expectModCount:迭代器内部记录集合的修改次数,初始化时会将集合当前的修改次数记录下来,迭代器修改集合元素时,modCount、expectModCount均+1。新对象和旧对象的成员变量的值一致,新对象中的引用变量指向的对象也是被复制了新对象。
面试题库之JAVA基础篇(一) 万物皆对象,将解决问题的各个元素抽象成对象,对象中包含解决单个或某类问题的属性、行为(方法),将需要的对象组合到一起,达到解决问题的目的;面向对象有封装、继承、多态的特性,所以有很好的维护性、复用性、扩展性。
mysql之sql优化总结(二) 因为InnoDB的行锁是针对索引加的锁,不是针对记录加的锁,并且该索引不能失效,否则会从行锁升级为表锁,影响并发事务性能。入下面sql的name字段没有创建索引,那么mysql会自动把行锁升级为表锁。,避免一条一条的提交,转换为一次性提交多条sql,建议没次的sql数量控制在1000条以内。,避免一条一条的插入数据,应,每次建议在1000条数据以内,如下。根据索引字段修改,避免行锁升级为表锁。,如自增主键,能够避免也分裂现象。,避免误删过多的数据,如下。多表关联删除时使用join。,尽量不使用子查询。
mysql之sql优化总结(一) 使用前缀索引(短索引),短索引不仅可以提高查询性能而且可以节省磁盘空间和I/O操作,减少索引文件的维护开销,但缺点是不能用于 ORDER BY 和 GROUP BY 操作,也不能用于覆盖索引。比如有一个varchar(255)的列,如果该列在前10个或20个字符内,可以做到既使前缀索引的区分度接近全列索引,那么就不要对整个列进行索引。为了减少key_len,可以考虑创建前缀索引,即指定一个前缀长度,可以使用。count(distinct leftIndex(列名, 索引长度))/count(*)
mysql优化之索引 索引就像书的目录一样,能够让我们快速的找到想要的内容。索引是一个有序列表,每个索引包含这个索引的值和对应数据的物理地址,通过索引能快速定位对应数据,从而提高查询的效率。索引并非越多越好,要根据实际情况合理建立索引,否也会对数据库的性能造成一定的负面影响。mysql常用的索引类型包含:普通索引、唯一索引、主键索引、联合索引。
mysql优化之explain详解 mysql的explain(执行计划)用于解释sql的执行的过程,然后把sql的执行过程用一张表格表示出来,它并不真正的执行sql,如下图。explain能够为我们优化sql提供很好参考作用。下面我来看下执行计划表中各个字段是什么意思id(select的序号)每一行数据代表一个select,id越大越先执行,id相同则从上往下执行,id为null的最后执行。select_type(查询的类型)SIMPLE:简单查询,没有子查询等等,简单YYDS。
poi判断excel单元格内容是否为日期 通过cell.getCellType()拿到单元格的数据类型,CellType是一个枚举类型详情如下,能够看到并没有日期类型的code,poi读取到的日期类型的单元格时会认为是NUMERIC类型,然后,poi提供了HSSFDateUtil.isCellDateFormatted(cell)方法来判断单元格里面的数据是否为日期类型。所以,要判断是否为时间类型的单元格,按如期代码即可。
springboot导出(POI) 我们结合自定义注解,让导出使用起来更方便简洁且更容易扩展。/*** 字段名*//*** 字段顺序*//*** 单元格宽度*//*** 日期格式*//*** 文件名称* @return*/String fileName() default "导出文件";/*** sheet页名称* @return*//*** 表头是否加粗* @return*//*** 表头颜色* @return*/
java自定义注解(Annotation) interface:表示是一个注解@ Target:注解的作用对象TYPE:类、接口、枚举FIELD:属性METHOD:方法@Retention:注解的被保留的阶段SOURCE:保留在源文件中,编译时被丢弃CLASS:由编译器记录在类文件中,但在运行时VM不必保留注解。这是默认行为。RUNTIME:保留到class字节文件中,运行时可被jvm读取到,一般自定义注解指定这个。
redisson分布式锁 *** 获取锁* @return*//*** 获取锁* @param waitTime 阻塞时间(秒)* @return*/try {if(resp){/*** 释放锁*/return;if(!return;除此,官网还有其他几个所对想,具体参考redisson。
redisson常用api *** @description: redisson工具类 * @author: 小花卷的Dad */@Component/*** 锁默认释放时间*/@Autowired/*** key是否存在* @return*//*** 获取生命周期* @return*//*** 设置生命周期* @param time(毫秒)* @return*/if(!/*** 保存字符串*//*** 保存字符串。
Failed to start bean ‘documentationPluginsBootstrapper‘ 的时候,遇到过同样的问题,原因是Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.7.X使用的是PathPatternMatcher,所以改了相关配置。在集成redisson-spring-boot-starter时,项目启动时报如下错误。但是在集成redisson-spring-boot-starter的时候,依然会报同样的错误。在swagger的配置类中添加如下内容。
springboot集成redisson springboot集成有两种方式,分别是集成redisson-spring-boot-starter或redisson-spring-data。由于作者的项目和redisson-spring-boot-starter有冲突,所以选择集成redisson-spring-data,下面介绍集成集成步骤,已单机版redis为列。
mysql Range checked for each record (index map: 0x4) mysl查询执行explain,关联查询字段出现以下提示,尽管被关联字段建了索引也没用。两张表的关联字段的排序规则不一致,改成一致的即可。