面试官问我:什么是高并发下的请求合并? (下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 面试官问我:什么是高并发下的请求合并? (下)

第二个我们看看定时任务是在哪儿进行注册的。

这个就很好找了。我们已经知道默认参数是 10ms 了,只需要顺着链路看一下,哪里的代码调用了其对应的 get 方法即可:


image.png


同时,我们可以看到,其定时功能是基于java.util.concurrent.ScheduledThreadPoolExecutor#scheduleAtFixedRate实现的。

第三个我们看看是怎么控制超过指定数量后,就不等待定时任务执行,而是直接发起汇总操作的:


image.png


可以看到,在com.netflix.hystrix.collapser.RequestBatch#offer方法中,当 argumentMap 的 size 大于我们指定的 maxBatchSize 的时候返回了 null。

如果,返回为 null ,那么说明已经不能接受请求了,需要立即处理,代码里面的注释也说的很清楚了:


image.png


以上就是三个关键的地方,Hystrix 的源码读起来,需要下点功夫,大家自己研究的时候需要做好心理准备。

最后再贴一个官方的请求合并工作流程图:

image.png

打完收工。


面试题


前面说的深圳的,两年经验的小伙伴把面试题汇总了一份给我,我也分享给大家吧。


Java基础

  • volatile关键字底层原理
  • 线程池各个参数含义
  • lock、synchronized区别
  • ReentrantLock锁公平与非公平实现、重入原理
  • HashMap扩容时机(容量初始化为1000和10000是否触发扩容)、机制、1.7与1.8的差异
  • ConcurrentHashMap1.7、1.8的优化与差异,size方法实现差异
  • ThreadLocal原理与风险、为什么会内存泄露
  • 阻塞队列的用途、区别
  • LinkedBlockingQueue对列的add、put区别,实际过程中如何使用
  • 悲观锁、乐观锁、自旋锁的使用场景、实现方式、优缺点
  • Class.forName、loadClass区别;
  • 线程生命周期、死锁条件与死锁避免、状态转换关系(源码级别);
  • String intern方法;
  • cas的优缺点与解决方案、ABA问题;


JVM相关

  • CMS垃圾回收的碎片解决方式
  • 常用的垃圾回收器
  • JVM垃圾回收器CMS的优缺点、与G1的区别、进入老年代的时机
  • JVM内存模型
  • JVM调优思路
  • GC Root、ModUnionTable
  • 偏向锁、轻量级锁、重量级锁底层原理、升级过程
  • jmap、jstat、top、MAT
  • CMS与G1对别
  • GC Root、ModUnionTable;


Redis相关

  • Redis高性能原因
  • Redis的部署模式
  • RedisCluster底层原理
  • Redis持久化机制
  • 缓存淘汰机制
  • 缓存穿透、缓存雪崩、缓存击穿发生场景与解决方案


SQL相关

  • MyBatis拦截器的用途
  • MyBatis动态SQL原理
  • 分库分表方案设计
  • MySQL怎么解决幻读、原理(源码级别)
  • Gap锁的作用域原理
  • RR、RC区别
  • MySQL默认的事务隔离级别、Oracle默认的事务隔离级别
  • MySQL为啥使用B+树索引
  • redo log、binlog、undo log写入顺序、分别保证了ACID的什么特性
  • 数据库乐观锁
  • MySQL优化
  • MySQL底层原理


Spring相关

  • @Bean注解、@Component注解区别
  • Spring Aop原理
  • @Aspect和普通AOP区别
  • 自定义拦截器和Aop那个先执行
  • web 拦截器
  • DispatchServlet原理


Dubbo相关

  • Dubbo负载均衡、集群容错
  • Dubbo SPI机制、Route重写使用场景
  • Dubbo RPC底层原理
  • 全链路监控实现原理


分布式相关

  • 分布式锁的实现方式
  • 漏斗算法、令牌桶算法
  • 事务最终一致性解决方案
  • SLA
  • 分布式事务实现方式与区别
  • Tcc Confirm失败怎么办?
  • 分布式锁的各种实现方式、对比
  • 分布式ID的各种实现方式、对比
  • 雪花算法时钟回拨问题与应对方案
  • 红锁算法


设计模式

  • 常用的设计模式
  • 状态模式
  • 责任链模式解决了什么问题
  • 饿汉式、懒汉式优缺点、使用场景
  • 模板方法模式、策略模式、单例模式、责任链模式


Zookeeper

  • Zookeeper底层架构设计
  • zk一致性


MQ

  • Kafka顺序消息
  • MQ消息幂等
  • Kafka高性能秘诀
  • Kafka高吞吐原理
  • Rocket事务消息、延时队列


计算机网络

  • 浏览器输入一个url发生了什么
  • Http 1.0、1.1、2.0差异
  • IO多路复用
  • TCP四次挥手过程、状态切换
  • XSS、CRSF攻击与预防
  • 301、302区别


Tomcat

  • Tomcat大概原理


代码

  • 手写发布订阅模式
  • 大数(两个String)相加


场景问题

  • 打赏排行榜实现
  • 高并发下的请求合并
  • CPU 100%处理经验
  • 短链系统设计
  • 附近的人项目实现
  • 10w个红包秒级发送方案
  • 延时任务的实现方案与优缺点对比

说来惭愧,有些题我也答不上来,所以和大家一起查漏补缺吧。

哦,对了,那个小伙子最终收割了好几个大厂 offer,跑来问我哪个 offer 好。

你说这问题对我来说那不是超纲了吗?我也没在大厂体验过啊。所以我怀疑他不讲武德,来骗,来偷袭我这个老实巴交的小号主,我希望他能耗子尾汁,在鹅厂好好发展:


image.png

才疏学浅,难免会有纰漏,如果你发现了错误的地方,可以提出来,我对其加以修改。

感谢您的阅读,我坚持原创,十分欢迎并感谢您的关注。

我是 why,一个被代码耽误的文学创作者,不是大佬,但是喜欢分享,是一个又暖又有料的四川好男人。

还有,欢迎关注我呀。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
2月前
|
缓存 负载均衡 API
抖音抖店API请求获取宝贝详情数据、原价、销量、主图等参数可支持高并发调用接入演示
这是一个使用Python编写的示例代码,用于从抖音抖店API获取商品详情,包括原价、销量和主图等信息。示例展示了如何构建请求、处理响应及提取所需数据。针对高并发场景,建议采用缓存、限流、负载均衡、异步处理及代码优化等策略,以提升性能和稳定性。
|
2月前
|
缓存 算法 架构师
京东面试:如何设计600Wqps高并发ID?如何解决时钟回拨问题?
资深架构师尼恩在其读者交流群中分享了关于分布式ID系统的设计与实现,特别是针对高并发场景下的解决方案。他强调了分布式ID系统在高并发核心组件中的重要性,并详细介绍了百度的UidGenerator,这是一个基于Snowflake算法改进的Java实现,旨在解决分布式系统中的唯一ID生成问题。UidGenerator通过自定义workerId位数和初始化策略,支持虚拟化环境下的实例自动重启和漂移,其单机QPS可达600万。此外尼恩的技术分享不仅有助于提升面试表现,还能帮助开发者在实际项目中应对高并发挑战。
京东面试:如何设计600Wqps高并发ID?如何解决时钟回拨问题?
|
4月前
|
JavaScript 前端开发 Java
面试官:假如有几十个请求,如何去控制并发?
面试官:假如有几十个请求,如何去控制并发?
|
5月前
|
监控 网络协议 Java
Java面试题:解释Java NIO与BIO的区别,以及NIO的优势和应用场景。如何在高并发应用中实现NIO?
Java面试题:解释Java NIO与BIO的区别,以及NIO的优势和应用场景。如何在高并发应用中实现NIO?
81 0
|
5月前
|
设计模式 安全 NoSQL
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
Java面试题:设计一个线程安全的单例模式,并解释其内存占用和垃圾回收机制;使用生产者消费者模式实现一个并发安全的队列;设计一个支持高并发的分布式锁
72 0
|
5月前
|
设计模式 安全 Java
Java面试题:如何实现一个线程安全的单例模式,并确保其在高并发环境下的内存管理效率?如何使用CyclicBarrier来实现一个多阶段的数据处理任务,确保所有阶段的数据一致性?
Java面试题:如何实现一个线程安全的单例模式,并确保其在高并发环境下的内存管理效率?如何使用CyclicBarrier来实现一个多阶段的数据处理任务,确保所有阶段的数据一致性?
71 0
|
5月前
|
设计模式 存储 缓存
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
Java面试题:结合建造者模式与内存优化,设计一个可扩展的高性能对象创建框架?利用多线程工具类与并发框架,实现一个高并发的分布式任务调度系统?设计一个高性能的实时事件通知系统
60 0
|
5月前
|
存储 安全 Java
Java面试题:假设你正在开发一个Java后端服务,该服务需要处理高并发的用户请求,并且对内存使用效率有严格的要求,在多线程环境下,如何确保共享资源的线程安全?
Java面试题:假设你正在开发一个Java后端服务,该服务需要处理高并发的用户请求,并且对内存使用效率有严格的要求,在多线程环境下,如何确保共享资源的线程安全?
71 0
|
5月前
|
并行计算 安全 算法
Java面试题:Java内存管理与多线程并发处理,设计一个Java应用,该应用需要处理大量并发用户请求,同时要求对内存使用进行优化,如何通过垃圾回收机制优化内存使用?
Java面试题:Java内存管理与多线程并发处理,设计一个Java应用,该应用需要处理大量并发用户请求,同时要求对内存使用进行优化,如何通过垃圾回收机制优化内存使用?
44 0