Bootstrap

极客大学架构师训练营 JVM虚拟机原理 Java编程优化 秒杀 第九次作业

请简述 JVM 垃圾回收原理。

JVM 的垃圾回收

JVM 垃圾回收即使将 JVM 堆中的已经不再被使用的对象清理掉,释放宝贵的内存资源。

JVM 通过一种可达性分析算法进行垃圾对象的标识。具体过程是:

进行完标记以后,JVM 就会对垃圾对象占用的内存进行回收,回收主要有三种方法:

清理:把已经没用的空间标记为可用空间。

压缩:清理有个短板,空间不是连续的,压缩就是把还在用的copy放在前面。

复制:压缩还是需要成本的,速度较慢;分两块区域会更好一点。

JVM 分代垃圾回收

JVM垃圾回收器算法

G1垃圾回收内存管理机制

把大的内存分为2000个小块。

配置参数:

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

三道阀门的设计

阀门:基于 TT 的计数器

秒杀器的预防

秒杀 商品详情页面

  • URL: 随机

  • 秒杀前2秒放出,脚本生成,秒杀前。

  • 1000次访问上限控制【每件商品只能放入1000人流量】。

SetEnvIfNoCase Referer "^http://1688\.com/" local_ref=1

	Order Allow, Deny
	Allow from env=local_ref

下单页面:

  • 订单ID,随机。

  • 不能直接跳过秒杀 商品详情页面 进入。

  • 每个秒杀商品,带预先生成的随机 Token 作 URL 参数。

  • 如果秒杀过,直接跳到秒杀结束页面。

  • 100 次访问上限控制 【每件商品只能放入 1000 人下单】。

XXX.com 秒杀系统:设计原则

静态化

  • 采用 JS 自动更新技术将动态页面转化为静态页面。(为运营人员开发,上传秒杀商品信息,转换为静态页面的运营系统。)

并发控制,防秒杀器

  • 设置阀门,只放最前面的一部分人进入秒杀系统。

简化流程

  • 砍掉不重用的分支流程,如下单页面的所有数据库查询。

  • 以下单成功作为秒杀成功标志。支付流程只要在 1 天内完成即可。

前端优化

  • 采用 YSLOW 原则提升页面的响应速度。

XXX 秒杀系统:静态化(1)

秒杀商品 List 和 Detail 是静态的 HTML 页面

秒杀系统:静态化(2)

秒杀商品列表, 秒杀商品介绍页面,如何判断秒杀开始否。

  • 答案:

每次只更新, 这个js返回,哪些商品可以秒杀。同时返回秒杀商品的url。