随笔 - 85  文章 - 0  评论 - 14 

1.什么是类变量,什么是成员变量,什么是实例变量,什么是局部变量,四者各有什么区别


局部变量是在函数或方法中的变量,实例变量指的是类的一个实例,就是一个对象, 成员变量就是类中的变量(不是方法中的变量!), 类变量是类中的静态变量。
局部、实例、成员变量的作用域和生存周期同局部变量一样,而类变量如果用public声明则作用域同全局变量,如果是private则作用域只在类的内部,
生存周期同全局变量.
 
2.说出Servlet的生命周期,并说出Servlet和CGI的区别
Servlet的生命周期分为5个阶段:
实例化:Servlet容器创建Servlet类的实例。
初始化:该容器调用init()方法,通常会申请资源。
服务:由容器调用service()方法,(也就是doGet()和doPost())。
破坏:在释放Servlet实例之前调用destroy()方法,通常会释放资源。
不可用:释放内存的实例。
CGI(Common Gateway Interface通用网关接口)程序来实现数据在Web上的传输,使用的是如Perl这样的语言编写的,它对于客户端作出的每个请求,必须创建CGI程序的一个新实例,这样占用大量的内存资源。由此才引入了Servlet技术。
Servlet是一个用java编写的应用程序,在服务器上运行,处理请求信息并将其发送到客户端。对于客户端的请求,只需要创建Servlet的实例一次,因此节省了大量的内存资源。Servlet在初始化后就保留在内存中,因此每次作出请求时无需加载。
 
3.Remoting简单应用
 
4.c#中的interface abstract 与 virtual
interface用来声明接口

1.只提供一些方法规约,不提供方法主体.  如:
public interface IPerson
{
    void getName();//不包含方法主体
}
2.方法不能用public abstract等修饰,无字段变量,无构造函数。
3.方法可包含参数。  如 
  public interface IPerson
  {
    void getAge(string s);
  }

  一个例子(例1):
public interface IPerson
{
   IPerson();              //错误
   string name;            //错误
   public void getIDcard();//错误

   void getName();         //right
   void getAge(string s);  //right
}

实现interface的类
1.与继承类的格式一致,如 public class Chinese:IPerson{}
2.必须实现 interface 中的各个方法

   例2,继承例1
public class Chinese:IPerson
{
   public Chinese(){}                  //添加构造
   public void getName(){}          //实现getName()
   public void getAge(string s){} //实现getAge()
}

abstract声明抽象类、抽象方法
1.抽象方法所在类必须为抽象类
2.抽象类不能直接实例化,必须由其派生类实现。
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似

  如
public abstract class Book
{
  public Book()
  {  
  }

  public abstract void getPrice();      //抽象方法,不含主体
  public virtual void getName()   //虚方法,可覆盖
  {
      Console.WriteLine("this is a test:virtual getName()");
  }
  public virtual void getContent()   //虚方法,可覆盖
  {
      Console.WriteLine("this is a test:virtual getContent()");
  }
  public void getDate()                           //一般方法,若在派生类中重写,须使用new关键字
  {
      Console.WriteLine("this is a test: void getDate()");
   }
}

public class JavaBook:Book
{
      public override void getPrice()   //实现抽象方法,必须实现
      {
           Console.WriteLine("this is a test:JavaBook override abstract getPrice()");
      }
      public override void getName()   //覆盖原方法,不是必须的
      {
           Console.WriteLine("this is a test:JavaBook override virtual getName()");
      }
}

 测试如下:
public class test
{
   public test()
   {
    JavaBook jbook=new JavaBook();
         jbook.getPrice();      //将调用JavaBook中getPrice()
         jbook.getName();       //将调用JavaBook中getName()
         jbook.getContent();    //将调用Book中getContent()
         jbook.getDate();       //将调用Book中getDate()

    }
   public static void Main()
   {

       test t=new test();
   }
}

virtual标记方法为虚方法
1.可在派生类中以override覆盖此方法
2.不覆盖也可由对象调用
3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法

abstract 与virtual : 方法重写时都使用 override 关键字

 

5.Singleton 生活中的例子

美国总统的职位是Singleton,美国宪法规定了总统的选举,任期以及继任的顺序。这样,在任何时刻只能由一个现任的总统。无论现任总统的身份为何,其头衔"美利坚合众国总统"是访问这个职位的人的一个全局的访问点。

 

public sealed class Singleton
{
    static Singleton instance=null;
    static readonly object padlock = new object();

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            if (instance==null)
            {
                lock (padlock)
                {
                    if (instance==null)
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
}

 

   6、js应该怎么使用,应该放在哪儿。

    1、放在底部,虽然放在底部照样会阻塞所有呈现,但不会阻塞资源下载。
    2、如果嵌入JS放在head中,请把嵌入JS放在CSS头部。

    3、使用defer   相当于 window.onload ,但应用上比 window.onload 更灵活!
    4、不要在嵌入的JS中调用运行时间较长的函数,如果一定要用,可以用setTimeout来调用

 

 

 

7.FireFox窗体frameset,iframe间的js调用方法与IE中的调用方法比较 

FireFox窗体

//(1) 在其中一个frame里操作主窗口
var ff=window.parent.window.document.getElementsByTagName("frameset");
var colsValue=ff['menuframe'].getAttribute('cols');

//(2)获得iframe上的document对象
var XX=document.getElementById('myframeID'); 
     XX.contentWindow.document.getElementById('oneElement');

//(3)火狐下动态修改textarea内容:document.getElementById("id").innerHTML="我是动态修改的内容"
IE窗体

//(4)在IE当中获得iframe上的document对象

 var xx=window.frames("myframe").document.getElementById("bd").innerHTML;

 

 8.JS动态给HTML赋值,事件,样式等属性

 

               label.setAttribute('value',"");     
               label.setAttribute('class',"handcss");   //cursor:hand
               label.setAttribute('onclick',"SetFormual(this.id);"); 
               label.className =  "handcss"  ;  
               label.onclick = function(){SetFormual(this.id);

 

9.在线生成“QQ在线状态”网址

http://wp.qq.com/

 

10.SQL语句当中自动生成编号 :

 

INSERT sys_Roles(R_ID,GroupID,treeID) SELECT  ROW_NUMBER() OVER(ORDER BY CAST(OrderBy AS NVARCHAR(20))) AS R_ID," + GroupID + " AS GroupID,treeID FROM sys_MenuInfo ORDER BY CAST( OrderBy  AS NVARCHAR(20))

 

 11.只有下划线的文本框:

<input type="text" value="" name="yourname" size="30" style=" border-bottom: black 1px solid;
    border-top-style: none;
    border-right-style: none;
    border-left-style: none;
    background-color: transparent;
" />
 
 

 12.图片跟随滚动条的滚动效果:

 
 
 
 

13.Gridview中RadioButtonList客户端单击事件:

 

(1)第一步:

       for (int i = 0; i < this.GridView1.Rows.Count; i++)

         {

        RadioButtonList MyRb = (RadioButtonList)GridView1.Rows[i].FindControl("rb_JY");

        MyRb.Attributes.Add("onclick", "javascript:onStockSelected('" + i + "')"); 

  } 

(2)第二步

   function onStockSelected(Id) 

        {      

           if( document.getElementById("GridView1")!=null &&  document.getElementById("GridView1")!= undefined)

           {

                var rd = document.getElementById("GridView1").getElementsByTagName("input");   


                for (var i = 0; i < rd.length; i++) 

                { 

                     var b = false; 

                    if (rd[i].type == "radio" ) 

                    { 

                        if(rd[i].checked && rd[i].value=='0')

                        {                                                                              

                            var GDV = document.getElementById("<%=GridView1.ClientID %>");                             

                            var txt = GDV.rows[parseInt(Id)+1].getElementsByTagName("input") ;                                                                           

                            for (var j = 0; j < txt.length; j++) 

                            {                                                            

                                 if (txt[j].type == "text" &&  txt[j].name.search("txt_remark") >-1) 

                                 {        

                                    if(txt[j].value=="")

                                    {                                                                                                         

                                        txt[j].value = "同意";                                       

                                    }

                                 }

                            }                                                        

                        }

                    }                                

                }

            }                                    

        }

 

 

 

 

 

 
 
 14.父窗口showModalDialog弹出子窗口并返回值:
 
父窗口:
  var str;
 function Txt_Receiver_onclick()
 {
   str = window.showModalDialog("GetReceiver.aspx","","dialogWidth:800px;dialogHeight:400px;status:no") ;
   
   if(str != undefined )
   {   
     document.getElementById("Txt_Receiver").value=str;
     document.getElementById("Txt_Receiver").setAttribute('value',str);  
   }    
 }
 
子窗口:
function returnFun()

    var checkvalue="";  
    var chkObject = document.getElementById('<%=Ddl_Receiver.ClientID%>');
    var chkInput =chkObject.getElementsByTagName("INPUT");
    var chkLable = chkObject.getElementsByTagName("Label");
    for(var i=0;i<chkInput.length;i++)
    {
        if(chkInput[i].checked)
        {
            checkvalue = checkvalue + chkLable[i].innerHTML + ";";
        }
    }
     window.opener.document.getElementById("Txt_Receiver").value = checkvalue;//注意这句
     window.parent.returnValue = checkvalue;
  
     window.close();
}
 
 15 一毫米等于3.6个像素
 
16.Single Sign On
 

 

 

 

17. 大文件下载

 

 

System.IO.Stream iStream = null;

// Buffer to read 10K bytes in chunk:
byte[] buffer = new Byte[10000];

// Length of the file:
int length;

// Total bytes to read:
long dataToRead;

// Identify the file to download including its path.
string filepath = "DownloadFileName";

// Identify the file name.
string filename = System.IO.Path.GetFileName(filepath);

try {
    
// Open the file.
    iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
    System.IO.FileAccess.Read, System.IO.FileShare.Read);


    
// Total bytes to read:
    dataToRead = iStream.Length;

    Response.ContentType 
= "application/octet-stream";
    Response.AddHeader(
"Content-Disposition""attachment; filename=" + filename);

    
// Read the bytes.
    while (dataToRead > 0) {
        
// Verify that the client is connected.
        if (Response.IsClientConnected) {
            
// Read the data in buffer.
            length = iStream.Read(buffer, 010000);

            
// Write the data to the current output stream.
            Response.OutputStream.Write(buffer, 0, length);

            
// Flush the data to the HTML output.
            Response.Flush();

            buffer 
= new Byte[10000];
            dataToRead 
= dataToRead - length;
        } 
else {
            
//prevent infinite loop if user disconnects
            dataToRead = -1;
        }
    }
catch (Exception ex) {
    
// Trap the error, if any.
    Response.Write("Error : " + ex.Message);
finally {
    
if (iStream != null) {
        
//Close the file.
        iStream.Close();
    }
}

 

 
18. SQL两个数据库之间数据互相导入,触发器如下:
 

UPDATE kssb.dbo.Admin SET kssb.dbo.Admin.UserName=kssbwww0424.dbo.Admin.UserName FROM kssbwww0424.dbo.Admin
WHERE kssb.dbo.Admin.ID=kssbwww0424.dbo.Admin.ID

 

INSERT INTO kssb.dbo.Admin  -- 假设字段ID为主键
SELECT  UserName,PWD FROM kssbwww0424.dbo.Admin WHERE
NOT EXISTS(SELECT kssb.dbo.Admin.ID FROM kssb.dbo.Admin WHERE kssb.dbo.Admin.ID=kssbwww0424.dbo.Admin.ID )

 

 

 delete  from  ChangeKSSBData.dbo.Admin  WHERE ChangeKSSBData.dbo.Admin.ID=(select  ID from deleted) --删除对应ID

 

 

 

 

 

 

19.SQL2005数据库备份如何还原到SQL2000数据库中

 

引用:http://blog.csdn.net/leamonjxl/article/details/6439114

 

 

 

SQL2005转SQL2000的问题脚本:数据库进行降级处理。

在生成脚本之前,我们需要将数据库的兼容级别设置成"SQL Server 2000 (80)"。该设置可以在数据库属性->Option->Compatibility level中设置

 

 方便的是SQL Server Management Studio自带的生成脚本功能。
SQL Server Management Studio>>>任务>>>生成脚本
如果选择生成sql2000版本的脚本,那么生成的脚本存在瑕疵,无法直接在sql2000中运行。
可能会出现以下错误>>>
错误一:WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
错误二:'sys.objects'
错误三:列名 'object_id' 无效
错误四:sys.views
尝试打上 SQL2005的SP3 补丁后,上面的问题解决了,但还是存在问题。
比如:[nvarchar](max) ,sql2000貌似不支持max参数的
---可采用以下~~
1. 去掉 “WITH (IGNORE_DUP_KEY = OFF) ”

2. 将所有的 “sys.objects”改为“sysobjects”
3. 将所有的 “object_id” 改为 “id”
4. (需要时)将所有的 “SCHAMA” 改为 “user”
5. 如果有的系统函数名或系统存储过程名称前有“sys.”不能被SQL2000识别,就把它去掉。如添加注释“sys.sp_addextendedproperty”。

 

警告: 已创建表 'xxxx',但其最大行大小(10438)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。----其中xxxx是你的建的表名,10438是你建表语句中可变长度列(如 nvarchar 或 varbinary)的总长度,8060是SQL Server对行长度的最大限制。

、解决

    知道问题的原因了,解决办法相对就简单了!

    1、修改你建表语句中相应的列的数据类型或长度(如将nvarchar格式改成text),让可变长度列的加和小于8060。这样可以彻底避免出现上述错误发生,当然上述的错误并不是必然出现。

 

 

 

20.清除SQLServer数据库日志(SqlServer2005)

 

执行如下:

1.清空日志
    DUMP TRANSACTION 库名 WITH NO_LOG   

2.截断事务日志:
    BACKUP LOG 数据库名 WITH NO_LOG

3.收缩数据库文件(如果不压缩,数据库的文件不会减小)

    右键数据库->任务->收缩->数据库->确定

4.将数据库设为自动收缩

    右键数据库->属性->选项->自动->自动收缩设为True

 

 

 21.javascript中字符串替换函数replace()方法


 replace()最简单的算是能力就是简单的字符替换。示例代码如下:

<script language="javascript">
var strM = "javascript is a good script language";
//在此我想将字母a替换成字母A
alert(strM.replace("a","A"));
</script>
  我想大家运行后可以看到结果,它只替换了首字母。但如果加上正则表达式结果就不一样了!呵呵,没错。replace()支持正则表达式,它可以按照正则表达式的规则匹配字符或字符串,然后给予替换!
<script language="javascript">
var strM = "javascript is a good script language";
//在此我想将字母a替换成字母A
alert(strM.replace(/a/,"A"));
</script>
  呵呵,您一定发现了。这样还是只替换了第一个字母a。如果您熟悉正则,那这就难不住您。稍加修改就OK了。
<script language="javascript">
var strM = "javascript is a good script language";
//在此将字母a全部替换成字母A
alert(strM.replace(/a/g,"A"));
</script>
  还可以这样,看看效果!

由上可知,当正则表达式有"g"标志时,代表将处理整个字符串,即函数change的变换将应用于所有匹配的对象。而该函数有三个或更多参数,具体个数视正则表达式而定。 
 

posted on 2010-05-04 16:02 云端的舞者 阅读(118) 评论(2) 编辑 收藏