ホームページ >Java >&#&チュートリアル >Java の面接での質問 (仕事を探すときに必ず読んでください)
個人的な参考資料の要約です。類似点はまったくの偶然です。
1. ハッシュマップの実装原理とハッシュテーブルのスレッドセーフはどのように実装されていますか?
HashMapは実際には線形配列として実装されているため、データを格納するコンテナは線形配列であることがわかります。
まず、静的内部クラス Entry を HashMap に実装します。その重要な属性はキー、値、次に属性のキーと値から、Entry が HashMap のキーと値のペアの実装の基本 Bean であることがわかります。 HashMap の基本は線形配列であり、この配列は Entry[] であり、Map の内容は Entry[] に格納されます。
HashTable コンテナはスレッドの安全性を確保するために synchronized を使用しますが、スレッドの競争が激しい場合、HashTable の効率は非常に低くなります。スレッドが HashTable の同期メソッドにアクセスすると、他のスレッドが HashTable の同期メソッドにアクセスするときにブロック状態またはポーリング状態になる可能性があるためです。 ConcurrentHashMap で使用されるロック セグメンテーション テクノロジは、まずデータをストレージ用のセグメントに分割し、次にデータの各セグメントにロックを割り当てます。スレッドがデータの 1 つのセグメントにアクセスするためにロックを占有すると、他のセグメントのデータにもアクセスできます。他のセグメントによるアクセス。
2. ハッシュマップの put() と get() の実装原理は何ですか? 最初のキーと値のペア A が入力され、そのキーのハッシュを計算して得られたインデックス = 0 が Entry[0] = A として記録されます。しばらくすると、別のキーと値のペア B が入ってきます。計算により、そのインデックスは 0 に等しくなります。どうすればよいでしょうか。 HashMap はこれを実行します: B.next = A, Entry[0] = B。C が再び入力されると、インデックスも 0 に等しく、このようにして C.next = B, Entry[0] = C が見つかります。 Index = 0 の場所 実際には、3 つのキーと値のペア A、B、および C がアクセスされ、それらは次の属性を通じてリンクされます。ご質問があってもご心配なく。つまり、最後に挿入された要素が配列に格納されます。
get() は最初に位置を特定し、次に走査します。
3. 春インゲン豆のライフサイクル? Spring では、singleton 属性はデフォルトで true ですが、false に設定されている場合に限り、エイリアスによって取得された Bean が指定されるたびに新しいインスタンスが生成されます。
3.1: Bean の作成: コンテナは Bean の定義情報を検索し、インスタンス化します。
3.2: 属性の注入。
3.3: BeanNameAware
3.4: BeanFactoryAware の setBeanFactory()
3.5: BeanPostProcessors の ProcessBeforeInitialization()
3.6: Bean の afterPropertiesSet() を初期化する:
3.7: Bean 定義ファイルで init-method を定義する:
3.8: AfterInitialization() の処理
DisposableBean の destroy()、destroy-メソッドは Bean 定義ファイルで定義されています
4. Spring はどのようにトランザクションを管理しますか? Spring トランザクションは Spring AOP の実装であると言えます。リフレクションと動的プロキシ。
5. サービス層は単一のインスタンスですか、それとも複数のインスタンスですか?スレッドは安全ですか?複数のインスタンスを実行したい場合はどうすればよいでしょうか? Spring によって生成されるオブジェクトは、デフォルトではシングルトンです。これは、scope 属性を通じて複数のインスタンスに変更できます。
PROPAGATION_REQUIRED トランザクションが存在する場合、現在のトランザクションがサポートされます。トランザクションがない場合に有効にする PROPAGATION_SUPPORTS トランザクションがある場合、現在のトランザクションをサポートします。トランザクションが存在しない場合、非トランザクション実行
PROPAGATION_MANDATORY トランザクションが既に存在する場合、現在のトランザクションをサポートします。アクティブなトランザクションがない場合は、例外がスローされます。
PROPAGATION_REQUIRES_NEW は常に新しいトランザクションを開始します。トランザクションがすでに存在する場合、既存のトランザクションは一時停止されます。
PROPAGATION_NOT_SUPPORTED 常に非トランザクションで実行し、既存のトランザクションを一時停止します。
PROPAGATION_NEVER は常に非トランザクションで実行され、アクティブなトランザクションが存在する場合は例外がスローされます。
PROPAGATION_NESTED アクティブなトランザクションが存在する場合は、ネストされたトランザクションで実行されます。アクティブなトランザクションが存在しない場合、
は TransactionDefinition に従って実行されます。 PROPAGATION_REQUIRED プロパティ
デフォルトでは、
PROPAGATION_REQUIRED
を使用します
①シリアライズ可能:ダーティリード、ノンリピータブルリード、ファントムリードの発生を回避できます。
② リピータブルリード:ダーティリードやノンリピータブルリードの発生を回避できます。
③ Read commit: これにより、ダーティリードの発生を回避できます。
④ Read uncommitted (read uncommitted): 最も低いレベルで、いかなる状況でも保証はありません。
一般データベースのデフォルト レベルは読み取りコミットです。
MySQL のデフォルトの分離レベルは反復読み取りです。
MySQL データベースの現在のトランザクションの分離レベルを表示します:
select @@tx_isolation;
MySQL データベースのトランザクションの分離レベルを設定します:
set [glogal session] トランザクション分離レベル分離レベル名;
set tx_isolation='分離レベル名;'
注意: データベースの分離レベルはトランザクションを開始する前に設定する必要があります。
7. Arraylist はどのようにしてスレッド セーフを実現しますか?
このスレッド セーフティの問題を解決するには、次のように Collections.synchronizedList() を使用できます。
List
最初の方法:
Windows ではファイル /bin/catalina.bat に、Unix ではファイル /bin/catalina.sh の前に次の設定を追加します。
JAVA_OPTS ='-Xms [初期化メモリサイズ] -Xmx [使用できる最大メモリ]' これら2つのパラメータの値を増やす必要があります。例: JAVA_OPTS='-Xms256m -Xmx512m' 初期メモリが256MBで、使用できる最大メモリが512MBであることを意味します。 2つ目の方法:環境変数に設定する 変数名:JAVA_OPTS 変数値:-Xms512m -Xmx512m3つ目の方法:最初の2つの方法はbinディレクトリにcatalina.batがある場合(直接解凍したものなど) Tomcat など)、インストールされている Tomcat の一部のバージョンには catalina.bat がありません。もちろん、この方法は最も一般的な方法でもあります: tomcatHome//bin//tomcat5w を開きます。 exe で [Java] タブをクリックすると、[初期メモリ プール] と [最大メモリ プール] の 2 つの項目があることがわかりました。[初期メモリ プール] は、初期化されたメモリのサイズです。最大メモリ プールは最大メモリ サイズです。設定後、OK を押して TOMCAT を再起動すると、Tomcat の jvm に使用できるメモリが変更されたことがわかります
catalina.bat の @echo off の下に追加します (2 行目)。
JAVA_OPTS=-server -Xms512m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=256m
lServlet インターフェース SUN Company は、GenericServlet と HttpServlet という 2 つのデフォルト実装クラスを定義しています。 GET リクエストの場合は、HttpServlet の doGet メソッドを呼び出します。Post リクエストの場合は、doPost メソッドを呼び出します。したがって、開発者がサーブレットを作成するときは、通常、サービス メソッドを上書きするのではなく、doGet メソッドまたは doPost メソッドをオーバーライドするだけで済みます
以上がJava の面接での質問 (仕事を探すときに必ず読んでください)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。