“云时代架构”经典文章阅读感想十五
云时代架构”经典文章阅读感想十五
(阿里面试,我挂在了第四轮……)
这一篇文章讲的是一个在电商这块的经验不是很足的在职技术人员,它主要的工作经历主要与法院等部门有关,这次在阿里面试时在第四轮被刷下来到经历。之所以读者一篇文章主要还是对找工作面试比较感兴趣。
阿里的面试一般有四到五轮,我这次的流程是第一轮技术面、第二轮写代码、第三轮boss面、第四轮boss面、第五轮HR面。而作者倒在了第四面上。
第一面中主要涉及到的有并发问题、消息中间件问题、JVM、项目的技术细节讨论等等。
并发问题:例如火车票购买的高并发有化方法有:
优化方向有两个(今天就讲这两个点):
(1)将请求尽量拦截在系统上游(不要让锁冲突落到数据库上去)。传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小。以12306为例,一趟火车其实只有2000张票,200w个人来买,基本没有人能买成功,请求有效率为0。
(2)充分利用缓存,秒杀买票,这是一个典型的读多写少的应用场景,大部分请求是车次查询,票查询,下单和支付才是写请求。一趟火车其实只有2000张票,200w个人来买,最多2000个人下单成功,其他人都是查询库存,写比例只有0.1%,读比例占99.9%,非常适合使用缓存来优化。
JVM:
JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。JVM对其实现的某些方面给出了具体的定义,特别是对Java可执行代码,即字节码(Bytecode)的格式给出了明确的规格。这一规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及Java类文件中的Java对象、常量缓冲池在JVM的存储映象。这些定义为JVM解释器开发人员提供了所需的信息和开发环境。Java的设计者希望给开发人员以随心所欲使用Java的自由。
JVM定义了控制Java代码解释执行和具体实现的五种规格,它们是:JVM指令系统、JVM寄存器、JVM 栈结构、JVM 碎片回收堆、JVM 存储区
消息的中间件:
消息中间件是一套平台,用于应用之间的数据通信。举个例子:淘宝网的用户注册,在注册的同时需要有一系列的操作同时,伴随着业务的扩展,后端流程还会增加。如果在注册时要顺序的完成每一步操作,整个流程会耗费很多的时间,从而使得用户等待延迟增加。最容易想到的处理方法是将串行改为并行处理,并行虽然能提速,但是由于各个流程之间有同步要求,如果某个流程耗时过长,就会导致整体的等待时间过长。考虑具体的业务,用户注册这个操作只和注册是否成功有及时一致性要求,其他流程都允许有延迟,所以可以将用户注册分为两部分完成,分别是主流程和消息推送流程。主流程只负责用户注册,给出及时性响应。
消息中间件有几个特点,分别是
分布式:消息中间件要求分布式部署,满足大规模数据并发能力,同时要求可扩展
可靠性:可靠,数据一致性要求高,要求避免数据丢失,提供持久化,落盘和落数据库都可选
异步:借用消息中间件将消息处理从同步拆解为异步,提高系统性能
松耦合:消息发布者和订阅者之间完全解耦,两者互不知道对方的存在,借助于中间件实现松耦合
事件驱动:通过消息队列,将事件拆分为若干个消息,同时能追溯整个变化过程
通过阅读这篇文章我了解到自己的不足,单单是阿里的1面中的问题便回答不上来,更别提后面的面试更加深入和困难。因此还是需要进行积累和实践总结的。
(阿里面试,我挂在了第四轮……)
这一篇文章讲的是一个在电商这块的经验不是很足的在职技术人员,它主要的工作经历主要与法院等部门有关,这次在阿里面试时在第四轮被刷下来到经历。之所以读者一篇文章主要还是对找工作面试比较感兴趣。
阿里的面试一般有四到五轮,我这次的流程是第一轮技术面、第二轮写代码、第三轮boss面、第四轮boss面、第五轮HR面。而作者倒在了第四面上。
第一面中主要涉及到的有并发问题、消息中间件问题、JVM、项目的技术细节讨论等等。
并发问题:例如火车票购买的高并发有化方法有:
优化方向有两个(今天就讲这两个点):
(1)将请求尽量拦截在系统上游(不要让锁冲突落到数据库上去)。传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小。以12306为例,一趟火车其实只有2000张票,200w个人来买,基本没有人能买成功,请求有效率为0。
(2)充分利用缓存,秒杀买票,这是一个典型的读多写少的应用场景,大部分请求是车次查询,票查询,下单和支付才是写请求。一趟火车其实只有2000张票,200w个人来买,最多2000个人下单成功,其他人都是查询库存,写比例只有0.1%,读比例占99.9%,非常适合使用缓存来优化。
JVM:
JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。JVM对其实现的某些方面给出了具体的定义,特别是对Java可执行代码,即字节码(Bytecode)的格式给出了明确的规格。这一规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及Java类文件中的Java对象、常量缓冲池在JVM的存储映象。这些定义为JVM解释器开发人员提供了所需的信息和开发环境。Java的设计者希望给开发人员以随心所欲使用Java的自由。
JVM定义了控制Java代码解释执行和具体实现的五种规格,它们是:JVM指令系统、JVM寄存器、JVM 栈结构、JVM 碎片回收堆、JVM 存储区
消息的中间件:
消息中间件是一套平台,用于应用之间的数据通信。举个例子:淘宝网的用户注册,在注册的同时需要有一系列的操作同时,伴随着业务的扩展,后端流程还会增加。如果在注册时要顺序的完成每一步操作,整个流程会耗费很多的时间,从而使得用户等待延迟增加。最容易想到的处理方法是将串行改为并行处理,并行虽然能提速,但是由于各个流程之间有同步要求,如果某个流程耗时过长,就会导致整体的等待时间过长。考虑具体的业务,用户注册这个操作只和注册是否成功有及时一致性要求,其他流程都允许有延迟,所以可以将用户注册分为两部分完成,分别是主流程和消息推送流程。主流程只负责用户注册,给出及时性响应。
消息中间件有几个特点,分别是
分布式:消息中间件要求分布式部署,满足大规模数据并发能力,同时要求可扩展
可靠性:可靠,数据一致性要求高,要求避免数据丢失,提供持久化,落盘和落数据库都可选
异步:借用消息中间件将消息处理从同步拆解为异步,提高系统性能
松耦合:消息发布者和订阅者之间完全解耦,两者互不知道对方的存在,借助于中间件实现松耦合
事件驱动:通过消息队列,将事件拆分为若干个消息,同时能追溯整个变化过程
通过阅读这篇文章我了解到自己的不足,单单是阿里的1面中的问题便回答不上来,更别提后面的面试更加深入和困难。因此还是需要进行积累和实践总结的。
posted on 2019-06-13 20:54 面向bug的程序设计 阅读(135) 评论(0) 编辑 收藏 举报