JAVA面试题12

121.RDB持久化

RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。

RDB是Redis默认采用的持久化方式,在redis.conf配置文件中默认有此下配置:

save 900 1

Save 300 100

Svae 600 1000

save 开头的一行就是持久化配置,可以配置多个条件(每行配置一个条件),每个条件之间是“或”的关系

122. AOF持久化

默认情况下Redis没有开启AOF(append only file)方式的持久化,可以通过appendonly参数开启:appendonly yes开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改:appendfilename appendonly.aof.

123.Redis主从同步过程

主机和从机第一次同步是全量复制以后同步为增量复制

Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下: 
-  从服务器连接主服务器,发送SYNC命令; 
-  主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 
-  主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 
-  从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 
-  主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 
-  从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

增量同步
Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。 
增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

124. Redis实例

一个redis进程就是一个redis实例,一台服务器可以同时有多个redis实例,不同的redis实例提供不同的服务端口对外提供服务,

每个redis实例之间互相影响。每个redis实例都包括自己的数据库,数据库中可以存储自己的数据。

125.多数据库测试

一个Redis实例可以包括多个数据库,客户端可以指定连接某个redis实例的哪个数据库,就好比一个mysql中创建多个数据库,客户端连接时指定连接哪个数据库。

一个redis实例最多可提供16个数据库,下标从0到15,客户端默认连接第0号数据库,也可以通过select选择连接哪个数据库

126. redisJedis,JedisClusterRedisTemplater的区别

1.redis 官方提供的客户端连接工具是 jedis,但是使用繁琐在保存的时候需要在对象和json字符串之间相互转换

2.jedisCluster是在集群的是操作redis集群节点的对象,基本原理和jedis相同

3.springDataRedis,对 jedis 进行二次封装,使用便捷提供了RedisTemplate对象,RedisTemplate根据具体的配置可以操作单节点也可以操作集群节点,主要的优势是直接把可以把对象以二进制流的方式保存到redis中,避免了人为的转换过程。

   

127.堆的结构划分分为新生代和老年代

新生代主要存放的是新创建的对象,新生代主要是采用复制算法进行minorGC,老年代存放的是在新生代阶段被多次gc回收还没有回收掉的对象,老年代也会进行垃圾回收gc(majorGC),采用的是标记-整理算法,老年代进行GC的时候会造成一个应用程序线程中断的效果,会影响到应用程序的性能.

jvm提供了很多种垃圾回收策略,垃圾回收器 CMS、G1(采用多线程进行GC)

128.什么时候对象可以进行垃圾收集?

引用计数算法(reference-counting) :每个对象有一个引用计数器,当对象被引用一次则计数器加1,当对象引用失效一次则计数器减1,对于计数器为0的对象意味着是垃圾对象,可以被GC回收。

可达性算法(GC Roots Tracing):从GC Roots作为起点开始搜索,那么整个连通图中的对象便都是活对象,对于GC Roots无法到达的对象便成了垃圾回收的对象,随时可被GC回收。

129. jvm的调优机制:

通常我们在项目当中,需要对jvm进行调优,以防止内存溢出的现象。

主要通过调整jvm的启动参数,包括最小堆内存xms、最大堆内存xmx 栈内存xss,永久代permSize。由于jdk1.8永久代被弃用了,使用操作系统本地内存,所以不需要调节永久代大小了.还包括使用并行的垃圾收集器,比如我们用的cms、G1垃圾收集器通常情况下,我们将最小堆内存和最大堆内存设置的一样,防止内存回落造成GC。在生产环境,我们通过使用Jconsole JvisualVm 对jvm可以进行监控

130.监控发现,cpu和内存使用率高,该怎么排查问题?(重点)

1.可以通过linux top命令 查看机器的cpu和内存使用情况然后通过jstack获取java进程的线程使用情况,然后查看日志,排查问题

2.使用jvm监控工具 Jconsole JvisualVM 远程连接到服务器,分析线程和堆栈内存,排查问题,最有可能的问题是:代码死循环,线程死锁、jvm内存溢出等

更多面试题,请关注我,看主页分栏下的 java面试栏中查看更多经典面试题

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值