自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 volatile 关键字

volatile关键字

2022-11-28 10:28:17 168 1

原创 volatile 关键字

volatile关键字

2022-11-28 10:27:25 155

原创 可以直接调用 Thread 类的 run 方法吗?

可以直接调用 Thread 类的 run 方法吗?

2022-11-23 12:06:19 578

原创 sleep() 方法和 wait() 方法对比

sleep() 方法和 wait() 方法对比

2022-11-20 16:56:32 250

原创 什么是线程死锁?如何避免死锁?

什么是线程死锁?如何避免死锁?

2022-11-20 16:55:13 159

原创 如何创建线程池

如何创建线程池

2022-11-17 15:37:02 69

原创 执行 execute()方法和 submit()方法的区别是什么呢?

执行 execute()方法和 submit()方法的区别是什么呢?

2022-11-17 15:35:06 206

原创 实现 Runnable 接口和 Callable 接口的区别

实现 Runnable 接口和 Callable 接口的区别

2022-11-17 15:34:08 304

原创 Redis 内存淘汰机制

Redis 内存淘汰机制

2022-10-13 17:07:18 139

原创 Java 内存区域

Java 内存区域

2022-10-13 16:04:18 95

原创 多表连接查询的方法

#内连接组合两个表中的记录,返回关联字段相符的记录,也就是两个表的交集部分#左外连接左外联接,是以左表为基准,将两表的数据进行连接,然后将左表没有对应项显示为NULL;换种说法:就是根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,如果找不到与左表匹配的,用null表示。#右外连接右表的记录都会出现在结果集中,并上左表与之对应的部分,如果左表没有,使用null填充。...

2022-09-30 12:30:22 165

原创 关于CompletableFuture中join与get的区别

关于CompletableFuture中join与get的区别

2022-09-25 21:30:25 995

原创 关于==和equals的问题

关于==和equals的问题

2022-09-05 16:59:08 195

原创 关于HashCode的问题

对hashcode的详解

2022-09-05 16:43:45 213

原创 浮点数精度丢失问题解决

关于浮点数精度丢失问题解决办法

2022-08-29 15:46:56 581

原创 分布式 ID

分布式ID介绍以及实现方法的各种优缺点

2022-08-28 14:32:57 205

原创 mysql索引的数据结构,各自优劣

索引的数据结构和具体存储弓|擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+ 树索引等。InnoDB存储引擎的默认索引实现为: B+树索引。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。B+树:B+树是一个平衡的多叉树, 从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接。在B+树上的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动,而且基

2022-05-21 09:20:32 326

原创 java后端实现CROS跨域请求的方式

跨域:跨域就是请求的url中的“协议”、“域名”、“端口号”其中任何一种不一样都是属于跨域。解决跨域的主要的四种方法是jsonp、跨域资源共享CORS(Cross-Origin Resource Sharing)、proxy代理、webpack中间件。解决方式:对于CORS的跨域请求,主要有以下几种方式可供选择:1.返回新的CorsFilter2.重写WebMvcConfigurer3.使用注解@CrossOrigin4.手动设置响应头(HttpServletResponse)5.自

2022-05-21 09:12:37 1448

原创 spring事务什么时候会失效?

spring事务的原理是AOP,进行了切面增强,那么失效的根本原因是这个AOP不起作用了!常见情况有如下几种1) 发生自调用,类里面使用this调用本类的方法(this通常省略) ,此时这个this对象不是代理类,而是UserService对象本身!解决方法很简单,让那个this变成UserService的代理类即可!2)、方法不是public的@Transactional只能用于public 的方法上,否则事务不会生效,如果要用在非public方法上,可以开启AspectJ代理模式。3)、.

2022-05-21 09:04:43 866

原创 SpringMVC工作流程

1)用户发送请求至前端控制器DispatcherServlet.2) DispatcherServlet 收到请求调用HandlerManping处理器映射器。3)处理器映射器找到具体的处理器可以根据xml配置、注解进行查找),生成处理器及处理器拦截器(如果有则生成)一并返回给DispatcherServlet.4)DispatcherServlet 调用HandlerAdapter处理器适配器。5) HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)6

2022-05-21 08:50:51 155

原创 线程安全的理解

首先了解一下什么是进程?电脑中时会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的。比如QQ、酷狗播放器、电脑管家等等。什么是线程?进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。那什么是多线程?提到多线程这里要说两个概念,就是串行和并行串行:所谓其实是相对于单条线程来执行多个任务来说的,在时间上不可能发生重叠,前一个任务没搞定,下一个就只能等着并行: 并行在时间上是重叠的,两个任务在同一时刻互不

2022-05-14 16:13:01 685

原创 线程的生命周期和线程的几种状态

1 线程通常有五种状态:创建,就绪,运行,阻塞和死亡状态(1)、创建状态(New):新创建了一个线程对象。(2)、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。(3)、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。(4)、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况

2022-05-14 15:23:53 892

原创 关于java中的异常体系

java异常体系Thorwable类(表示可抛出)是所有异常和错误的超类,两个直接子类为Error和Exception,分别表示错误和异常。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常, 这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception1、Error类是程序无法处理的错误,由jvm产生和抛出,遇到错误,jvm一般会选择终止线程2、Exception类分为Runti

2022-05-14 15:13:29 130

原创 双亲委派模型

工作原理: 如果一个类加载器收到了加载某个类加载的请求,该类加载器并不会去加载该类,而是把这个请求委派给父类加载器执行,每一个层次的类加载器都是如此,因此所有的类加载请求最终都会传送到顶端的启动类加载器;如果父类加载器可以完成类加载任务,就成功返回;只有当父类加载器在其搜索范围内无法找到所需的类,并将该结果反馈给子类加载器,子类加载器会尝试去自己加载。这就是双亲委派模式。虚拟机只有在两个类的类名相同且加载该类的加载器均相同的情况下才判定这是一个类。若不采用双亲委派机制,同一个类有可能被多...

2022-05-14 14:48:33 804 1

原创 Java类加载器

一 什么是类加载 JVM将class字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入口。二 类加载过程类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、链接( 验证、准备、解析 )、初始化、使用和卸载七个阶段三 类加载器使用 C++ 实现,负责加载存放在JDK\jre\lib(JDK 代表...

2022-05-14 14:30:36 137

原创 四种常见的 Spring Bean 的作用域:

singleton:唯一bean实例,Spring中的bean默认都是单例的。prototype:每次请求都会创建一个新的bean实例。request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTPrequest内有效。session:每一个HTTPSession会产生一个新的bean,该bean仅在当前HTTPsession内有效...

2022-05-13 18:58:19 140

原创 引用拷贝,浅拷贝和深拷贝

引用拷贝:引用拷贝,就是拷贝引用地址。两个不同的引用指向同一个对象。浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点)深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。如果属性是基本类型(int,double,long,boolean等),拷贝的就是基本类型的值如果属性是引用类型,拷贝的就是内存地址(即复制引用但不复制引用的对象)注:String类型通过常量赋值时相当于基本数据类型,由于String为不可变对象,是无法修改原String的状态的,其会生成一个新的Stri.

2022-05-13 18:54:36 599

原创 hashCode() 与equals()

如果两个对象相等,那么它们的hashCode()值一定相同。这里的相等是指,通过equals()比较两个对象时返回true。 如果两个对象hashCode()相等,它们并不一定相等。因为在散列表中,hashCode()相等,即两个键值对的哈希值相等。然而哈希值相等,并不一定能得出键值对相等,此时就出现所谓的哈希冲突场景。 ...

2022-05-07 18:48:50 247

原创 JAVA中抽象类和接口的区别

抽象类:含有abstract修饰符的类即为抽象类,抽象类不能创建实例对象接口:是一种抽象类型,是抽象方法的集合,接口无法被实例化,但是可以被实现区别:所有的抽象类都是Object类的子类,而接口则没有默认的最顶层父接口抽象类有构造方法,接口没有构造方法抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的抽象类只能继承一个,接口可以实现多个接口中所有的属性都是公开静态常量,默认被public static final修饰接口中

2022-05-07 18:42:27 479

原创 List和Set的区别

List: 有序,按对象进入的顺序保存对象。可重读,允许多个Null对象,可以使用iterator取出所有元素再逐一遍历,还可以使用get(int index)获取指定下标的元素Set: 无序,不可重复,最多允许有一个Null元素对象,取元素时,只能用Iterator接口取得所有元素,再逐一遍历各个元素....

2022-05-07 14:53:30 177

原创 String, StringBuffer,StringBuilder的区别和使用场景

String是final修饰的,不可变,每次操作都会产生新的Sring对象StringBuffer和StringBuilder都是在原对象上操作StringBuffer是线程安全的,StringBuilder线程不安全的StringBuffer方法都是synchronized修饰的性能:StringBulider > StringBuffer > String场景: 经常需要改变字符串内容时使用后面两个优先使用StringBuilder,多线程使用共享变量时使用Strin

2022-05-07 14:41:23 367

原创 关于SpringBoot 自动装配

首先说一下什么是 SpringBoot 自动装配通过注解或者一些简单的配置就能在SpringBoot的帮助下实现某块功能SpringBoot是如何实现自动装配的?大概可以把@SpringBootApplication看作是@Configuration、@EnableAutoConfiguration、@ComponentScan注解的集合。@EnableAutoConfiguration:启用SpringBoot的自动配置机制@Configuration:允许在上下文中注册额...

2022-05-05 09:01:18 294

原创 Java定时任务的实现方式

1.java自带的Timer2.ScheduledThreadPool-线程池3.使用spring自带注解的形式:@Scheduled4.使用Quartz定时任务调度器

2022-05-05 08:55:12 487

原创 Redis中3种常用的缓存读写策略

CacheAsidePattern(旁路缓存模式)CacheAsidePattern是我们平时使用比较多的一个缓存读写模式,比较适合读请求比较多的场景。缺陷1:首次请求数据一定不在cache的问题解决办法:可以将热点数据可以提前放入cache中。缺陷2:写操作比较频繁的话导致cache中的数据会被频繁被删除,这样会影响缓存命中率。解决办法:数据库和缓存数据强一致场景:更新DB的时候同样更新cache,不过我们需要加一个锁/分布式锁来保证更新cache的时候不存在线程安全问题。...

2022-04-28 19:01:10 197

原创 针对 Redis 服务不可用的情况

1.采用Redis集群,避免单机出现问题整个缓存服务都没办法使用。2.限流,避免同时处理大量的请求针对热点缓存失效的情况:1.设置不同的失效时间比如随机设置缓存的失效时间。2.缓存永不失效。...

2022-04-28 18:56:50 1250

原创 什么是缓存穿透

缓存穿透说简单点就是大量请求的key根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。哪些解决办法最基本的就是首先做好参数校验,一些不合法的参数请求直接抛出异常信息返回给客户端。比如查询的数据库id不能小于0、传入的邮箱格式不对的时候直接返回错误消息给客户端等等1.缓存无效key2.布隆过滤器...

2022-04-23 09:54:27 821

原创 事务具有四大特性

事务具有四大特性:1.原子性,2.隔离性,3.持久性,4.一致性1.原子性(Atomicity):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;2.隔离性(Isolation):并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;3.持久性(Durability):一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。4.一致性(Consistency):执行事务前后,数据...

2022-04-23 09:53:22 5345 1

原创 什么是 bigkey?

简单来说,如果一个key对应的value所占用的内存比较大,那这个key就可以看作是bigkeybigkey有什么危害除了会消耗更多的内存空间,bigkey对性能也会有比较大的影响。

2022-04-23 09:52:01 194

原创 Redis 是如何判断数据是否过期

Redis通过一个叫做过期字典(可以看作是hash表)来保存数据过期的时间。过期字典的键指向Redis数据库中的某个key(键),过期字典的值是一个longlong类型的整数,这个整数保存了key所指向的数据库键的过期时间(毫秒精度的UNIX时间戳)...

2022-04-23 09:51:21 2720

原创 Redis 持久化机制

Redis持久化机制Redis不同于Memcached的很重要一点就是,Redis支持持久化,而且支持两种不同的持久化操作。Redis的一种持久化方式叫快照(snapshotting,RDB),另一种方式是只追加文件(append-onlyfile,AOF)快照(snapshotting)持久化(RDB)Redis可以通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。Redis创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(R...

2022-04-22 09:25:02 103

空空如也

空空如也

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

TA关注的人

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