J 2 EE面接問題集錦


一、基礎問答
  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.抽象クラスとインタフェースの違い
(1)インタフェースは多重implements,抽象クラスは単一extendsのみ
(2)インタフェースは定義のみであり,抽象クラスは定義と実装が可能である.
(3)インタフェースのフィールド定義のデフォルトはpublic static final、抽象クラスフィールドのデフォルトはfriendly(このパッケージで表示)
  3.Hashtableの原理、そしてHashMapとHashtableの違いを言います
HashTableの原理:ノードのキーコードによってノードの記憶位置、すなわち所与のノードのキーコードkを決定する、一定の関数関係H(ハッシュ関数)によって関数値H(k)を得、この値をそのノードの記憶アドレスと解釈する.
HashMapはHashtableと似ているが、HashMapは非同期(unsynchronizded)でnullをキーとすることができる.
  4.forwardとredirectの違い
  forward: an internal transfer in servlet
redirect:リダイレクト、2回目のrequest、2回目のrequestは1回目のattributs/parametersなどを失う
  5.Webコンテナとは?
J 2 EE規範におけるwebプロトコルの応用を実現する.このプロトコルは、同時性、セキュリティ、ライフサイクル管理など、Webプログラムの実行環境を定義する.
  6.以下J 2 EEの名詞について説明する
(1)JNDI:Java Naming&Directory Interface,JAVAネーミングディレクトリサービス.主に提供する機能は、ディレクトリシステムを提供し、他の各地のアプリケーションに自分のインデックスを残して、分散アプリケーションの迅速な検索と位置決めの機能を満たすことである.
(2)JMS:Java Message Service,JAVAメッセージサービス.主に各アプリケーション間の通信を実現する.点対点と放送を含む.
(3)JTA:Java Transaction API,JAVAトランザクションサービス.様々な分散トランザクションサービスを提供する.アプリケーションは、提供するインタフェースを呼び出すだけでよい.
(4)JAF:Java Action FrameWork,JAVAセキュリティ認証フレームワーク.安全制御の枠組みを提供する.開発者に各種の配置とカスタマイズを通じて自分の個性的な安全制御戦略を実現させる.
(5)RMI:Remote Method Interface,リモートメソッド呼び出し
  7.EJBはどのような技術に基づいて実現されていますか?SessionBeanとEntityBeanの違い、StatefulBeanとStatelessBeanの違いを話します.
EJBは、Session Bean、Entity Bean、Message Driven Beanを含む、JNDI、RMI、JAT等の技術に基づいて実現される.
SessionBeanは、J 2 EEアプリケーションにおいて、データベースへのアクセス、他のEJBコンポーネントの呼び出しなど、サーバ側の業務を行うために使用する.EntityBeanは、アプリケーションシステムで用いるデータを表すために用いる.クライアントの場合、SessionBeanはサーバ上で実行されるビジネスロジックの一部を実現する非永続的なオブジェクトです.EntityBeanは、永続性メモリに記憶するエンティティのオブジェクトビュー、または既存のエンタープライズアプリケーションによって実現されるエンティティを表す永続性オブジェクトである.
Session Beanは、Stateful Session BeanとStateless Session Beanにさらに細分化することもできる.この2つのセッションBeanは、システムロジックをmethodにおいて実行することができるが、StatefulセッションBeanは、発信者の状態を記録することができるため、通常、1人の利用者に対応するStatefulセッションBeanのエンティティがある.Stateless Session Beanは論理コンポーネントでもあるが、ユーザの状態を記録する責任を負わない.すなわち、ユーザがStateless Session Beanを呼ぶと、EJB Containerは特定のStateless Session Beanのエンティティを探してこのmethodを実行することはない.言い換えれば、複数の利用者が、あるStateless Session Beanのmethodsを実行するときに、同じBeanのInstanceが実行する可能性が高い.メモリの面では、Stateful Session BeanはStateless Session Beanと比較する、Stateful Session BeanはJ 2 EEサーバより多くのメモリを消費するが、Stateful Session Beanの利点は使用者の状態を維持できることにある.
  8.XMLの解析方法
  Sax,DOM,JDOM
  9.Webサービスとは
Webサービスは,従来の孤立したサイト間の情報を相互に通信・共有できるようにするためのインタフェースである.
Webサービスは、HTTP、XML、SOAP(簡易オブジェクトアクセスプロトコル)、WSDLなど、インターネット上で統一されたオープンな標準を使用しているので、Webサービスはこれらの標準をサポートする環境(Windows、Linux)で使用できます.
注意:SOAPプロトコル(Simple Object Access Protocal)は、分散および分散環境でのネットワーク情報交換のためのXMLベースの通信プロトコルです.このプロトコルの下で、ソフトウェアコンポーネントまたはアプリケーションは、標準的なHTTPプロトコルを介して通信することができる.その設計目標は単純性と拡張性であり、多くの異機種プログラムとプラットフォーム間の相互運用性に役立ち、存在するアプリケーションが広範なユーザーにアクセスできるようにすることです.
メリット:
  (1).プラットフォームにまたがる.
  (2).SOAPプロトコルはXMLやHTTPなどの業界標準に基づいており、すべての重要な会社からサポートされています.
  (3).SOAPを使用しているため、データはバイナリではなくASCIIテキストで伝送され、デバッグが便利です.また、このため、データはファイアウォールを通過しやすく、プログラムのためにファイアウォールが単独で「脆弱性」を開く必要はありません.
  (4).また、WebServiceが実現する技術の難易度はCORBAやDCOMよりずっと小さい.
  (5).B 2 B集積を実現するには、EDIが比較的完備し、複雑である.WebServiceでは低コストで実現でき、小さな会社でも利用できます.
  (6).C/Sのプログラムでは、WebServiceは、Webページの全体的なリフレッシュがないサーバとの付き合いを実現し、数を取ることができます.
欠点:
  (1).WebServiceはXMLを使用してデータをカプセル化しており、大量のデータがネットワーク上で転送されます.
  (2).WebService仕様では、オブジェクトモデル、プログラミング言語など、実装に関連する詳細は規定されていません.これはCORBAに及ばないです.
  10.マルチスレッドにはいくつかの実装方法がありますが、何ですか?同期にはいくつかの実現方法がありますが、何ですか?
答:マルチスレッドには、Threadクラスの継承とRunnableインタフェースの実装の2つの実装方法があります.
同期の実装にはsynchronized,wait,notifyの2つがある.
  11.JSPの動的INCLUDEと静的INCLUDEの違いは?
ダイナミックINCLUDE用jsp:include動作実装

動的ページを含めるのに適しており、パラメータ付きで使用できるファイルの変化を常にチェックします.
静的INCLUDEはinclude疑似コードで実現され、必ず含まれているファイルの変化を検査せず、静的ページを含むのに適している.
  <%@ include file="included.htm"%>
二、Javaプログラミングとプログラム実行結果
  1.Javaプログラミング、昨日の現在時刻を印刷
public class YesterdayCurrent{
  public void main(String[] args){
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.DATE, -1);
    System.out.println(cal.getTime());
  }
}
  2.ファイルの読み書き、カウンタの実装
 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(new FileWriter(f,false)));  
            out.write(String.valueOf(i));            // , int , java windows , String
            out.close() ;
        }catch(Exception e){
            e.printStackTrace();
        }
    }
  3. 次のプログラムの実行結果を示します.
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(); // , : 1a2b
 ab = new B(); // , : 1a2bab
    }
}
注:クラスのstaticコードセグメントは、クラスが初めてロード(仮想マシンにロード)して実行するコードと見なすことができますが、クラスのロードについては、まずそのベースクラスの構造を実行し、それ自体の構造を実行します.
  4.Singletonモードの例を書く
public class Singleton{
 private static Singleton single = new Singleton();
 private Singleton(){}
 public Singleton getInstance(){
  return single;
 }
}

三、データベース
  1.テーブルの重複レコードの削除
レコードが完全に同じであれば重複レコードとみなされます:(sql server 2000でテストに合格しました)
select distinct * into #tmpp from tid
delete from tid    
insert into tid select * from #tmpp
drop table #tmpp
idプライマリ・キー(数値、自増1のもの)がある場合:(sql server 2000でテストに合格)
delete from tableA where id not in
(select id = min(id) from tableA group by name)
  2.delete from tablea&truncate table tableaの違い
truncate文は実行速度が速く、リソースが少なく、ページ削除のログのみを記録します.
deleteは各レコードの削除にログを記録する必要があります