`

工作的几个tip

    博客分类:
  • java
阅读更多

1、如果用java6的ScriptEngineManager来调用JRuby,并且脚本使用到了Ruby的标准库(比如我用到了YAML库),如果没有正确设置,是会找不到标准库的。通过打印$:变量可以看到文件的加载路径,比如在某台机器上的打印的结果:
   puts $:
   输出:
.
/root/.jruby/lib/ruby/site_ruby/1.8
/root/.jruby/lib/ruby/site_ruby
/root/.jruby/lib/ruby/1.8
/root/.jruby/lib/ruby/1.8/java
lib/ruby/1.8
......略

显然,默认会到当前用户的主目录下寻找.jruby隐藏目录,将此目录作为Ruby的安装目录,因此,可以在~user/.jruby放置一个jruby实现,一劳永逸地解决问题,不然就要自己手工添加完整的路径到$:变量中。

2、nio的临时selector的使用,了解grizzly的都知道,Grizzly框架有一个比较与众不同的地方在于使用临时selector注册channel进行读或者写。这个带来什么好处呢?一个是,通常我们可能将read派发到其他线程中去,如果一次没有读完,那么就得继续注册OP_READ到主selector上;注意,nio在一些平台上有个问题,就是SelectionKey.interestOps方法跟Selector.select方法会有并发冲突,产生奇怪的现象,因此,你会看到大多数的nio框架都会保证SelectionKey.interestOps跟Selector.select的调用在同一个线程;在没有读完继续注册这个场景下,免不了线程间的context switch,如果采用一个临时selector注册并读取,就可以避免这个切换开销。另外,对于write调用,通常你可能这样写:

while (byteBuffer.hasRemaining()) {
  int len = socketChannel.write(byteBuffer);
  if (len < 0){
   throw new EOFException(); 
  }
}
 


   在负载比较高的时候,write返回0的次数会越来越多,while循环将空耗多次导致CPU占用偏高,这个问题在win32上比较严重,同样可以采用临时selector的解决(Cindy2.x是留在队列,等待下次写)。下例是采用临时Selector进行读的例子:

 Selector readSelector = SelectorFactory.getSelector();
                SelectionKey tmpKey = sc.register(readSelector,
                        SelectionKey.OP_READ);
                tmpKey.interestOps(tmpKey.interestOps() | SelectionKey.OP_READ);
                int code = readSelector.select(1000);
                tmpKey.interestOps(tmpKey.interestOps()
                        & (~SelectionKey.OP_READ));
                if (code > 0) {
                    do {
                        n = sc.read(in);
                    } while (n > 0 && in.hasRemaining());
                    in.flip();
                    decode();
                    in.compact();
                }
                SelectorFactory.returnSelector(readSelector);
 

<!---->      这样的方式,某种意义上可以认为是non-blocking模式下的阻塞读,在网络条件稳定的情况下(比如内网),能带来比较高的效率。

3、spymemcached ,是另一个memcached的java client实现,采用nio。最近遇到的问题是它跟原来的MemcachedClient 的兼容问题,用它去操作MemcachedClient存储的数据。spymemcached是通过Transcoder来实现序列化,Transcoder的WhalinTranscoder实现类兼容了Greg Whalin的MemcachedClient:

private Transcoder whalinTranscoder = new WhalinTranscoder();


Future<Object> f = memcachedClient.asyncGet(id, whalinTranscoder);
 


   各个方法都有重载的版本用以指定Transcoder。

1
1
分享到:
评论

相关推荐

    一个动态的Tip的实现

    在实际的开发过程中,实现动态Tip涉及以下几个关键知识点: 1. **事件监听**:为了使Tip动态响应用户操作,我们需要监听用户交互,如鼠标悬停、点击等,并在这些事件触发时显示或更新Tip内容。 2. **布局管理**:...

    TIP42功率三极管

    以下是几个关键的典型特性曲线示例: 1. **直流电流增益(hFE)**:随集电极电流的变化而变化。随着集电极电流的增加,直流电流增益会有所下降。 2. **基极-发射极饱和电压(VBE(sat))**:当集电极电流增加时,VBE...

    D3 Tip 获取 X,Y

    D3 Tip的使用主要涉及以下几个关键步骤: 1. **引入资源**:首先,你需要在HTML文件中引入D3.js和D3 Tip的库。D3.js通常是通过CDN链接或者本地文件引入,而D3 Tip可以通过npm安装后本地引用,或者直接在页面中使用...

    像QQ消息一样简单的Tip

    在实现【QQ Tip】功能时,主要涉及以下几个技术点: 1. **消息弹出机制**:首先,需要创建一个能够动态显示和隐藏的消息窗口。这通常涉及到Windows API或跨平台GUI库(如Qt、wxWidgets)的使用,通过调用相关函数来...

    西门子低压电器的TIP概念.pdf

    TIP概念的核心内容可以细分为以下几个方面: 1. 配电系统的完整性与协调性:西门子的TIP概念强调从中压到低压,直至用电终端的配电系统的完整性。在实际应用中,这要求系统设计必须兼顾从输电、变电、配电到用电...

    tiptop 销售分析模块稳定

    接下来,我们将对TIPTOP销售分析系统中的几个关键知识点进行详细阐述。 ### TIPTOP销售分析系统简介 TIPTOP销售分析系统是一款由鼎新电脑开发的专业ERP(企业资源规划)软件中的一个子模块。该模块主要用于帮助...

    Qt实现的自定义tip

    在“Qt实现的自定义tip”项目中,开发者可能面临以下几个关键步骤: 1. **创建自定义提示框类**:首先,我们需要创建一个新的类,继承自QTipWidget或其他合适的Qt控件。这个类将包含我们自定义的形状、颜色、字体等...

    DYI自己的TIPTOP顯示介面

    二次开发主要涉及以下几个方面: 1. **图形设计**:利用TIPTOP提供的图形库,你可以创建各种形状、图像和动画,为界面增添视觉吸引力。理解图形库的API是设计的基础,如绘图函数、颜色管理等。 2. **布局管理**:...

    Amazon Interview Prepare tip

    以下是对“Amazon Interview Prepare tip”这一主题的深入解析,旨在为即将参加亚马逊技术面试的候选人提供全面的指导和建议。 ### 面试理念与公司文化 首先,亚马逊强调其作为一个“建造者可以建造的地方”,这里...

    动感的Tip提示效果,基于jquery的代码实现

    在基于jQuery实现动态Tip提示时,我们需要考虑以下几个关键知识点: 1. **jQuery选择器**:jQuery提供了丰富的选择器,如`id`选择器(`#id`)、类选择器(`.class`)、元素选择器(`tagname`)等,用于定位DOM元素。在...

    技轉課程-TIPTOP GP單檔作業.ppt

    在程序分类中,TIPTOP GP将程序分为几种类型,如i类(输入)、t类(处理)、s类(服务)等。其中,aoos010用于单档维护,aooi010处理单档的多栏数据,aooi040处理假双档,p_perlang处理双档,apmi252处理多档,asfi...

    CSS3鼠标滑过tip提示框动画特效.zip

    在“CSS3鼠标滑过tip提示框动画特效”中,核心概念可能包括以下几点: 1. **伪类选择器**:如`:hover`,它用于定义当鼠标指针悬停在元素上时应用的样式。在这个特效中,`:hover`被用来触发提示框的显示。 2. **CSS...

    鼎捷TIPTOP开发手册

    鼎捷TIPTOP系统的架构设计主要包括以下几个层次: - **客户端层**: 用户通过客户端(如浏览器)访问系统。 - **应用服务层**: 提供了中间件服务,包括业务逻辑处理等。 - **数据库层**: 存储所有的业务数据。 - **...

    vc tip 提示

    在提供的文件列表中,我们可以看到以下几个关键的源文件: - `PPHtmlDrawer.cpp`: 实现了HTML内容的绘制逻辑,这是cpp tooltip支持HTML格式的基础。 - `PPTooltip.cpp`: 主要包含`CPPTooltip`类的实现,包括创建、...

    JavaScript实现简单Tip提示框效果

    下面将从以下几个方面详细解释实现简单Tip提示框所需的知识点: 1. JavaScript基础: JavaScript是一种高级的脚本语言,可以用来操作HTML文档和DOM(文档对象模型)。在Tip提示框的实现中,JavaScript用于监听鼠标...

    Tiptop_aps基本资料.doc

    文档资料主要涉及以下几个核心概念和功能: 1. **工作模式**:工作模式是定义资源(如设备或工作站)在特定时间段内运行状态的方式。它包括工作模式编号、开始时间和结束时间、工作类型等属性。例如,工作模式编号...

    tiptop gp 财务流程

    在"tiptop GP"财务流程中,我们可以讨论以下几个关键知识点: 1. **会计基础**:该系统的基础是会计原则,如权责发生制(Accrual Accounting)、复式记账法(Double-Entry Bookkeeping),确保财务数据的准确性和...

    TipTop基礎操作管理系統

    在过去的几十年中,TIP TOP一直代表着轮胎修补的最高质量水准,无时不在世界的每个角落证明着它的不凡,从单车胎,摩托车胎及小车胎到世界上目前最大的工程胎;从橡胶内胎,斜胶胎到子午线胎,都能用TIP TOP的材料和...

    TipTop 函數大全(百分之百完全收錄)

    ### TipTop 函数大全知识点概览 ...以上为`TipTop`函数大全中的部分函数介绍及其使用示例,这些函数覆盖了从简单的信息显示到复杂的日期计算和权限检查等多个方面,是`TipTop`开发人员必备的参考工具。

Global site tag (gtag.js) - Google Analytics