写点什么

架构师训练营 - 第九周 - 作业一

用户头像
行者
关注
发布于: 2020 年 11 月 22 日

作业一

请简述 JVM 垃圾回收原理

在 Java 程序运行过程中总会产生对象,这些对象存放在堆中,我们要及时清除不再使用的对象,为新的对象腾出空间。

具体步骤

标记

通过可达性分析算法进行垃圾对象的识别;一般会从 GC Root(线程栈帧中的局部变量、方法区的静态变量)开始,找到还在使用的对象进行标记。

回收

主要分为 3 种:

清理

将垃圾对象清除,具体实现是将这些垃圾对象占用空间标记为空闲,记录在一个空闲列表中,当需要创建新对象时,从空闲列表中找一段空闲内存分配给这个新对象。

压缩

从堆空间的头部开始,将存货对象拷贝在一段连续内存空间,其余空间就是空闲空间。

复制

将堆空间分为两部分,其中一部分创建对象,当这部分用完之后,将标记过的可用对象复制到另一个空间中。

具体使用哪种方法,根据实际情况而定,比如年轻代对象生命周期短,会使用复制算法,效率更高。

作业二

设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?

面对的挑战

瞬间高并发

在秒杀时,并发会急剧增加,应用 QPS 瞬时可能达到平时百倍水平,会导致带宽耗尽,服务器崩溃。

秒杀逻辑

在秒杀前,用户会不断刷新页面,准备抢先下单;甚至可能跳过秒杀页面,直接进入下单页面,需要做好秒杀下单逻辑。

架构思路

静态化

将页面转化为静态页面,避免动态页面对服务器 CPU 的消耗;同时静态化之后可以把页面分发的 cdn 上,用户可以快速获取。

并发控制

根据秒杀页面场景,只能有极少部分人抢到商品,所以做好限流器,放入一小部分人进入秒杀页面,从而有效降低服务器压力。

简化流程

砍掉不重要的分支流程,聚焦于下单操作,来提升可靠性。

用户头像

行者

关注

还未添加个人签名 2018.03.09 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 第九周 - 作业一