天涯【鈍】刀客

          設計模式/uml/隨想/雜談...
          posts - 1, comments - 2, trackbacks - 0, articles - 5

          java面試題之二(非原創)

          Posted on 2008-03-18 10:20 天涯【鈍】刀客 閱讀(110) 評論(0)  編輯  收藏 所屬分類: java技術
          1、作用域public,private,protected,以及不寫時的區別
          答:區別如下:
          作用域           當前類       同一package  子孫類       其他package
          public            √                     √                  √              √
          protected        √                    √                  √               ×
          friendly          √                    √                   ×             ×
          private           √                     ×                   ×             ×
          不寫時默認為friendly

          2、ArrayList和Vector的區別,HashMap和Hashtable的區別
          答:就ArrayList與Vector主要從二方面來說.
          一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
          二.數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半
          就HashMap與HashTable主要從三方面來說。
          一.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現
          二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
          三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value

          3、char型變量中能不能存貯一個中文漢字?為什么?
          答:是能夠定義成為一個中文的,因為java中以unicode編碼,一個char占16個字節,所以放一個中文是沒問題的

          4、多線程有幾種實現方法,都是什么?同步有幾種實現方法,都是什么?
          答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口
          同步的實現方面有兩種,分別是synchronized,wait與notify

          5、繼承時候類的執行順序問題,一般都是選擇題,問你將會打印出什么?
          答:如下:父類:
          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();
           }

          }

          輸出結果:
          C:">java test.ChildClass
          FatherClass Create
          FatherClass Create
          ChildClass Create

          6、內部類的實現方式?
          答:示例代碼如下:
          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();
           }

          }

          輸出結果:
          C:">java test/OuterClass
          InterClass Create
          OuterClass Create

          7floatfloat f=3.4是否正確?
          :不正確。精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.4

          8
          、介紹JAVA中的Collection FrameWork(包括如何寫自己的數據結構)? 
          答:Collection FrameWork如下:
          Collection
          ├List
          │├LinkedList
          │├ArrayList
          │└Vector
           └Stack
          └Set
          Map
          ├Hashtable
          ├HashMap
          └WeakHashMap

          9、抽象類與接口?
          答:抽象類與接口都用于抽象,但是抽象類(JAVA)可以有自己的部分實現,而接口則完全是一個標識(同時有多重繼承的功能)

          10Java 的通信編程,編程題(或問答),用JAVA SOCKET編程,讀服務器幾個字符,再寫入本地顯示? 
          :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();
           }

          }
          ;

          11、用JAVA實現一種排序,JAVA類實現序列化的方法(二種) 如在COLLECTION框架中,實現比較要實現什么樣的接口?
          :用插入法進行排序代碼如下:
          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();
           }

          }

          JAVA類實現序例化的方法是實現java.io.Serializable接口
          Collection
          框架中實現比較要實現Comparable 接口和 Comparator 接口

          12、編程:編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串。 但是要保證漢字不被截半個,如ABC”4,應該截為AB”,輸入ABCDEF”6,應該輸出為ABC”而不是ABC+漢的半個 
          答:代碼如下:
          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)));
             }

            }

           }

           
          public static void main(String[] args) 
           
          {
            SplitString ss 
          = new SplitString("test中dd文dsaf中男大3443n中國43中國人

          0ewldfls
          =103",4);
            ss.SplitIt();
           }

          }


          13STRINGSTRINGBUFFER的區別。 
          答:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字符串中的內容經常進行操作,特別是內容要修改時,那么使用StringBuffer,如果最后需要String,那么使用StringBuffertoString()方法

          Jsp方面

          1
          jsp有哪些內置對象?作用分別是什么?
          :JSP共有以下9種基本內置組件(可與ASP6種內部組件相對應): 
           request 用戶端請求,此請求會包含來自GET/POST請求的參數 
             response 
          網頁傳回用戶端的回應 
             pageContext 
          網頁的屬性是在這里管理 
             session 
          與請求有關的會話期 
             application servlet 
          正在執行的內容 
             out 
          用來傳送回應的輸出
             config servlet
          的構架部件 
             page JSP
          網頁本身 
             exception 
          針對錯誤網頁,未捕捉的例外 

          2
          jsp有哪些動作?作用分別是什么?
          :JSP共有以下6種基本動作
             jsp:include
          :在頁面被請求的時候引入一個文件。 
             jsp:useBean
          :尋找或者實例化一個JavaBean 
             jsp:setProperty
          :設置JavaBean的屬性。 
             jsp:getProperty
          :輸出某個JavaBean的屬性。 
             jsp:forward
          :把請求轉到一個新的頁面。 
             jsp:plugin
          :根據瀏覽器類型為Java插件生成OBJECTEMBED標記

          3
          JSP中動態INCLUDE與靜態INCLUDE的區別? 
          答:動態INCLUDEjsp:include動作實現
             <jsp:include page="included.jsp" flush="true" />
          它總是會檢查所含文件中的變化,適合用于包含動態頁面,并且可以帶參數
             
          靜態INCLUDEinclude偽碼實現,定不會檢查所含文件的變化,適用于包含靜態頁面
             <%@ include file="included.htm" %>

          4
          、兩種跳轉方式分別是什么?有什么區別?
          答:有兩種,分別為:
            <jsp:include page="included.jsp" flush="true">
            <jsp:forward page= "nextpage.jsp"/>
            
          前者頁面不會轉向include所指的頁面,只是顯示該頁的結果,主頁面還是原來的頁面。執行完后還會回來,相當于函數調用。并且可以帶參數.后者完全轉向新頁面,不會再回來。相當于go to 語句。

          Servlet
          方面

          1
          、說一說Servlet的生命周期?
          :servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,servicedestroy方法表達。 

          2
          JAVA SERVLET APIforward() redirect()的區別?
          :前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后的地址;后者則是完全的跳轉,瀏覽器將會得到跳轉的地址,并重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,并且,這樣也有助于隱藏實際的鏈接。在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用sendRedirect()方法。 

          3
          Servlet的基本架構
          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  
          {
                }

          }


          JdbcJdo方面

          1
          、可能會讓你寫一段JdbcOracle的程序,并實現數據查詢.
          :程序如下:
          package hello.ant;
          import java.sql.*;
          public class  jdbc
          {
           String dbUrl
          ="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
           String theUser
          ="admin";
           String thePw
          ="manager";
           Connection c
          =null;
           Statement conn;
           ResultSet rs
          =null;
           
          public jdbc() 
           
          {
            
          try{
              Class.forName(
          "oracle.jdbc.driver.OracleDriver").newInstance(); 
                    c 
          = DriverManager.getConnection(dbUrl,theUser,thePw);
              conn
          =c.createStatement();
            }
          catch(Exception e){
             e.printStackTrace();
            }

           }

           
          public boolean executeUpdate(String sql)
           
          {
             
          try
             
          {
               conn.executeUpdate(sql);
               
          return true;
             }

             
          catch (SQLException e)
             
          {
               e.printStackTrace();
               
          return false;
             }

           }

           
          public ResultSet executeQuery(String sql)
           
          {
             rs
          =null;
             
          try
             
          {
               rs
          =conn.executeQuery(sql);
             }

             
          catch (SQLException e)
             
          {
               e.printStackTrace();
             }

             
          return rs;
           }

           
          public void close()
           
          {
             
          try
             
          {
               conn.close();
               c.close();
             }

             
          catch (Exception e)
             
          {
               e.printStackTrace();
             }

           }

           
          public static void main(String[] args)
           
          {
            ResultSet rs;
            jdbc conn 
          = new jdbc();
            rs
          =conn.executeQuery("select * from test");
            
          try{
            
          while (rs.next())
            
          {
             System.out.println(rs.getString(
          "id"));
             System.out.println(rs.getString(
          "name"));
            }

            }
          catch(Exception e)
            
          {
             e.printStackTrace();
            }

           }

          }


          2Class.forName的作用?為什么要用?
          答:調用該訪問返回一個以字符串指定類名的類的對象。

          3
          JDO是什么?
          :JDOJava對象持久化的新的規范,為java data object的簡稱,也是一個用于存取某種數據倉庫中的對象的標準化APIJDO提供了透明的對象存儲,因此對開發人員來說,存儲數據對象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經轉移到JDO產品提供商身上,使開發人員解脫出來,從而集中時間和精力在業務邏輯上。另外,JDO很靈活,因為它可以在任何數據底層上運行。JDBC只是面向關系數據庫(RDBMS)JDO更通用,提供到任何數據底層的存儲功能,比如關系數據庫、文件、XML以及對象數據庫(ODBMS)等等,使得應用可移植性更強。

          xml,EJB方面:
          1
          xml有哪些解析技術?區別是什么?
          :DOM,SAX,STAX
          DOM:
          處理大型文件時其性能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構占用的內存較多,而且DOM必須在解析文件之前把整個文檔裝入內存,適合對XML的隨機訪問SAX:不現于DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結束,或者標簽開頭與標簽結束時,它會觸發一個事件,用戶通過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問

          2.EJBJAVA BEAN的區別? 
          :Java Bean 是可復用的組件,對Java Bean并沒有嚴格的規范,理論上講,任何一個Java類都可以是一個Bean。但通常情況下,由于Java Bean是被容器所創建(如Tomcat)的,所以Java Bean應具有一個無參的構造器,另外,通常Java Bean還要實現Serializable接口用于實現Bean的持久性。Java Bean實際上相當于微軟COM模型中的本地進程內COM組件,它是不能被跨進程訪問的。Enterprise Java Bean 相當于DCOM,即分布式組件。它是基于Java的遠程方法調用(RMI)技術的,所以EJB可以被遠程訪問(跨進程、跨計算機)。但EJB必須被布署在諸如WebspereWebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是通過其容器訪問。EJB容器是EJB組件的代理,EJB組件由容器所創建和管理。客戶通過容器來訪問真正的EJB組件。

          3
          EJB的基本架構
          :一個EJB包括三個部分:
            Remote Interface 
          接口的代碼
            package Beans;
            import javax.ejb.EJBObject;
            import java.rmi.RemoteException;
            public interface Add extends EJBObject
            {
             //some method declare 
            }
            Home Interface 
          接口的代碼
            package Beans;
            import java.rmi.RemoteException;
            import jaax.ejb.CreateException;
            import javax.ejb.EJBHome;
            public interface AddHome extends EJBHome
            {
              //some method declare
            }
            EJB
          類的代碼
            package Beans;
            import java.rmi.RemoteException;
            import javax.ejb.SessionBean;
            import javx.ejb.SessionContext;
            public class AddBean Implements SessionBean
            {
              //some method declare
            }  

          J2EE,MVC
          方面

          1
          MVC的各個部分都有那些技術來實現?如何實現?
          :MVCModelViewController的簡寫。"Model" 代表的是應用的業務邏輯(通過JavaBeanEJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。

          2.J2EE是什么? 
          :Je22Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業級應用模型(enterpriese application model).在這樣的一個應用系統中,可按照功能劃分為不同的組件,這些組件又可在不同計算機上,并且處于相應的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業信息系統(EIS)層。

          3.STRUTS的應用(STRUTS架構)
          答:Struts是采用Java Servlet/JavaServer Pages技術,開發Web應用程序的開放源碼的framework 采用Struts能開發出基于MVC(Model-View-Controller)設計模式的應用構架。 Struts有如下的主要功能: 
          .包含一個controller servlet,能將用戶的請求發送到相應的Action對象。 
          .JSP自由tag庫,并且在controller servlet中提供關聯支持,幫助開發員創建交互式表單應用。 
          .提供了一系列實用對象:XML處理、通過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和消息

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 修武县| 西和县| 新郑市| 普洱| 静乐县| 涞水县| 青冈县| 潼南县| 红河县| 和顺县| 永修县| 齐河县| 定边县| 孟连| 左贡县| 衡阳县| 云霄县| 平陆县| 关岭| 正安县| 广丰县| 通榆县| 平顺县| 莎车县| 嘉鱼县| 通化市| 清水县| 宝清县| 宜宾县| 磴口县| 宜丰县| 三原县| 泉州市| 上林县| 乐东| 罗城| 定西市| 安康市| 平罗县| 且末县| 洱源县|