`

工作的几个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. **布局管理**:...

    像QQ消息一样简单的Tip

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

    D3 Tip 获取 X,Y

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

    Qt实现的自定义tip

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

    DYI自己的TIPTOP顯示介面

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

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

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

    TIPTOP GP技術移轉-ORACLE版

    课程内容涵盖以下几个方面: 1. **TIPTOPGP的组织架构**: - 操作系统:TIPTOPGP支持多种Unix操作系统,包括Linux、AIX、Solaris、HP-UX以及Mac等。 - 数据库:使用Informix或Oracle作为数据库管理系统。 - 开发...

    vc tip 提示

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

    tiptop gp 财务流程

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

    TipTop基礎操作管理系統

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

    IOS应用源码——tip.rar

    源代码可能包括以下几个关键部分: 1. **用户界面(UI)**:包括显示提示信息的视图和控制器,可能使用Storyboard或SwiftUI进行设计。 2. **TTS引擎**:使用AVFoundation框架中的AVSpeechSynthesizer类来实现文本到...

    不规则窗口示例, 自定义tip控件

    实现不规则窗口通常涉及以下几个步骤: 1. **设置窗口样式**:在大多数操作系统中,如Windows,你需要设置窗口的风格以允许非矩形形状。这可以通过调用系统API函数(如Windows API的`SetWindowLong`)来实现,将...

    TIPTOP内置函数

    该函数需要三个输入参数:ps_source 为来源资料、ps_count 为检查几码、li_result 为返回结果。返回值为 1(TRUE)或 0(FALSE)。用法示例:IF NOT cl_chk_data_continue(g_pmw.pmw01[1,3]) THEN ... cl_chkym ...

    下拉列表中tip

    如果这个文件包含了文章的全文或代码示例,那么对下拉列表中tip的实现方式、优化技巧或源码解析会有更深入的理解。不过,基于标题和标签,我们可以推测文章可能会涵盖以下内容: 1. HTML和CSS基础:如何创建基本的...

    Tip Of Day. It`s name speaks for itself.

    实现Tip Of Day功能的过程大致包括以下几个步骤: 1. 设计界面布局,选择合适的控件展示提示内容。 2. 编写源码,实现提示的显示逻辑,包括随机显示、按日期显示或者按照用户喜好设置的顺序显示。 3. 创建和管理资源...

    分享一个类似QQ空间的tip提示,基于jQuery

    用法: $.tipMessage(提示语, 图标类型, 几秒后消失,zIndex,回调); jQuery.tipMessage = function (msg, type, time, zIndex, callback) 演示: $.tipMessage('欢迎使用!', 3, 3000,function(){alert('我是回调')})...

    自定义文件夹栏目 自定义搜索管理器 信息条提示(Infotip) 得到BMP文件大小 DLL,EXE文件的文件导入表IAT 其他类型的外壳扩展

    本文将深入探讨几个关键知识点,包括自定义文件夹栏目、自定义搜索管理器、信息条提示(Infotips)、获取BMP文件大小、DLL与EXE文件的导入表IAT,以及外壳扩展Shell Extension插件编程。 首先,自定义文件夹栏目是...

    单片机课程设计——TIP137大功率电机驱动.zip

    在进行课程设计时,我们需要关注以下几个关键步骤: 1. 单片机程序编写:使用汇编语言或C语言编写控制电机运行的程序。 2. 电路设计:设计TIP137驱动电路,包括输入控制信号、电机连接、保护电路等。 3. 仿真验证:...

    Tip 信息提示小秘书.zip

    在IT行业中,"Tip 信息提示小秘书"可能是一个软件工具或者编程实践,它专注于提供信息提示服务。从标题和描述来看,这个“小秘书”可能是用来帮助用户更好地理解和处理各种提示信息,尤其是在软件开发、系统管理和...

    Ecotek Tip&Trick New Tab-crx插件

    在实现过程中,插件可能包含以下几个核心组件: 1. **manifest.json**:这是每个Chrome扩展程序的核心配置文件,它包含了插件的基本信息,如名称、版本、权限和所执行的脚本。在Ecotek Tip&Trick New Tab-crx中,...

Global site tag (gtag.js) - Google Analytics