技术宅小伙:看看面试官都问了些什么(Java系列)
喂你好啊。首先让我来做一个简单的自我介绍吧,面试官你好啊,我是...好的。那么在你6年的这个工作经历中啊,你积累了不少的技术经验,其中最熟悉的技术是Redis和Spring。让我们从你擅长的技术开始交流吧。
Radis的哨兵机制实现了集群监控和分布式高可用解决方案,主要用于监控Leader和Follower的状态。如果Leader出现故障,它会从Follower中选一个Leader出来,然后将变化交给Radis。如果哨兵也挂掉了,它会触发哨兵的自动选举,实现了Radis组成复制的高可用。在Spring Cloud中使用的Nacos注册中心也有类似的选举,而在消息队列中,比较典型的就是Kafka里面的组成选举。ZooKeeper也有一个Leader选举的过程,它们都是为了解决一些分布式系统的解决方案。
在电商场景中,秒杀场景是一个人人都非常熟悉的场景。如果让你来开发这个秒杀场景,你可能会遇到许多挑战。首先,在流量入口处,可能会有大量的用户请求同时到达服务器。而在服务器端,有限的资源用于处理请求,并且需要并发快速响应这些用户的请求。因此,在流量进入到入口之后,我们可能需要进行限流、防权、日志、监控等操作。在流量进入到入口之后,我们还需要解决一些流量交叉、资源隔离、服务区优化等问题,还需要使用一些经典的负载均衡和动态入口等。当流量进入入口并收到之后,我们可能还需要进行一些服务降级、服务限流和拒绝请求等操作。到后来,当请求穿透到这个部分之后,我们可能还需要使用缓存进行处理,并可能触发一些并发模型的场景,例如分布式锁同步不锁,库存扣减等。
在Java开发中,大多数开发人员使用框架进行开发。实际上,与其说是用Java开发,不如说是用Spring开发。根据你的介绍,Redis也是你比较熟悉的技术。使用Redis时,最常见的入口是耐磨VC。那么请你用自己的语言简述一下,Redis是如何通过哈希算法来管理数据的?
在了解这一点之前,我们首先要明白一个概念,哈希是什么。哈希实际上就是将任意长度的输入通过一个哈希算法转换为一个固定长度的输出。这也是它的优势之一,因为它使用的是纯数据,所以它的实现复杂度是O(1)。然后,它是Map的底层数据结构,即通过数组加列表的形式来存储数据。数据加列表的形式,实际上是为了解决哈希冲突的问题。对于相同的值,它会使用列表进行连接,然后用数据填充每一个列表。在任意长度的情况下,我们可以通过哈希这个key,使用哈希算法得到一个固定输出值。然后,我们可以使用它进行取模。取模之后,因为我们的数据结构是数组加列表,我们就会得到一个数组的下标,然后将其存入列表中。列表实际上是继承了一个安全节点的一个No节点的Key-Value结构。它里面存储了一个No节点的哈希、一个Key-Value,还有一个指向下一个单列表的指针。当你进行查询时,我们通过它的算法得到数的加和,然后如果数组为空,直接插入。如果不为空,我们就要去循环遍历这个列表,找到这个Key是否相等,如果相等修改它的值,如果不相等就在列表的末尾添加这个Key-Value等等的一些问题。
喂你好啊。首先让我来做一个简单的自我介绍吧,面试官你好啊,我是...好的。那么在你6年的这个工作经历中啊,你积累了不少的技术经验,其中最熟悉的技术是Redis和Spring。让我们从你擅长的技术开始交流吧。
Radis的哨兵机制实现了集群监控和分布式高可用解决方案,主要用于监控Leader和Follower的状态。如果Leader出现故障,它会从Follower中选一个Leader出来,然后将变化交给Radis。如果哨兵也挂掉了,它会触发哨兵的自动选举,实现了Radis组成复制的高可用。在Spring Cloud中使用的Nacos注册中心也有类似的选举,而在消息队列中,比较典型的就是Kafka里面的组成选举。ZooKeeper也有一个Leader选举的过程,它们都是为了解决一些分布式系统的解决方案。
在电商场景中,秒杀场景是一个人人都非常熟悉的场景。如果让你来开发这个秒杀场景,你可能会遇到许多挑战。首先,在流量入口处,可能会有大量的用户请求同时到达服务器。而在服务器端,有限的资源用于处理请求,并且需要并发快速响应这些用户的请求。因此,在流量进入到入口之后,我们可能需要进行限流、防权、日志、监控等操作。在流量进入到入口之后,我们还需要解决一些流量交叉、资源隔离、服务区优化等问题,还需要使用一些经典的负载均衡和动态入口等。当流量进入入口并收到之后,我们可能还需要进行一些服务降级、服务限流和拒绝请求等操作。到后来,当请求穿透到这个部分之后,我们可能还需要使用缓存进行处理,并可能触发一些并发模型的场景,例如分布式锁同步不锁,库存扣减等。
在Java开发中,大多数开发人员使用框架进行开发。实际上,与其说是用Java开发,不如说是用Spring开发。根据你的介绍,Redis也是你比较熟悉的技术。使用Redis时,最常见的入口是耐磨VC。那么请你用自己的语言简述一下,Redis是如何通过哈希算法来管理数据的?
在了解这一点之前,我们首先要明白一个概念,哈希是什么。哈希实际上就是将任意长度的输入通过一个哈希算法转换为一个固定长度的输出。这也是它的优势之一,因为它使用的是纯数据,所以它的实现复杂度是O(1)。然后,它是Map的底层数据结构,即通过数组加列表的形式来存储数据。数据加列表的形式,实际上是为了解决哈希冲突的问题。对于相同的值,它会使用列表进行连接,然后用数据填充每一个列表。在任意长度的情况下,我们可以通过哈希这个key,使用哈希算法得到一个固定输出值。然后,我们可以使用它进行取模。取模之后,因为我们的数据结构是数组加列表,我们就会得到一个数组的下标,然后将其存入列表中。列表实际上是继承了一个安全节点的一个No节点的Key-Value结构。它里面存储了一个No节点的哈希、一个Key-Value,还有一个指向下一个单列表的指针。当你进行查询时,我们通过它的算法得到数的加和,然后如果数组为空,直接插入。如果不为空,我们就要去循环遍历这个列表,找到这个Key是否相等,如果相等修改它的值,如果不相等就在列表的末尾添加这个Key-Value等等的一些问题。
除了Redis,你还熟悉哪些分布式技术?在分布式系统中,最常用的技术之一是分布式锁,你能为我们介绍一下分布式锁的实现原理吗?