- 博客(24)
- 收藏
- 关注
原创 SpringMVC的请求执行流程是什么样的?
2.DispatcherServlet接收到请求之后,还会调用HandlerMapping(处理映射器),来查找能够处理本次请求的处理器,生成处理器对象及处理器拦截器(如果有),然后再一起返回给DispatcherServlet。5.DispatcherServlet将ModelAndView传给ViewReslover(视图解析器),视图解析器负责对视图进行解析处理,最后返回给视图对象View。6.DispatcherServlet根据View进行渲染视图(将模型数据填充至视图中去)。
2025-07-26 16:52:47
242
原创 什么是缓存雪崩?缓存击穿?缓存穿透?分别如何解决?什么是缓存预热?
逻辑过期时间:不给key设置过期时间,而是添加一个逻辑过期时间字段,查询缓存发现逻辑过期时间已过期时,再获取互斥锁,如果获取成功,则开启一个新线程去查询数据并更新缓存,失败则返回过期数据。缓存击穿:给某一个key设置了过期时间,当key过期的时间,恰好这个时间点有大量的并发请求访问这个key,可能会瞬间把数据库压垮。缓存雪崩:在一个时间段内,有大量的key过期,或者Redis服务宕机,导致大量的请求到达数据库,带来巨大压力。- 缓存空数据:查询返回的数据为空,仍然将空数据缓存;
2025-07-26 15:18:10
281
原创 Redis过期数据的删除策略是什么?有哪些?
对可以最大化地节省CPI资源,但是十分消耗内存,在极端情况下,可能会出翔大量的过期key没有被再次访问,从而一直存在内存中没有被释放。- 设置了key的过期后,不会立即删除,而是当我们访问的时候,会检查该key是否已过期,如果过期则删除,没有过期则继续使用。- 每隔一段时间,扫描一定数量的数据库的expires字典中一定数量的随机key,删除其中已过期的数据。- 对内存友好,但是会占用大量的CPU资源去处理过期数据,从而影响缓存的吞吐量和响应时间。
2025-07-26 15:16:36
214
原创 Redis的数据淘汰策略是什么?有哪些?
no-enviction:不淘汰任何数据,会引发oom。volatile-lfu:淘汰最近使用次数最少的数据。allkeys-lfu:淘汰最近使用次数最少的数据。volatile-lru:淘汰最近最少使用的数据。allkeys-lru:淘汰最近最少使用的数据。volatile-random:随机淘汰。allkeys-random:随机淘汰。1.监测设置了TTL的数据。
2025-07-26 15:15:33
432
原创 1 JVM由那些部分组成,运行流程是什么?
的一套指令集规范,并不能直接交给底层系统去执行,而是有执行引。执行去执行,此时需要调用其他语言的本地库接口()把字节码加载到内存中,而字节码文。)将字节码翻译为底层系统指令,再交由。(运行时数据区,内存分区)实现整个程序的功能。
2025-07-21 14:38:05
211
原创 线程的状态有哪些?run()和start()方法有哪些区别?
run() 的主要目的是封装线程需要执行的逻辑。定时等待(Timed Waiting):与等待状态类似,不过这里线程是在等待一个指定的时间间隔后自动恢复,比如通过调用Thread.sleep(long millis)、Object.wait(long timeout)、Thread.join(long millis)等方法。等待(Waiting):如果线程调用了某些特定的方法如Object.wait()、Thread.join()或者LockSupport.park()等,那么该线程将进入等待状态。
2025-07-18 14:20:32
179
原创 创建线程的方式有哪些?相比继承Thread类,实现Runable接口的好处是什么?
通常与ExecutorService一起使用,通过submit方法提交任务,它会返回一个Future对象,用来获取异步计算的结果。2.实现Runnable接口:定义一个实现了Runnable接口的类,并实现run()方法。接着,将这个类的实例作为参数传递给Thread类的构造器,然后调用start()方法来启动线程。1.继承Thread类:通过创建一个新类来继承Thread类,并重写它的run()方法。然后,可以实例化这个新类的对象并通过调用其start()方法来启动线程。
2025-07-18 14:18:39
111
原创 RabbitMQ几个核心概念
包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等,可以理解为相当于是hibernate中的session。1、Connection(连接):是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑,用于生产者、消费者与rabbitmq进行连接。2、Channel(通道):是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,4、Queue(队列):负责从交换机那儿接收消息,然后进行消息存储。
2024-10-27 22:05:12
514
原创 什么是同步?什么是异步?各自优缺点?
流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件。同步(Synchronous)和异步(Asynchronous)是两种处理任务的方式,它们描述了程序如何处理请求以及何时返回结果。- 故障隔离:服务没有直接调用,不存在级联失败问题。时效性较强,可以立即得到结果,调用是有顺序性的。- 耦合度极低,每个服务都可以灵活插拔,可替换。- 架构复杂了,业务没有明显的流程线,不好管理。- 需要依赖于Broker的可靠、安全、性能。- 有额外的资源消耗。
2024-10-27 21:55:59
1057
原创 ThreadLocal 的原理
怎么区分它们呢,就是通过 ThreadLocal,它作为 ThreadLocalMap 的 key,而真正要线程隔离的资源作为 ThreadLocalMap 的 value。ThreadLocal.set 就是把 ThreadLocal 自己作为 key,隔离资源作为值,存入当前线程的 ThreadLocalMap。【解释】即每个线程自己用自己的资源,这样就不会出现共享,既然没有共享,就不会有多线程竞争的问题。资源的种类有很多,列数据库链接对象,判断身份的对。
2024-10-17 22:59:51
166
原创 HashMap 原理(数据结构)
冲突:数组大小毕竟有限,就算元素的 hashCode 唯一,数组大小是 n 的情况下要放入 n+1 个元素,根据鸽巢原理,肯定会发生冲突。解决冲突:一种办法就是利用链表,将这些冲突的元素链起来,当然在在此链表中存取元素,时间复杂度会提高为 O(n)树化目的是避免链表过长引起的整个 HashMap 性能下降,红黑树的时间复杂度是 O(log{n})HashMap 使用哈希函数将键(key)转换成一个哈希码(hash code)底层使用数组+链表+红黑树。
2024-10-17 22:54:57
208
原创 BIO、NIO、AIO
NIO是2、3这两个阶段线程可以不阻塞,也可以腾出手干别的事情,能够在高并发的情况下处理大量的请求,所以代码量需求较高,使用了多路复用技术后,新客户端来了要连接,客户端发来了新请求,都会产生事件,把这些事件交给一个线程去统一处理就行了。增加线程不可行,毕竟线程是有限资源,这是成本问题不增加线程也不行,没有新线程,没人去处理新连接,处理新请求。的方式处理连接、处理请求,有事件发生才去处理,没有事件则不会占用线程。线程不会在高并发下存在无事可做的现象,它被充分压榨,利用率高。客户端真的连上来了,
2024-10-17 22:49:17
198
原创 通信的三要素 UDP和TCP的区别?
信道是信息传输的媒介或路径,它提供了从信源到信宿的传输通道。信道可以是有形的,如电缆、光纤、无线电波等物理介质,也可以是无形的,如网络连接。:信宿是信息的目的地,即接收端,负责接收并解释或处理从信源经由信道传输过来的信息或信号。信宿可以是人(如听众、读者),也可以是电子设备(如电脑、手机、接收器)。:信源是信息的发起点,也就是消息的产生者或信号的源头。在通信系统中,信源可以是人、机器、传感器或其他任何形式的信息产生设备。服务器确认FIN报文并发送ACK报文。客户端确认FIN报文并发送ACK报文。
2024-10-17 22:39:33
335
原创 JDBC基础
JDBC介绍:Java Database Connectivity (JDBC) 是 Java 平台用于连接和操作关系型数据库的标准 API。JDBC 提供了一套标准接口,使得开发人员能够使用 Java 应用程序来访问各种不同的数据库管理系统,而无需关心具体的数据库类型。
2024-08-28 22:38:34
254
原创 Mysql数据库的安装
所指的路径中寻找一遍,如果找到了就直接执行,没找到就在当前工作目录找,如果还没找到,就报错。下载完成后我们得到的是一个压缩包,将其解压,我们就可以得到MySQL 8.0.34 的软件本体了(就是一个文件夹),我们可以把它放在你想安装的位置。如果提示`mysql不是内部或外部命令,也不是可运行的程序或批处理文件`则表示添加添加失败,请重新检查步骤并重试。在黑框中输入,`mysql -uroot -p1234`,回车,出现下图且左下角为`mysql>`,则登录成功。为什么在初始化的开始要添加环境变量呢?
2024-08-28 22:16:24
1660
原创 前后端开发介绍
但是,我们前后台是分开来开发的,那么前端人员怎么知道后台返回数据的格式呢?我们将原先的工程分为前端工程和后端工程这2个工程,然后前端工程交给专业的前端人员开发,后端工程交给专业的后端人员开发。沟通成本高:后台人员发现前端有问题,需要找前端人员修改,前端修改成功,再交给后台人员使用。那么基于前后台分离开发的模式下,我们后台开发者开发一个功能的具体流程如何呢?分工不明确:后台开发人员需要开发后台代码,也需要开发部分前端代码。接口定义:查询接口文档中关于需求的接口的定义,包括地址,参数,响应数据类型等等。
2024-08-25 22:21:27
554
原创 Maven项目创建
maven-project01 |--- src (源代码目录和测试代码目录) |--- main (源代码目录) |--- java (源代码java文件目录) |--- resources (源代码配置文件目录) |--- test (测试代码目录) |--- java (测试代码java目录) |--- resources (测试代码配置文件目录) |--- target (编译、打包生成文件存放目录)。目前POM模型版本是4.0.0。-- 这里版本是可以更改的-->-- POM模型版本 -->
2024-08-24 22:30:41
1839
原创 Maven的安装
这里所设置的maven的环境信息,并未指定任何一个project,此时设置的信息就属于全局配置信息。由于中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。(Maven也是使用java开发的,所以它也依赖其他的jar包)1). 使用超级记事本软件,打开settings.xml文件,定位到160行左右。1). 使用超级记事本软件,打开settings.xml文件,定位到53行。MAVEN_HOME环境变量的值,设置为maven的解压安装目录。
2024-08-24 22:13:43
772
原创 Maven基础(认识Mavem)
Maven 是一款用于管理和构建Java项目的工具,是Apache旗下的一个开源项目。Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性组织。那我们之前在JavaSE阶段,没有使用Maven,依然可以构建Java项目。我们为什么现在还要学习Maven呢?那接下来,我们就来聊聊Maven的作用。
2024-08-24 22:03:49
697
原创 Web实战(IOC+DI)
在没有正式的学习SpringBoot之前,我们要先来了解下什么是Spring。我们可以打开Spring的官网(),去看一下Spring的简介:Spring makes Java simple。Spring的官方提供很多开源的项目,我们可以点击上面的projects,看到spring家族旗下的项目,按照流行程度排序为:Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。
2024-08-24 19:58:06
1875
原创 小白学Vue2
Vue(读音 /vjuː/, 类似于view),是一款用于构建用户界面的渐进式的JavaScript框架2). 渐进式渐进式中的渐进呢,字面意思就是 "循序渐进"。Vue生态中的语法呢是非常多的,比如声明式渲染、组件系统、客户端路由(VueRouter)、状态管理(Vuex、Pinia)、构建工具(Webpack、Vite)等等。所谓渐进,指的是我们使用Vue框架呢,我们不需要把所有的组件、语法全部学习完毕才可以使用Vue。3). 试一试首先我们可以先创建一个HTML的文件(实用工具VsCode)
2024-08-22 12:01:52
919
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人