写点什么

架构师培训第 9 周习题

用户头像
小蚂蚁
关注
发布于: 2020 年 08 月 05 日

1、请简述 JVM 垃圾回收原理。

    JVM 垃圾回收就是将 JVM 堆中不在使用的对象清理掉,是否宝贵的资源。

    JVM 通过一种可达性分析算法进行可回收对象的识别。具体过程是:从线程帧中的局部变量或者是方法区中的静态变量出发,将这些变量引用的变量进行标记,然后看这些变量是否引用了其他变量,继续进行标记,所有被标记的对象都是被使用的对象,而那些没有被标记的对象就是可以被回收的垃圾对象了。

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

    清理:将垃圾对象占用的内存清理掉,其实 JVM 不会真的将这些垃圾内存进行清理,而是将这些垃圾对象占用的内存空间标记为空闲,记录在一个空闲列表里,当应用程序需要创建新对象的时候,就从空闲列表中找一块空闲内存分配给这个新对象。

   压缩:从堆空间的头部开始,将存活的对象拷贝到一段连续的内存空间中,那么其余的空间就是连续的空闲空间。

   复制:将堆的空间分成两部分,只在其中一部分创建对象,当这部分空间用完时,将标记过的可用对象复制到另一个空间。

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

   (一)面临的问题和挑战

     (1)瞬间高并发,对现有网站业务必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。

    (2)秒杀前,用户通过不停刷新页面以保证不会错过秒杀,这对后台的服务器,数据库造成很大压力。

    (3)高并发,商品图片传输量大,对网络带宽造成很大的压力。

    (4)防止用户秒杀未开始之前,获取下单页面,直接下单购买商品,导致秒杀活动直接结束。

    (5)购买按钮在秒杀活动开始之前必须处于不可点击状态。

(二)核心架构方案和思路

     (1)将秒杀系统独立开发,独立部署,使用独立域名,使其与网站完全隔离,防止对现有业务的冲击。

     (2)重新设计秒杀商品页面,不使用网站原来的商品详细页面,页面设计保持简单,使用 JS 自动更新技术将动态页面转换为静态页面,用户刷新商品页请求不需要经过应用服务。

      (3)三道阀门,进行并发控制,第一道阀门只允许一部分请求进入秒杀页面,第二道阀门只允许通过第一道阀门的一部分人进入下单页面,第三道阀门只允许通过第二道阀门的一部分人进入支付系统,其他人只看到秒杀结束页面。

      (4)租用 CDN,将图片、静态页面存放在 CDN 上,降低网络带宽的压力。

      (5)为了避免用户直接访问下单页面 URL,需要将改 URL 动态化,下单页面 URL 加入由服务器端生成的随机数作为参数,在秒杀开始的时候才能得到。

      (6)使用 JavaScript 脚本控制,在秒杀商品静态页面中加入一个 JavaScript 文件引用,该 JavaScript 文件中包含随机生成的一些随机数,每个随机数对应一个秒杀商品按钮,控制秒杀是否开始,按钮是否置灰。


用户头像

小蚂蚁

关注

还未添加个人签名 2018.08.10 加入

还未添加个人简介

评论

发布
暂无评论
架构师培训第9周习题