自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 收藏
  • 关注

转载 中文文案排版指北

统一中文文案、排版的相关用法,降低团队成员之间的沟通成本,增强网站气质。

2023-09-29 14:09:42 127

原创 字符串常量池位于JVM哪里

Java6 和6之前,常量池是存放在方法区(永久代)中的。Java7,将常量池是存放到了堆中。Java8 之后,取消了整个永久代区域,取而代之的是元空间。运行时常量池和静态常量池存放在元空间中,而字符串常量池依然存放在堆中。

2023-09-29 13:54:08 984

转载 硬核|Redis 布隆(Bloom Filter)过滤器原理与实战

布隆过滤器(Bloom Filter)是一种数据结构,用于快速检查一个元素是否属于某个集合中。它可以快速判断一个元素是否在一个大型集合中,且判断速度很快且不占用太多内存空间。布隆过滤器的主要原理是使用一组哈希函数,将元素映射成一组位数组中的索引位置。当要检查一个元素是否在集合中时,将该元素进行哈希处理,然后查看哈希值对应的位数组的值是否为1。如果哈希值对应的位数组的值都为1,那么这个元素可能在集合中,否则这个元素肯定不在集合中。

2023-09-25 10:21:51 439

原创 强引用、软引用、弱引用和虚引用的区别

主要的区别在于什么时候回收对象;- 强引用:垃圾回收器就不会回收这个对象;- 软引用:如果内存足够,不回收,如果内存不足,则回收;- 弱引用:不管当前内存空间足够与否,都会回收;- 虚引用:形同虚设,在任何时候都可能被垃圾回收器回收;

2023-07-14 17:31:38 243

原创 面试题:两个线程,一个输出字母,一个输出数字,交替输出

两个线程交替输出的4种方法:synchronized,LockSupport,Condition,TransferQueue

2023-06-30 16:47:02 421

转载 HashMap 和 IdentityHashMap 的区别

IdentityHashMap 处理冲突的方式是开发地址法中的线型再探测,当前的位置别占用后,就在右相邻的位置去找,而 IdentityHashMap 中一个 key-value 键值对,占用 table 的两个位置,所以这里的操作是加 2,如果超出 table 大小,再从 0 开始。但是这里 IdentityHashMap 的效果更好,因为动态代理出入的接口的个数非常少,产生冲突的概率非常小,结构更简单的 IdentityHashMap 在此场景下,就更加适用。进行新 key 的插入操作。

2023-03-26 21:09:02 482 1

转载 git 代码合并 merge 和 rebase 的区别

git IDEA的分支合并时的冲突问题总结,merge 和 rebase 的区别。

2022-12-12 23:50:53 856

原创 MySQL 排序使 null 排最后

MySQL 排序使 null 排最后

2022-12-04 15:48:56 11501

原创 idea 启动报错 Command line is too long

Error running ‘Application‘: Command line is too long.

2022-12-04 14:44:01 8073

原创 java 集合和字符串转换

String s1 = Joiner.on(",").join(list1);List list2 = Splitter.on(",").splitToList(s1);

2022-11-07 22:26:57 2239

原创 mysql 设置当天结束时间到数据库变成+1秒

设置时间"2022-10-14 23:59:59 999" 到数据库时,数据库保存的数据变成 “2022-10-15 00:00:00”

2022-10-15 15:36:15 829

转载 Spring Bean的完整生命周期(带流程图,好记)

一、Bean 的完整生命周期在传统的Java应用中,bean的生命周期很简单,使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了。一旦bean不再被使用,则由Java自动进行垃圾回收。相比之下,Spring管理Bean的生命周期就复杂多了,正确理解Bean 的生命周期非常重要,因为Spring对Bean的管理可扩展性非常强,下面展示了一个Bean的构造过程:Bean 的生命周期如上图所示,Bean 的生命周期还是比较复杂的,下面来对上图每一个步骤做文字描述:Spr

2022-03-30 09:27:49 7898 2

原创 RabbitMQ 定时消息处理场景

一、需求场景需求:后台管理添加消息支持定时发送;看到这个需求,我第一个想到的是查询用户消息时,只查询发送时间小于当前时间的消息;这确实是一种解决方案,不过我这边的需求没那么简单,在手机通知中心中也能定时收到消息;【就是从手机顶部滑下来的消息】这就要用到延迟队列了,延迟队列的实现有好几种,这里主要讲 rabbitMQ 的实现方式;二、rabbitMQ 实现消息定时发送具体流程:添加消息时如果发送时间大于当前时间,调用添加延迟队列的方法;我们会先计算消息发送时间和当前时间的时间差,把这个时间差和

2022-03-23 00:15:15 4222 1

原创 LockSupport 类的 park() 和 unpark() 作用和案例分析

wait() 与 notify(),await() 与 signal() 和 park() 与 unpark() 的区别

2022-03-01 20:06:24 959

原创 mybatis多字段嵌套映射

可直接翻到最后面看原理部分~应用场景:最近在做考勤管理的临时排班,需要根据用户id查询临时排班表记录,临时排班可以嵌套多个计划模版;mybatis的xml文件如下:<select id="select" parameterType="userTempPlan" resultMap="userTempPlanMap"> select user_temp_plan.user_id, user_temp_plan.scheduled_date, schclass.

2021-11-10 07:17:48 856

原创 mybatis if判断Integer类型的值为0情况

应用场景:需求:需要通过状态(status=0或1)来查询数据,status类型为Integer<if test="status !=null and status!=''"> and status = #{status}</if>当传入status=0时,并没有进入该条件里面;但传入1或其他都可以根据status条件查询;为什么呢?通过源码了解到,mybatis在预编译sql时,使用OGNL表达式来解析if标签,对于Integer类型属性,在判断不等于’‘时,例

2021-11-09 23:01:45 2372

原创 tk.mapper通用mapper报错(Error creating bean with name ‘commonMapper‘ defined in file xxx)

报错信息:Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2020-05-07 17:26:23.763 ERROR 14960 --- [ main] o.s.boot.SpringApplication : Application run failedorg.springf

2021-11-09 22:37:59 804

原创 mybatis的延迟加载及不生效原因

延迟加载的配置fetchType=“lazy”<!-- userMapper.xml --><resultMap id="userRoleMapSelect" extends="userMap" type= "ser" > <association property="role" fetchType="lazy" column="id" select="tk.mybatis.simple.mapper.RoleMapper.selectRoleByid" /&gt

2021-11-09 22:03:50 2147

原创 内存泄漏和内存溢出的区别和联系

内存泄漏和内存溢出1、内存泄漏 memory leak:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出;2、内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错 OOM,即所谓的内存溢出;两者的关系内存泄漏的堆积最终会导致内存溢出,内存溢出就是你要的内存空间超过了系统实际分配给你的

2021-10-31 14:48:46 222

原创 LocalDate和Date相互转换

LocalDateTime是jdk8的新增的类 ,还有LocalDate,LocalTime;我们可能用到类里面的一些方法,例如传入的时间和当前时间做比较,就需要将Date转为LocalDate或其他两个,Date转换为LocalDateDate date = new Date();LocalDate localDate = date.toInstant() .atZone(ZoneId.systemDefault()) //设置当前系统时区 .toLocalDat

2021-10-31 14:02:02 11852

原创 java代码一些技巧

1、尽量减少对变量的重复计算明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的,包括创建栈帧、调用方法时保护现场、调用方法完毕时恢复现场等。所以例如下面的操作:for (int i = 0; i < list.size(); i++){ ...}建议替换为:for (int i = 0, length = list.size(); i < length; i++){ ...}2、乘法和除法使用移位操作例如:for (val = 0; val <

2021-10-30 23:34:18 274 1

原创 A bean with that name has already been defined and overriding is disabled

启动报错:Description:The bean 'xxx' could not be registered. A bean with that name has already been defined and overriding is disabled.Action:Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overridi

2021-10-09 22:35:53 6722

原创 myBatis ofType和 javaType区别

javaType是用来指定pojo中属性的类型,而ofType指的是映射到集合属性中pojo的类型;@Datapublic class xxxVo implements Serializable { // 其他属性 // 类型 private List<Integer> types; }查询关联表类型,一对多【伪代码】<resultMap id="xxxVoMap" type="com.xxx.xxxVo" extends="Bas

2021-10-01 17:35:43 351

原创 单链表反转

带有头节点的链表思考:头插法,将遍历到的节点往前面添加;public class ReverseList01 { /** * 定义链表节点 */ public class Node { public int val; //指向下一个节点 public Node next; //构造器 public Node(int no){ this.val = no;.

2021-09-25 20:38:05 92

原创 查找单链表中的倒数第k个结点

有头结点且头结点不存放数据的链表思路:倒数第k个节点的位置 = 链表总长度size-kpublic static void main(String[] args) { // 初始化链表 Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); Node node4 = new Node(4); SingleLinkedList singleLinked.

2021-09-25 19:55:00 701

原创 @Cacheable 失效问题

同个类中的方法相互调用【例如service类】,会导致@Cacheable失效;原因:调用同个类的方法相当于A方法里面的代码写到B方法中,绕过了代理对象;解决:可以使用代理对象调用方法解决这个问题;引入aop依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId>

2021-08-22 16:05:20 1136

原创 @Transactional失效场景

@Transactional失效场景1、@Transactional 应用在非 public 修饰的方法上;简单点说,代理对象内部类的invoke【jdk的动态代理】或intercept【cglib动态代理】方法会检查目标方法的修饰符是否为 public,不是 public 则不会获取@Transactional的属性配置信息。复杂点说:在Spring AOP代理时,如上图的事务拦截器TransactionInterceptor在目标方法执行前后进行拦截,DynamicAdvisedIntercep

2021-08-22 14:35:15 444

原创 一些工具类整理

一些工具类整理1、Java自带工具方法1.1两个List集合取交集List<String> list1 = Arrays.asList("a","b","c");List<String> list2 = Arrays.asList("a","b","d");list1.retainAll(list2);System.out.println(list1); // 输出[a, b]2、commons-lang<dependency> <grou

2021-07-21 07:12:36 220

原创 List 取交集,并集,差集

引入依赖<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.4</version></dependency>// 两个集合取交集Collection<String> collection = Collect

2021-07-19 23:20:25 447

原创 Springboot 启动报错 Error starting ApplicationContext

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.检查项目中mysql驱动版本和mysql是否一致;我这边是mysql驱动版本问题,mysql用的5的版本,项目中mysql驱动用的8的版本报的错!...

2021-06-22 07:17:14 260

原创 Feign异步调用丢失请求头问题

起因:客户端带请求头请求接口–>接口开启新线程调用其他服务的接口会导致请求头丢失问题;/** * 伪代码 */public void test(){ // 自定义线程池,一般一个服务定义1~2个线程池,所有多线程执行都公用同个线程池 ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor( 10, //核心线程数 200,//最大线程数 10, T

2021-05-20 21:46:23 644

原创 Feign服务间调用请求头丢失问题(整理)

起因:客户端带请求头请求接口–>接口调用其他服务的接口会导致请求头丢失问题例子:有两个服务A和B,都加了认证拦截器,客户端调用服务A接口时会携带cookie请求头信息,经过服务A认证拦截器后调用服务B接口,在经过服务B拦截器时会发现请求头cookie丢失问题;原因:Feign 远程调用时会生成代理对象,代理对象调用时会经过一些逻辑判断和一系列的拦截器,构造出新的Request对象,Request默认为空,所以导致请求头丢失问题;解决:如果生成代理对象后再经过我们定义的拦截器,将请求头加上去再调用

2021-05-20 21:41:16 853

原创 Spring Cloud多个微服务使用redis进行取值时报错【Could not resolve type id ‘xxx‘ into a subtype】

存取redis对象的全限定类名不同导致的报错,可以将对象放入公共服务,统一用公共服务的对象进行存取;

2021-05-20 07:04:13 942 1

原创 Spirng cloud gateway 拦截 response修改返回内容

微服务项目中很多网关的功能真的强大,从路由,认证,鉴权到修改请求和响应内容,真正体会到spring cloud gateway 的强大;最近遇到一个返回数据需要简繁体转换的需求,没啥好说的,直接在网关统一处理;前端会传一个简繁体标识的请求头过来,判断请求头然后用工具类转换;简繁体转换的依赖 <!-- 简繁体转换依赖包 --><dependency> <groupId>com.github.houbb</groupId> <a

2021-05-02 00:44:48 3966 1

原创 json字符串转对象

第一种,使用fastjson 工具类1、引入依赖;<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.73</version></dependency>2、代码// ResultModel 为需要转换的对象String jsonStr = "";

2021-05-02 00:37:46 642

原创 java 自定义注解校验

有时候JSR303的规范自带的注解不满足我们的数据校验需求,例如显示状态showStatus,只能接受0和1,这时我们可以自己写自定义注解校验规则;在实体类加@ListValue注解,vals里面的值表示只能接收的值;@ListValue(vals={0,1})private Integer showStatus;编写自定义ListValue自定义校验接口类;import javax.validation.Constraint;import javax.validation.Payload;

2021-04-14 07:26:38 636

原创 java对象字段名转化——@SerializedName

有时调用第三方接口返回的字段名和我们接收对象字段名不一致或不规范,可以使用@SerializedName 这个注解进行转换;直接上代码:@Datapublic class xxxVo { // 将别名product_name转为productName @SerializedName("product_name") private String productName; // 将别名downloadurl、DownloadUrl或Downloadurl 转为

2021-04-13 07:15:34 2858

原创 上传文件经过Zuul,中文文件名乱码解决办法

上传文件的路由走zuul 通道;例如:localhost:8001/file/upload改成:localhost:8001/zuul/file/upload配置文件添加:zuul: # 大文件上传、文件中文文件名乱码解决办法 servlet-path: /zuul

2021-04-12 22:54:41 276

原创 root 用户下显示 -bash-4.2#

可能是不小心删除了root下的 .bash_profile 和 .bashrc 文件所造成的,我们可以从其他用户拷贝这两个文件到 root 目录;#查看 root 用户下相关文件是否缺失-bash-4.2# cd /root-bash-4.2# l.. .. .bash_history .pki .viminfo# 给其他用户操作root文件夹的权限-bash-4.2# chmod 777 /root# 添加一个用户-bash-4.2# useradd xh# 切换到xh用户-b

2021-04-03 23:34:07 356

原创 docker安装 redis

1、下载镜像文件docker pull redis2、创建实例并启动mkdir -p /mydata/redis/conftouch /mydata/redis/conf/redis.confdocker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \-d redis redis-server /etc/re

2021-02-13 01:06:37 53

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除