作者对C++的理解深入骨髓,又是顶级的教师,再加上他对本书的精益求精,铸就了C++书籍的一个神话。本书适合对C++和面向对象都有所了解的人,它不但用最合适的方式描述了C++是什么,还讲清楚了为什么。但更值得我们学习的是作者在字里行间所透露的他对编程、对设计、对面向对象思想的理解以及永无止境地追求更高境界的态度。
  while (前两章不能很好地理解) {
   if (第一次看) {
   看完全书;
   } else {
   sleep(一年); // 其它线程可不能睡,得抓紧时间夯实基础
   }
  }

posted @ 2012-02-21 10:03 sky7034 阅读(11) 评论(0) 编辑

       步骤:(1)、增加struts的扩展名<constant name="struts.action.extension" value="action,htm" />,struts2拥有了两个扩展名action和htm

                 (2)、  在web.xml中配置struts2的核心控制器将*.ation,*.htm的请求交给struts2来处理

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
    <filter-mapping>希望大家支持千山暮雪
        <filter-name>struts2</filter-name>
        <url-pattern>*.htm</url-pattern>
    </filter-mapping>

(3)、配置具体的action

<package name="news" extends="struts-default" namespace="/index">

        <action name="*" class="com.moonteam.struts2.action.ViewNewsAction" >
            <param name="paramName"  >{1}</param>
             <result name="success">index.jsp</result>
        </action>

</package>

posted @ 2012-02-20 16:15 sky7034 阅读(20) 评论(0) 编辑

AsyncTask是个不错的东西,可以使用它来做下载进度条。代码讲解如下:

package com.example.downloadfile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;

public class DownloadFile extends Activity {
    
    public static final String LOG_TAG = "test";
    
       private ProgressDialog mProgressDialog;
    public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
    
    
    File rootDir = Environment.getExternalStorageDirectory();
    
    //定义要下载的文件名
    public String fileName = "test.jpg";
    public String fileURL = "https://lh4.googleusercontent.com/-HiJOyupc-tQ/TgnDx1_HDzI/AAAAAAAAAWo/DEeOtnRimak/s800/DSC04158.JPG";
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.main);
        TextView tv = new TextView(this);
        tv.setText("Android Download File With Progress Bar");
    
       //检查下载目录是否存在
        checkAndCreateDirectory("/mydownloads");秋天的故事
       
        //执行asynctask
        new DownloadFileAsync().execute(fileURL);
    }
 
    
    class DownloadFileAsync extends AsyncTask<String, String, String> {
        
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            showDialog(DIALOG_DOWNLOAD_PROGRESS);
        }

        
        @Override
        protected String doInBackground(String... aurl) {

            try {
                //连接地址
                URL u = new URL(fileURL);
                HttpURLConnection c = (HttpURLConnection) u.openConnection();
                c.setRequestMethod("GET");
                c.setDoOutput(true);
                c.connect();
                
                //计算文件长度
                int lenghtOfFile = c.getContentLength();
                
                
                FileOutputStream f = new FileOutputStream(new File(rootDir + "/my_downloads/", fileName));
          
                InputStream in = c.getInputStream();

               //下载的代码
                byte[] buffer = new byte[1024];
                int len1 = 0;
                long total = 0;
                
                while ((len1 = in.read(buffer)) > 0) {
                    total += len1; //total = total + len1
                    publishProgress("" + (int)((total*100)/lenghtOfFile));
                    f.write(buffer, 0, len1);
                }
                f.close();
                
            } catch (Exception e) {
                Log.d(LOG_TAG, e.getMessage());
            }
            
            return null;
        }
        
        protected void onProgressUpdate(String... progress) {
             Log.d(LOG_TAG,progress[0]);
             mProgressDialog.setProgress(Integer.parseInt(progress[0]));
        }

        @Override
        protected void onPostExecute(String unused) {
            //dismiss the dialog after the file was downloaded
            dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
        }
    }
    
    
    public void checkAndCreateDirectory(String dirName){
        File new_dir = new File( rootDir + dirName );
        if( !new_dir.exists() ){
            new_dir.mkdirs();
        }
    }
    
        @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DIALOG_DOWNLOAD_PROGRESS: //we set this to 0
                mProgressDialog = new ProgressDialog(this);
                mProgressDialog.setMessage("Downloading file...");
                mProgressDialog.setIndeterminate(false);
                mProgressDialog.setMax(100);
                mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                mProgressDialog.setCancelable(true);
                mProgressDialog.show();
                return mProgressDialog;
            default:
                return null;
        }
    }
}


posted @ 2012-02-20 16:12 sky7034 阅读(54) 评论(0) 编辑

   cookie只是session绑定客户端的一种途径,其它的还有比如url等 session_set_save_handler仅仅是对服务器端,session的存储方式,默认为文件存储,可更改为任何其它存储,比如数据库,memcache等
  可以使用 session_set_save_handler的函数:
  bool session_set_save_handler(callback $open, callback $close,
callback $read, callback $write,
callback $destroy, callback $gc)
    注意: 使用本函数前,先要配置php.ini文件,session.save_hadler=user ,否则,session_set_save_handler()不会生效。

   第一个参数是打开会话时调用的处理器,接受两个参数 save_path 和 session_name,分别是会话保存路径 (要记得 PHP 默认机制是文件方式的,因此有文件路径) 和 COOKIE 中用于保存 SESSION ID 的键名,其中键名可以通过 session_name 来获取和修改

第二个参数是关闭会话时的处理器,没有参数

第三个参数是读取会话时的处理器,接受一个参数 session_id,代表 COOKIE 中保存的会话 ID

第四个参数是保存会话时的处理器,接受两个参数 session_id 和 session_data。官方手册中提及到,PHP 5.0.5 以后,close 和 write 处理器将会在类析构之后调用,因此处理器内不能使用类和抛出异常 (Exception 也是一个类) 而在析构函数内可以使用 SESSION,因此我们需要在程序中 (比如在 open 或者 read 处理器内) 声明一下保证让 session_write_close 在析构前完成

register_shutdown_function('session_write_close');

第五个参数是删除会话时的处理器,接受一个参数 session_id,代表 COOKIE 中保存的会话 ID

最后一个参数是会话过期时的处理器,接受一个参数 maxlifetime,代表超时秒数

posted @ 2012-02-20 16:07 sky7034 阅读(14) 评论(0) 编辑

     除了is null,is not null外,对null的任何操作结果还都是null;
oracle中要注意null的相关and和or操作
   AND操作:null and true=null,null and false=false,null and null=null
    or:  null or true=true null or false=false,null or null=null
   not null的值依然是null,因为null表示不确定,无论null为true还是FALSE,始终最

后不确定,为null.
  注意的是:oracle 把null当作varchar2来处理
  ' '空字符串其实是null的字符类型的表现格式。
   btree索引是不存储null值的,而位图索引是存储NULL值的,而如果复合索引中,如果

包含null值,也是可以的,只要有一个索引列不为空;如果是单列索引,IS NULL是肯定

不能使用索引的了,但IS NOT NULL可以。
  大多数函数,如果输入为NULL,则输出也为null.NVL,NVL2,DECODE例外,它们在输入参

数为NULL的时候,结果可能不是NULL,如果这些输入参数均为NULL,则肯定为NULL,如果

不全为NULL,结果可能不是NULL。
  聚集函数不会处理null值,不管为max,min,avg还是sum.

posted @ 2012-02-20 15:58 sky7034 阅读(17) 评论(0) 编辑

使用绑定变量可以减少SQL PARSE,但是使用绑定变量有一个不好的地方,就是对于访

问具有倾斜的列,可能使用错误的执行计划。在Oracle 9i之前,如果WHERE 条件里面全

部使用绑定变量,那么只能使用固定的选择性参数来确定执行计划。

=操作和>=操作的选择性为5%,范围扫描的选择性为25%。缺省值的方式可能生成不好的执

行计划。所以Oracle 9i就出现了一个新的技术,bind peeking。什么是bind peeking呢

?当SQL第一次执行的时候,优化器会根据绑定变量来确定执行计划(如果存在柱状图)

。BIND PEEKING只有当该SQL第一次执行的时候,进行HARD PARSE的时候才进行,第二次

调用该SQL,就不会再次进行BIND PEEKING。这种情况下,就存在另外一个风险,如果某

个列的倾斜性很厉害,那么使用BIND PEEKING就是不安全的,因为不同的参数代入,只能

走第一次执行时的执行计划,那么执行计划就像掷色子一样,要靠运气了。碰到这种情况

,应用就不应该使用绑定变量,而应该改为直接值了。
  这时可以使用刷新一下共享池alter system flush shared_pool;
  或者alter session set "_optim_peek_user_binds"=false;

   我们可以通过隐含的参数来调整数据库默认的bind peeking行为:

_OPTIM_PEEK_USER_BINDS。 如果我们想关闭Bind Variable Peeking,我们可以设置该参

数为 False 即可。

SQL>alter session set "_optim_peek_user_binds"=false


使用了Bind Var能提高性能主要是因为这样做可以尽量避免不必要的硬分析(Hard Parse)

而节约了时间,同时节约了大量的CPU资源。

    当一个Client提交一条Sql给Oracle后,Oracle 首先会对其进行解析(Parse),然后

将解析结果提交给优化器(Optimiser)来进行优化而取得Oracle认为的最优的Query Plan

,然后再按照这个最优的Plan来执行这个Sql语句(当然在这之中如果只需要软解析的话会

少部分步骤)。

当Oracle接到 Client提交的Sql后会首先在共享池(Shared Pool)里面去查找是否有之前

已经解析好的与刚接到的这一个Sql完全相同的Sql(注意这里说的是完全相同,既要求语

句上的字符级别的完全相同,又要求涉及的对象也必须完全相同)。当发现有相同的以后

解析器就不再对新的Sql在此解析而直接用之前解析好的结果了。这里就节约了解析时间

以及解析时候消耗的CPU资源。尤其是在OLTP中运行着的大量的短小Sql,效果就会比较明

显了。因为一条两条Sql的时间可能不会有多少感觉,但是当量大了以后就会有比较明显

的感觉了。


但是,使用绑定变量的一个缺点是,给出的执行计划并不一定就是SQL在真正应用程序里

所使用的执行计划。这时我们就可以通过 event 10053 事件来查看。

posted @ 2012-02-20 15:55 sky7034 阅读(31) 评论(0) 编辑

在jquery中,如果也同时引入了其他js库,而其他库也用了$符号的话,则会产生冲突,
为了防止这种情况的发生,可以使用noconflict进行避免,代码如下:

<script type="text/javascript" src="otherLib.js"></script>

<script type="text/javascript" src="jquery.js"></script>

<script type="text/javascript">

$.noConflict();

// 使用其他js库的代码
</script>

同时,也可以自定义自己的命名项目命名空间,比如项目为abc,可以这样:
ABC('contentArea').show(),而不是只使用$('contentArea').show()
当然,也有方法可以继续在jquery代码中,在冲突的时候使用$符号,可以在
ready事件中继续写:
  jQuery(document).ready(function($) {

// 这里继续写$符号的代码.

});

  也可以简写为:
jQuery(function($){

//...............
});

总的写法如下,当跟其他库一起用的时候:
<script type="text/javascript" src="otherLib.js"></script>

<script type="text/javascript" src="jquery.js"></script>

<script type="text/javascript">

$.noConflict();

jQuery(function($) {

// jQuery code with $.

});

// 其他js库代码.

</script>

也可以再简单点:
$.noConflict()(function(){

// jQuery code

});

// 其他js库代码.

posted @ 2012-02-20 15:50 sky7034 阅读(10) 评论(0) 编辑

  在jquery中,可以使用triggerhandler来设计自定义事件,比如一般的事件:

$('#id').on("click", function() {
    alert("Item clicked");
}
);
  而对于自定义事件,一般期望能达到如下的效果:

$('#id').on("test.says.hello", function()
{
    alert("Hello Cory");
});

     这个就叫自定义事件了。又比如假如提供一个jquery的插件,比如是lightbox的效果,在打开时
   $(function() {
  $('#id').on("lightbox.open", function() {
     alert("The lightbox just opened. Woo!");
  });
});
  则必须编写自定义事件如下:
function open() {
 
   $('#id')triggerHandler({ type:"lightbox.open" }); 

}

如果自定义事件中需要有参数传出去,可以这样
    $('#id').triggerHandler({
    type:"lightbox.open",  
  var1:'Howdy', 
   information:'I could pass something here also' 
});


则调用的时候:
   $(function() {
  $('#id').on("lightbox.open", function(o) {  
  alert(o.var1 + " - " + o.information);
  });
}
);  

下面来看下trigger和triggerhandler的区别:
triggerHandler() 方法触发被选元素的指定事件类型。但不会执行浏览器默认动作,也不会产生事件冒泡。

triggerHandler() 方法与 trigger() 方法类似。不同的是它不会触发事件(比如表单提交)的默认行为,而且只影响第一个匹配元素。

与 trigger() 方法相比的不同之处
它不会引起事件(比如表单提交)的默认行为
.trigger() 会操作 jQuery 对象匹配的所有元素,而 .triggerHandler() 只影响第一个匹配元素。
由 .triggerHandler() 创建的事件不会在 DOM 树中冒泡;如果目标元素不直接处理它们,则不会发生任何事情。
该方法的返回的是事件处理函数的返回值,而不是具有可链性的 jQuery 对象。此外,如果没有处理程序被触发,则这个方法返回 undefined。

例子区别如下:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Insert title here</title>
  <script type="text/javascript" src="Scripts/jquery-1.3.2.min.js"></script>
  <script type="text/javascript">
  $(function() {
      $("#txtContent").focus(function() {
          $("#dv").html($("#dv").html() + "focus被触发。");
      });
 
      $("#btnTrigger").click(function() {
          $("#txtContent").trigger('focus');
          return false;
      });
 
      $("#btnTriggerHandler").click(function() {
          $("#txtContent").triggerHandler('focus');
      });
  });
  </script>
 </head>
 <body>
  <form id="myForm" action="">
      <input type="text" id="txtContent" name="txtContent" size="20" />
      <input type="button" id="btnTriggerHandler" name="btnTriggerHandler" value="TriggerHandler" />
      <input type="button" id="btnTrigger" name="btnTrigger" value="Trigger" />
      <div id="dv">
      </div>
      
          ①使用Trigger 时会先触发我们绑定的focus 事件,然后文本框会获得焦点,之后触发了浏览器默认的
 
          focus事件,所以trigger 会有两次输出。

         
 
          ②TriggerHandler 相对于 Trigger 只会触发我们绑定的focus,而不会触发浏览器的默认事件.所以
 
          只会有一次输出
      

     </form>
 </body>
</html>


posted @ 2012-02-20 15:31 sky7034 阅读(16) 评论(0) 编辑

在这里所有的操作要在数据库的那台机器上操作,用SYS用户进行登录,首先设置归档进程关闭。

alter system set log_archive_start=false scope=spfile;
然后关闭数据库

shutdown immediate
再后面把数据库启动到mount的模式

startup mount
关闭flash闪回数据库模式,如果不关闭的话,在后面关闭归档日志的时候就会出现讨厌的ORA-38774错误。

alter database flashback off
接着把数据库改为非归档模式

alter database noarchivelog;
都修改好了以后,然后打开数据库

Alter database open;
察看一下归档日志的空间大小

select * from v$recovery_file_dest;
接着看一下log日志的状态

select * from v$log;
再看一下闪回日志使用状况

select * from v$flash_recovery_area_usage;

posted @ 2012-02-20 15:22 sky7034 阅读(5) 评论(0) 编辑

jquery mobile:
1) jQM是一个UI类库可以看作,主要依赖于jquery和jquery ui
2) jqm做的一些页面是可以靠JQM本身框架已完成不少功能,甚至不需要或者
很少的javascript

3) 如果是熟JQUERY的话,JQM很容易上手
4) JQM是结构框架上比较松散,所以程序大的时候维护起来稍微麻烦点
5) 能容易跟其他框架整合
6) 支持的设备比sencha touch暂时多点


sencha touch:
1) 框架类库很大,包罗万有,UI,DOM,AJAX等它都包括了
2) 不依赖其他框架类库
3) 学习起来花费时间长点
4) 有很好的框架规范和编程约束,这对中大规模项目来说是好事
5) 提供原生打包(native packaging)功能。只需一条命令,就可以将应用打包为供iOS或Android使用。用户不必编写自己的包裹器,或是再纠缠于其他解决方案,现在 已经在Sencha Touch 2中全面内置。更好之处在于:用户为iOS或Android打包同时支持Mac和Windows环境。
6) 支持的设备比jqm少些
7) 对localstorage的支持好点

posted @ 2012-02-20 15:09 sky7034 阅读(81) 评论(0) 编辑
蘑菇街女装 货运专家