209.5.15面接のまとめ

2705 ワード

簡単な電話面接は基礎的ですが、答えはよくないので、まとめてみます。
Java:
1.hashtable、hashmapとconcurrenthashmapの違い(スレッド安全問題、hashtableはどうやって同期を実現しますか?)
1)hashtable:
  • 下の配列+チェーンテーブルが実現され、keyもvalueもnullではなく、スレッドの安全を実現する方法は、データを修正する時にHashTable全体をロックし、効率が低く、ConcerenthashMapが関連した最適化を行った
  • である。
  • 初期サイズは11で、拡大サイズ:newsize=olesize*2+
  • 2)hashmap:
  • 下の配列+チェーンテーブルが実装され、nullキーとnull値が格納され、スレッドが安全ではない
  • 初期sizeは16で、拡大:newsize=oldsize*2、sizeはきっと2のn乗
  • です。
    hashtableはその多くの方法にsynchronizedキーワードを追加しています。
     
    2.hashmapとhashsetの違い
    *ハンshMap*
    *hashSet*
    HashMapはMapインターフェースを実現しました。
    HashSetはSetインターフェースを実現しました。
    HashMapのキーの値を格納します。
    HashSetはオブジェクトのみを記憶します。
    put()の方法でmapに元素を入れます。
    add()の方法を使って要素をsetに入れる。
    HashMapではキーオブジェクトを使ってhashcode値を計算します。
    HashSetは、メンバーオブジェクトを使用してhashcode値を計算し、2つのオブジェクトに対してhashcodeは同じかもしれないので、equals()方法は、オブジェクトの等しい性を判断するために用いられ、2つのオブジェクトが異なるとfalseに戻る。
    HashMapは比較的早いです。唯一のキーを使ってオブジェクトを取得します。
    HashSetはhashMapより遅いです。
    3.arraylistとlinkedlistの違い、複雑さ
  • ArayListは、動的配列に基づくデータ構造を実現するものであり、LinkdListは、双方向リンクベースのデータ構造
  • である。
  • ランダムアクセスの場合、ArayListはLinked Listより優れています。Linked Listはポインタ
  • を移動しますから。
  • は挿入と削除に対して、LinkdListが優勢であり、ArayListはデータを移動します。
  • ArayListとLinked Listは共に非スレッドセキュリティコンテナ
  • である。
    ArayListは、線形テーブル(配列)get()から直接読み取り、いくつかの下位記号、複雑度O(1)add(E)に要素を追加し、直接に後に追加し、複雑度O(1)add(index,E)に要素を追加し、いくつかの要素の後に挿入し、後の要素は後に移動し、複雑度O(n)Remove(削除)します。Linked Listはチェーンテーブルの操作get()を取得し、順次巡回し、複雑度O(n)add(E)を末尾に追加し、複雑度O(1)add(index,E)をいくつかの要素に追加した後、最初にいくつかの要素を検索し、直接ポインタ指向操作、複雑度O(n)Remove()を削除し、直接ポインタ指向操作、複雑度O(1)を指します。
    4.hash衝突と解決方法
    hashcode()の方法は、異なるhash値を生成するためですが、2つのオブジェクトのhashが同じであるときにhash衝突が発生します。
    解決方法:
             ①:オープンアドレス法;
     
             ②:またshの方法。
             ③:ファスナー法
             ④:公共オーバーフローエリア法を確立する;
    5.ワンケースモード
    餓漢モード:
    public class Singleton {
    
        private final static Singleton INSTANCE = new Singleton();
    
        private Singleton(){}
    
        public static Singleton getInstance(){
            return INSTANCE;
        }
    }
    利点:このような書き方は比較的簡単で、クラス搭載時に実用化されるということです。スレッド同期問題を回避した。
    短所:クラスでの実装は、Lazy Loadingの効果を達成していません。この例を最初から最後まで使っていないと、メモリが無駄になります。
    餓漢式は生まれつきスレッドが安全で、直接マルチスレッドに使えます。
    怠け者モード:
    //      .                
    
    public class Singleton { 
    
        private Singleton() {} 
    
        private static Singleton single=null; 
    
        //        
    
        public static Singleton getInstance() { 
    
             if (single == null) {   
    
                 single = new Singleton(); 
    
             }   
    
            return single; 
    
        } 
    
    }
     
    MapReduce:
    1.データの傾きを説明してください。mapreuce段階のデータ傾斜解決方法
    2.mapreuce shuffle段階
    3.二次並べ替え
    4.mapreuceパーティションのデフォルトのパーティション方法