0
点赞
收藏
分享

微信扫一扫

面经解析,招银网络科技java面试

开头

在找工作的过程中,对于 Redis 技术知识的掌握已经成为必须的技能。美团面试常常就会被问到Redis相关知识,而这次我就差点倒在了美团3面,面试官连问我以下几个Redis的问题,然后就卡壳了...

  1. redis了解吗?你说说怎么用redis实现分布式锁?

  2. Redis常用数据结构及底层数据结构实现

  3. 如何解决 Redis 的并发竞争 Key 问题

  4. 如何保证缓存与数据库双写时的数据一致性?

    剩下的不太记得了...为此面试完回来针Redis专门做了一个面试问题大总结

一,session共享

首先第一个要解决的就是sesison共享的问题,如下图。

面经解析,招银网络科技java面试

通常有两种解决方案,第1种是配置nginx的负载集群策略为ip_hash,第2种是将session存储到其它地方,一般推荐放到redis中。

第1种方案适合于临时解决或者是为了兼容历史项目,但是从应用服务器无状态的角度考虑,推荐把用户会话session放到redis,如下图。

面经解析,招银网络科技java面试

二,本地缓存

如果使用本地缓存,当从单体迁移到集群后,就会面临缓存同步的问题,如下图。

面经解析,招银网络科技java面试

最佳实践是上分布式缓存,既解决了缓存同步的问题,也释放了应用服务器的内存资源,如下图。

面经解析,招银网络科技java面试

三,文件服务

应用服务器在上集群之前,文件通常会放在本地,或者单独的文件服务器上,因为文件服务需要占用大量的硬盘空间,以上两种方案都无法很好的解决硬盘扩容的问题,最佳实践是放到云存储上,比如阿里云的OSS,或者腾讯云的COS上,这样可以做到按需扩容,如下图。

面经解析,招银网络科技java面试

四,分布式环境下线程同步问题

在单机环境下,使用lock就可以解决线程同步的问题,一旦上了集群之后,lock就不管用了,这时需要上分布式锁,分布式锁的解决方案也有很多,我这里推荐使用redis的setnx,需要注意的是,如果redis是集群部署的,需要考虑这种情形:假设我们在redis的主节点上添加了一把分布式锁,不幸的是主节点挂掉了,而且主节点上的锁还没有同步到从节点上,如果此时有客户端来请求获得同一把锁,那么它将顺利地获得锁,之前那把锁会被无情地忽视掉,这就是分布式锁在Redis集群中遇到的麻烦。

最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

举报

相关推荐

0 条评论