BaiduクラウドJavaの募集を並べて個人的な要約(記事の最後に並べてメモを学習)
1.まず、プロジェクトの部分、質問はより詳細です。この部分には参照値がないため、無視してください。
2.オブジェクトに同期された複数のメソッドがある場合、オブジェクトにはいくつかのロックがあります
オブジェクトロックは、クラスのオブジェクトに追加されるロックであり、同期されるメソッドの数に関係なく、1つしかありません。
これらの同期方法はすべてロックを共有します.1つのスレッドがオブジェクトロックを取得している限り、他のスレッドはオブジェクトの同期方法にアクセスできません。
3.NIOとAIOの違いとそれぞれの役割
Java NIO:同期ノンブロッキング。サーバー実装モードはスレッドごとに1つの要求です。つまり、クライアントから送信された接続要求はマルチプレクサに登録され、I / O要求が接続に対してポーリングされるとマルチプレクサが起動します。処理用の1つのスレッド。
Java AIO(NIO.2): 非同期で非ブロッキング。サーバー実装モードは1つのスレッドに対する有効な要求であり、クライアントのI / O要求は最初にOSによって完了され、次にサーバーアプリケーションに処理のためにスレッドを開始するように通知されます。
NIO方式は、チャットサーバーなど、接続数が多く接続が短い(軽い操作)アーキテクチャに適しています。
AIO方式は、アルバムサーバーなど、接続数が多く接続数が長い(重い操作)アーキテクチャで使用されます。
4.IOCの実現原理
SpringのIOC実装原理は、ファクトリモードとリフレクションメカニズムです。素人の用語では、オブジェクトは指定されたクラス名に従って動的に生成されます(文字列モード)。このプログラミングメソッドを使用すると、オブジェクトが生成されたときに決定できます。オブジェクトの種類。
ファクトリモードの昇華としてのIOCコンテナの動作モードについては、IOCコンテナをファクトリと見なすことができます。このファクトリで生成されるオブジェクトは、構成ファイルで定義され、プログラミング言語によって提供されるリフレクションメカニズムが使用されます。構成ファイルで指定されたクラス名は、対応するオブジェクトを生成します。
Springは、プロパティ(セッターメソッド)インジェクション、コンストラクションインジェクション、インターフェイスインジェクションの3つの依存関係インジェクションメソッドをサポートしています。
5.リフレクションの原理
リフレクションは、最初にJavaでリフレクションクラスのバイトコードを取得できるようにすることです。次に、バイトコード内のメソッド、変数、およびコンストラクターを、対応するメソッド、ファイル、コンストラクターなどにマップします。
6.データベースチューニングのアイデア。
1)遅いクエリを開始してキャプチャします2)説明+遅いsql分析3)mysqlサーバーでのsqlの実行の詳細とライフサイクルをプロファイルクエリに表示します4)sqlデータベースサーバーのパラメータ調整
7.未解決の質問、システムQPSを改善する方法。
この問題は、おおまかに次の側面に基づいていると思います。1)スタンドアロンバージョンは同時実行に耐えることができますが、システムを分割して別のマシンにデプロイできます。2)メッセージキューを使用してピークをカットします。瞬間的なトラフィックが原因でシステムがハングアップすることはありません。また、電流制限やサービスの低下と組み合わせて使用できます。3)キャッシュにはredisなどを使用します。4)データベースサブデータベースサブテーブル、適切なインデックスを確立します。
Baiduクラウドjavaは2つの側面と個人的な要約を募集しています
まず第一に、それはプロジェクトです。質問はより詳細です。インタビュアーが条件を変更して、この機能を今すぐ実装する必要があるかどうかを尋ねる場合がありますが、どのように実装しますか?いくつかのミドルウェアと基本原則も中央に散在します。
1. redisはどのように分散ロックを実行しますか?
最初にsetnxを使用してロックを競合させ、次にexpireを使用してロックに有効期限を追加し、プログラムのクラッシュによってロックが解放されないようにします。最後のスレッド操作が終了すると、分散ロックが解放されます。
2. Redisはどのように分散ロックを実行できますか?
Redisはシングルプロセスおよびシングルスレッドモードであり、キューモードを使用して同時アクセスをシリアルアクセスに変換し、Redis接続について複数のクライアント間で競合することはありません。
3. JUCで使用される主なものは何ですか?
CountDownLatch、Cyclicbarrier。。。。。などなど。そのコアはAQSです
4.AQSについて教えてください。
AQSは、JUCの多くの同期コンポーネントの構築基盤です。簡単に言うと、内部実装は主に状態変数状態とFIFOキューによって完了します。同期キューのヘッドノードは、同期状態を取得したノードであり、同期状態状態を取得します。失敗したスレッドはノード(または共有または排他)として構築され、同期キューの末尾に追加され(スピンCASを使用して、この操作のスレッドの安全性を確保します)、スレッドがブロックされます。ヘッドノードは解放されると起動されます。後続ノードは、同期状態の競合に参加します。
5. MVCCについて話しますか?データベースチューニングのアイデア?
読み取り送信レベルでは、現在のデータの最新のスナップショットがロックなしでMVCCを介して取得されます。既存の問題:各選択の間に、読み取りおよび送信するデータを更新する他のトランザクションがあり、その後、繰り返し不可能な読み取りが発生します。繰り返し読み取り:MVCCバージョンの生成のタイミング、つまり、バージョンはトランザクションの最初の選択でのみ生成され、後続のクエリはこのバージョンで実行されるため、繰り返し読み取りが可能になります。
1.遅いクエリを開始してキャプチャする
2.explain +遅いsql分析
3.show profileは、mysqlサーバーでのsqlの実行の詳細とライフサイクルを照会します
.sqlデータベースサーバーのパラメーターの調整。
6. Kafkaはメッセージの順序をどのように保証しますか?動物園の飼育係の選挙はどうですか?
Baiduクラウドjavaは3つの側面と個人的な要約を募集しています
プロジェクト構造図を描き、プロジェクトプロセスについて話し、問題のアイデアを解決します
1. redis分散ロックはどのように原子性を保証しますか?
次のコマンドを理解できます。キー値の設定[EX秒] [PXミリ秒] [NX | XX]
2. ThreadLocalを使用しましたか?簡単に?
ThreadLocalは、時空間アプローチを使用して、各スレッドの変数のコピーを提供します。各スレッドは、独自のコピーを個別に変更できます。あなたはオンラインで特定の例を見つけることができます。
3. Java8の後のConcurrentHashMap、セグメントロックの破棄
JDKのソースコードと公式ドキュメントから、セグメントロックを放棄する理由は次のとおりであると彼らは考えています。
1.複数のセグメントロックを追加すると、メモリスペースが無駄になります。
2.実稼働環境では、マップが配置されたときに同じロックをめぐって競合する可能性は非常に低く、セグメント化されたロックは更新などの操作を長時間待機します。
3.GCの効率を改善する。
4.cmsコレクターを紹介します
CMSコレクターは旧世代のコレクターであり、新世代のSerialおよびParNewコレクターと一緒に使用できます。これは、メモリの断片化が発生しやすいマーク除去アルゴリズムを使用します。4つのステップ:1。初期マーキング-「同時マーキング-」リマーキング-「同時除去(初期マーキング、リマーキング)には引き続きSTWが必要です。ただし、最初のマーキングは、GCルートが直接関連付けることができるオブジェクトのみをマークします。これは非常に高速です。再マーキングは、同時マーキング中のユーザープログラムの継続操作によりマーキングが変更されたオブジェクトの部分のマーキング記録を修正するためのもので、通常、初期マーキング段階よりわずかに長くなりますが、同時マーキング時間よりもはるかに短くなります。
5.キャッシュとデータベースの整合性の問題を再実行しますか?
一貫性の問題は主にデータが更新されたときに発生し、通常、更新時にキャッシュを更新するのではなく、キャッシュを削除します。
具体的には?最初にキャッシュを削除してから、データベースに書き込みます。データベースが最初に書き込まれると、それが発生する可能性があるためです。読み取り要求が発生すると、古いデータがキャッシュされ、データの不整合が発生する可能性があります。
6.ダボにはどのような負荷分散戦略がありますか?
1. RandomLoadBalance:重みでランダムに呼び出します。このメソッドはdubboのデフォルトの負荷分散戦略です。2。RoundRobinLoadBalance:ポーリング、規則に従って重みに従ってポーリング比を設定します。3。LeastActiveLoadBalance:アクティブ時間の最小数4.ConsistentHashLoadBalance:一貫したハッシュ5。カスタム負荷分散戦略
7.整合性ハッシュを導入しますか?
マシンのダウンタイムまたは通常のハッシュ用に新しく追加されたマシンの結果について説明します。次に、整合性ハッシュを導入します。ハッシュ値は整数で非負の値です。すべてのハッシュ値は閉じた円を形成します。ハッシュ値はクラスターのノードの特定の属性に対して計算され、ハッシュ値はデータキーをリングに配置することによって計算され、リングにも配置されます。データのハッシュ値は時計回りで、データに最も近いノードを見つけてそのノードに配置します。
8. mysqlのリターンテーブルとカバーインデックスを導入しますか?
簡単に言うと、テーブルに戻るということは、データベースがインデックス(非プライマリキー)に従って指定されたレコードの行を見つけた後、プライマリキーに従ってデータベースからデータを再度取得する必要があることを意味します。インデックスにクエリが必要なすべてのフィールドの値が含まれている(またはカバーしている)場合、それは「カバーインデックス」と呼ばれます。つまり、戻ることなくインデックスをスキャンするだけで済みます
9.サブデータベースとサブテーブルについて話す方法は何ですか?mycatは知っていますか?
10.どのNosqlが使用されたか
11. mapreduceの簡単な紹介?おそらく原則を言った。
12. redisの基本的なデータ構造は何ですか?redisの永続性の設計?
13. redisにはどのようなクラスターソリューションがありますか?
14.私に質問がありますか?
インタビューの概要:
- javaの基本的な知識ポイントは、主にコレクションクラスとマルチスレッドに集中しています。ArrayList、LinkedList、HashSet、HashpMapのデータ結果、拡張方法、およびConcurrentHashMapに関連するマルチスレッドの安全性です。
- JVMメモリ割り当て、いくつかの一般的なガベージコレクションアルゴリズムと原則、および対応するJVM最適化パラメータを覚えておく必要があります。
- ネットワーク:ネットワークプロトコルの習得に重点を置いて、TCPのスリーウェイハンドシェイクおよびその他のネットワークに問い合わせる必要があります。
- Redis:分散キャッシングの主力として、基本的には毎回BATに必須です。焦点は、データ構造、メモリ、アルゴリズム、Redisの永続性、および他のキャッシュとのmemcachedの長所と短所です。
- マルチスレッド:状態フロー、マルチスレッドの実現、高い同時実行性との違いなど。
- Springフレームワークが最も多くを求め、BATは非常に多くを求めます。
- 最後に、分散アーキテクチャの設計
「プログラマーであること、サークルと学習が最も重要です。」サークルを持つことで、回り道を避け、ネットワークを拡大し、思考を拡大し、他の人の経験や学習方法から学ぶことができるからです。同時に、無料で整理されたJavaバックエンドのすべての高度なメモと学習資料を皆さんと共有したいと思います!
データの無料収集:転送後、以下のパブリックアカウントに従って、データの無料収集を取得してください。
Javaバックエンドインタビューの特別文書
Javaバックエンドインタビューでの高頻度の質問のビデオ説明
Java仮想マシン(JVM)とパフォーマンスの最適化
Redis学習体験ノート
MySQL高性能データベース
デザインパターン