亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

J2EE培訓(xùn)

J2EE經(jīng)典面試試題及答案

時(shí)間:2024-09-06 09:27:57 詩琳 J2EE培訓(xùn) 我要投稿
  • 相關(guān)推薦

J2EE經(jīng)典面試試題及答案

  在現(xiàn)實(shí)的學(xué)習(xí)、工作中,我們最少不了的就是試題了,試題可以幫助參考者清楚地認(rèn)識自己的知識掌握程度。什么類型的試題才能有效幫助到我們呢?以下是小編幫大家整理的J2EE經(jīng)典面試試題及答案,供大家參考借鑒,希望可以幫助到有需要的朋友。

J2EE經(jīng)典面試試題及答案

  一、基礎(chǔ)問答

  1.下面哪些類可以被繼承?

  java.lang.Thread (T)

  java.lang.Number (T)

  java.lang.Double (F)

  java.lang.Math (F)

  java.lang.Void (F)

  java.lang.Class (F)

  java.lang.ClassLoader(T)

  2.抽象類和接口的區(qū)別

  (1)接口可以被多重implements,抽象類只能被單一extends

  (2)接口只有定義,抽象類可以有定義和實(shí)現(xiàn)

  (3)接口的字段定義默認(rèn)為:public static final, 抽象類字段默認(rèn)是"friendly"(本包可見)

  3.Hashtable的原理,并說出HashMap與Hashtable的區(qū)別

  HashTable的原理:通過節(jié)點(diǎn)的關(guān)鍵碼確定節(jié)點(diǎn)的存儲位置,即給定節(jié)點(diǎn)的關(guān)鍵碼k,通過一定的函數(shù)關(guān)系H(散列函數(shù)),

  得到函數(shù)值H(k), 將此值解釋為該節(jié)點(diǎn)的存儲地址.

  HashMap與Hashtable很相似,但HashMap是非同步(unsynchronizded)和可以以null為關(guān)鍵碼的.

  4.forward和redirect的區(qū)別

  forward:請求轉(zhuǎn)發(fā),an internal transfer in servlet

  redirect:重定向,有2次request,第2次request將丟失第一次的attributs/parameters等

  5.什么是Web容器?

  實(shí)現(xiàn)J2EE規(guī)范中web協(xié)議的應(yīng)用.該協(xié)議定義了web程序的運(yùn)行時(shí)環(huán)境,包括:并發(fā)性,安全性,生命周期管理等等.

  6.解釋下面關(guān)于J2EE的名詞

  (1)JNDI:Java Naming& Directory Interface,JAVA命名目錄服務(wù).

  主要提供的功能是:提供一個(gè)目錄系統(tǒng),讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應(yīng)用程序的功能.

  (2)JMS:Java Message Service,JAVA消息服務(wù).主要實(shí)現(xiàn)各個(gè)應(yīng)用程序之間的通訊.包括點(diǎn)對點(diǎn)和廣播.

  (3)JTA:Java Transaction API,JAVA事務(wù)服務(wù).提供各種分布式事務(wù)服務(wù).應(yīng)用程序只需調(diào)用其提供的接口即可.

  (4)JAF: Java ActionFrameWork,JAVA安全認(rèn)證框架.提供一些安全控制方面的框架.讓開發(fā)者通過各種部署和自定義實(shí)現(xiàn)自己的個(gè)性安全控制策略.

  (5)RMI:Remote MethodInterface,遠(yuǎn)程方法調(diào)用

  7.EJB是基于哪些技術(shù)實(shí)現(xiàn)的?并說出SessionBean和EntityBean的區(qū)別,StatefulBean和StatelessBean的區(qū)別.

  EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技術(shù)實(shí)現(xiàn).

  SessionBean在J2EE應(yīng)用程序中被用來完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問數(shù)據(jù)庫、調(diào)用其他EJB組件.

  EntityBean被用來代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù).

  對于客戶機(jī),SessionBean是一種非持久性對象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯;

  EntityBean是一種持久性對象,它代表一個(gè)存儲在持久性存儲器中的實(shí)體的對象視圖,或是一個(gè)由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實(shí)體.

  Session Bean 還可以再細(xì)分為 Stateful Session Bean 與 Stateless Session Bean.

  這兩種的Session Bean都可以將系統(tǒng)邏輯放在method之中執(zhí)行,不同的是 StatefulSession Bean可以記錄使用者的狀態(tài)。

  因此通常來說,一個(gè)使用者會有一個(gè)相對應(yīng)的 Stateful Session Bean 的實(shí)體.

  Stateless Session Bean雖然也是邏輯組件,但是他卻不負(fù)責(zé)記錄使用者狀態(tài),

  也就是說當(dāng)使用者呼叫Stateless Session Bean的時(shí)候,EJBContainer并不會找尋特定的 StatelessSession Bean的實(shí)體來執(zhí)行這個(gè)method.

  換言之,很可能數(shù)個(gè)使用者在執(zhí)行某個(gè) Stateless Session Bean的methods時(shí),會是同一個(gè)Bean的Instance在執(zhí)行.

  從內(nèi)存方面來看,Stateful Session Bean與StatelessSession Bean比較,Stateful Session Bean會消耗J2EE Server較多的內(nèi)存,

  然而Stateful Session Bean 的優(yōu)勢卻在于他可以維持使用者的狀態(tài).

  8.XML的解析方法

  StAX, SAX, DOM

  9.什么是Web Service?

  Web Service就是為了使原來各孤立的站點(diǎn)之間的信息能夠相互通信、共享而提出的一種接口。

  Web Service所使用的是Internet上統(tǒng)一、開放的標(biāo)準(zhǔn),如HTTP、XML、SOAP(簡單對象訪問協(xié)議)、WSDL等,

  所以Web Service可以在任何支持這些標(biāo)準(zhǔn)的環(huán)境(Windows,Linux)中使用。

  注:SOAP協(xié)議(Simple Object Access Protocal,簡單對象訪問協(xié)議)

  它是一個(gè)用于分散和分布式環(huán)境下網(wǎng)絡(luò)信息交換的基于XML的通訊協(xié)議。

  在此協(xié)議下,軟件組件或應(yīng)用程序能夠通過標(biāo)準(zhǔn)的HTTP協(xié)議進(jìn)行通訊。

  它的設(shè)計(jì)目標(biāo)就是簡單性和擴(kuò)展性,這有助于大量異構(gòu)程序和平臺之間的互操作性,從而使存在的應(yīng)用程序能夠被廣泛的用戶訪問。

  優(yōu)勢:

  (1)跨平臺。

  (2)SOAP協(xié)議是基于XML和HTTP這些業(yè)界的標(biāo)準(zhǔn)的,得到了所有的重要公司的支持。

  (3)由于使用了SOAP,數(shù)據(jù)是以ASCII文本的方式而非二進(jìn)制傳輸,調(diào)試很方便;

  并且由于這樣,它的數(shù)據(jù)容易通過防火墻,不需要防火墻為了程序而單獨(dú)開一個(gè)“漏洞”。

  (4)此外,WebService實(shí)現(xiàn)的技術(shù)難度要比CORBA和DCOM小得多。

  (5)要實(shí)現(xiàn)B2B集成,EDI比較完善與比較復(fù)雜;而用WebService則可以低成本的實(shí)現(xiàn),小公司也可以用上。

  (6)在C/S的程序中,WebService可以實(shí)現(xiàn)網(wǎng)頁無整體刷新的與服務(wù)器打交道并取數(shù)。

  缺點(diǎn):

  (1)WebService使用了XML對數(shù)據(jù)封裝,會造成大量的數(shù)據(jù)要在網(wǎng)絡(luò)中傳輸。

  (2)WebService規(guī)范沒有規(guī)定任何與實(shí)現(xiàn)相關(guān)的細(xì)節(jié),包括對象模型、編程語言,這一點(diǎn),它不如CORBA。

  10.多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?

  答:多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口

  同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify

  11.JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?

  動態(tài)INCLUDE用jsp:include動作實(shí)現(xiàn)

  它總是會檢查所含文件中的變化,適合用于包含動態(tài)頁面,并且可以帶參數(shù)

  靜態(tài)INCLUDE用include偽碼實(shí)現(xiàn),不會檢查所含文件的變化,適用于包含靜態(tài)頁面

 。%@ includefile="included.htm" %>

  二、Java編程與程序運(yùn)行結(jié)果

  1.Java編程,打印昨天的當(dāng)前時(shí)刻

  public class YesterdayCurrent{

  public void main(String[] args){

  Calendar cal = Calendar.getInstance();

  cal.add(Calendar.DATE, -1);

  System.out.println(cal.getTime());

  }

  }

  2.文件讀寫,實(shí)現(xiàn)一個(gè)計(jì)數(shù)器

  public int getNum(){

  int i = -1;

  try{

  String stri="";

  BufferedReader in = new BufferedReader(new FileReader(f));

  while((stri=in.readLine())!=null){

  i =Integer.parseInt(stri.trim());

  }

  in.close();

  }catch(Exception e){

  e.printStackTrace();

  }

  return i;

  }

  public void setNum(){

  int i = getNum();

  i++;

  try{

  PrintWriter out=new PrintWriter(new BufferedWriter(newFileWriter(f,false)));

  out.write(String.valueOf(i));//可能是編碼的原因,如果直接寫入int的話,將出現(xiàn)java編碼和windows編碼的混亂,因此此處寫入的是String

  out.close() ;

  }catch(Exception e){

  e.printStackTrace();

  }

  }

  3. 指出下面程序的運(yùn)行結(jié)果:

  class A{

  static{

  System.out.print("1");

  }

  public A(){

  System.out.print("2");

  }

  }

  class B extends A{

  static{

  System.out.print("a");

  }

  public B(){

  System.out.print("b");

  }

  }

  public class Hello{

  public static void main(String[] ars){

  A ab = new B(); //執(zhí)行到此處,結(jié)果: 1a2b

  ab= new B(); //執(zhí)行到此處,結(jié)果: 1a2b2b

  }

  }

  注:類的static 代碼段,可以看作是類首次加載(被虛擬機(jī)加載)執(zhí)行的代碼,而對于類的加載,首先要執(zhí)行其基類的構(gòu)造,再執(zhí)行其本身的構(gòu)造

  4.寫一個(gè)Singleton模式的例子

  public class Singleton{

  privatestatic Singleton single = new Singleton();

  privateSingleton(){}

  publicSingleton getInstance(){

  return single;

  }

  }

  三、數(shù)據(jù)庫

  1.刪除表的重復(fù)記錄

  如果記錄完全相同才算重復(fù)記錄,那么: (sql server2000下測試通過)

  select distinct * into #tmpp from tid

   from tid

   into tid select * from #tmpp

   #tmpp

  如果有id主鍵(數(shù)字,自增1的那種),那么:(sql server2000下測試通過)

   from tableA where id not in

  (select id = min(id) from tableA group byname)

  2. from tablea& truncate table tablea的區(qū)別

  truncate 語句執(zhí)行速度快,占資源少,并且只記錄頁刪除的日志;

   對每條記錄的刪除均需要記錄日志

  JAVA編程題

  1.現(xiàn)在輸入n個(gè)數(shù)字,以逗號,分開;然后可選擇升或者降序排序;按提交鍵就在另一頁面顯示按什么排序,結(jié)果為,提供reset

  import java.util.*;

  public class bycomma{

  public static String[] splitStringByComma(String source){

  if(source==null||source.trim().equals(""))

  return null;

  StringTokenizer commaToker = newStringTokenizer(source,",");

  String[] result = newString[commaToker.countTokens()];

  int i=0;

  while(commaToker.hasMoreTokens()){

  result[i] =commaToker.nextToken();

  i++;

  }

  return result;

  }

  public static void main(String args[]){

  String[]s = splitStringByComma("5,8,7,4,3,9,1");

  int[]ii = new int[s.length];

  for(inti = 0;i

  ii[i]=Integer.parseInt(s[i]);

  }

  Arrays.sort(ii);

  //asc

  for(int i=0;i

  System.out.println(ii[i]);

  }

  //desc

  for(inti=(s.length-1);i>=0;i--){

  System.out.println(ii[i]);

  }

  }

  }

  2.金額轉(zhuǎn)換,阿拉伯?dāng)?shù)字的金額轉(zhuǎn)換成中國傳統(tǒng)的形式如:(¥1011)->(一千零一拾一元整)輸出。

  package test.format;

  import java.text.NumberFormat;

  import java.util.HashMap;

  public class SimpleMoneyFormat {

  public static final String EMPTY = "";

  public static final String ZERO = "零";

  public static final String ONE = "壹";

  public static final String TWO = "貳";

  public static final String THREE = "叁";

  public static final String FOUR = "肆";

  public static final String FIVE = "伍";

  public static final String SIX = "陸";

  public static final String SEVEN = "柒";

  public static final String EIGHT = "捌";

  public static final String NINE = "玖";

  public static final String TEN = "拾";

  public static final String HUNDRED = "佰";

  public static final String THOUSAND = "仟";

  public static final String TEN_THOUSAND = "萬";

  public static final String HUNDRED_MILLION = "億";

  public static final String YUAN = "元";

  public static final String JIAO = "角";

  public static final String FEN = "分";

  public static final String DOT = ".";

  private static SimpleMoneyFormat formatter = null;

  private HashMap chineseNumberMap = new HashMap();

  private HashMap chineseMoneyPattern = new HashMap();

  private NumberFormat numberFormat = NumberFormat.getInstance();

  private SimpleMoneyFormat() {

  numberFormat.setMaximumFractionDigits(4);

  numberFormat.setMinimumFractionDigits(2);

  numberFormat.setGroupingUsed(false);

  chineseNumberMap.put("0", ZERO);

  chineseNumberMap.put("1", ONE);

  chineseNumberMap.put("2", TWO);

  chineseNumberMap.put("3", THREE);

  chineseNumberMap.put("4", FOUR);

  chineseNumberMap.put("5", FIVE);

  chineseNumberMap.put("6", SIX);

  chineseNumberMap.put("7", SEVEN);

  chineseNumberMap.put("8", EIGHT);

  chineseNumberMap.put("9", NINE);

  chineseNumberMap.put(DOT, DOT);

  chineseMoneyPattern.put("1", TEN);

  chineseMoneyPattern.put("2", HUNDRED);

  chineseMoneyPattern.put("3", THOUSAND);

  chineseMoneyPattern.put("4", TEN_THOUSAND);

  chineseMoneyPattern.put("5", TEN);

  chineseMoneyPattern.put("6", HUNDRED);

  chineseMoneyPattern.put("7", THOUSAND);

  chineseMoneyPattern.put("8", HUNDRED_MILLION);

  }

  public static SimpleMoneyFormat getInstance() {

  if (formatter == null)

  formatter = new SimpleMoneyFormat();

  return formatter;

  }

  public String format(String moneyStr) {

  checkPrecision(moneyStr);

  String result;

  result = convertToChineseNumber(moneyStr);

  result = addUnitsToChineseMoneyString(result);

  return result;

  }

  public String format(double moneyDouble) {

  return format(numberFormat.format(moneyDouble));

  }

  public String format(int moneyInt) {

  return format(numberFormat.format(moneyInt));

  }

  publicString format(long moneyLong) {

  return format(numberFormat.format(moneyLong));

  }

  public String format(Number moneyNum) {

  return format(numberFormat.format(moneyNum));

  }

  private String convertToChineseNumber(String moneyStr) {

  String result;

  StringBuffer cMoneyStringBuffer = new StringBuffer();

  for (int i = 0; i < moneyStr.length(); i++) {

  cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i, i +1)));

  }

  //拾佰仟萬億等都是漢字里面才有的單位,加上它們

  int indexOfDot = cMoneyStringBuffer.indexOf(DOT);

  int moneyPatternCursor = 1;

  for (int i = indexOfDot - 1; i > 0; i--) {

  cMoneyStringBuffer.(i, chineseMoneyPattern.get(EMPTY +moneyPatternCursor));

  moneyPatternCursor = moneyPatternCursor == 8 ? 1 : moneyPatternCursor +1;

  }

  String fractionPart =cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf("."));

  cMoneyStringBuffer.(cMoneyStringBuffer.indexOf("."),cMoneyStringBuffer.length());

  while (cMoneyStringBuffer.indexOf("零拾") != -1) {

  cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"),cMoneyStringBuffer.indexOf("零拾") + 2, ZERO);

  }

  while (cMoneyStringBuffer.indexOf("零佰") != -1) {

  cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零佰"),cMoneyStringBuffer.indexOf("零佰") + 2, ZERO);

  }

  while (cMoneyStringBuffer.indexOf("零仟") != -1) {

  cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"),cMoneyStringBuffer.indexOf("零仟") + 2, ZERO);

  }

  while (cMoneyStringBuffer.indexOf("零萬") != -1) {

  cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零萬"),cMoneyStringBuffer.indexOf("零萬") + 2, TEN_THOUSAND);

  }

  while (cMoneyStringBuffer.indexOf("零億") != -1) {

  cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零億"),cMoneyStringBuffer.indexOf("零億") + 2, HUNDRED_MILLION);

  }

  while (cMoneyStringBuffer.indexOf("零零") != -1) {

  cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零零"),cMoneyStringBuffer.indexOf("零零") + 2, ZERO);

  }

  if (cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length()- 1)

  cMoneyStringBuffer.(cMoneyStringBuffer.length() -1,cMoneyStringBuffer.length());

  cMoneyStringBuffer.append(fractionPart);

  result = cMoneyStringBuffer.toString();

  return result;

  }

  private String addUnitsToChineseMoneyString(String moneyStr) {

  String result;

  StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr);

  int indexOfDot = cMoneyStringBuffer.indexOf(DOT);

  cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN);

  }

  }

  ====================================

  6.

  class Something {

  int i;

  public void doSomething() {

  System.out.println("i = " + i);

  }

  }

  有什么錯(cuò)呢? 看不出來啊。

  答案: 正確。輸出的是"i = 0"。int i屬於instant variable (實(shí)例變量,或叫成員變量)。

  instant variable有default value。int的default value是0。

  7.

  class Something {

  final int i;

  public void doSomething() {

  System.out.println("i = " + i);

  }

  }

  和上面一題只有一個(gè)地方不同,就是多了一個(gè)final。這難道就錯(cuò)了嗎?

  答案: 錯(cuò)。final int i是個(gè)final的instant variable (實(shí)例變量,或叫成員變量)。

  final的instant variable沒有default value,必須在constructor (構(gòu)造器)結(jié)束之前被賦予一個(gè)明確的值。

  可以修改為"final int i =0;"。

  8.

  public class Something {

  public static void main(String[] args) {

  Something s = new Something();

  System.out.println("s.doSomething() returns " +doSomething());

  }

  public String doSomething() {

  return "Do something ...";

  }

  }

  看上去很完美。

  答案: 錯(cuò)。看上去在main里call doSomething沒有什么問題,畢竟兩個(gè)methods都在同一個(gè)class里。

  但仔細(xì)看,main是static的。static method不能直接call non-static methods。

  可改成"System.out.println("s.doSomething()returns " + s.doSomething());"。

  同理,static method不能訪問non-static instant variable。//這句話不知道什么意思,linwf@20110124

  9.

  此處,Something類的文件名叫OtherThing.java

  class Something {

  private static void main(String[] something_to_do) {

  System.out.println("Do something ...");

  }

  }

  這個(gè)好像很明顯。

  答案: 正確。從來沒有人說過Java的Class名字必須和其文件名相同。但public class的名字必須和文件名相同。

  10.

  interfaceA{

  int x = 0;

  }

  class B{

  int x =1;

  }

  class C extends B implements A {

  public void pX(){

  System.out.println(x);

  }

  public static void main(String[] args) {

  new C().pX();

  }

  }

  答案:錯(cuò)誤。在編譯時(shí)會發(fā)生錯(cuò)誤

  錯(cuò)誤描述:不同的JVM有不同的信息,意思就是未明確的x調(diào)用,兩個(gè)x都匹配

 。ň拖笤谕瑫r(shí)import java.util和java.sql兩個(gè)包時(shí)直接聲明Date一樣)。

  對于父類的變量,可以用super.x來明確,而接口的屬性默認(rèn)隱含為public static final.所以可以通過A.x來明確。

  11.

  interface Playable {

  void play();

  }

  interface Bounceable {

  void play();

  }

  interface Rollable extends Playable,Bounceable {

  Ball ball = new Ball("PingPang");

  }

  class Ball implements Rollable {

  private String name;

  public String getName() {

  return name;

  }

  public Ball(String name) {

  this.name = name;

  }

  public void play() {

  ball = new Ball("Football");

  System.out.println(ball.getName());

  }

  }

  這個(gè)錯(cuò)誤不容易發(fā)現(xiàn)。

  答案: 錯(cuò)。"interface Rollable extends Playable, Bounceable"沒有問題。

  interface可繼承多個(gè)interfaces,所以這里沒錯(cuò)。問題出在interfaceRollable里的"Ball ball = newBall("PingPang");"。

  任何在interface里聲明的interface variable(接口變量,也可稱成員變量),默認(rèn)為public static final。

  也就是說"Ball ball =new Ball("PingPang");"實(shí)際上是"public static final Ball ball = newBall("PingPang");"。

  在Ball類的Play()方法中,"ball = newBall("Football");"改變了ball的reference,

  而這里的ball來自Rollable interface,Rollableinterface里的ball是public static final的,final的object是不能被改變r(jià)eference的。

  因此編譯器將在"ball = newBall("Football");"這里顯示有錯(cuò)。

【J2EE經(jīng)典面試試題及答案】相關(guān)文章:

電子技術(shù)面試試題及答案04-03

2023年電工面試題及答案02-07

質(zhì)量工程師面試試題及答案06-16

2024年c++經(jīng)典面試題及答案04-26

2017年中醫(yī)面試試題及答案02-26

photoshop試題「附答案」01-09

管理溝通試題及答案02-08

excel試題2023「附答案」09-12

情商測試題及答案02-03

iq測試題及答案08-07