解惑:什么叫模型?

  模型一词,原本是好理解的,名词,大概就是一个缩小版的实际产品的意思。

  当然了,你可以去查查百科,模型其实不只可以描述实物,还可以描述虚拟物件。我们主要来看看后者。(百科: https://baike.baidu.com/item/模型/1741186?fr=aladdin)

  当模型这在软件行业使用时,好像就变了味道。比如:开发模型,java内存模型,线程模型,io模型,reactor模型,生产模型,消费模型,消息传递模型...

  这让我在很长一段时间里,一直搞不懂,何谓模型。随着年龄的增长,总算有了些许自己的理解,权当故事讲给自己听吧。

 

  交互模型:由一种或者多种元素构成,包括用例、顺序图、状态图、用户界面原型等,它描述了用户与系统之间采用了哪种交互方式;虽然说内容很多,不太像是在说一个叫模型的东西,但是,确实和其描述“交互” 很相关,所以理解起来倒也轻松自在。而接下来咱们的几个例子,则可不一定了!

  

  java内存模型?你说内存就内存吧,不是长方形就是正方形,还能咋的。错了,java内存模型内容可以包含内存布局和内存交互方式,如布局为主内存加工作内存的方式,主内存为所有线程一起共享的内存区域,工作内存为当前线程的私有区域。交互方式为,当一个线程运行时,它会从主存中拷贝一份需要的内容到工作内存,在这基础上进行运算处理,操作完成后,将结果写回主存中。而这个模型还有一件很重要的工作就是,要解决工作内存与主存的交互问题,所以产生了各种屏障,也就是它的关键。这就是java的内存模型,你要说有什么不合适吧也没有,但是当别人问我这东西的时候,我问题怀疑什么叫模型,总想象着一个缩小版物理是什么样的?回答不上来也完全不是因为我不知道他们的工作方式,尴尬。

 

  netty线程模型?线程能有什么模型,顶多就线程池呗还能咋的?不过如果换个问法可能亲民了,netty的io线程线程是如何工作的?正确答案是reactor模型,reactor中文翻译为核反应堆,大概就是一个导火线,引发一个大爆炸的这么个样子。具体来说就是,一个acceptor线程专门接收客户端请求,然后接收到请求后将请求分发到后端线程池,消息的读取,编解码和发送都由这个线程池完成。当然了,这只是reactor的其中一种模式,它还有其他更完善的方式,如主从reactor线程池模式。总之,目的就是让系统能够处理更多的并发请求,通过多个线程池的方式。所以,这个不叫线程模型好像也不好其他方式了。

 

  双亲委托加载模型?这个是java中的基础的类加载方式,概念见过就是见过,没见过就是没见过。本也没啥,就是在加载类时优先让父类进行加载,不行再由自己加载的这么个过程。只是我觉得一个很简单一句话被提炼出一个双亲委托加载模型后,逼格瞬间提高了很多。而且,这里模型好像就变成了一个动词有木有。如果不提炼这么个名词出来,你又如何去描述这一事物呢?

 

  消息传递模型?这个比较容易理解,也就是一个消息如何从一个点传递到另一个点描述。基本上现在的MQ产品里描述的比较清楚,描述方向也各有不同,比如点对点消息传递模型、发布订阅消息传递模型。简单说这种模型一般都一个producer,queue,consumer这么几个元素,由producer发送一个消息到queue中,然后由consumer从queue中获取数据的这么个过程,其中重点要关注的可能就是确认ack机制以及推消息模型还拉消息模式,这确实得要细细去了解具体的产品了。但总体来说,知道是这么个问题本质方向是比较重要的,毕竟谁还不会写几个bug呢?但是能把bug讲得声色俱全的却是不多的。

 

  数据模型?这个概念其实我们见得也是最多的,比如做开发的时候,表的设计,不就是一个建立数据模型的过程吗?(建模)。百科上有准确的描述:数据模型(Data Model)是数据特征的抽象。数据(Data)是描述事物的符号记录,模型(Model)是现实世界的抽象。数据模型从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供了一个抽象的框架。数据模型所描述的内容有三部分:数据结构、数据操作和数据约束。这么一说概念,好像都很清楚明白,但是当一个逼格高的面试官问题,你们的数据模型是怎么样的?你可就不一定答得上来了吧,其实就是问你的数据是如何抽象出来的,他们之间是如何关联,以及都各自的特点。好像话说白了,都显得逼格低,尴尬。

 

  java对象模型?按照数据模型的套路,也可以描述下这个问题。1. 由什么组成?大方向是有对象头+实例数据+对齐填充组成,我们更多需要描述下对象头的内容,比如 _mark, _metadata, 与锁相关的运行时数据保存在_mark对象头中,而且_mark内容不是固定的,它会根据锁状态不同存储不同的信息,主要包含GC分代年龄、锁状态标记、哈希码、epoch等信息; 2. 能做什么操作?数据的实例信息都保存在堆中,由对象头的指针标明其所在。

 

     mapreduce模型?这是hadoop的分布式并行计算模型,即只有两个函数map和reduce组成的计算模型,其中由分片,排序,合并,归并等重要操作连接起来的这么个模型,可以让开发人员只需关注计算逻辑而无需协调各种分布式问题,从而简化大数据开发流程降低开发门坎的这么个模型,包括后续的spark,storm,flink其中也多少脱不了mapreduce的影子。

 

  开发模型?这准确的说是一个管理类模型,很形象:瀑布模型;快速原型模型;增量模型;螺旋模型;演化模型。。。 这可能更符合小白眼中的模型概念吧!

 

  还有其他有意思的模型,让我们拭目以待吧!

 

唠叨: 深度优先。

  

posted @ 2019-09-01 15:09 等你归去来 阅读(...) 评论(...) 编辑 收藏