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.ワンケースモード
餓漢モード:
短所:クラスでの実装は、Lazy Loadingの効果を達成していません。この例を最初から最後まで使っていないと、メモリが無駄になります。
餓漢式は生まれつきスレッドが安全で、直接マルチスレッドに使えます。
怠け者モード:
MapReduce:
1.データの傾きを説明してください。mapreuce段階のデータ傾斜解決方法
2.mapreuce shuffle段階
3.二次並べ替え
4.mapreuceパーティションのデフォルトのパーティション方法
Java:
1.hashtable、hashmapとconcurrenthashmapの違い(スレッド安全問題、hashtableはどうやって同期を実現しますか?)
1)hashtable:
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は、線形テーブル(配列)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パーティションのデフォルトのパーティション方法