第九周作业
请简述JVM垃圾回收原理
具体回收原理与选择的JVM垃圾回收器相关,垃圾回收器可分为两种,串行回收与并行回收。
串行垃圾回收器回收原理:
当JVM内存使用达到设置的阈值就会触发垃圾回收器,首先暂停所有用户线程(STW),进行垃圾回收,恢复用户线程运行。
并行垃圾回收器回收原理:
当JVM内存使用达到设置的阈值就会触发垃圾回收器,首先暂停用户所有线程,标记所有根对象(STW),
运行用户线程,并发标记垃圾,暂停用户线程,重新标记垃圾(STW),并发回收垃圾。
垃圾标记算法:
可达性算法
引用计数法
JVM使用可达性算法,因为引用计数算法无法处理复杂的循环引用。
垃圾回收算法:
新生代使用复制算法(新生代朝生夕死)
老年代使用标记整理算法(老年代可回收的对象并不多)
设计一个秒杀系统,主要挑战和问题有哪些?核心的架构方案或者思路有哪些
设计一个秒杀系统主要挑战有、高并发的流量(带宽),高并发(系统性能),安全(必须到达了秒杀时间才能让用户请求URL进行下单)
以商城项目为例
商品详情
将商品数据填充到页面中,生成静态页面分发到后端服务器,用户请求商品时,只请求对应的页面即可。
例如京东 https://item.jd.com/26594752599.html 请求每个商品时访问的路径都是xxx.html,xxx.html应该就是商品对应的静态文件。
将商品文件分发到CDN上,让用户访问就近的服务,提高响应速度。
但是CDN存在缓存,当商品信息更新时,需要经过 定时任务或者其它服务 将商品打包为一个html分发到各服务器节点,并且更新到CDN服务上,商品信息的实时性会特别不好。
根据场景思考,该功能只为秒杀设计,秒杀之前就会把商品信息完善,并不会轻易改变,秒杀结束后该功能就没有什么用了。所以可以使用商品静态化+CDN。
下单操作
商品的数量有限,实际上可以下单的用户并不是很多,下单功能的访问压力并不是特别大。
可以将页面多余功能去掉,将收货人地址等等功能去掉,待用户秒杀到商品后再让其填写。
后端服务做限流。
安全
为了避免用户直接访问下单页面URL,将URL动态化,即使是秒杀系统的开发者也无法在秒杀之前访问下单页面的URL。
在下单页面URL加入服务端生成的随机数作为参数,在秒杀开始的时候才能得到。
评论