“云时代架构”经典文章阅读感想十五

烂漫一生 提交于 2019-12-26 09:54:13

云时代架构”经典文章阅读感想十五

(阿里面试,我挂在了第四轮……)

这一篇文章讲的是一个在电商这块的经验不是很足的在职技术人员,它主要的工作经历主要与法院等部门有关,这次在阿里面试时在第四轮被刷下来到经历。之所以读者一篇文章主要还是对找工作面试比较感兴趣。

阿里的面试一般有四到五轮,我这次的流程是第一轮技术面、第二轮写代码、第三轮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面中的问题便回答不上来,更别提后面的面试更加深入和困难。因此还是需要进行积累和实践总结的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!