掌握这些高并发面试题,保证你能造火箭拿offer

1、在项目中Redis缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?面试官心理分析【掌握这些高并发面试题,保证你能造火箭拿offer】这个是互联网公司必问 , 要是一个人连Redis缓存都不太清楚 , 那做毛线开发 。
上来第一个先问问你项目哪里用了缓存?为啥要用?不用行不行?如果用了以后可能会有什么不良的后果?
这就是看看你对缓存背后有没有思考 , 如果你就是傻乎乎瞎用 , 没法给面试官一个合理的解答 , 那面试官对你第一印象打折扣 。
面试题剖析项目中缓存是如何使用的?
需要结合自己项目的业务讲解 。
为什么要用缓存?
用缓存 , 主要有两个用途:高性能、高并发 。
高性能
假设一个场景 , 一个请求过来 , 你各种乱七八糟操作mysql , 半天查出来一个结果耗时600ms 。 但是这个结果可能接下来几个小时都不会变了 , 或者变了也可以不用立即反馈给用户 , 那么此时咋办?
缓存啊 , 折腾 600ms 查出来的结果扔缓存里 , 一个 key 对应一个 value , 下次再有人查 , 别走mysql折腾 600ms了 , 直接从缓存里 , 通过一个 key 查出来一个value , 2ms搞定 。 性能提升 300 倍 。
对于一些需要复杂操作耗时查出来的结果 , 且确定后面不怎么变化 , 但是有很多读请求 , 那么直接将查询出来的结果放在缓存中 , 后面直接读缓存就好 。
高并发
你有个系统 , 高峰期一秒钟过来的请求有 1 万 , 一个mysql 单机绝对会死掉 。 你这个时候就只能上缓存 , 把很多数据放缓存 , 别放 mysql 。 缓存功能简单 , 说白了就是 key-value 式操作 , 单机支撑的并发量轻松一秒几万十几万 , 支撑高并发 so easy 。 单机承载并发量是 mysql 单机的几十倍 。
用了缓存之后会有什么不良后果?
常见的缓存问题有以下几个:
缓存与数据库双写不一致 、缓存雪崩、缓存穿透、缓存并发竞争后面再详细说明 。
2、如何保证 redis 的高并发和高可用?redis 的主从复制原理和哨兵原理讲一下?面试官心理分析这个问题是问你redis 单机能承载多高并发?如果单机扛不住如何扩容扛更多并发?redis 会不会挂?既然 redis 会挂怎么保证 redis 是高可用的?
其实针对的都是项目中你要考虑的问题 , 如果你没考虑过 , 那确实你对生产系统中的问题思考太少 , 技术不够扎实 。
面试题剖析用 redis 缓存技术 , 肯定要考虑如何用 redis 加多台机器保证 redis 是高并发的 , 如何让 redis 保证自己不是挂掉以后就直接死掉 , 即redis高可用 。
Redis 主从架构 - redis 基于哨兵实现高可用redis 实现高并发主要依靠主从架构 , 一主多从 , 一般来说 , 很多项目其实就足够了 , 单主用来写入数据 , 单机几万 QPS , 多从用来查询数据 , 多个从实例可以提供每秒 10w 的 QPS 。
如果想要在实现高并发的同时 , 容纳大量数据 , 那么就需要redis集群 , 使用 redis 集群之后 , 可以提供每秒几十万的读写并发 。
redis 高可用 , 如果是做主从架构部署 , 那么加上哨兵就可以了 , 就可以实现 , 任何一个实例宕机 , 可以进行主备切换 。
掌握这些高并发面试题,保证你能造火箭拿offer文章插图
接下来看一个不造火箭的案例:最近招人!面试时我打算先聊点不是很难的 , 打开一下技术话题 , 结果发现面试者对于一些开发中很基本问题都回答的不是很好 , 比如:

  • Git的分支你们是怎么管理的?
  • PHP进程间通信是如何实现的?
  • Swoole的协程和php自带的yield的区别有哪些?
  • 搭建MySQL分布式有哪些方式?
上面几个问题没有一个是“造火箭”的 , 结果发现 , 这些很基本的问题 , 很多人普遍都答得很模糊、或者支支吾吾 。 我沉思了良久 , 作为一个1-5年开发 , 如果连Git分支如何管理都没思考过 , PHP进程通信都解释不清;Swoole连特性原理都不知道 , 只会CRUD!