??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲看片无码在线视频,亚洲AV成人噜噜无码网站,亚洲综合色区在线观看http://www.tkk7.com/badboy/category/8016.htmlzh-cnFri, 02 Mar 2007 05:06:07 GMTFri, 02 Mar 2007 05:06:07 GMT60JSP学习心得http://www.tkk7.com/badboy/articles/33205.htmlbadboybadboyThu, 02 Mar 2006 06:23:00 GMThttp://www.tkk7.com/badboy/articles/33205.htmlhttp://www.tkk7.com/badboy/comments/33205.htmlhttp://www.tkk7.com/badboy/articles/33205.html#Feedback0http://www.tkk7.com/badboy/comments/commentRss/33205.htmlhttp://www.tkk7.com/badboy/services/trackbacks/33205.html一、JSP工作原理

在一个JSP文gW一ơ被hӞJSP引擎把该JSP文g转换成ؓ一个servlet。而这个引擎本w也是一个servletQ在JSWDK或WEBLOGIC中,它就是JspServlet?JSP引擎先把该JSP文g转换成一个Java源文Ӟ在{换时如果发现jsp文g有Q何语法错误,转换q程中断,q向服务端和客户端输出出错信息;如果转换成功Q?JSP引擎用javac把该Java源文件编译成相应的class文g。然后创Z个该SERVLET的实例,该SERVLET的jspInit()Ҏ被执行,jspInit()Ҏ在servlet的生命周期中只被执行一ơ。然后jspService()Ҏ被调用来处理客户端的h。对每一个请求,JSP引擎创徏一个新的线E来处理该请求。如果有多个客户端同时请求该JSP文gQ则JSP引擎会创建多个线E。每个客Lh对应一个线E。以多线E方式执行可大大降低对系l的资源需?提高pȝ的ƈ发量及响应时?但应该注意多U程的编E限Ӟ׃该servlet始终M内存Q所以响应是非常快的?如果.jsp文g被修改了Q服务器根据设|决定是否对该文仉新编译,如果需要重新编译,则将~译l果取代内存中的servletQƈl箋上述处理q程?虽然JSP效率很高Q但在第一ơ调用时׃需要{换和~译而有一些轻微的延迟?此外Q如果在M时候如果由于系l资源不的原因QJSP引擎以某种不确定的方式servlet从内存中Ud。当q种情况发生时jspDestroy()Ҏ首先被调? 然后servlet实例便被标记加入"垃圾攉"处理?jspInit()及jspDestory()格式如下Q可在jspInit()中进行一些初始化工作,如徏立与数据库的q接Q或建立|络q接Q从配置文g中取一些参数等Q在jspDestory()中释攄应的资源?

<%!
public void jspInit()
{
       System.out.println("jspinit");
}
 
%>
 
<%!
public void jspDestory()
{
       System.out.println("jspDestory");
}
%>

二、服务端的输出缓冲区

~省情况?服务端要输出到客L的内?不直接写到客L,而是先写C个输出缓冲区?只有在下面三中情况下Q才会把该缓冲区的内容输出到客户端上Q?BR>

  1. 该JSP|页已完成信息的输出
  2. 输出~冲区已?
  3. JSP中调用了out.flush()或response.flushbuffer()
输出~冲区的大小可以? <%@page buffer="none"|"nkb"%>或response.setBufferSize()讄,如下Q?
  1. 讄输出~冲区的大小?KB?<%@page buffer="1kb"%>或response.setBufferSize(1);
  2. 讄输出~冲区的大小?Q即不缓册Ӏ?<%@page buffer="none" %>或response.setBufferSize(0);
用response.getBufferSize()或out.getBufferSize()可取的输出缓冲区的大?单位为字? 用response.isCommitted()可检查看服务端是否已数据输出到客户? 如果q回值是TRUE则已数据输出到客户?是FALSE则还没有.

三、服务端输出重定?/P>

有以?U方法可以做到输出重定向:

  1. RESPONSE.SETREDERECT("URL") 该方法通过修改HTTP协议的HEADER部分,Ҏ览器下达重定向指令的,使浏览器昄重定向网늚内容. response.sendRedirect("http://localhost:7001/index.html");
  2. 下面的方法也能改变HTTP HEADER属性,它的原理?1 是一L.
    <%
    response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
    String newLocn="/index.html";
    response.setHeader("Location",newLocn);
    % >
  3. 采用<JSP:FORWORD> 该方法是利用服务器端先将数据输出到缓冲区的机?在把~冲区的内容发送到客户端之?原来的不发?改ؓ发送该面的内?如果?lt;JSP:FORWORD>之前有很多输?前面的输出已使缓冲区?自动输出到客户?那么该语句将不v作用,q一点应该特别注? 如下面的例子?1)会输出index.html的内容,2 不会输出index.html的内容,而是输出out.println("@@@@@@@@@@@@@@@@@"); 中的内容,q且在服务端会抛?java.lang.IllegalStateException: Response already committed 异常Q但客户端没有Q何错误输出?
(1)
<%@page buffer="1kb"%>
 
<%
long i=0;
 
for(i=0;i<10;i++)
{
       out.println("@@@@@@@@@@@@@@@@@");
}
%>
 
<jsp:forward page="./index.html" />
 
 
(2)
<%@page buffer="1kb"%>
 
<%
long i=0;
 
for(i=0;i<600;i++)
{                
       out.println("@@@@@@@@@@@@@@@@@");
}
%>
 

说明Q?BR>1. Ҏ(1),(2)可以使用变量表示重定向的地址;Ҏ(3)不能使用变量表示重定向的地址?BR>String add="./index.html";
<jsp:forward page= add />
无法重定向到index.html中去

String add=http://localhost:7001/index.html
response.sendRedirect(add);
可以重定向到http://localhost:7001/index.html中去?

2. 采用Ҏ(1),(2)request中的变量(通过request.setAttribute()保存到request中的?不能在新的页面中采用,采用Ҏ(3)? lg,我们应该采用(1),(2)重定向比较好.

四、JSP中正应用类:

应该把类当成JAVA BEAN来用Q不要在<% %> 中直接? 如下的代?1)l过JSP引擎转化后会变ؓ代码(2):
从中可看出如果把一个类在JSP当成JAVA BEAN 使用,JSP会根据它的作用范围把它保存到相应的内部对象中.
如作用范围ؓrequest,则把它保存到request对象?q且只在W一ơ调?对象的gؓnull)它时q行实例? 而如果在<% %>中直接创cȝ一个对?则每ơ调用JSP?都要重新创徏该对?会媄响性能.

代码(1)
<jsp:useBean id="test" scope="request" class="demo.com.testdemo">
</jsp:useBean>
 
<%
test.print("this is use java bean");
 
testdemo td= new testdemo();
td.print("this is use new");
%>
 

代码(2)
demo.com.testdemo test = (demo.com.testdemo)request.getAttribute("test");
if (test == null)
{
       try
       {
                 test = (demo.com.testdemo) java.beans.Beans.instantiate(getClass().getClassLoader(),"demo.com.testdemo");
       }
       catch (Exception _beanException)
       {
               throw new weblogic.utils.NestedRuntimeException("cannot instantiate 'demo.com.testdemo'",_beanException);
       }
       request.setAttribute("test", test);
       out.print("\r\n");
}
out.print("\r\n\r\n\r\n");
test.print("this is use java bean");
 
testdemo td= new testdemo();
td.print("this is use new");

 

五、JSP的调?

JSP的调试比较麻?特别是当bean是在一个session中存在时Q更加困难。得从好几个面开始往里面走才行。通常是用out.println()或System.out.print()来打一大堆的信息来查问题。如果是用jbuilder做开?它能直接调试JSP.不过更重要的是知道错误生的原因及解x法。下面对一些JSP~程常见错误q行分析?

(1).java.lang.NullPointerException异常
一般是对一个ؓNULL值的变量q行操作引v?如下面的操作׃抛出
java.lang.NullPointerException
String a = null;
a.substring(0,1);
 
为避免这U异常最好在对变量操作之前检查看它是否ؓNULL??
<% String ss=Session.getAttribute("NAME")
if isnull(ss)
{

}
else
{

}
%>

(2).JSP是用JAVA写的Q所以它是大写敏感的,用过其他~程语言的h最Ҏ犯这个错误。另外在览器的地址栏中输入的访问JSP的地址也是区分大小写的.如http://localhost:7001/demo/t.jsp与http://localhost:7001/Demo/t.jsp是不一L

(3).在jsp中判断字W串要用compareToҎQ不要用==Q因为在java中String变量不是一个简单的变量而是一个类实例Q不同的Ҏ会得?不同的结果,如下所C:

      

  1.   String str1="ABCD";
      String str2="ABCD"; (?String str2="AB"+"CD"; )
      if (str1==str2)
       out.print("yes");
      else
       out.print("no");
      l果?yes"?
     

  2.   String str1,str2,str3;
      str1="ABCD";
      str2="AB";
      str3=str2+"CD";
      if (str1==str3)
       out.print("yes");
      else
       out.print("no");
      l果?no"?

  3. String str1=new String("ABCD");
      String str2=new String("ABCD");
      if (str1==str2)
       out.print("yes");
      else
       out.print("no");
      l果?no"?

  4. String str1=new String("ABCD");
      String str2=new String("ABCD");
      if (str1.compareTo(str2)==0)
       out.print("yes");
      else
       out.print("no");
      l果?yes"?

(4)防止JSP或SERVLET中的输出被浏览器保存在缓冲区?
览器在默认情况下会把浏览过的网保存在~冲Z,在调试时,一般不希望q样.把下面的脚本加入E序?可防止JSP或SERVLET中的输出被浏览器保存在缓冲区?
<%
response.setHeader("Cache-Control","no-store"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
%>
在IE中也可通过讄实现Q把/工具/INTERNET选项/常规/讄/的检察所存页面的较新版本,设ؓ每次讉K该页旉?

六、COOKIE

HTTP COOKIE实质是服务端与在客户端之间传送的普通HTTP?可保存也可不保存在客L盘?如果保存,每一个文件大不过4K的文本文?多个COOKIE可保存到同一个文件中. 如果从编E角度来?在JSP中COOKIE是JAVA提供的一个类.常用的方法如下所表示Q因为客L可能不接受COOKIEQ所以徏议不用它Q改用SESSION{其他方式?

public class cookie
{
public String getDomain() //q回该COOKIE的有效域
public int getMaxAge() //q回该COOKIE的有效期,单位为秒
public String getName() //q回该COOKIE的名U?
public String getPath() //q回该COOKIE的有效\?
public boolean getSecure() //q回该COOKIE的安全设|?
public String getValue() //q回该COOKIE的?
public void setDomain(java.lang.String pattern) //讄该COOKIE的有效域
public void setMaxAge(int expiry) //讄该COOKIE的有效期,单位为秒
public void setPath(java.lang.String uri) //讄该COOKIE的有效\?
public void setSecure(boolean flag) //讄该COOKIE的安全设|?
public void setValue(java.lang.String newValue) //讄该COOKIE的?
}
一个COOKIE包含以下五部?
  1. NAME/VALUE?讄该COOKIE的名字及它保存的?
  2. COOKIE通常和服务器相关,如果域设ؓJAVA.SUN.COM,那么该COOKIE和q个域相?只对该网址起作?当浏览该|址?览器将把该COOKIE的内容发送给服务?COOKIE是作为HTTP HEADER的一部分被发送的Q如果没有设|域,那么COOKIE只和创COOKIE的服务器相关.
  3. 路径用于指定服务器上可以使用该COOKIE的文件所在的路径,它只对该|址下的该\径下的应用v作用."/"表示服务器上所有目录都可以使用该COOKIE.
  4. COOKIE都有一个有效期,有效期默认gؓ-1,q表C没有保存该COOKIE,当该览器退出时,该COOKIE立即失效.
  5. 安全选项true/false,如果讄为true,那么在服务端与在客户端之间传送该COOKIE的内Ҏ,采用HTTPS协议.

如何查一个客L是否支持COOKIE的方?
用下面的Ҏ写一个COOKIE到客L,q确认成?
try
{
Cookie c = new Cookie("mycookie","COOKIE TEST");
response.addCookie(c);
}
catch(Exception e)
{
      System.out.println(e);
}

然后在一个新的JSP文g?用下面的Ҏ取客L的COOKIE到cookies? 如果cookies.length ==0,说明该客L的浏览器不支持COOKIE
try
{
Cookie[] cookies = request.getCookies();
if(cookies.length ==0)
{
      System.out.println("not support cookie");
}
}
catch(Exception e)
{
      System.out.println(e);
}

七、JSP和SERVLET的区?

SUN首先发展出SERVLETQ其功能比较强劲Q体p设计也很先q,只是Q它输出HTML语句q是采用了老的CGI方式Q是一句一句输出,所以,~写和修改HTML非常不方ѝ?后来SUN推出了类gASP的JSPQ把JAVA代码嵌套到HTML语句中,q样Q就大大化和方便了网늚设计和修攏VASPQPHPQJSP都是嵌套型的SCRIPT语言?一个分布式pȝ应分Z层:表示?业务逻辑?数据存取?在J2EE体系l构?SERVLET用来写业务逻辑层是很强大的Q但是对于写表示层就很不方便。JSP则主要是Z方便写表C层而设计的。ENTITY BEAN实现数据存取层,SESSION BEAN实现业务逻辑层。如果是单的应用pȝ,可采用JSP+BEANS的结构进行设?JSP中应该仅仅存放与表示层有关的东西Q也是_只放输出HTML|页的部份。而所有的数据计算Q数据分析,数据库联l处理,l统是属于业务逻辑层,应该攑֜JAVA BEANS中。通过JSP调用JAVA BEANSQ实C层的整合?实际上,微Y的DNA技术,单说Q就是ASP+COM/DCOM技术。与JSP+BEANS完全cMQ所有的表示层由ASP完成Q所有的业务逻辑由COM/DCOM完成?Z么要采用q些lg技术呢Q因为单U的ASP/JSP语言是非怽效率执行的,如果出现大量用户点击Q纯SCRIPT语言很快到达了他的功能上限Q而组件技术就能大q度提高功能上限Q加快执行速度。另外一斚wQ纯SCRIPT语言表C层和业务逻辑层؜在一P造成修改不方便,q且代码不能重复利用Q采用组件技术就只改lg可以了?对于复杂的应用,应该采用ENTITY BEAN实现数据存取层,SESSION BEAN实现业务逻辑层,用JSP来调用SESSION BEANQ由SESSION BEAN调用ENTITY BEAN。即采用JSP+EJB来构Z个复杂的分布式系l。它比JSP+BEANh更高的吞吐量Q可靠性,安全性。综上所qͼ对简单应用,可采用JSP+BAENQ对复杂的应用系l,应采用JSP+EJBQSERVLET变的无轻重。用JSP完全可替代它?/SPAN>



badboy 2006-03-02 14:23 发表评论
]]>
~写U程安全的JSPE序http://www.tkk7.com/badboy/articles/33204.htmlbadboybadboyThu, 02 Mar 2006 06:22:00 GMThttp://www.tkk7.com/badboy/articles/33204.htmlhttp://www.tkk7.com/badboy/comments/33204.htmlhttp://www.tkk7.com/badboy/articles/33204.html#Feedback0http://www.tkk7.com/badboy/comments/commentRss/33204.htmlhttp://www.tkk7.com/badboy/services/trackbacks/33204.htmlJSP默认是以多线E方式执行的Q这是JSP与ASPQPHPQPERL{脚本语a不一L地方Q也是它的优势之一Q但如果不注意多U程中的同步问题Q会使所写的JSPE序有难以发现的错误。下面以一个例子说明JSP中的多线E问题及解决Ҏ?

一、JSP的中存在的多U程问题Q?/P>

当客LW一ơ请求某一个JSP文gӞ服务端把该JSP~译成一个CLASS文gQƈ创徏一个该cȝ实例Q然后创Z个线E处理CLIENT端的h。如果有多个客户端同时请求该JSP文gQ则服务端会创徏多个U程。每个客Lh对应一个线E。以多线E方式执行可大大降低对系l的资源需?提高pȝ的ƈ发量及响应时?对JSP中可能用的的变量说明如下:

  1. 实例变量
    实例变量是在堆中分配?q被属于该实例的所有线E共享,所以不是线E安全的.
  2. JSPpȝ提供?个类变量
    JSP中用到的OUT,REQUEST,RESPONSE,SESSION,CONFIG,PAGE,PAGECONXT是线E安全的,APPLICATION在整个系l内被?所以不是线E安全的.
  3. 局部变?BR>局部变量在堆栈中分?因ؓ每个U程都有它自q堆栈I间,所以是U程安全?
  4. 静态类
    静态类不用被实例化,可直接使用,也不是线E安全的.
  5. 外部资源:
    在程序中可能会有多个U程或进E同时操作同一个资??多个U程或进E同时对一个文件进行写操作).此时也要注意同步问题.

二、下面的例子存在的多U程问题Q?/P>

<%@ page import="
javax.naming.*,
java.util.*,
java.sql.*,
weblogic.common.*
" %>
 

<%
String name
String product;
long  quantity;


name=request.getParameter("name");
product=request.getParameter("product");
quantity=request.getParameter("quantity"); /*(1)*/
savebuy();
%>


<%!
public void  savebuy()
{
    /*q行数据库操作,把数据保存到表中*/
    try {
      Properties props = new Properties();
      props.put("user","scott");
      props.put("password","tiger");
      props.put("server","DEMO");  

      Driver myDriver = (Driver) iver").newInstance();
      conn = myDriver.connect("jdbc:weblogic:oracle", props);
      stmt = conn.createStatement();
   
      String inssql = "insert into buy(empid, name, dept) values (?, ?, ?,?)";
      stmt = conn.prepareStatement(inssql);

      stmt.setString(1, name);
      stmt.setString(2, procuct);   
      stmt.setInt(3, quantity);
      stmt.execute();
    }
    catch (Exception e)
    {
        System.out.println("SQLException was thrown: " + e.getMessage());
    }
    finally //close connections and     {
        try {
          if(stmt != null)
            stmt.close();
          if(conn != null)
            conn.close();
        } catch (SQLException sqle) {
            System.out.println("SQLException was thrown: " + sqle.getMessage());
        }
    }
}
%>

上面的程序模拟网上购物中的一部分,把用户在览器中输入的用户名,购买的物品名U?数量保存到表BUY中。在savebuy()函数中用C实例变量,所以它不是U程安全?因ؓ:E序中的每一条语句都不是原子操作,如name=request.getParameter("name");在执行是会对应多个机器指?在Q何时候都可能因系l调度而{入睡眠状?让其他的U程l箋执行.如果U程A在执行到(1)的时候{入睡眠状?U程B开始执行ƈ改变QUANTITY的?那么当又到A执行?它会从调用savebuy()函数开始执行,q样它保存到表中的QUANTITY是被U程B改过的?那么U程A对应的用h实际购买的数量与保持到表中的数据不一?q是个很严重的问?

三、解x?/P>

  1. 采用单线E方?
    在该JSP文g中加? <%@ page isThreadSafe="false" %>,使它以单U程方式执行,q时Q仍然只有一个实例,所有客L的请求以串行?式执行。这样会降低pȝ的性能.
  2. 对函数savebuy()加synchronizedq行U程同步,该JSP仍然以多U程方式执行Q但也会降低pȝ的性能
    public synchronized void savebuy()
    {
           ......
    }
  3. 采用局部变量代替实例变?函数savebuy()声明如下:
    因ؓ在savebuy()中用的是传l他的Ş?是在堆栈中分配的,所以是U程安全?
    public void savebuy(String name,String product, int quantity)
    {
          ......
    }

    调用方式改ؓ:
    <%
    String name
    String product;
    long quantity;

    name=request.getParameter("name");
    product=request.getParameter("product");
    quantity=request.getParameter("quantity");
    savebuy(name,product,quantity)
    %>

    如果savebuy的参数很?或这些数据要在很多地方用?也可声明一个类,q用他做参数,?

    public class buyinfo
    {
          String name;
          String product;
          long quantity;
    }

    public void savebuy(buyinfo info)
    {
          ......
    }

    调用方式改ؓ:
    <%
    buyinfo userbuy = new buyinfo();

    userbuy.name=request.getParameter("name");
    userbuy.product=request.getParameter("product");
    userbuy.quantity=request.getParameter("quantity");
    savebuy(userbuy);
    %>

所以最好是?,因ؓ1,2会降低系l的性能.
多线E问题一般只有在在大q发量访问时Q才有可能出玎ͼq且很难重复出现Q所以应在编E时时L意?



badboy 2006-03-02 14:22 发表评论
]]>
改善Java Servletq行性能http://www.tkk7.com/badboy/articles/33196.htmlbadboybadboyThu, 02 Mar 2006 06:02:00 GMThttp://www.tkk7.com/badboy/articles/33196.htmlhttp://www.tkk7.com/badboy/comments/33196.htmlhttp://www.tkk7.com/badboy/articles/33196.html#Feedback0http://www.tkk7.com/badboy/comments/commentRss/33196.htmlhttp://www.tkk7.com/badboy/services/trackbacks/33196.html   q是个老生常谈的问题,但是在写servlet的时候,很多人在输出htmlӞ
q样?BR>String a = "<html> ";
String b = "</html>";
String c = a + b;
应该使用StringBufferQ?BR>String a = "<html> ";
String b = "</html>";
StringBuffer sb = new StringBuffer(a);
sb.append(b);
String c = sb.toString();
最好用StringBuffer的带参数构造来代替默认的构造函敎ͼ因ؓStringBuffer的append()Ҏq回
一个StringBuffer实例Q最好的写法是这P
StringBuffer sb = new StringBuffer(256);
StringBuffer sb = new StringBuffer();
sb.append("<html> ").append("</html>");
2.不要使用StringTokenizer
  例如解析字符?BR>  import java.util.StringTokenizer;
public class TestStringTokenizer
{
public static void main(String[] args)
{
String s = "a,b,c,d";
StringTokenizer st = new StringTokenizer(s, ",");
while (st.hasMoreTokens())
{
String token = st.nextToken();
System.out.println(token);
}
}
}
可以使用String.indexOf()完成相同的功?BR>public class TestIndexOf
{
public static void main(String[] args)
{
String s = "a,b,c,d";
int begin = 0;
int end = s.indexOf(",");
while (true)
{
String token = null;
if (end == -1)
{
token = s.substring(begin);
}
else
{
token = s.substring(begin, end);
}
System.out.println(token);
// End if there are no more delimiters
if (end == -1) break;
begin = end + 1;
end = s.indexOf(",", begin);
}
}
}
3.一般不要log输出
   一般不要用System.out.println()作ؓ日志输出Q最好用log4j,更易于打开和关闭输?BR>     if(logger.isDebugEnabled()){
            logger.debug("logging method handleRequestInternal()....");
        }
4.避免不必要同?BR>   servlet容器是个多线E的pȝQjava的关键字synchronized.避免某些情况的程序死锁,但是性能实大大的降低了?BR>除非特别必要Q否则不要用synchronized?BR>5.量使用PreparedStatement
多次使用相同的查询语句,PreparedStatement的效率很高,而且避免了sql注入?BR>6.量使用q接?BR>使用q接池,可以减少建立q接的时_而且可以减轻数据库的q接压力?BR>7.大量的用cache
对于l常查询相同数据的网站程序,使用cache是优化的不二法门Qoscache是个廉h的方案?BR>8.优化servlet容器
  关闭容器的loggingQ加大他的File read cache sizeQ加大容器的U程敎ͼ止servlet的重新加载?BR>9.优化jvmQ加大heap的初始化字节敎ͼ降低虚拟机的垃圾回收频率Q?BR>

badboy 2006-03-02 14:02 发表评论
]]>
面试试题http://www.tkk7.com/badboy/articles/33192.htmlbadboybadboyThu, 02 Mar 2006 05:56:00 GMThttp://www.tkk7.com/badboy/articles/33192.htmlhttp://www.tkk7.com/badboy/comments/33192.htmlhttp://www.tkk7.com/badboy/articles/33192.html#Feedback0http://www.tkk7.com/badboy/comments/commentRss/33192.htmlhttp://www.tkk7.com/badboy/services/trackbacks/33192.html很快毕业了Q之前去q面试两家公叔R考到一些javaQlinuxQSQLQ智力等的题目,今天惛_个ȝ把网上找到的面试题目整合一下,方便偶以后面试所用,也当复习一下基?br />java基础题:

1、作用域public,private,protected,以及不写时的区别
{:区别如下Q?
作用?当前c?同一package 子孙c?其他package
public ????
protected ???×
friendly ??× ×
private ?× × ×
不写旉认ؓfriendly

2、ArrayList和Vector的区?HashMap和Hashtable的区?/font>
{:ArrayList与Vector主要从二斚w来说.
一.同步?Vector是线E安全的Q也是说是同步的,而ArrayList是线E序不安全的Q不是同步的
?数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一?
HashMap与HashTable主要从三斚w来说?
一.历史原因:Hashtable是基于陈旧的DictionarycȝQHashMap是Java 1.2引进的Map接口的一个实?
?同步?Hashtable是线E安全的Q也是说是同步的,而HashMap是线E序不安全的Q不是同步的
?|只有HashMap可以让你空gZ个表的条目的key或value

3、char型变量中能不能存贮一个中文汉?Z?
{:是能够定义成Z个中文的Q因为java中以unicode~码Q一个char?6个字节,所以放一个中文是没问题的

4、多U程有几U实现方?都是什?同步有几U实现方?都是什?
{:多线E有两种实现ҎQ分别是l承ThreadcM实现Runnable接口
同步的实现方面有两种Q分别是synchronized,wait与notify

5、承时候类的执行顺序问?一般都是选择?问你会打印Z?
{?父类Q?
package test;
public class FatherClass
{
public FatherClass()
{
System.out.println("FatherClass Create");
}
}
子类:
package test;
import test.FatherClass;
public class ChildClass extends FatherClass
{
public ChildClass()
{
System.out.println("ChildClass Create");
}
public static void main(String[] args)
{
FatherClass fc = new FatherClass();
ChildClass cc = new ChildClass();
}
}
输出l果Q?
C:\>java test.ChildClass
FatherClass Create
FatherClass Create
ChildClass Create

6、内部类的实现方?
{:CZ代码如下Q?
package test;
public class OuterClass
{
private class InterClass
{
public InterClass()
{
System.out.println("InterClass Create");
}
}
public OuterClass()
{
InterClass ic = new InterClass();
System.out.println("OuterClass Create");
}
public static void main(String[] args)
{
OuterClass oc = new OuterClass();
}
}
输出l果:
C:\>java test/OuterClass
InterClass Create
OuterClass Create
再一个例题:
public class OuterClass {
private double d1 = 1.0;
//insert code here
}
You need to insert an inner class declaration at line 3. Which two inner class declarations are

valid?(Choose two.)
A. class InnerOne{
public static double methoda() {return d1;}
}
B. public class InnerOne{
static double methoda() {return d1;}
}
C. private class InnerOne{
double methoda() {return d1;}
}
D. static class InnerOne{
protected double methoda() {return d1;}
}
E. abstract class InnerOne{
public abstract double methoda();
}
说明如下Q?
一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员??A、B ?
?静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错?

?D ?
?非静态内部类的非静态成员可以访问外部类的非静态变量??C 正确
?{案为C、E

7、垃圑֛收机?如何优化E序?
希望大家补上Q谢?

8、float型float f=3.4是否正确?
{?不正。精度不准确,应该用强制类型{换,如下所C:float f=(float)3.4

9、介lJAVA中的Collection FrameWork(包括如何写自q数据l构)?
{:Collection FrameWork如下Q?
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一个Collection代表一lObjectQ即Collection的元素(ElementsQ?
Map提供key到value的映?

10、Java中异常处理机Ӟ事g机制Q?/font>

11、JAVA中的多Ş与承?
希望大家补上Q谢?

12、抽象类与接口?
{:抽象cM接口都用于抽象,但是抽象c?JAVA?可以有自q部分实现Q而接口则完全是一个标?同时有多重承的功能)?

13、Java 的通信~程Q编E题(或问{?Q用JAVA SOCKET~程Q读服务器几个字W,再写入本地显C?/font>Q?
{?Server端程?
package test;
import java.net.*;
import java.io.*;

public class Server
{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Server()
{
try
{
ss=new ServerSocket(10000);
while(true)
{
socket = ss.accept();
String RemoteIP = socket.getInetAddress().getHostAddress();
String RemotePort = ":"+socket.getLocalPort();
System.out.println("A client come in!IP:"+RemoteIP+RemotePort);
in = new BufferedReader(new

InputStreamReader(socket.getInputStream()));
String line = in.readLine();
System.out.println("Cleint send is :" + line);
out = new PrintWriter(socket.getOutputStream(),true);
out.println("Your Message Received!");
out.close();
in.close();
socket.close();
}
}catch (IOException e)
{
out.println("wrong");
}
}
public static void main(String[] args)
{
new Server();
}
};
Client端程?
package test;
import java.io.*;
import java.net.*;

public class Client
{
Socket socket;
BufferedReader in;
PrintWriter out;
public Client()
{
try
{
System.out.println("Try to Connect to 127.0.0.1:10000");
socket = new Socket("127.0.0.1",10000);
System.out.println("The Server Connected!");
System.out.println("Please enter some Character:");
BufferedReader line = new BufferedReader(new

InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(),true);
out.println(line.readLine());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());
out.close();
in.close();
socket.close();
}catch(IOException e)
{
out.println("Wrong");
}
}
public static void main(String[] args)
{
new Client();
}
};

14、用JAVA实现一U排序,JAVAcd现序列化的方?二种)Q?如在COLLECTION框架中,实现比较要实C么样的接口?
{?用插入法q行排序代码如下
package test;
import java.util.*;
class InsertSort
{
ArrayList al;
public InsertSort(int num,int mod)
{
al = new ArrayList(num);
Random rand = new Random();
System.out.println("The ArrayList Sort Before:");
for (int i=0;i<num ;i++ )
{
al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));
System.out.println("al["+i+"]="+al.get(i));
}
}
public void SortIt()
{
Integer tempInt;
int MaxSize=1;
for(int i=1;i<al.size();i++)
{
tempInt = (Integer)al.remove(i);
if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())
{
al.add(MaxSize,tempInt);
MaxSize++;
System.out.println(al.toString());
} else {
for (int j=0;j<MaxSize ;j++ )
{
if

(((Integer)al.get(j)).intValue()>=tempInt.intValue())
{
al.add(j,tempInt);
MaxSize++;
System.out.println(al.toString());
break;
}
}
}
}
System.out.println("The ArrayList Sort After:");
for(int i=0;i<al.size();i++)
{
System.out.println("al["+i+"]="+al.get(i));
}
}
public static void main(String[] args)
{
InsertSort is = new InsertSort(10,100);
is.SortIt();
}
}
JAVAcd现序例化的方法是实现java.io.Serializable接口
Collection框架中实现比较要实现Comparable 接口?Comparator 接口

15、编E:~写一个截取字W串的函敎ͼ输入Z个字W串和字节数Q输Zؓ按字节截取的字符丌Ӏ?但是要保证汉字不被截半个Q如“我ABC?Q应该截为“我AB”,输入“我ABC汉DEF”,6Q应该输Zؓ“我ABC”而不是“我ABC+汉的半个”?/font>
{:代码如下Q?
package test;

class SplitString
{
String SplitStr;
int SplitByte;
public SplitString(String str,int bytes)
{
SplitStr=str;
SplitByte=bytes;
System.out.println("The String is:?+SplitStr+"?SplitBytes="+SplitByte);
}
public void SplitIt()
{
int loopCount;

loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split

Byte+1);
System.out.println("Will Split into "+loopCount);
for (int i=1;i<=loopCount ;i++ )
{
if (i==loopCount){

System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
} else {

System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));

Jsp斚w

1、jsp有哪些内|对?作用分别是什?
{?JSP共有以下9U基本内|组Ӟ可与ASP?U内部组件相对应Q:
 request 用户端请求,此请求会包含来自GET/POSTh的参?
response |页传回用户端的回应
pageContext |页的属性是在这里管?
session 与请求有关的会话?
application servlet 正在执行的内?
out 用来传送回应的输出
config servlet的构枉?
page JSP|页本n
exception 针对错误|页Q未捕捉的例?

2、jsp有哪些动?作用分别是什?
{?JSP共有以下6U基本动?
jsp:includeQ在面被请求的时候引入一个文件?
jsp:useBeanQ寻找或者实例化一?font color="#000000">JavaBean
?
jsp:setPropertyQ设|JavaBean的属性?
jsp:getPropertyQ输出某个JavaBean的属性?
jsp:forwardQ把h转到一个新的页面?
jsp:pluginQ根据浏览器cd为Java插g生成OBJECT或EMBED标记

3、JSP中动态INCLUDE与静态INCLUDE的区别?
{:动态INCLUDE用jsp:include动作实现
<jsp:include page="included.jsp" flush="true" />它L会检查所含文件中的变化,适合用于包含动态页面,q且可以带参?
静态INCLUDE用include伪码实现,定不会检查所含文件的变化Q适用于包含静态页?
<%@ include file="included.htm" %>

4、两U蟩转方式分别是什?有什么区?
{:有两U,分别为:
<jsp:include page="included.jsp" flush="true">
<jsp:forward page= "nextpage.jsp"/>
前者页面不会{向include所指的面Q只是显C늚l果Q主面q是原来的页面。执行完后还会回来,相当于函数调用。ƈ且可以带参数.后者完全{向新面Q不会再回来。相当于go to 语句?

Servlet斚w 

1、说一说Servlet的生命周? 
{?servlet有良好的生存期的定义Q包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroyҎ表达。?br />
2、Servlet版本?忘了问的是哪两个版本?的不? 
希望大家补上Q谢谢?br />
3、JAVA SERVLET API中forward() 与redirect()的区别? 
{?前者仅是容器中控制权的转向Q在客户端浏览器地址栏中不会昄{向后的地址Q后者则是完全的跌{Q浏览器会得到跌{的地址Qƈ重新发送请求链接。这P从浏览器的地址栏中可以看到跌{后的链接地址。所以,前者更加高效,在前者可以满需要时Q尽量用forward()ҎQƈ且,q样也有助于隐藏实际的链接。在有些情况下,比如Q需要蟩转到一个其它服务器上的资源Q则必须使用sendRedirect()Ҏ。?br />
4、Servlet的基本架?/font> 
public class ServletName extends HttpServlet { 
public void doPost(HttpServletRequest request, HttpServletResponse response) throws 
ServletException, IOException { 

public void doGet(HttpServletRequest request, HttpServletResponse response) throws 
ServletException, IOException { 



Xml斚w

1、xml有哪些解析技?区别是什?
{?有DOM,SAX,STAX{?
DOM:处理大型文g时其性能下降的非常厉実뀂这个问题是由DOM的树l构所造成的,q种l构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随问SAX:不现于DOM,SAX是事仉动型的XML解析方式。它序dXML文gQ不需要一ơ全部装载整个文件。当遇到像文件开_文档l束Q或者标{ּ头与标签l束Ӟ它会触发一个事Ӟ用户通过在其回调事g中写入处理代码来处理XML文gQ适合对XML的顺序访?
STAX:Streaming API for XML (StAX)

2、你在项目中用到了xml技术的哪些斚w?如何实现?
{?用到了数据存贮,信息配置两方面。在做数据交换^台时Q将不能数据源的数据l装成XML文gQ然后将XML文g压羃打包加密后通过|络传送给接收者,接收解密与解压羃后再同XML文g中还原相关信息进行处理。在做Y仉|时Q利用XML可以很方便的q行QY件的各种配置参数都存贮在XML文g中?

设计模式斚w

1、开发中都用C那些设计模式?用在什么场?
{:每个模式都描qC一个在我们的环境中不断出现的问题,然后描述了该问题的解x案的核心。通过q种方式Q你可以无数ơ地使用那些已有的解x案,无需在重复相同的工作。主要用CMVC的设计模式。用来开发JSP/Servlet或者J2EE的相兛_用。简单工厂模式等?

2、UML斚w 有哪五种图视 
{:标准建模语言UML。用例图,静态图(包括cd、对象图和包?,行ؓ?交互?序?合作?,实现?

JavaScript斚w

1、如何校验数字型?
var re=/^\d{1,8}$|\.\d{1,2}$/;
var str=document.form1.all(i).value;
var r=str.match(re);
if (r==null)
{
sign=-4;
break;
}
else{
document.form1.all(i).value=parseFloat(str);
}

LINUX斚w

1、LINUX下线E,GDIcȝ解释?/font>
{:LINUX实现的就是基于核心轻量q程?一对一"U程模型Q一个线E实体对应一个核心轻量q程Q而线E之间的理在核外函数库中实现?
GDIcMؓ囑փ讑֤~程接口cd?br />
变态试题集

1。变态指?4
int x=4;
System.out.println("value is " +((x>4)?99.9:9));
{案 9.0 问号表达式的后面两个条g有要?因ؓ前面的是float,所以后面{为float.
估计出题者才通过SCJP的考试?/font>
2.变态指?5
public class Test {

public static void main(String[] args) {
int x = 4;
java.util.Date date = (x > 4) ? new A() : new B();
}
}

class A extends java.util.Date {}
class B extends java.util.Date {}
{案 ~译不通过,
不知道出题h的意?/font>
3.变态指?6
String s=new String("abc");
创徏了几个String对象Q?br />{案 2?
q样的公司最好不要去

4.变态指?7
const是不是java的关键字Q?br />{案 const是java的关键字,但是java没有实现?
一般hl对用不到它

5.变态指?8
Qshort s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
{案 1?对,1因ؓ向上转型?最后导致类型不匚w错误 ,
因ؓs1?=是一个操作符Q能够自动{?
short s1 = 1;
s1 = s1+1;q句话在c++里面可以?
不知道出题h的意?/font>
6.变态指?9
上v贝尔的面试题:你认为效率最高的Ҏ,实现?加到100.
{案 1-100的篏加相当于?0?01Q这样@环次C100ơ降?0ơ:
int sun = 0
for(int i = 1,j = 100 ; i <= 50 ; i++,j--){
    sun = sun + i + j;

出题子有问题,直接(1+100)*50不是最?..其实cMq样的优化应该不是程序员考虑的范畴吧
7.变态指?10
 System.out.println(5.0942*1000);
     System.out.println(5.0943*1000);
  System.out.println(5.0944*1000);的结?br />{案 :5094.2 5094.299999999999 5094.400000000001
原理和QҎ的计机表示方式有关 ,你不用上?q对了,你最好去微Y,接替安d森.



badboy 2006-03-02 13:56 发表评论
]]>
string和stringbuffer区别http://www.tkk7.com/badboy/articles/33190.htmlbadboybadboyThu, 02 Mar 2006 05:54:00 GMThttp://www.tkk7.com/badboy/articles/33190.htmlhttp://www.tkk7.com/badboy/comments/33190.htmlhttp://www.tkk7.com/badboy/articles/33190.html#Feedback0http://www.tkk7.com/badboy/comments/commentRss/33190.htmlhttp://www.tkk7.com/badboy/services/trackbacks/33190.html

 q是好友面试的一道题Q其实我知道使用的区别,StringBuffer必须new出来QStringBuffer的append的效率比string?=的效率高Q?BR>其实发现q有很大的区别,看了看以前scjp的考题
public class Test {
   public static void stringReplace (String text) {
   text = text.replace('j' , 'i');
   }
  
   public static void bufferReplace (StringBuffer text) {
   text = text.append("C");
   }
  
    public static void main (String args[]) {
    String textString = new String ("java");
    StringBuffer textBuffer = new StringBuffer ("java");
   
    stringReplace (textString);
    bufferReplace (textBuffer);
   
    System.out.println (textString + textBuffer);
    }
    }
{案?javajavaC
q是Java参数传?by value)造成?是不可变?immutable).,例如 基本cdQString传|复制了g递过去;可变的(ObjectQ传|复制了引用传递过厅R?

而题目中W七行text = text.append (“C?QappendҎ会改变text中的?BR>而这个text与main中的textBuffer是指向同一个对象,所以对应的输出是javac?BR>string的值永q不会改变!


String a = "a";//假设a指向地址0x0001Q?BR>a = "b";//重新负值后a指向地址0x0002Q但0x0001地址中保存的"a"依旧存在Q但已经不再是a所指向的?BR>从表面上看Stringcd的对象改变了|但事实是他不能改变|只能改变指向的地址


StringBuffer则不同,直接改变指向的地址中保留的?BR>q有
StringBuffer s1 = new StringBuffer("a");
StringBuffer s2 = new StringBuffer("a");
s1.equals(s2)//Z么是false

String s1 = new String("a");
String s2 = new String("a");
s1.equals(s2)//Z么是true
StringBuffercM没有重新定义equalsq个ҎQ因此这个方法就来自Objectc,
而ObjectcM的equalsҎ是用来比较地址的,所以等于false.

StringcM重新定义了equalsq个ҎQ而且比较的是|而不是地址。所以会?BR>true?BR>对于q样能不能面试出真正的水qI感到怀疑?/P>

badboy 2006-03-02 13:54 发表评论
]]>
վ֩ģ壺 þþƷ7777| ޾ƷþþþYW| ޻ɫߵӰ| һAVٸӰ| ĻþƷƵ| ߹ۿAVƬ| AV뾫Ʒ鶹| ˬִֻ̼վ| Ʒһ | ޾ƷƷۺ| һëƬaѲɫ| | avһas | һĻ| AVĻ| ˳˵Ӱ| AVר| ձ߹ۿ1| ŮͰˬ30| ޾þþþþ| һëƬȫ| AVһAS| ƻ԰Ѹ| һ߹ۿ | ¶ۺ| 91ƷѲ| ޹Ʒlv| 츾ӰƬ| Ůվ91ɫ| һ| һ˿www߸ѿ| ůůձ| ޹Դ | ޾ƷҹVAþó| Ʒþ8xѹۿ| Ů˻Ů| ޹һ| վɫƵѿ½| ƷۺרƬþþ| 99re6ƵƷѹۿ| þŮcc98cm|