Javaの一般的な技術問題(次編)

13007 ワード

1.スレッドを起動するにはrun()ですか、start()ですか.
          start()  ,       ,            ,                 ,run()              。

2.スレッドの基本状態と状態の関係.
1、新規ステータス(New):スレッドオブジェクトが新しく作成されました.2、準備ステータス(Runnable):実行可能ステータスとも呼ばれます.スレッドオブジェクトが作成されると、他のスレッドがそのオブジェクトのstart()メソッドを呼び出します.この状態のスレッドは実行可能スレッドプールにあり,実行可能となり,CPUの使用権の取得を待つ.3、運転状態(Running):レディ状態のスレッドがCPUを取得し、プログラムコードを実行する.4、ブロッキング状態(Blocked):ブロッキング状態はスレッドが何らかの理由でCPUの使用権を放棄し、一時的に運転を停止する.スレッドがレディ状態になるまで、運転状態に移行する機会がある.ブロッキングの場合は3種類に分けられる:1ブロッキング待ち:運転するスレッドがwait()を実行する方法、JVMはこのスレッドを待機プールに入れます.②同期ブロック:実行中のスレッドは、オブジェクトの同期ロックを取得する際に、その同期ロックが別のスレッドによって占有されると、JVMはそのスレッドをロックプールに入れる.③その他のブロック:実行しているスレッドがsleep()またはjoin()メソッドを実行したり、I/Oリクエストが発行された場合、JVMはそのスレッドをブロック状態にします.sleep()ステータスがタイムアウトし、join()がスレッドの終了またはタイムアウトを待つか、I/O処理が完了すると、スレッドは再び準備完了ステータスに移行します.5、死亡状態(Dead):スレッドが実行済みまたは異常によりrun()メソッドを終了し、このスレッドはライフサイクルを終了する.
3.SetとListの違い、ListとMapの違いは?
1、Setは無秩序で、要素は繰り返してはいけない.Listは秩序化されており、要素は繰り返すことができる.2、Listは単一のオブジェクトの集合(秩序ある)を格納し、Mapはキー値対がオブジェクトの集合(無秩序な)を格納する.
4.同期方法、同期コードブロックの違い
1.同期方法はsynchronizedキーワード修飾の方法である.Javaの各オブジェクトには組み込みロックがあるため、このキーワードでメソッドを修飾すると、組み込みロックはメソッド全体を保護します.このメソッドを呼び出す前に、組み込みロックを取得する必要があります.そうしないと、ブロックされます.2.同期コードブロックはsynchronizedキーワード修飾文ブロックである.このキーワードで修飾された文ブロックには、自動的に内蔵ロックが付加され、同期が実現されます.
5.Javaロックメカニズムについて説明します.
java            ,  java               ,    java      ,            ,           。                             ,      synchronized         ,                       ,        synchronized          。                            。

6.ComparableとComparatorインタフェースは何をしていますか?違いをリスト
                       。
Comparable     ,  java.lang  ,       Comparable  ,    compareTo  ,          ,   Collections.sort Arrays.sort              。 
Comparator     ,  java.util  ,                ,          (     Comparable  ),           “      ”     ,  “   ”     Comparator    。	
Comparable   “     ”, Comparator   “     ”。 

7.Javaコレクションクラスフレームワークのベストプラクティスは何ですか?
  Java               ,            ,         Collection Map  ,                       ,                    。
  :
1)         ,       ,      Array   ArrayList。
2)             ,                   ,                       , new ArrayList(30)。
 3)      ,          ,        ,        ClassCastException      。
 4)               ,     Map     ,  Map              ,            ,    List
 5)  JDK        Map               hashCode() equals()  。
 6)              ,     0        ,    null。

8.HashMapとHashtableの違い.
1、HashMapとHashTableはいずれもキー値対データ構造であり、Mapインタフェースを実現し、記憶された要素は無秩序である.2、HashMapはスレッドではなく安全である.HashTableはスレッドで安全である(HashTableの中の方法はSynchronizeキーワードで修飾する)ので、HashMapの効率はHashTableより高い.3、HashMapは空キーの値を許可し、HashTableは許可しない
9.HashSetとTreeSetの違いは何ですか?
同一点:1、単列記憶2、要素重複不可異なる点:1、下位データ構造が異なる(HashSet=ハッシュ表構造TreeSet=ツリー構造)2、データ一意性根拠が異なる(HashSetはhashcodeとequals TreeSetを書き換えることによってcompareableインタフェースを通る)3、有秩序性が異なり、HashSetは無秩序、TreeSetは秩序である
10.ArrayList,Vector,LinkedListの記憶性能と特性を説明する.
1、ArrayListとLinkedList、Vectorは共にListインタフェースを実現した.2、ArrayListとVectorの下位層は配列で実現され、LinkedListは双方向チェーンテーブルで実現され、集合挿入、削除の際、ArrayListは配列要素を移動する必要がある性能が悪い.しかし、クエリの場合、連続する配列であるため、クエリの速度が速い.LinkedListは正反対です.3、容量増加において、ArrayListは元の50%増加し、Vector集合は容量の元の倍増加する.4、安全性の面ではVectorはスレッドの安全を保証できるが、ArrayListよりも効率が低い.
11.Java言語でgotoをどう理解するか.
goto    C    ,goto             ,         ,    ,        。                 goto  ,            ,             。   java   ,goto           ,     ,  java      ,  。

12.Java 5の新しい機能について説明してください.
1、汎用2、For-EAchサイクル3、自動梱包/解体4、列挙5、静的導入6、Annotation(フレーム構成、コード生成マイル7、可変パラメータ8、文字列フォーマット(java.util.Formatter)9、新しいスレッドモデルと同時ライブラリThread Frameword
13.Java 6の新しい機能は何ですか.
1、スクリプトエンジンをサポートする新しいフレームワークを導入した2、UIの強化3、WebServiceサポートの強化(JAX-WS 2.0とJAXB 2.0)4、一連の新しいセキュリティ関連の強化5、JDBC 4.06、Compiler API 7、共通のAnnotationsサポート
14.Java 7の新しい機能
1.switchでは文字列を使用できます.List tempList=new ArrayList<>();すなわち、汎用インスタンス化型の自動推定3.配列4とは限らず、構文的に集合をサポートする.環境情報を読み取るためのツールの追加5.Booleanタイプの反転、空のポインタの安全、ビット演算に参加する6.2つのchar間のequals 7.安全な加減乗除8.mapコレクションは同時要求をサポートし、Mapmap={name:“xxx”,age:18}と書くことができる.
15.Java 8の新しい特性は何ですか.
1.Lambda式-Lambdaは関数を一つの方法のパラメータとして、より簡潔な文法で以前の複雑な機能コード2を実現することができる.メソッドリファレンスは非常に有用な構文を提供します.既存のJavaクラスまたはオブジェクトを直接参照できます(インスタンス)のメソッドまたはコンストラクタ.lambdaと組み合わせて使用すると、メソッドリファレンスは言語の構造をよりコンパクトで簡潔にし、冗長コードを減らすことができます.3.インタフェースでdefaultキーワードを使用してデフォルトの実装メソッドを宣言できます.4.Nashornエンジンjjs、クラス依存アナライザjdepsなどの新しいコンパイルツール.5.新しく追加されたStream API(java.util.stream)本格的な関数プログラミングスタイルをJavaに導入します.6.日付と時間の処理を強化します.7.Optionalクラスは空のポインタ異常を解決するために使用されます.8.Java 8は、JVM上で特定のjavascriptアプリケーションを実行できる新しいNashorn javascriptエンジンを提供します.
16.Javaダイナミックエージェントについて説明します.
        java      ,java              jdk         cglib    ,                   ,                         ,             、springAOP                   ,               。                      (               ,         ),                 、          ,    、   ,             ,         。

17.なぜ単例モードを使用するのですか.
1、プログラムを開発する時、クラスの複数のインスタンスを作成(占有空間、性能の問題)、だから単例のモードを使って、この類がただ1つのオブジェクトだけを創建することを保証します;2、普通の単例のモードは通常2種類の形式があります:その構造関数はprivateで、1つの静的な方法が必要で、静的な方法は自分の実例を返します;実行の形式は2種類あって、怠け者式と餓漢式;いわゆる餓漢式は実例を宣言する時直接オブジェクトを初期化しますが、怠け者は空のオブジェクトを宣言し、静的メソッドでオブジェクトをインスタンス化して返します.//構築メソッドはプライベート化され、外部がオブジェクトprivate Test()/現在のクラスで静的オブジェクトを宣言できないようにし、外部が取得オブジェクトprivate static Testを呼び出すように共通の静的メソッドを提供する.public static Test getInstance(){ if(t==null){ t=new Test(); } return t; }
18.Javaでよく使われるソート方法は、Javaを使用してバブルソートを実現します.
                 /    ,Java         , :    ,    ,    ,     ,                       ,                ,      JDK    Arrays.sort  ,          ,     ,         。
        :
import java.util.Arrays;
public class BubbleSort { 
   public static void BubbleSort(int[] arr) {
           int temp;//        
           for(int i=0;i

}
19.Javaでのゴミ回収の目的は何ですか?ごみの回収はいつ行いますか.
Java                     (  GC), c                    ,   Java                     。          ,Java       “   ”   ,         “   ”。               ,          。     ,          ,                     。

20.オブジェクトクローンの実装方法.
           :
1).   Cloneable     Object   clone()  ;  
2).   Serializable  ,                 ,           。  

21.Javaデザインモードはどれらがありますか?
Java  23     ,                      、    ,   ,            ,  spring             ,           :
1.      
2.      (    、    、    )
3.      
4.       
5.     
6.    

22.GCって何?なぜGCがあるのですか?
GC        (gabage collection),                   ,                           ,java GC                              ,java                    。

23.Javaで正規表現をどのようにサポートするか.
Java  String                ,  :matches()、replaceAll()、replaceFirst()、split()。  ,Java    Pattern          ,       API           。

24.JavaとJavaScriptを比較します.
JavaScript   Java                。Java   SUN                    ,      Internet       ; JavaScript   Netscape      ,         Netscape Navigator  ,           Web                    ,      Live Script;  Java      Oak   。

25. Math.round(11.5)はいくらですか?Math.round(-11.5)はいくらですか?
11.5+0.5の後は12で、さらに下に向かって12です.-11.5+0.5後は-11から下へ-11を取ります
26.JDBCがデータベースに接続するには?
JDBC java             ,      :
1、  JDBC    ;  Class.forName(“com.mysql.jdbc.Driver”)
2、          ;    Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/    ”,”root”,”123456”);
3、      sql   Statement PreparedStatement  CallableStatement  
4、  SQL  ;             executeUpdate()à  int           executeQuery()à     ResultSet
5、       ;                       :while(rst.next())
6、    ;                conn.close()

27. Class.forName()メソッドはどのような役割を果たしますか?
             java    ,                   Class  ,         ClassNotFoundException,        。

28.JDBCでの取引方法
                               ,              ,             。
JDBC             ,  JDBC        ,              setAutoCommit(false)       ,            ,       commit()      ,         rollback()      。
        ,                ,         ,  。 

29.JDBCがBlobとClobを処理できるか
Blob        (Binary Large Object), Clob       (Character Large Objec),    Blob               , Clob              。JDBC PreparedStatement ResultSet            Blob Clob  。

30.JDBCにおけるPreparedStatementの方がStatementのメリット
1、PreparedStatementはStatementのサブインタフェースである.2、PreparedStatementはSQL文の中でプレースホルダを使用することをサポートし、SQL注入を避けることができ、安全性がより良い.3、PreparedStatementはSQL文に対して事前にコンパイルする機能があるので、性能がもっと良い.
31.メモリ内のスタック、スタック、および静的領域の使用方法を説明する.
                 ,                       ;   new                 ;       (literal)      100、”hello”           。
              ,              ,                                         。
String str = new String("hello");
        str    , new              , ”hello”          。

32.GB 2312で符号化された文字列をISO-8859-1で符号化された文字列にどのように変換しますか?
      :
 String s1 = "  ";
 String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");

33.運転時の異常と検査を受けた異常とはどのような違いがありますか.
                     ,                       ,         ,                  。                 ,        ,             。Java                      ,                      。       ,                  , Effective Java                :
-                (     API                       )-               ,
-             -             (                    )
-          
-               -         
-    catch          

34.よくあるランタイム異常をいくつかリストしますか?
ArithmeticException(    )   5/0
ClassCastException (     )
IllegalArgumentException (      )
IndexOutOfBoundsException (      )
NullPointerException (     )
SecurityException (    )
NumberFormatException   (       
Integer.parseInt(“a1b2”))
FileNotFoundException (       )
ClassNotFoundException (      ) 

35.List、Set、MapはCollectionインタフェースから継承されていますか?
List、Set  ,Map   。Map        , List Set      , Set                 (          ),List        ,               。

36.Threadクラスのsleep()メソッドとオブジェクトのwait()メソッドは、スレッドを一時停止させることができますが、どのような違いがありますか?
sleep()  (  )    (Thread)     ,                    ,     (CPU)      ,          ,              。
wait() Object    ,     wait()              (      ),        (wait pool),       notify()  ( notifyAll()  )                 (lock pool),                     。

37.スレッドのsleep()メソッドとyield()メソッドの違いは何ですか?
1 sleep()メソッドは、他のスレッドに実行機会を与える場合、スレッドの優先度を考慮しないため、低優先度のスレッドに実行機会を与える.yield()メソッドは、同じ優先度またはより高い優先度のスレッドに実行する機会を与えるだけです.②スレッドはsleep()メソッドを実行するとブロック状態に移行し、yield()メソッドを実行するとレディ状態に移行する;3 sleep()メソッドはInterruptedExceptionを放出することを宣言し、yield()メソッドは異常を宣言しない;④sleep()メソッドは、yield()メソッド(オペレーティングシステムCPUスケジューリングに関連)よりも移植性が高い.
38.スレッド同期およびスレッドスケジューリングに関する方法を教えてください.
 - wait():         (  )  ,            ;
 - sleep():                ,       ,        InterruptedException  ;
 - notify():             ,           ,                  ,   JVM        ,        ;
 - notityAll():             ,                ,       ,                ;

39.同期および非同期を例示する.
  :       ,      ,            ,      ,          ,              ,    /    。
  :       ,       ,            ,      。
   :      ,       ,      ,                          。       ,           ,          ,             。
 Java          Synchronized         ,                。 

40.Javaでシーケンス化をどのように実現するか、何の意味がありますか?
Java       Serializable  (      ,     ),             。
              ,                           ,                ,             ,            。       writeObject()     ,        readObject()          。

41.クラスのクラスオブジェクトを取得するにはどのような方法がありますか?
  1:  .class,  :String.class
  2:  .getClass(),  :”hello”.getClass()-
  3:Class.forName(),  :Class.forName(“java.lang.String”)

42.反射によるオブジェクトの作成方法
メソッド1:クラスオブジェクトからnewInstance()メソッドを呼び出す、たとえばString.class.NewInstance()-メソッド2:クラスオブジェクトのgetConstructor()またはgetDeclaredConstructor()メソッドでコンストラクタオブジェクトを取得し、newInstance()メソッドを呼び出してオブジェクトを作成します.たとえば、String.class.getConstructor(String.class).newInstance(“Hello”);
43.EnumerationインタフェースとIteratorインタフェースの違いは何ですか.
Enumerationの速度はIteratorの2倍で、メモリの消費量が少なくなります.ただし、IteratorはEnumerationよりはるかに安全です.他のスレッドはiteratorによって遍歴されているセット内のオブジェクトを修正できないからです.また、Iteratorでは、呼び出し元が最下位の集合の要素を削除することは、Enumerationでは不可能です.
44.シリアルコレクターとスループットコレクターの違いは何ですか.
                     ,                  。              (           100M     )    。