java面试题

本文概述了Java 8的五大新特性,包括Lambda表达式、Stream API、Date/Time API等。深入解析了面向对象的继承、封装和多态,以及Cookie和Session的区别。此外,讨论了HTTP GET与POST的区别,List、Map、Set的特点,以及HashMap的工作原理。关于异常处理,finally块的执行情况也做了说明。涵盖了JRE、JDK、JVM、JIT的区别,以及String、StringBuffer和StringBuilder的使用。此外,还有关于依赖注入、并发与并行、final的多用途,以及Spring Boot的基础概念、注解和运行方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java基础

说出5 个JDK 1.8 引入的新特性?

Java 8 在Java 历史上是一个开创新的版本,下面JDK8 中5 个主要的特性:

  1. Lambda 表达式,允许像对象一样传递匿名函数
  2. Stream API,充分利用现代多核CPU,可以写出很简洁的代码
  3. Date 与Time API,最终,有一个稳定、简单的日期和时间库可供你使用扩展方法,现在,
    接口中可以有静态、默认方法。
  4. 重复注解,现在你可以将相同的注解在同一类型上使用多次。
  5. 函数式编程

面向对象的特征有哪些方面?

面向对象的三大特征:1.继承 2.封装 3.多态性
(1)继承:就是保留父类的属性,扩展新的东西。通过子类可以实现继承,子类继承父类的所有状态和行为,同时添加自身的状态和行为。
(2)封装:就是类的私有化。将代码及处理数据绑定在一起的一种编程机制,该机制保证程序和数据不受外部干扰。
(3)多态:是允许将父对象设置成为和一个和多个它的子对象相同的技术。包括重载和重写。 重载是同一个类中多态的一种表现形式,重写是父类和子类之间的一种多态的表现形式。
(4)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。

说说Cookie和Session的区别。

Cookie 和Session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

HTTP请求中GET与POST方式的区别。

一、本质区别: Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求。
二、安全性 :get方式安全性低,post方式较安全。但是post方式执行效率要比get方式差一些。
三、机制 :get是把参数数据队列加到提交表单的action属性所指的URL中,在URl中对用户来说是可见的。
post 是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到action属性所指的URL地址,对于用户来说,这是不可见的。
总结:
1、get方式的安全性较post方式要差一些,所以,包含一些重要的信息的话,简易使用post数据提交方式 。
2、在做查询统计的时候,使用get方式要更好一些;而在做数据的添加,修改或删除操作时,建议使用post数据提交方式。

List、Map、Set三个接口,存取元素时,各有什么特点?

List特点:元素有放入顺序,元素可重复。
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)。
Map特点:元素按键值对存储,无放入顺序。

Java 中的HashMap 的工作原理是什么?

Java 中的HashMap 是以键值对(key-value)的形式存储元素的。HashMap 需要一个hash 函数,
它使用hashCode()和equals()方法从集合添加和检索元素。当调用put()方法的时候,HashMap
会计算key 的hash 值,然后把键值对存储在集合中合适的索引上。
如果key 已经存在了,value 会被更新成新值。HashMap 的一些重要的特性是它的容量
(capacity),负载因子(load factor)和扩容极限(threshold resizing) 。

try{}里有一个return 语句,那么紧跟在这个try 后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?

会执行,在方法返回调用者前执行。

JRE、JDK、JVM 及JIT 之间有什么不同?

JRE 代表Java 运行时( Java run-time),是运行Java 引用所必须的。
JDK 代表Java 开发工具( Java development kit),是Java 程序的开发工具,如Java 编译器,它也包含JRE。
JVM 代表Java 虚拟机( Java virtual machine),它的责任是运行Java 应用。
JIT 代表即时编译( Just In Time compilation),当代码执行的次数超过一定的阈值时,会将Java 字节码转换为本地代码,如,主要的热点代码会被准换为本地代码,这样有利大幅度提高Java 应用的性能。

String、StringBuffer 和 StringBuilder 的区别是什么?

String是Java中基础且重要的类
三者都是final,不允许被继承
在本质上都是char[]字符数组实现
String、StringBuffer 与 StringBuilder 中,String 是不可变对象,另外两个是可变的。
Stringbuilder 效率更快,因为他不需要加锁,不具备多线程安全。
Stringbuffer 里面操作方法用synchronized,效率相对更低,是线程安全的。

HashMap 和 HashTable 的区别

HashMap不是线程安全的。HashTable是线程安全。
不能包含重复键,但可以包含重复值。
1、两者父类不同
2、对外提供的接口不同
3、对null 的支持不同
Hashtable:key 和 value 都不能为null。
HashMap:key 可以为null,但是这样的key 只能有一个,因为必须保证key 的唯一性;可以有多个key值对应的value为null。

double和float的区别

1.double是双精度浮点数,内存占8个字节,有效数字16位,表示范围是-1.79E+ 308~-1.79E+308。
float是单精度浮点数,内存占4个字节,有效数字8位,表示范围是 -3.40E+38~3.40E+38。
2.两者处理速度不同,CPU处理float的速度比处理double快。double的精度高,double消耗内存是floa的两倍。
3.如果不声明,小数默认是double类型,用float时需要进行强转,或者在小数后加上f。

并发和并行的区别

并发,指的是多个事情,在同一时间段内同时发生了。
并行,指的是多个事情,在同一时间点上同时发生了。
并发的多个任务之间是互相抢占资源的。
并行的多个任务之间是不互相抢占资源的、

final 有哪些用法?

  1. 被final 修饰的类不可以被继承
  2. 被final 修饰的方法不可以被重写
  3. 被final 修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变.被final 修饰的方法,JVM 会尝试将其内联,以提高运行效率被final 修饰的常量,在编译阶段会存入常量池中.

依赖注入的方式有几种,各是什么?

一、构造器注入
二、setter 方法注入
三、接口注入

什么是依赖注入?

在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码中将组件和
服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由IoC 容器将它们装配在
一起。

动态代理的理解

1 静态代理:事先写好代理类,可以手工编写,也可以用工具生成。缺点是每个业务类都要对应一个代理类,非常不灵活。
动态代理:运行时自动生成代理对象。缺点是生成代理代理对象和调用代理方法都要额外花费时间。
2 JDK动态代理:基于Java反射机制实现,必须要实现了接口的业务类才能用这种办法生成代理对象。新版本也开始结合ASM机制。
cglib动态代理:基于ASM机制实现,通过生成业务类的子类作为代理类。
Java 发射机制的常见应用:动态代理(AOP、RPC)、提供第三方开发者扩展能力(Servlet容器,JDBC连接)、第三方组件创建对象(DI)
3 如果目标类实现了一个或多个接口,那么Spring将创建一个实现每个接口的JDK动态代理。如果目标类没有实现接口,Spring将使用CGLIB动态创建一个新类,它是目标类的子类(“extends”)使用jdk代理目标类必须实现接口
4:spring如果要代理的目标对象实现至少一个接口,则将使用JDK动态代理。目标类型实现的所有接口都将被代理。如果目标对象未实现任何接口,则将创建CGLIB代理。
5:jdk动态代理实现invocationhandler接口 重载invoke方法
public Object invoke(Object proxy, Method method, Object[] args其中method参数是代理的这个类的方法 args是这个方法的参数 proxy是代理类的实例method.invoke(target,args)传入被代理类和方法的参数反射得到

反射

反射的定义

反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个
对象,都能够调用它的任意一个方法。在java 中,只要给定类的名字,就可以通过反射机
制来获得类的所有信息。
这种动态获取的信息以及动态调用对象的方法的功能称为Java 语言的反射机制。

反射的优缺点?

反射:就是正在运行动态读取这个类的完整信息。
优点:java 的反射机制就是增加程序的灵活性、
缺点:
(1)性能问题:使用反射基本上是一种解释操作,
用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和扩展性要求
很高的系统框架上,普通程序不建议使用。
(2)使用反射会模糊程序内内部逻辑:程序员希望在源代码中看到程序的逻辑,反射等绕
过了源代码的技术,因而会带来维护问题。反射代码比相应的直接代码更复杂。

那些地方用到了反射?

jdbc 连接、常用框架、spring ioc、jsp:useBean 等。

spring boot

Springboot常用注解

@SpringBootApplication:启动类注解。
@Autowired:自动导入依赖的bean
@ResponseBody:注解在方法上,返回json类型数据
@RequestMapping:映射注解 可以指定请求方式
@GetMapping:get请求
@PostMapping:post请求
@Service:一般用于修饰service层的组件
@Controller:用于定义控制器类
@RestController:用于标注控制层组件(如struts中的action),@ResponseBody和@Controller的合集。
@Import:用来导入其他配置类。
@Service:一般用于修饰service层的组件

什么是SpringBoot?为什么要用SpringBoot

用来简化spring 应用的初始搭建以及开发过程使用特定的方式来进行配置(properties 或yml 文件)
创建独立的spring 引用程序main 方法运行
嵌入的Tomcat 无需部署war 文件
简化maven 配置
自动配置spring 添加对应功能starter 自动化配置
spring boot 来简化spring 应用开发,约定大于配置,去繁从简,just run 就能创建一个独立的,产品级别的应用
Spring Boot 优点,如:
一、独立运行
二、简化配置
三、自动配置
四、无代码生成和XML 配置
五、应用监控

运行Spring Boot 有哪几种方式?

1)打包用命令或者放到容器中运行
2)用Maven/Gradle 插件运行
3)直接执行main 方法运行

spring mvc

什么是spring mvc

在讲SpringMVC 之前我们先来看一下什么是MVC 模式MVC:MVC 是一种设计模式MVC 的
原理图:
分析:
M-Model 模型(完成业务逻辑:有javaBean 构成,service+dao+entity)
V-View 视图(做界面的展示jsp,html……)
C-Controller 控制器(接收请求—>调用模型—>根据结果派发面)
springMVC 是什么:
springMVC 是一个MVC 的开源框架,springMVC=struts2+spring,springMVC 就相当于是Struts2 加上sring 的整合,但是这里有一个疑惑就是,springMVC 和spring 是什么样的关系呢?这个在百度百科上有一个很好的解释:意思是说,springMVC 是spring 的一个后续产品,其实就是spring 在原有基础上,又提供了web 应用的MVC 模块,可以简单的把springMVC理解为是spring 的一个模块(类似AOP,IOC 这样的模块),网络上经常会说springMVC 和spring 无缝集成,其实springMVC 就是spring 的一个子模块,所以根本不需要同spring 进行整合。

SpringMVC的优点

1.清晰的角色划分:控制器(controller)、验证器(validator)、命令对象(command obect)、表单对象(form object)、模型对象(model object)、Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、试图解析器(view resoler)等等。每一个角色都可以由一个专门的对象来实现。
2.强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器validator)的引用。
3.可适配、非侵入:可以根据不同的应用场景,选择何事的控制器子类(simple型、command型、from型、wizard型、multi-action型或者自定义),而不是一个单一控制器(比如Action/ActionForm)继承。
4.可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。
5.可定制的绑定(binding)和验证(validation):比如将类型不匹配作为应用级的验证错误,这可以保证错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象,需要手动解析它并转换到业务对象。
6.可定制的handler mapping和view resolution:Spring提供从最简单的URL映射,到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。
7.灵活的model转换:在Springweb框架中,使用基于Map的键/值对来达到轻易的与各种视图技术集成。
8.可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等。
9.简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme)之类的许多功能。他提供在标记方面的最大灵活性。
10.JSP表单标签库:在Spring2.0中引入的表单标签库,使用在JSP编写表单更加容易。
11.Spring Bean的生命周期:可以被限制在当前的HTTp Request或者HTTp Session。准确的说,这并非Spring MVC框架本身特性,而应归属于Spring MVC使用的WebApplicationContext容器。

Spring MVC 流程

1、用戶发送请求至前端控制器DispatcherServlet。
2、DispatcherServlet 收到请求调用HandlerMapping 处理器映射器。
3、处理器映射器找到具体的处理器(可以根据xml 配置、注解进行查找),生成处理器对象
及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet 调用HandlerAdapter 处理器适配器。
5、HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller 执行完成返回ModelAndView。
7、HandlerAdapter 将controller 执行结果ModelAndView 返回给DispatcherServlet。
8、DispatcherServlet 将ModelAndView 传给ViewReslover 视图解析器。
9、ViewReslover 解析后返回具体View。
10、DispatcherServlet 根据View 进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet 响应用戶。

mybatis

什么是MyBatis

(1)Mybatis 是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql 执行性能,灵活度高。
(2)MyBatis 可以使用XML 或注解来配置和映射原生信息,将POJO 映射成数据库中的记录,避免了几乎所有的JDBC 代码和手动设置参数以及获取结果集。
(3)通过xml 文件或注解的方式将要执行的各种statement 配置起来,并通过java 对象和statement 中sql 的动态参数进行映射生成最终执行的sql 语句,最后由mybatis 框架执行sql并将结果映射为java 对象并返回。(从执行sql 到返回result 的过程)。

MyBatis 的优点和缺点

优点:
(1)基于SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL 写在XML 里,解除sql 与程序代码的耦合,便于统一管理;提供XML 标签,支持编写动态SQL 语句,并可重用。
(2)与JDBC 相比,减少了50%以上的代码量,消除了JDBC 大量冗余的代码,不需要手动开关连接;
(3)很好的与各种数据库兼容(因为MyBatis 使用JDBC 来连接数据库,所以只要JDBC 支持的数据库MyBatis 都支持)。
(4)能够与Spring 很好的集成;
(5)提供映射标签,支持对象与数据库的ORM 字段关系映射;提供对象关系映射标签,支持对象关系组件维护。
缺点
(1)SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL 语句的功底有一定要求。
(2)SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

#{}和${}的区别是什么?

#{}是预编译处理,${}是字符串替换。
Mybatis 在处理#{}时,会将sql 中的#{}替换为?号,调用PreparedStatement 的set 方法来赋值;
Mybatis 在处理时,就是把{}替换成变量的值。
使用#{}可以有效的防止SQL 注入,提高系统安全性。

mysql

什么是索引

索引是对数据库表中一个或多个列的值进行排序的结构,建立索引有助于快速获取信息。你也可以这样理解:索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用戶不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。

简述你进行过的SQL 优化

1、查询语句中不要使用select *
2、尽量减少子查询,使用关联查询(left join,right join,inner join)替代
3、减少使用IN 或者NOT IN ,使用exists,not exists 或者关联查询语句替代
4、or 的查询尽量用union 或者union all 代替(在确认没有重复数据或者不用剔除重复数据时, union all 会更好)
5、应尽量避免在where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
6、应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num 上设置默认值0,确保表中num 列没有null 值,然后这样查询: select id from t where num=0

乐观锁和悲观锁的区别

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。
乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。

mysql的sql连表查询区别:内连接、左连接、右连接、直接连表

直接连接表查询其实就是内连接,左连接就是以左表为基础进行扩展(左表不损失,连不上右表的为空),右连接类似。

事务的特性

数据库事务特性:原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durabiliy)。简称ACID。
原子性:组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有操作都成功,整个事务才会提交。任何一个操作失败,已经执行的任何操作都必须撤销,让数据库返回初始状态。
一致性:事务操作成功后,数据库所处的状态和它的业务规则是一致的。即数据不会被破坏。
隔离性:在并发数据操作时,不同的事务拥有各自的数据空间,它们的操作不会对彼此产生干扰
持久性:一旦事务提交成功,事务中的所有操作都必须持久化到数据库中。

数据库的三范式是什么

第一范式:列不可再分
第二范式:行可以唯一区分,主键约束
第三范式:表的非主属性不能依赖与其他表的非主属性外键约束且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上。

MySQL有几种索引

mysql 索引的四种类型:主键索引、唯一索引、普通索引和全文索引。
通过给字段添加索引可以提高数据的读取速度,提高项目的并发能力和抗压能力。索引优化时mysql 中的一种优化方式。
主键索引:
主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。
唯一索引:
索引列的所有值都只能出现一次,即必须唯一,值可以为空。
普通索引:
基本的索引类型,值可以为空,没有唯一性的限制。
全文索引:
全文索引的索引类型为FULLTEXT。全文索引可以在varchar、char、text 类型的列上创建。
可以通过ALTER TABLE 或CREATE INDEX 命令创建。
对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。
MyISAM 支持全文索引,InnoDB 在mysql5.6 之后支持了全文索引。
全文索引不支持中文需要借sphinx(coreseek)或迅搜<、code>技术处理中文。

介绍几个MySQL 存储引擎

MySQL 将数据用各种不同的技术存储在文件中,这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。这些不同的技术以及配套的相关功能在mysql 中被称作存储引擎(也称作表类型)。

  1. MyISAM 引擎:MyISAM 引擎是MySQL 默认的存储引擎,MyISAM 不支持事务和行级锁,所以MyISAM 引擎速度很快,性能优秀。MyISAM 可以对整张表加锁,支持并发插入,支持全文索引。
    缺点:不支持事务和行级锁,也不支持外键
    优点:访问速度快,对事务的完整性没有要求或者以select、insert 为主的应用基本上都可以使用这个引擎来创建MyISAM 再磁盘上存储成三个文件,其文件名都和表名相同,但扩展名分别是:.frm(存储表定义),.MYD(存储数据),.MYI(存储索引)
  2. InnoDB 引擎:InnoDB 是专为事务设计的存储引擎,支持事务,支持外键,拥有高并发处理能力。但是,InnoDB 在创建索引和加载数据时,比MyISAM 慢。
  3. Memory 引擎(采用哈希索引):内存表,Memory 引擎将数据存储在内存中,表结构不是存储在内存中的,查询时不需要执行磁盘I/O 操作,所以要比MyISAM 和InnoDB 快很多倍,但是数据库断电或是重启后,表中的数据将会丢失,表结构不会丢失.

多线程

Java 中实现多线程有几种方法

继承Thread 类;
实现Runnable 接口;
实现Callable 接口通过FutureTask 包装器来创建Thread 线程;
使用ExecutorService 、Callable 、Future 实现有返回结果的多线程( 也就是使用了ExecutorService 来管理前面的三种方式)。

redis

什么是Redis?

Redis 是完全开源免费的,遵守BSD 协议,是一个高性能的key-value 数据库。
Redis 与其他key - value 缓存产品有以下三个特点:
Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis 不仅仅支持简单的key-value 类型的数据,同时还提供list, set, zset, hash 等数据结构的存储。
Redis 支持数据的备份,即master-slave 模式的数据备份。

Redis 优势

性能极高– Redis 能读的速度是110000 次/s,写的速度是81000 次/s 。
丰富的数据类型– Redis 支持二进制案例的Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。
原子– Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI 和EXEC 指令包起来。
丰富的特性– Redis 还支持publish/subscribe, 通知, key 过期等等特性。

使用Redis 有哪些好处?

1、速度快,因为数据存在内存中,类似于HashMap, HashMap 的优势就是查找和操作的时间复杂度都是O1)
2、支持丰富数据类型,支持string, list, set, Zset, hash 等
3、支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
4、丰富的特性:可用于缓存,消息,按key 设置过期时间,过期后将会自动删除

Redis 持久化机制

Redis 是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis 重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。
实现:单独创建fork()一个子进程,将当前父进程的数据库数据复制到子进程的内存中,然后由子进程写入到临时文件中,持久化的过程结束了,再用这个临时文件替换上次的快照文件,然后子进程退出,内存释放。
RDB 是Redis 默认的持久化方式。按照一定的时间周期策略把内存的数据以快照的形式保存到硬盘的二进制文件。即Snapshot 快照存储,对应产生的数据文件为dump.rdb,通过配置文件中的save 参数来定义快照的周期。( 快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。)
AOF:Redis 会将每一个收到的写命令都通过Write 函数追加到文件最后,类似于MySQL 的binlog。当Redis 重启是会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。当两种方式同时开启时,数据恢复Redis 会优先选择AOF 恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值