论坛首页 Java企业应用论坛

讨论几个常用的模式

浏览 19228 次
该帖已经被评为精华帖
作者 正文
   发表时间:2010-12-15   最后修改:2010-12-15
躁动的绵羊 写道
很明显在刷帖 这种空洞的帖子居然精华

 

 

什么样子的帖子时不空洞的呢?

1、一个hello world式的 代码
2、搭建了一个xx开发环境(有图有真相)
3、struts/hibernate xxx问题

---------------------------

发点思考的内容,就是空洞的,不能投精华吗?

----------------------------

 

明白了,这种贴才应该是不空洞的精华帖,如下~

 

 

躁动的绵羊 写道

     首先,请JE上的高手、老鸟们原谅我把这道题拿出来讨论,也许,这题对你们来说只是小菜一碟,我却是觉得这种题目比较少见,我也不太清楚。但是,我想拿出来与大家分享下,讨论讨论,希望能挖掘出它的原理,让不清楚的小鸟们长长见识,当然也包括我,呵呵!
    
      这是一道用友的面试题。题目是:请优化下面代码,并给出原因:
  
     

                for(int i = 0;i<10000;i++) {
                     for(int j = 0;j<1000;j++) {
                          for(int k = 0;k<100;k++) {
                             function(i,j,k);\
                          }
                     }
                   }
      



      这道题优化起来也许很容易,但要说出其中的原理我觉得比较难,希望能看到更多的是原理方面的讨论,越深刻越好!

 

 

0 请登录后投票
   发表时间:2010-12-15  
很多帖子精华的不是主题帖本身内容,精华的是 讨论内容

抛砖引玉,精华的是引出来的玉。


kkqqcom 写道
躁动的绵羊 写道
很明显在刷帖 这种空洞的帖子居然精华

 

 

什么样子的帖子时不空洞的呢?

1、一个hello world式的 代码
2、搭建了一个xx开发环境(有图有真相)
3、struts/hibernate xxx问题

---------------------------

发点思考的内容,就是空洞的,不能投精华吗?

----------------------------

 

明白了,这种贴才应该是不空洞的精华帖,如下~

 

 

躁动的绵羊 写道

     首先,请JE上的高手、老鸟们原谅我把这道题拿出来讨论,也许,这题对你们来说只是小菜一碟,我却是觉得这种题目比较少见,我也不太清楚。但是,我想拿出来与大家分享下,讨论讨论,希望能挖掘出它的原理,让不清楚的小鸟们长长见识,当然也包括我,呵呵!
    
      这是一道用友的面试题。题目是:请优化下面代码,并给出原因:

                for(int i = 0;i<10000;i++) {
                     for(int j = 0;j<1000;j++) {
                          for(int k = 0;k<100;k++) {
                             function(i,j,k);\
                          }
                     }
                   }
      



      这道题优化起来也许很容易,但要说出其中的原理我觉得比较难,希望能看到更多的是原理方面的讨论,越深刻越好!

 

 

 

0 请登录后投票
   发表时间:2010-12-24  
哈哈,楼上,你真的太搞了
0 请登录后投票
   发表时间:2011-01-18  
常用的模式太多了吧,比如说代理模式,装饰模式,这些都是在编程中常用的模式.
0 请登录后投票
   发表时间:2011-01-24  
androidleader 写道

0、资源管理模式

这个不算是个模式,我的大概意思是,在一个托管的环境(jvm  clr)或是其他环境中,如果需要使用外部的(独占的)资源,

一般都需要显式的initialize和dispose(close)。因为这个资源一般可以被其他地方使用,需要释放掉持有的锁。

比如,文件/网络io,bitmap/graphics等等。

 

 

1、池化技术(pool)

 

一般来说,我们要使用某个资源,初始化,获得实例,使用,关闭,即可。

如果这个资源的创建代价比较昂贵,我们可以使用singleton的方式,管理一个实例。但是一个实例不够用怎么办?创建多个!

这样就有了一组实例了。我们就需要管理这一个池了。例如线程池,数据库连接池,网络连接池。池是singleton的一个自然延伸。

如果我们不清楚多大合适,可以设置一个初始大小。不停的创建,肯定是不合适的(outofmemory),资源总会耗尽。所以,设定一个最大值,超过了拒绝或是排队。然后再做一些其他的管理上的策略。比如线程池的大量并发时的拒绝策略。比如数据库连接池,为了使基于池的使用依然是原来的jdbc方式,同样的connection,open,close。一般采取封装一层驱动的方式。使得实际使用的connection里包含一个真正的jdbc驱动的connection,close时只是标记了connection的状态,置为空闲,并不真正的close原生的connection。

 

数据缓存是另一种池化技术的应用。关注的是直接可用的业务数据,而不是获取数据的外部资源。这方面的讨论时很多的。几个点:缓存策略,命中率,同步,集群等等。

 

2、上下文模式(context)

这个模式很常见,在j2ee servletContext,jsf  facesContext,esb  messageContext,workflow workflowContext等等地方,都有它的存在。

通常来说,如果一个大的处理流程,被设计成几个不同的处理阶段,组成一个回路,那么,我们可以把环境相关的信息,流程相关的变量和中间结果,流程中要传递的消息和数据,都放到上下文这个容器里。这些,主流程中,传递的就不再只是消息数据,而是尽可能多的信息。在主流程中处理的是context,可以修改其中的任何可修改信息,转换。在中间的分支,或拦截器、过滤器中,我们可以传递数据,做其他处理(拦截,log,monitor),不影响主流程中的处理。主流程的任何处理点,都可以使用一致的context,获取任何需要的信息。

 

 

 

 

 

 

 

 

context大箩筐,乱七八糟往里装

个人觉得对context还要建模,分类,系统数据还是用户数据?数据信息还是控制指令?

分得越清晰,业务人员使用起来才方便

 

0 请登录后投票
   发表时间:2011-01-25  
LZ是搞android的?
0 请登录后投票
   发表时间:2011-02-22  
值得深讨,期待大虾更详细的讲解
0 请登录后投票
   发表时间:2011-03-21  
池化,其实说得更精确应该是多例模式。其主要难点在于处理并发以及资源控制(即什么时候释放资源,以及预创建多少资源)。
0 请登录后投票
   发表时间:2011-03-22  

这是一道用友的面试题。题目是:请优化下面代码,并给出原因:

                for(int i = 0;i<10000;i++) {
                     for(int j = 0;j<1000;j++) {
                          for(int k = 0;k<100;k++) {
                             function(i,j,k);\
                          }
                     }
                   }
      



      这道题优化起来也许很容易,但要说出其中的原理我觉得比较难,希望能看到更多的是原理方面的讨论,越深刻越好!

 

没看明白怎么优化, 有tx看明白了吗?





 

0 请登录后投票
   发表时间:2011-03-22  
晕,没想到java 编译器居然不会优化这个循环。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics