分布式相关(面试题)

目录

1.Redis 和 Memcache 的区别?

2、使用 Redis 有哪些好处?

3、什么是 redis 持久化?rdb 和 aof 的比较?

4、Redis 最适合的场景?

5、redis 哈希槽的概念?

6、怎么理解 Redis 事务?

7、redis 的淘汰策略有哪些?

8、redis 有哪些数据结构?

9、redis 缓存穿透、缓存雪崩、缓存击穿?

10、redis 如何实现高并发?

11、redis 如何实现高可用?

12、redis 单线程还能处理速度那么快?

13、为什么 Redis 的操作是原子性的,怎么保证原子性?

14、redis 的主从复制的实现过程?

15、redis 的哨兵机制的作用?

16、redis 常见的性能问题和解决方案?

17、分布式缓存?

18、什么是 Nginx?

19、nginx 相对于 apache 的优点?

20、 Nginx 优化的方式?

21、Nginx 如何处理一个请求的?

22、Nginx 是如何实现高并发的?

23、Nginx 的进程模型?

24、Nginx 负载均衡的 4 种分配方式?

25、为什么要用 Nginx?

26、什么是正向代理?

27、什么是反向代理?

28、什么是负载均衡?

29、Nginx 的调度算法有哪些?

30、Nginx 负载均衡调度状态?

31、可以从哪些方面来优化 nginx 服务?

32、为什么要用 MQ?

33、使用 MQ 会有什么问题?

34、怎么保证 MQ 的高可用?

35、MQ 的优缺点?

36、Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别?

37、如何设置消息的过期时间?

38、消息的持久化是如何实现的?

39、Zookeeper 是什么?

40、Zookeeper 的应用场景?

41、四种类型的数据节点 Znode?

42、Zookeeper Watcher 机制?

43、Zookeeper 下 Server 工作状态?

44、Zookeeper 是如何保证事务的顺序一直性的?

45、ZK 节点宕机如何处理?

46、Zookeeper 有哪几种部署模式?

47、Dubbo 内置了哪几种容器?

48、Dubbo 里面有哪几种角色?

49、Dubbo 有哪几种集群容错方案,默认是那种?

50、Dubbo 有哪几种负载均衡策略,默认是哪种?

51、Dubbo 的管理控制台能做什么?

52、什么是 Spring Boot?

53、Spring Boot 有哪些优点?

54、什么是 JavaConfig?

55、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?

56、Spring Boot 中的监视器是什么?

57、如何在 Spring Boot 中禁用 Actuator 端点安全性?

59、什么是 WebSocket?

60、什么是 Swagger?

61、什么是 Apache Kafka?

62、什么是 Spring Cloud?

63、使用 Spring Cloud 有什么优势?

64、服务注册和发现是什么意思?


1.Redis 和 Memcache 的区别?

         1、存储方式 Memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis 有部份存在硬盘上,redis 可以持久化其数据

        2、数据支持类型 memcached 所有的值均是简单的字符串,redis 作为其替代者,支持更为丰富的数据类型 ,提供 list,set,zset,hash 等数据结构的存储

        3、使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。Redis 直接自己构建了 VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

        4、value 值大小不同:Redis 最大可以达到 1gb;memcache 只有 1mb。

        5、redis 的速度比 memcached 快很多

         6、Redis 支持数据的备份,即 master-slave 模式的数据备份。

2、使用 Redis 有哪些好处?

        (1) 速度快,因为数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是 O(1)

        (2) 支持丰富数据类型,支持 string,list,set,sorted set,hash

        (3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

        (4) 丰富的特性:可用于缓存,消息,按 key 设置过期时间,过期后将会自动删除

3、什么是 redis 持久化?rdb 和 aof 的比较?

        持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

        比较:

         1、aof 文件比 rdb 更新频率高,优先使用 aof 还原数据。

        2、aof 比 rdb 更安全也更大

        3、rdb 性能比 aof 好

        4、如果两个都配了优先加载 AOF

4、Redis 最适合的场景?

        (1)、会话缓存(Session Cache) 最常用的一种使用 Redis 的情景是会话缓存(session cache)。用 Redis 缓存会话比其他存储(如 Memcached)的优势在于:Redis 提供持久化。

        (2)、全页缓存(FPC) 除基本的会话 token 之外,Redis 还提供很简便的 FPC 平台。回到一致性问题,即使重启了Redis 实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似 PHP 本地 FPC。 再次以 Magento 为例,Magento 提供一个插件来使用 Redis 作为全页缓存后端。此外,对 WordPress 的用户来说,Pantheon 有一个非常好的插件 wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

        (3)、队列 Reids 在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得 Redis 能作为一个很好的消息队列平台来使用。Redis 作为队列使用的操作,就类似于本地程序语言(如 Python)对 list 的 push/pop 操作。

        (4),排行榜/计数器 Redis 在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(SortedSet)也使得我们在执行这些操作的时候变的非常简单,Redis 只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的 10 个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:

        (5)、发布/订阅 最后(但肯定不是最不重要的)是 Redis 的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis 的发布/订阅功能来建立聊天系统!

5、redis 哈希槽的概念?

         Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。

6、怎么理解 Redis 事务?

        事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行,事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

7、redis 的淘汰策略有哪些?

        noeviction:返回错误当内存限制达到并且客户端尝试执行会让更多内存被使用的命令(大部分的写入指令,但 DEL 和几个例外) allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。 allkeys-random: 回收随机的键使得新添加的数据有空间存放。volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。

8、redis 有哪些数据结构?

        String、List、Set、Zset(Sorted Set)、hash

9、redis 缓存穿透、缓存雪崩、缓存击穿?

       

10、redis 如何实现高并发?

        redis 通过一主多从,主节点负责写,从节点负责读,读写分离,从而实现高并发。

11、redis 如何实现高可用?

        主备切换,哨兵集群,主节点宕机的情况下,自动选举出一个从节点变成主节点,从而保证 了 redis 集群的高可用。

12、redis 单线程还能处理速度那么快?

         首先,redis 是单进程单线程的 k-v 内存型可持久化数据库。单线程还能处理速度很快的原因:

        1、redis 操作是基于内存的,内存的读写速度非常快

        2、正是由于 redis 的单线程模式,避免了线程上下文切换的损耗

        3、redis 采用的 IO 多路复用技术,可以很好的解决多请求并发的问题。 多路代表多请求,复用代表多个请求重复使用同一个线程。

13、为什么 Redis 的操作是原子性的,怎么保证原子性?

        对于 Redis 而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。 Redis 的操作之所以是原子性的,是因为 Redis 是单线程的。Redis 本身提供的所有 API 都是原子操作,Redis 中的事务其实是要保证批量操作的原子性。多个命令在并发中也是原子性的吗? 不一定, 将 get 和 set 改成单命令操作,incr 。使用 Redis 的事务,或者使用 Redis+Lua==的方式实现.

14、redis 的主从复制的实现过程?

        1、从服务发送一个 sync 同步命令给主服务要求全量同步

        2、主服务接收到从服务的 sync 同步命令时,会 fork 一个子进程后台执行 bgsave 命令(非阻塞)快照保存,生成 RDB 文件,并将 RDB 文件发送给从服务

        3、从服务再将接收到的 RDB 文件载入自己的 redis 内存

        4、待从服务将 RDB 载入完成后,主服务再将缓冲区所有写命令发送给从服务

        5、从服务在将主服务所有的写命令载入内存从而实现数据的完整同步

        6、从服务下次在需要同步数据时只需要发送自己的 offset 位置(相当于 mysql binlog 的位置)即可,只同步新增加的数据,再不需要全量同步

15、redis 的哨兵机制的作用?

        1、监控:Sentinel 会不断的检查主服务器和从服务器是否正常运行。

        2、通知:当被监控的某个 redis 服务器出现问题,Sentinel 通过 API 脚本向管理员或者其他的应用程序发送通知。

         3、自动故障转移:当主节点不能正常工作时,Sentinel 会开始一次自动的故障转移操作,它会将与失效主节点是主从关系 的其中一个从节点升级为新的主节点,并且将其他的从节点指向新的主节点。


16、redis 常见的性能问题和解决方案?

        (1) Master 最好不要做任何持久化工作,如 RDB 内存快照和 AOF 日志文件

        (2) 如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略设置为每秒同步一次

        (3) 为了主从复制的速度和连接的稳定性, Master 和 Slave 最好在同一个局域网内

        (4) 尽量避免在压力很大的主库上增加从库

        (5) 主从复制不要用图状结构,用单向链表结构更为稳定,即: Master <- Slave1 <- Slave2 <-Slave3…

17、分布式缓存?

         硬盘上的数据,缓存在别的计算机上(非程序运行的计算机)的内存上,而且可以缓存的计算机的个数不止一个,可以使用 n 个用户通过访问 http 服务器,然后访问应用服务器资源,应用服务器调用后端的数据库,在第一次访问的时候,直接访问数据库,然后将要缓存的内容放入到 memcached 集群,集群规模根据缓存文件的大小而定。在第二次访问的时候就直接进入缓存读取,不需要进行数据库的操作。这个适合数据变化不频繁的场景,比如:互联网站显示的榜单,阅读排行等。

18、什么是 Nginx?

        Nginx 是一个高性能的 HTTP 和反向代理服务器,及电子邮件代理服务器,同时也是一个非 常高效的反向代理、负载平衡。

19、nginx 相对于 apache 的优点?

        轻量级,同样起 web 服务,比 apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而 apache 则是阻塞型的,在高并发下 nginx 能保持低资源低消耗高性能 高度模块化的设计,编写模块相对简单社区活跃,各种高性能模块出品迅速啊rewrite ,比 nginx 的 rewrite 强大 模块超多,基本想到的都可以找到 少 bug ,nginx 的 bug 相对较多

20、 Nginx 优化的方式?

        Nginx 运行工作进程数量 Nginx 运行工作进程个数一般设置 CPU 的核心或者核心数 x2 Nginx 运行 CPU 亲和力 比如 4 核配置: worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000 Nginx 最大打开文件数 worker_rlimit_nofile 65535; Nginx 事件处理模型 events { use epoll; worker_connections 65535; multi_accept on; } nginx 采用 epoll 事件模型,处理效率高。 开启高效传输模式 连接超时时间 主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的

21、Nginx 如何处理一个请求的?

        首先,nginx 在启动时,会解析配置文件,得到需要监听的端口与 ip 地址,然后在 nginx 的master 进程里面先初始化好这个监控的 socket,再进行 listen,然后再 fork 出多个子进程出来,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失忆机器

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值