自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 说说对Spring MVC的了解吧?工作原理了解吗?核心组件有哪些?

MVC 是⼀种设计模式,Spring MVC 是⼀款很优秀的 MVC 框架。Spring MVC 可以帮助我们进⾏更简洁的 Web 层的开发,并且它天⽣与 Spring 框架集成。Spring MVC 下,我们⼀般把后端项⽬分为Service 层(处理业务)、Dao 层(数据库操作)、Entity 层(实体类)、Controller 层(控制层,返回数据给前台⻚⾯)。

2024-04-13 09:38:56 387

原创 Spring 提供了哪些配置方式?什么是Spring装配?什么是AOP?AOP 有哪些实现方式?Spring AOP 和 AspectJ AOP 有什么区别?

当 bean 在 Spring 容器中组合在一起时,它被称为装配或 bean 装配。Spring 容器需要知道需要什么bean以及容器应该如何使用依赖注入来将 bean 绑定在一起,装配 bean。Spring 容器能够自动装配 bean,可以通过检查 BeanFactory 的内容,让 Spring 自动解析 bean 的协作者。

2024-04-13 09:33:52 627

原创 聊一聊Bean的生命周期、注入Bean的注解、@Autowired和@Resource的区别

Bean的生命周期是由容器来管理的。主要分创建和销毁两个时期。创建过程:首先实例化Bean,并设置Bean的属性,根据其实现的Aware接口(主要是BeanFactoryAware接口,BeanFactoryAware接口,ApplicationContextAware接口)设置依赖信息。

2024-04-13 09:26:30 228

原创 什么是spring Bean?将一个类声明为spring Bean的注解有哪些?单例Bean的线程安全问题了解吗?

在Spring框架中,Spring Bean是由IOC(控制反转)容器管理的对象。当一个类被Spring容器管理时,它就被称为Spring Bean。Spring容器负责创建Bean的实例,管理其生命周期,包括初始化、装配依赖关系(通过依赖注入)以及其它服务。Spring Bean遵循面向接口编程的原则,可以通过配置文件或注解方式进行定义和配置。

2024-04-13 09:22:03 241

原创 使用Spring框架的好处是什么?什么是Spring IOC容器?什么是依赖注入?可以通过多少种方式完成依赖注入?如何理解IOC和DI?

Spring 框架因其较小的体积和较低的资源消耗而被归类为轻量级框架。通过容器(IOC 容器)来管理和装配应用程序中的对象及其依赖关系。开发者不再需要手动实例化和维护对象间的依赖链,而是通过配置(如XML或注解)声明对象的依赖,容器负责在运行时自动注入这些依赖,从而实现各组件之间的松散耦合。

2024-04-13 09:19:19 726

原创 什么是AQS?AQS的底层实现原理是什么?资源共享方式有哪些?同步工具类有哪些?

AQS 是一个锁框架,它定义了锁的实现机制,并开放出扩展的地方,让子类去实现。比如我们在 lock 的时候,AQS 开放出 state 字段,让子类可以根据 state 字段来决定是否能够获得锁,对于获取不到锁的线程 AQS 会自动进行管理,无需子类关心。

2024-04-13 09:09:42 241

原创 Java中常用的线程池有哪些?线程池常用的阻塞队列有哪些?

newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过任务需要,可灵活回收空闲线程。如果线程池长度小于任务需要,可灵活地创建线程。(多少任务多少线程)

2024-04-13 09:06:12 262

原创 execute()和submit(),Runnable和Callable,shutdown()和shutdownNow(),isTerminated()和isShutdown(),它们的区别是什么?

execute()方法,没有返回值,接收到Runnable对象就立即开始执行任务。由于没有返回值,所以不知道任务是否完成。submit()方法,返回一个Future对象。如果任务是Runnable类型,那么submit()返回的Future中的结果将是null。Future对象可以用于获取任务执行的结果、取消任务、检查任务是否已完成。(future的get()方法来获取返回值)

2024-04-12 09:43:39 197

原创 线程池(ThreadPoolExecutor)是用来做什么的?线程池的七个参数是什么?线程池执行任务的流程是什么?

线程池,是管理一系列线程的资源池,提供了一种管理和限制线程资源的方式。每个线程池还维护一些基本统计信息,例如已完成任务的数量。

2024-04-12 09:41:11 209

原创 什么是Threadlocal?它的底层是怎么实现的?Threadlocal是如何导致内存泄漏?

ThreadLocal,即线程本地变量。如果创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝。多个线程操作这个变量的时候,实际是操作自己本地内存里面的变量,从而起到线程隔离的作用,避免了线程安全问题。 ThreadLocal的应用场景有数据库连接池、会话管理。

2024-04-12 09:37:23 117

原创 什么是Cookie和Session?Cookie和Session如何配合?Cookie和Session的区别是什么?

Cookie是服务器发送给浏览器并保存在用户本地计算机上的小型文本文件。它包含了一些关键的用户会话信息,如用户的身份标识、网站偏好设置等。每次用户访问网站时,浏览器都会将相应的Cookie信息发送给服务器,从而实现了对用户的状态跟踪。

2024-04-12 09:29:20 443

原创 从输入URL到页面展示到底发生了什么?DNS是什么?有什么作用?

浏览器会查询自身DNS缓存、操作系统的DNS缓存和hosts文件,如果没有找到对应的IP地址,则向本地DNS服务器发起递归查询、迭代查询,直到找到IP地址。

2024-04-12 09:27:31 191

原创 HTTPS是什么?优缺点是什么?实现原理是什么?HTTP和HTTPS有什么区别?

HTTPS是一种安全的超文本传输协议,用于在客户端和服务器之间安全地传输数据。它基于HTTP协议,通过使用SSL/TLS协议进行加密,确保数据在传输过程中的保密性和完整性。

2024-04-11 19:26:06 380

原创 HTTP1.0和HTTP1.1有什么区别?

HTTP 1.0 使用短连接,每个请求/响应都需要建立一个新的TCP连接。HTTP 1.1 默认启用持久连接,,允许多个请求和响应通过单个TCP连接进行传输,减少了建立和关闭连接的开销,提高了性能。

2024-04-11 19:24:29 166

原创 HTTP是什么?常见的状态码有哪些?常用的请求方式有哪些?GET请求和POST请求有什么区别?

HTTP是一种用于传输超文本数据的应用层协议,可以传输HTML、CSS、TXT等等文件。HTTP通过在客户端和服务器之间发送请求和响应来传输数据,常见于web应用(浏览器、网站、超链接等等)。

2024-04-11 19:21:34 333

原创 为什么连接的时候是三次握手,关闭的时候却是四次挥手?TCP协议如何保证传输的可靠性?

服务器在收到客户端的 FIN 报文段后,可能还有一些数据要传输,所以不能马上关闭连接,但是会做出应答,服务器向客户端响应 ACK 报文段。接下来,服务器会继续发送数据,在数据发送完后,服务器会向客户单发送 FIN 报文,表示数据已经发送完毕,可以关闭连接。然后客户端会响应一个ACK报文,说好。

2024-04-11 19:19:17 369

原创 什么是TCP的三次握手?为什么是三次握手,而不是两次或者四次?什么是TCP的四次挥手?

三次握手的设计考虑了通信双方的发送和接收能力以及连接请求报文段可能引发的错误,确保了连接的可靠建立。如果握手次数减少到两次,则无法确认双方的发送和接收能力,容易引发错误;而握手次数增加到四次,则会增加通信的开销,没有必要。因此,三次握手是在可靠性和效率之间的一个平衡选择。

2024-04-10 23:29:21 586

原创 TCP/IP四层模型是什么?每一层的作用是什么?TCP和UDP的区别是什么?各自的应用场景是什么?

每层都为上一层提供了特定的服务,并使用下一层提供的服务,共同构成了一个可靠且有序的通信系统。这样设计的好处在于,各层相对独立,上层的变化不会影响到下层的工作,同时也可以根据需要灵活地替换或添加新的协议。

2024-04-10 23:24:05 856

原创 什么是缓存穿透?什么是缓存雪崩?什么是缓存击穿?也聊一聊它们解决方案

缓存穿透:是指用户请求的数据在缓存中不存在,即没有命中,同时在数据库中也不存在,导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据,会导致短时间大量请求落在数据库上,造成数据库压力过大,甚至导致数据库承受不住而宕机崩溃。

2024-04-09 17:28:43 800

原创 聊一聊Redis的内存淘汰策略、Redis的哨兵机制

当Redis的内存超过最大允许的内存之后,Redis会触发内存淘汰策略,删除一些不常用的数据,以保证Redis服务器的正常运行。

2024-04-09 17:24:19 307

原创 Redis给缓存数据设置过期时间有什么用?Redis过期数据的删除策略是什么?

缓存数据如果没有过期时间,可能会导致数据无限期地占用内存资源,随着数据不断积累,Redis服务器的内存空间可能逐渐耗尽,设置过期时间可以自动清理不再需要的数据,从而有效管理内存资源,避免内存泄漏和溢出。

2024-04-09 13:32:19 727

原创 什么是Redis持久化机制?持久化包括哪些机制?如何选择合适的持久化机制?Redis 4.0 对于持久化机制做了什么优化?

Redis持久化机制:为了能够重用Redis数据(防止系统故障导致数据丢失),我们需要将Redis中的数据写入到磁盘空间中。

2024-04-09 09:40:11 514

原创 Redis常用的数据结构有哪些?也聊一聊这些数据结构的应用场景

五种常用数据结构:String、Hash、Set、List、SortedSet/Zset。三种特殊的数据结构:Bitmap、HyperLogLog、Geospatial ,其中Bitmap、HyperLogLog的底层都是 String 数据类型,Geospatial 的底层是 Sorted Set/Zset 数据类型。

2024-04-09 09:38:04 438

原创 为什么要用Redis做缓存?Redis常用应用场景有哪些?

Redis因其高效的内存操作和键过期功能,常被用于构建缓存系统,减轻数据库压力。应用程序可以将热点数据存储在Redis中,当数据被请求时,先从Redis缓存获取,如果缓存未命中再从数据库读取,有效提升了数据访问速度。

2024-04-08 21:28:16 422

原创 什么是Redis?Redis为什么这么快?Redis相比Memcached有哪些共同点和区别?

Redis本质上是一个Key-Value类型的内存数据库,把整个数据库加载在内存当中操作,定期通过异步操作把数据库中的数据复制到硬盘中。

2024-04-08 21:25:30 508

原创 如何创建索引?为什么索引查询不一定能提高查询的性能?什么情况下索引失效?

通过索引查询数据通常比全表扫描要快得多,这是因为索引实质上是,按照某种规则预先排序的数据结构(如B+树),这使得数据库系统能够快速定位到符合条件的数据行。

2024-04-08 21:23:30 372

原创 为什么索引结构默认使用B+Tree?为什么需要注意联合索引中的顺序?最左前缀原则是什么?

B+Tree相比于B-Tree,所有的数据都存储在叶子节点,并且叶子节点之间用指针相连形成了一个有序链表,这有利于范围查询和全表扫描时连续地读取磁盘上的数据,极大地降低了磁盘I/O次数。而在B-Tree中,数据分布在所有节点,不利于范围查询,IO代价高。

2024-04-08 21:20:01 342

原创 线性表练习:一元多项式相加、一元多项式相乘

打开源程序UnipolyAdd.cpp,其中的代码实现的是两个一元多项式的求和运算。程序已给出一元多项式存储结构的定义、建立存储结构的函数、输出一元多项式的函数、及主函数。请补充完成一元多项式的求和运算的函数编写。多项式某一项的系数可能为0,系数为0的多项式项为无效项,建立多项式时不存储系数为0的项,输出时也不输出系数为0的项。

2024-04-07 20:49:23 252

原创 synchronized和volatile的区别是什么?synchronized和lock的区别是什么?synchronized和ReentrantLock的区别是什么?

volatile本质是在告诉JVM当前变量在线程工作内存中的值是不可靠的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其它线程被阻塞住。synchronized会创建一个内存屏障,内存屏障指令保证了所有CPU操作结果都会直接刷到主存中,从而保证操作的内存可见性。

2024-04-07 20:23:23 301

原创 JVM对synchronized的底层做了哪些优化?

锁有四种状态,并且会因实际情况进行膨胀升级,其膨胀方向是:无锁—>偏向锁—>轻量级锁—>重量级锁,并且膨胀方向不可逆。

2024-04-07 20:20:35 366

原创 聊一聊volatile关键字的底层原理、synchronized关键字的底层原理

synchronized同步代码块的实现是通过monitorenter和monitorexit指令,其中monitorenter指令指向同步代码块的开始位置,monitorexit指令则指明同步代码块的结束位置。当执行 monitorenter指令时,线程试图获取锁也就是获取monitor的持有权。

2024-04-07 20:18:35 326

原创 sleep()方法和wait()方法有什么共同点和区别?Thread类中调用start()方法时,会执行run()方法,那为什么不能直接调用run()方法呢?

sleep()方法,是Thread类的静态方法,当前线程将睡眠n毫秒,线程进入阻塞状态。当睡眠时间到了,会解除阻塞,进入就绪状态,等待分配CPU时间片。睡眠时不释放锁(如果有的话)。wait()方法,是Object的方法,必须与synchronized关键字一起使用,调用后,线程进入阻塞状态,当其它线程调用notify()方法或者notifyAll()方法唤醒它后,当前线程就会解除阻塞状态。睡眠时,会释放互斥锁。但是,只有重新占用互斥锁之后,才会进入就绪状态。

2024-04-07 20:14:25 158

原创 如何创建索引?创建索引时需要注意什么?创建索引的原则有哪些?

尽量选择区分度高的列作为索引,如果结果接近1,意味着几乎每一条记录在这个字段上的值都不一样,这样的字段作为索引效果很好,因为可以准确地区分每一条记录。

2024-04-06 12:23:56 194

原创 谈谈线程死锁以及它的解决方案

各个线程都在等待对方释放资源以便自己能继续执行,形成了一个环形等待的闭环,除非外部干预,否则这些线程将永久阻塞。

2024-04-06 12:16:56 283

原创 聊聊线程的生命周期

线程有五种基本状态:新建状态、就绪状态、运行状态、阻塞状态和死亡状态。

2024-04-06 12:13:58 283

原创 聊聊JUC并发编程、线程和进程的区别、Java中创建线程的三种方式

进程是操作系统资源分配的基本单位,而线程是CPU处理器任务调度和执行的基本单位。每个进程都有独立地址空间,包含代码、数据、堆、栈等资源,程序之间的切换会有较大的开销;而线程可以看做轻量级的进程,同一进程的线程共享该进程的地址空间,每个线程也都有自己独立的Java栈、本地方法栈和程序计数器,线程之间切换的开销小。

2024-04-06 12:10:03 300

原创 聊聊JVM调优常用的命令、dump文件的作用

分析Dump文件,快速定位内存泄漏;直观地查看各部分内存区域的使用情况,帮助优化内存分配策略和GC设置;查找性能瓶颈,当系统出现性能问题时,帮助了解是否存在由于大量对象导致的频繁GC,或者是大对象过多引发的内存碎片等情况。

2024-04-06 12:03:24 182

原创 聊聊什么是双亲委派机制、类加载的过程、常见的类加载器

当一个类加载器收到一个类加载的请求,它首先不会尝试自己去加载,而是将这个请求委派给父类加载器去加载,如果父类加载器还有父类的话,那么就继续往上委派,只有父类加载器在自己的搜索范围类查找不到指定类时,子加载器才会尝试自己去加载该类,子加载器找不到该类,就继续传递给下面的子加载器。

2024-04-02 09:00:15 167

原创 什么是数据库索引?索引有哪些优缺点?索引分为哪些类?索引的底层实现原理是什么?

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

2024-04-02 08:53:30 477

原创 谈谈数据库三范式、数据库常用概念、MySQL支持的存储引擎、MySQL执行一次查询的过程

第一范式(1NF):要求数据库表中的每个字段都必须是不可再分的项。第二范式(2NF):要求表中的所有非主属性必须完全依赖于主码,而不能存在⾮主属性对于主码的部分函数依赖。第三范式(3NF):消除了非主属性对主码传递依赖。

2024-04-02 08:47:46 403

空空如也

空空如也

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

TA关注的人

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