- 博客(143)
- 资源 (12)
- 问答 (1)
- 收藏
- 关注

转载 Mybatis的Mapper中的方法为什么不能重载?
前言 在初入门 Mybatis 的时候可能都犯过一个错误,那就是在写 Mapper 接口的时候都重载过其中的方法,但是运行起来总是报错,那时候真的挺郁闷的,但是自己也查不出来原因,只能默默的改了方法名,哈哈,多么卑微的操作。 今天就从 源码 角度为大家解惑为什么 Mybatis 中的方法不能重载? 环境配置 本篇文章讲的一切内容都是基于 Mybatis 3.5 和 SpringBoot-2.3.3.RELEASE。 错误示范 举个栗子:假设现在有两个需求,一个是根据用户的
2021-10-26 17:52:34
392
1

原创 2021秋招高频面经汇总(Java开发岗)
如果让你设计一个缓存,你怎么设计?1.数据结构首要考虑的就是数据该如何存储,用什么数据结构存储,最简单的就直接用Map来存储数据;或者复杂的如redis一样提供了多种数据类型哈希,列表,集合,有序集合等,底层使用了双端链表,压缩列表,集合,跳跃表等数据结构;2.对象上限因为是本地缓存,内存有上限,所以一般都会指定缓存对象的数量比如1024,当达到某个上限后需要有某种策略去删除多余的数据;3.清除策略上面说到当达到对象上限之后需要有清除策略,常见的比如有LRU(最近最少使用)、FIFO
2021-08-25 17:47:28
3721
11

原创 简单说几个JDK1.7和JDK1.8的区别?
1.Switch支持String类型2.Catch多个异常catch(IOException | SQLException | Exception ex){ logger.error(ex); throw new MyException(ex.getMessage());}3.泛型实例创建可以通过类型推断简化,new对象后边的泛型可以不用写,直接< >4.HashMap性能优化:jdk1.8 当每个链表长度 >8 ,并且数组元素个数 ≥64时,会
2021-07-30 17:29:43
8906

转载 JAVA栅栏和闭锁的区别
闭锁:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。即,一组线程等待某一事件发生,事件没有发生前,所有线程将阻塞等待;而事件发生后,所有线程将开始执行;闭锁最初处于封闭状态,当事件发生后闭锁将被打开,一旦打开,闭锁将永远处于打开状态。 闭锁CountDownLatch唯一的构造方法CountDownLatch(intcount),当在闭锁上调用countDown()方法时,闭锁的计数器将减1,当闭锁计数器为0时,闭锁将打开,所有线程将通过闭锁开始执行。...
2021-07-30 16:58:17
1084

转载 MySQL的MVCC是什么?
首先看一下什么是数据库事务事务就是为了保证一组数据库操作,要么全部成功,要么全部失败。事务的四大特性 原子性(Atomicity) 一个事务中的多组操作,要么全部成功,要么全部失败。在事务提交(commit)成功之后,所有的操作都生效,提交失败,所有的操作都会回滚。 持久性(Durable) 事务一旦提交,对数据库的变更就会持久化到磁盘,即使数据库发生异常重启,数据也不会丢失。 隔离性(isolation) 事务在执行过程中,是与外界完全隔离的,即使数据库发生了变更,事
2021-07-28 16:48:37
1134

转载 Mybatis源码分析
工作原理: 1. 读取核心配置文件mybatis-config.xml并返回InputStream流对象。 2. 根据InputStream流对象解析出Configuration对象,然后创建SqlSessionFactory工厂对象 3. 根据一系列属性从SqlSessionFactory工厂中创建SqlSession 4. 从SqlSession中调用Executor执行数据库操作&&通过解析生成具体SQL指令 5. 通过TypeHandler(数据库与j
2021-07-27 18:10:35
903

转载 java中静态变量,静态代码块,静态方法,实例变量,普通代码块的初始化顺序
单个类的初始化顺序加载顺序: 加载类 --> 静态变量、静态代码块(先后顺序加载) --> 成员变量、普通代码块 --> 构造方法父子类初始化顺序父类静态变量、静态代码块 --> 子类静态变量、静态代码块 --> 父类成员变量、普通代码块--> 父类构造方法 --> 子类成员变量、普通代码块--> 子类构造方法总结:如果类还没有被加载:1、先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。2
2021-07-27 17:38:51
1316

翻译 秒杀笔记(乐观锁+令牌桶+Redis缓存)
1. 秒杀系统1.1 秒杀场景电商抢购限量商品售卖明星演唱会门票火车票抢座123061.2 为什么要做秒杀系统如果你的项目流量非常小,完全不用担心并发的购买需求,那么做这样一个系统意义并不大。但如果你的系统要像12306那样接收高并发访问和下单的考验,那么你就需要一套完整的流程保护措施,来保证你系统在用户流量高峰期不会挂了。严格防止超卖:库存100件,你卖了120件,等着辞职吧防止黑产:防止不怀好意的人群通过各种技术手段把你本该下发给群众的利益全收入囊中保证用户体验:高并发下,别网
2021-07-26 18:17:56
2013
2

原创 Java基础之多线程篇
1.线程概述进程: 进程是计算机中的程序关于某数据集合上的一次运行活动, 是操作系统进行资源分配与调度的基本单位。 可以把进程简单的理解为正在操作系统中运行的一个程序。线程: 线程是进程的一个执行单元, 一个线程就是进程中一个单一顺序的控制流, 线程是进程的一个执行分支。 进程是线程的容器,一个进程至少有一个进程。 一个进程中也可以有多个线程。在操作系统中是以进程为单位分配资源,如虚拟空间,文件描述符等。每个线程都有各自的线程栈、自己
2021-05-19 15:44:16
1076
5

原创 Java集合详解以及底层源码分析和部分面试题
目录集合ArrayListArraylist源码分析VectorLinkedListLinkedList源码解析LinkedList.add()方法Arraylist和Linkedlist的区别Set集合HashSet 【重点】Map集合HashMap 【重点】为什么扩容两倍?为什么加载因子是0.75?0.5或者1不行吗?为啥HashMap中初始化大小为什么是16呢?Collections工具类总结集合对象的容器,实现了对对象常用的
2021-05-19 14:26:45
440
4
原创 执行中的elasticjob任务如果由于项目发版被中断,如何在发版后接着上一次的进度继续执行?
1.基于分片的任务处理ElasticJob支持将任务分片,每个分片独立执行,可以在任务执行过程中动态增加或减少分片数量,从而实现任务的并发处理。在任务被中断的情况下,可以通过记录每个分片执行的进度,来实现断点续传的功能。在发版后,重新启动任务时,可以根据分片执行的进度,将未执行完的分片重新分配到可用的执行节点上,从而接着上一次的进度继续执行。2.基于数据状态的任务处理对于一些无法分片的任务,可以通过记录任务处理的数据状态来实现断点续传的功能。在任务被中断的情况下,可以记录下已经处理的数据状态,比如处
2023-05-17 17:23:32
664
原创 当使用Feign时,如果是get请求,为什么参数要加@RequestParam注解?
因为Feign默认使用Spring的编码器来序列化请求参数,而Spring的编码器需要明确指定参数名称才能正确地将参数序列化成URL参数。如果不加@RequestParam注解,Feign将无法正确地序列化请求参数,导致请求失败。注解时,Spring会将请求体中的数据以流的形式读取,然后将其反序列化为指定的对象类型。可以有多个@RequestParam,但最多只能有一个@RequestBody,参数就要放在请求的url中,@RequestBody修饰的就要放在提交对象中。
2023-05-17 11:59:57
1870
转载 为什么要谨慎使用 Mysql唯一索引
相同的记录第二次删除的时候,delete_status被设置成1,但由于创建了唯一索引(把name、model和delete_status三个字段同时做成唯一索引),数据库中已存在delete_status为1的记录,所以这次会操作失败。该方案的思路跟增加时间戳字段一致,即在添加数据时给delete_id设置默认值1,然后在逻辑删除时,给delete_id赋值成当前记录的主键id。如果新增数据的入口比较少,比如只有job,或者数据导入,可以单线程顺序执行,这样就能保证表中的数据不重复。
2023-05-16 17:24:27
761
原创 ERR invalid expire time in setex原因
过期时间为0在memcached中是不过期,但是在Redis中认为是非法的,到期时间不能小于0,否则会报ERR invalid expire time in setex。过期时间如果小于等于0,在Redis中都是非法的,会报ERR invalid expire time in setex。
2023-05-11 20:25:25
4622
原创 [MyBatis]模糊查询LIKE的三种方式
直接传参法,就是将要查询的关键字keyword,在代码中拼接好要查询的格式,如%keyword%,然后直接作为参数传入mapper.xml的映射文件中。MySQL的 CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一。在Dao层指定各个参数的别名。执行出来的SQL语句。
2023-05-11 20:24:56
1877
原创 Java——去掉小数点后面多余的0
当小数点后位数过多,多余的0没有实际意义,根据业务需求需要去掉多余的0。后端存储浮点型数据一般会用到Bigdecimal 类型,可以调用相关方法去掉小数后多余0,然后转为string。
2023-05-11 20:23:50
2854
原创 HashSet添加null报空指针异常
向HashSet中添加null值并不是产生空指针异常的原因,HashSet中是可以添加null值的。此时相当于null调用intValue()方法,所以报NPE。Java集合类不能存储基本数据类型(如果要存储基本数据类型可以使用第三方API,如。如果值为null,JVM试图把它拆箱为基本数据类型就会导致NPE。HashSet添加null报。
2023-05-11 20:22:06
226
转载 BigDecimal格式化与工具类
首先,创建BigDecimal对象,进行BigDecimal的算术运算后,分别建立对货币和百分比格式化的引用,最后利用BigDecimal对象作为format()方法的参数,输出其格式化的货币值和百分比。静态方法,建立一个NumberFormat类的对象,并返回引用,该引用的货币格式由Locale指定。由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。
2023-05-11 20:21:26
749
原创 获取当天(按当前传入的时区)00:00:00所对应时刻的long型值
【代码】获取当天(按当前传入的时区)00:00:00所对应时刻的long型值。
2023-05-09 16:29:11
115
原创 获取一个数字集合的平均值或最大值
1.平均值Double collect = list.stream().collect(Collectors.averagingDouble(x -> x));2.最大值Double collect = list.stream().mapToDouble(p -> p).max().getAsDouble();
2023-05-09 16:28:41
144
原创 本地代码提交到分支后自动构建失败,怎么办?
1.首先检查本地是否有代码未提交,如果有未提交的代码,会构建失败2.检查引入的依赖是否在私服maven库里更新过,比如两个项目AB,之前不依赖,现在A依赖了B,而且你对AB都有所修改,你在没有提交B之前,提交了A,会出现构建错误的问题,此时,应该点IDEA右侧边栏maven,先Clean,再Deploy,这个顺序是B先,其次是A;
2023-05-09 16:27:15
199
原创 打日志需要注意的地方
我想只要这些有一个是空就把它打印出来,但是不能这么写,应该使用JSON序列化打印出来对象字符串,JSON.以后再遇到这种try catch 打印错误日志的就按照这种去写。正常情况下我们打错误日志是把关键信息打出来,后边跟堆栈信息。加括号把e放在括号里边是打印不出来堆栈信息的。e统一放在最后,可以打出来堆栈信息。
2023-05-09 16:26:09
241
原创 开发过程中空指针异常如何规避?
log日志时,变量可能出现为空的情况,一定要避免使用变量.toString()等一系列的方法,否则可能会出现空指针异常!= null 来判断了,这个在一个对象里面的多个子对象连续判断的时候非常有用。这个时候 status 可能为 null 造成空指针异常,应该把常量放前面,就能避免空指针异常。断言是用来检查程序的安全性的,在使用之前进行检查条件,如果不符合条件就报异常,符合就继续。Java 中这个用的很少,建议使用 Spring 中的,更强大,更方便好用。这个应该在各种开发规范里面都会提到,也是最基础的。
2023-05-09 16:20:23
996
原创 想要输出JSONObject有序的操作方法
在这里需要注意的是ArrayList的底层是数组,在Collections.reverse()方法进行反转顺序的时候操作的数组,会导致所有引用改集合的变量顺序都反转了;2、有时候Json的顺序并不是我们想要的时候,需要进行下倒叙,这里的思路是可以把json转换为。.JSONObject 默认是由hashMap组成的,所以内容存放的顺序并不是有序的;所以在必要的时候自己new一个对象进行操作。的方式,在新建Json对象的时候要这样写。1、由于 com.alibaba.如果要实现有序的话需要使用。
2023-05-09 16:14:09
1155
原创 mybatis中dao传List参数,foreach批量插入找不到参数
mybatis 中当 DAO 传入的 List 参数时,会自动将参数封装成 Map 参数,而 map中的 key 会自动用 list , value 就是你传入的 List 参数.第一种: 将 List 参数封装为 Map 然后再传入,在 XML 配置页面写上相应 key 值.第二种: 将 condition 的值修改为 list。
2023-05-09 16:12:40
649
原创 Spring中把一个bean对象交给Spring容器管理的三种方式
因为主启动类@SpringBootApplication里包含了@SpringBootConfiguration,@SpringBootConfiguration类又包含了@Configuration配置类,所以主启动类上不需要再添加,该类作用就是读取@Bean标记的类,把他交给spring容器,有兴趣自己去点点,看下他们几个的关系。@Component:适合在本项目内或者各子项目之间使用,允许去更改要管理的对象,去添加该注解。注解的bean,然后加至容器中。加入到容器中,注意,我没有向容器中注入。
2023-05-09 16:12:06
1923
原创 读取Apollo里的对象需要注意的问题
我们不能直接操作从Apollo拿到的对象,这样会修改Apollo里边的对象值应该使用BeanUtils把他的属性cpoy到一个新的对象里,再做相应处理返回
2023-05-09 16:11:59
109
原创 编写定时任务不当使用成员变量可能造成的后果
成员变量:类内方法外的变量由于Spring的bean是单例的,一个类的成员变量只有一份job在不同的pod跑,每个pod都有一份job的代码,都有一份成员变量,正常情况下是不会有问题的但是 如果job任务在一个pod上跑了两遍(没有分布式锁)第一遍可能跑了一半,第二个开始跑,他们可能同时操作这个成员变量,导致一系列问题比如一个list集合后边的任务可能读取是前边任务执行一半存的list,后边的任务也能对这个成员变量进行操作,脏读,脏写
2023-05-09 16:10:15
101
原创 Guava之CaseFormat
com.google.common.base.CaseFormat是一种实用工具类,以提供不同的ASCII字符格式之间的转换。
2023-01-19 10:32:15
1656
原创 antv条形图hover上去如何显示小手
antv条形图hover上去如何显示小手barStyle属性里边设置barStyle: {cursor: 'pointer'},
2023-01-19 10:31:41
615
原创 Git删除master branch中最近一次的提交
在做一个项目的过程中,需要删除master brach中最近一次的提交,需要在Git repository中删除采用步骤如下:1. 在idea中打开项目,进入到master branch. 2. 在控制台中输入如下命令: git reset --hard HEAD~1 => 这一步,将让本地回到上一次的提交commit, 也就是说会在本地代码中删除最近一次的提交 git push --force =>把本地的这个改变强制push到远程的repository中
2023-01-19 10:29:47
752
基于Java开发的ATM机模拟系统(个人开发)
2021-08-12
基于SSM的学生实验报告提交系统(个人开发),开发软件:IDEA
2021-08-12
基于Springboot的个人博客系统(个人开发)
2021-08-12
基于Springboot的小型电商项目(个人开发)
2021-08-12
普通二本院校毕业,技术中上,算法基础薄弱,面对秋招,该何去何从?
2021-08-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人