先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
车票
-
面试题1:介绍一下你对Redis哨兵模式的了解吧
-
- 正经回答:
-
深入追问:
-
- 追问1:介绍一下Redis故障自动切换过程:
-
追问2:那你说一下主观下线以及客观下线的区别吧:
-
追问3:说一下哨兵进程的工作方式吧
-
面试题2:redis 的过期策略和内存淘汰策略是一个东西么?
-
- 正经回答:
-
深入追问:
-
- 追问1: 简单介绍一下LRU淘汰机制吧
-
追问2:Redis的内存用完了会发生什么实际问题?
-
追问3:Redis如何做内存优化?
-
面试题3:在实际生产环境中的 redis 你是怎么部署的?说一服务器情况吧
-
- 正经回答:
-
每日小结
本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识
、集合容器
、并发编程
、JVM
、Spring全家桶
、MyBatis等ORMapping框架
、MySQL数据库
、Redis缓存
、RabbitMQ消息队列
、Linux操作技巧
等。
=======================================================================================
Redis在主从复制模式下,一旦主节点由于故障不能提供服务, 需要人工将从节点晋升为主节点, 同时还要通知应用方更新主节点地址, 对于很多应用场景这种故障处理的方式是无法接受的,这也是Redis主从复制的缺点之一,没有办法对master进行动态选举。 可喜的是Redis从2.8开始正式提供了Redis Sentinel(哨兵) 机制来解决这个问题。
哨兵模式介绍
-
Sentinel(哨兵)进程是用于监控redis集群中Master主服务器工作的状态;
-
在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用(HA);
图片来源:https://itpcb.com/a/259584
哨兵进程的作用
通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。
追问1:介绍一下Redis故障自动切换过程:
假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。
追问2:那你说一下主观下线以及客观下线的区别吧:
-
主观下线
(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断。 -
客观下线
(Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断, 并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后, 得出的服务器下线判断。
从主观下线状态切换到客观下线状态并没有使用严格的法定人数算法(strong quorum algorithm), 而是使用了流言协议: 如果 Sentinel 在给定的时间范围内, 从其他 Sentinel 那里接收到了足够数量的主服务器下线报告, 那么 Sentinel 就会将主服务器的状态从主观下线改变为客观下线。 如果之后其他 Sentinel 不再报告主服务器已下线, 那么客观下线状态就会被移除。
客观下线条件只适用于主服务器。 对于任何其他类型的 Redis 实例, Sentinel 在将它们判断为下线前不需要进行协商, 所以从服务器或者其他 Sentinel 永远不会达到客观下线条件。
追问3:说一下哨兵进程的工作方式吧
-
每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sentinel(哨兵)进程发送一个 PING 命令。
-
如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过
down-after-milliseconds
选项所指定的值,则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)。 -
如果一个Master主服务器被标记为主观下线(SDOWN),则正在监视这个Master主服务器的所有
-
Sentinel(哨兵)进程要以
每秒一次
的频率确认Master主服务器
的确进入了主观下线状态
。 -
当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态(SDOWN), 则Master主服务器会被标记为客观下线(ODOWN)。
-
在一般情况下, 每个Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主服务器、Slave从服务器发送 INFO 命令。
-
当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会
从 10 秒一次改为每秒一次。
-
若没有足够数量的 Sentinel(哨兵)进程同意 Master主服务器下线, Master主服务器的客观下线状态就会被移除。若 Master主服务器重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主服务器的主观下线状态就会被移除。
Redis配置哨兵模式
配置3个哨兵和1主2从的Redis服务器来演示这个过程。
| 服务类型 | 是否是主服务器 | IP地址 | 端口 |
| — | — | — | — |
| Redis | 是 | 192.168.101.90 | 6379 |
| Redis | 否 | 192.168.101.91 | 6379 |
| Redis | 否 | 192.168.101.92 | 6379 |
| Sentinel | - | 192.168.101.90 | 26379 |
| Sentinel | - | 192.168.101.91 | 26379 |
| Sentinel | - | 192.168.101.92 | 26379 |
首先配置Redis的主从服务器,修改redis.conf文件如下
使得Redis服务器可以跨网络访问
bind 0.0.0.0
设置密码
requirepass “123456”
指定主服务器,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
slaveof 192.168.101.90 6379
主服务器密码,注意:有关slaveof的配置只是配置从服务器,主服务器不需要配置
masterauth 123456
上述内容主要是配置Redis服务器,从服务器比主服务器多一个slaveof的配置和密码。
配置3个哨兵,每个哨兵的配置都是一样的。在Redis安装目录下有一个sentinel.conf文件,copy一份进行修改
禁止保护模式
protected-mode no
配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.101.90代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 192.168.101.90 6379 2
sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
sentinel auth-pass
sentinel auth-pass mymaster 123456
关键配置项:
sentinel monitor mymaster 192.168.101.90 6379 2
配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.101.90代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
有了上述的修改,我们可以进入Redis的安装目录的src目录,通过下面的命令启动服务器和哨兵
启动Redis服务器进程
./redis-server …/redis.conf
启动哨兵进程
./redis-sentinel …/sentinel.conf
注意启动的顺序。首先是主机(192.168.101.90)的Redis服务进程,然后启动从机的服务进程,最后启动3个哨兵的服务进程。
课间休息,欣赏一下来自咱们SQL大腿群同学的搬砖工地,坐标:上海。
面试题2:redis 的过期策略和内存淘汰策略是一个东西么?
=============================================================================================
过期策略和内存淘汰策略乍一看相似,但却不是一个事儿。我们知道,往 redis 写入的数据会消失很正常的,在生产环境的 redis 经常会丢掉一些数据,写进去了,过一会儿可能就没了?这不是BUG。因为redis 是缓存,不是数据库
。
缓存主要存在内存中,内存空间是有限的,比如 redis 就只能用 10G,你要是往里面写了 20G 的数据,会咋办?当然会干掉 10G 的数据,保留另外 10G 数据。那么干掉哪些数据,保留哪些数据呢?当然要根据热度干掉不常用的数据。
数据已经过期了,怎么还占用着内存?这是由 redis 的过期策略来决定。
redis 过期策略
最后
面试题文档来啦,内容很多,485页!
由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。
1111道Java工程师必问面试题
MyBatis 27题 + ZooKeeper 25题 + Dubbo 30题:
Elasticsearch 24 题 +Memcached + Redis 40题:
Spring 26 题+ 微服务 27题+ Linux 45题:
Java面试题合集:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
45题:**
[外链图片转存中…(img-UE4P3bRK-1713547493400)]
Java面试题合集:
[外链图片转存中…(img-0PN9iwhl-1713547493400)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-ZORn6UuB-1713547493400)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!