データベースを操作する場合、同時実行の問題が原因でデータの不整合(データの競合)が発生する可能性があります。といった
データへの同時アクセスの一貫性と有効性を確保する方法は、すべてのデータベースが解決しなければならない問題であり、ロックの競合も問題です。
同時データベースアクセスのパフォーマンスに影響を与える重要な要素、この観点から、ロックはデータベースにとって特に重要です
重要。
MySQLロックの概要
他のデータベースと比較して、MySQLのロックメカニズムは比較的単純であり、その最も注目すべき機能はさまざまなストレージエンジンのサポートです。
さまざまなロックメカニズム。
といった:
MyISAMおよびMEMORYストレージエンジンはテーブルレベルのロックを使用します。
InnoDBストレージエンジンは、行レベルのロックとテーブルレベルのロックの両方をサポートしますが、デフォルトでは
行レベルのロックを使用します。
2つの主要なMySQLロックの特性は、大まかに次のように要約できます。
Ali P8アーキテクトトーク:MySQL行ロック、テーブルロック、ペシミスティックロック、オプティミスティックロックの機能とアプリケーション
テーブルレベルのロック:オーバーヘッドが低く、ロックが高速です。デッドロックはありません(MyISAMはSQLに必要なすべてのロックを一度に取得するため)。
ロックの粒度が大きく、ロックの競合が発生する可能性が最も高く、同時実行性が最も低くなります。
行レベルのロック:オーバーヘッドが高く、ロックが遅い、デッドロックが発生する、ロックの粒度が最小、ロックの競合の可能性が最小、同時実行性の程度
也最高。
ページロック:オーバーヘッドとロック速度はテーブルロックと行ロックの間です。デッドロックが発生します。ロックの粒度はテーブルロックと行ロックの間です。
一般的な同時実行
行ロックとテーブルロック
1.主にロックの粒度に分けられ、一般的には行ロック、テーブルロック、ライブラリロックに分けられます
(1)行ロック:データベースにアクセスすると、同時エラーを防ぐために行データ全体がロックされます。
(2)テーブルロック:データベースにアクセスすると、同時エラーを防ぐためにテーブルデータ全体がロックされます。
2.行ロックとテーブルロックの違い:
テーブルロック:オーバーヘッドが低く、ロックが速く、デッドロックがない;ロック強度が高く、ロックの競合が発生する可能性が高く、同時実行性が最も低い
行ロック:オーバーヘッドが高く、ロックが遅く、デッドロック。ロックの粒度が小さく、ロックの競合の可能性が低く、同時実行性が高い
悲観的なロックと楽観的なロック
(1)ペシミスティックロック:名前が示すように、非常にペシミスティックです。データを取得するたびに、他の人がデータを変更すると思うので、毎回
データを取得するときはロックされるため、このデータを取得したい他のユーザーは、ロックを取得するまでブロックします。
このようなロックメカニズムの多くは、行ロック、テーブルロックなど、読み取りロック、書き込みロックなど、従来のリレーショナルデータベースで使用されます。
操作を行う前にまずロックすることです。
(2)楽観的ロック:名前が示すように、非常に楽観的です。データを取得するたびに、他の人がデータを変更しないと思うので、私はしません
ロックされますが、更新中に他の人がこの期間中にデータを更新したかどうかが判断され、バージョンを使用できます
数およびその他のメカニズム。オプティミスティックロックはマルチリードアプリケーションタイプに適しており、データベースが同様のものを提供する場合のように、スループットを向上させることができます
write_conditionメカニズムは、実際には提供される楽観的なロックです。
(3)悲観的ロックと楽観的ロックの違い:
どちらのタイプのロックにも、それぞれ長所と短所があります。一方が他方より優れているとは見なされません。たとえば、楽観的ロックは、書き込みが少ない状況、つまり競合に適しています。
まれにしか発生しない場合、これによりロックのオーバーヘッドが節約され、システムの全体的なスループットが向上します。しかし、頻繁に
競合が発生した場合、上位のアプリケーションは再試行を続行し、実際にパフォーマンスが低下するため、この場合はペシミスティックロックを使用します
より適切です。
共有ロック
共有ロックとは、複数の異なるトランザクションで同じリソースの同じロックを共有することです。同じドアに相当し、
複数のキーを同じように保持します。このように、あなたの家には門があり、門にはいくつかの鍵があります。あなたには1つ、あなたの娘がいます
友達が持っているので、この鍵で家に入ることができます。これがいわゆる共有ロックです。
さっき言ったように、ペシミスティックロックには一般的なデータベースが実装されており、共有ロックも一種のペシミスティックロックなので、共有ロック
mysqlでそれを呼び出すために使用されるコマンド。情報を照会することで、実行ステートメントの後にロックを追加することでそれを学びました
共有モードとは、一部のリソースに共有ロックを追加することを意味します。
テーブルロックを使用する場合
InnoDBテーブルの場合、トランザクションと行ロックが理由であることが多いため、ほとんどの場合、行レベルのロックを使用する必要があります。
InnoDBテーブルを選択する理由。ただし、個々の特別な問題では、テーブルレベルのロックの使用を検討することもできます。
最初のケースは、トランザクションがほとんどまたはすべてのデータを更新する必要があり、テーブルが比較的大きい場合です。デフォルトの行ロックが使用されている場合、
このトランザクションの実行効率のみが低く、他のトランザクションが長時間待機してロックの競合が発生する可能性があります。この場合は、
トランザクションの実行速度を向上させるために、テーブルロックの使用を検討してください。
2番目の状況は、トランザクションに複数のテーブルが含まれる場合です。これはより複雑で、デッドロックを引き起こし、多数のトランザクションのロールバックを引き起こす可能性があります。このたぐいの
状況は、デッドロックを回避し、トランザクションのロールバックによるデータベースのオープンを減らすために、トランザクションに関係するテーブルの1回限りのロックを考慮することもできます。
ピン。
もちろん、これら2つのトランザクションはアプリケーションで多すぎることはできません。そうでない場合は、MyISAMテーブルの使用を検討する必要があります。
テーブルロックと行ロックのアプリケーションシナリオ:
テーブルレベルのロックは使用されず、同時実行性も高くありません。主にクエリベースのアプリケーションであり、小さなWebアプリケーションなど、更新がほとんどありません。
行レベルのロックは、オンライントランザクション処理システムなど、同時実行性の高い環境で高いトランザクション整合性を必要とするシステムに適しています。
BATテクニカルインタビュースコープ
データ構造とアルゴリズム:最も一般的な種類で、手書きで作成するのが最適です
Javaの高度な機能:JVMメモリ構造、ガベージコレクター、収集アルゴリズム、GC、同時プログラミング関連(複数
スレッド、スレッドプールなど)、NIO / BIO、およびさまざまなコレクションの長所と短所の比較(基礎となるデータ構造も
マスター、特に拡張など)など。
パフォーマンスの最適化、設計パターン、UMLの習得
春のフレームワーク:マスタリングに焦点を当てる(BATは毎回尋ねる必要があります)
分散関連:Redisキャッシュ、一貫性のあるハッシュアルゴリズム、分散ストレージ、負荷分散など。
マイクロサービスやDockerコンテナなど。
アリインタビューサマリー
Aliのインタビューは、特にインタビューの技術原則、特にマルチスレッド、NIO、非同期メッセージングフレームワーク、分散関連のキャッシュアルゴリズムなど、JVMの読み込みプロセスと原則、リサイクルアルゴリズム、および特定の使用されるフレームワークに似ています。いくつかのパラメーターについて質問します。あなたが精通しているかどうかを確認してください
最初の面を通過すると、その後の就職の可能性が高くなります。最初のラウンドは非常に重要です。面接の質問を体系的に検討することをお勧めします。
片側:
- HashMap実現原則、ConcurrentHashMap実現原則
- 赤黒の木、なぜ局所的な不均衡が許されるのか
- TCPとUDPの違い、なぜ信頼性と信頼性が低いのか
- ドメイン名の解決、ホストの検索などを含む、HTTPリクエストのプロセス全体。
- TCPスリーウェイハンドシェイク
- MySQLトランザクションとは何ですか?4つの特性、4つの分離レベル
- ConcurrentHashMapとHashtableの違い
- 春のIOCとAOP、およびそれぞれの利点は何ですか
- 一般的に使用されるスレッドプールは何ですか
- RunnableとThreadがスレッドの作成に使用される状況、RunnableとCallableの違い
- スレッドメソッドで例外を処理する方法、セカンダリスレッドはそれをキャッチできますか
- 同期とロックの違い、同期とReentrantLockを使用する場合
- JVMオブジェクトはどの領域に割り当てられ、Classオブジェクトはどの領域に割り当てられますか
両面:
- 一般的に使用されるデザインパターンの紹介:シングルトンパターン、デコレータパターンなど。
- Javaはオーバーフローしますか?どのような状況で表示されますか?
- 親委任モデル、なぜこれを行うのですか?
- 対象はいつ老年期に入りますか?
- プロセスについてのクイックソートトーク
- AOP実現の原則:動的プロキシ
- BIO、NIO(達成方法)、AIO
- メッセージミドルウェアとは何ですか?それらの間の長所と短所?
- 永続性フレームワーク、Redis
- スタックとキュー
- ゴミ収集アルゴリズム
- MySQLインデックス
- Tomcatクラスローダー
- OOMメモリリーク、どのような状況で、どのようにトラブルシューティングするか
3つの側面:
- 実用的なパフォーマンス最適化の事例と最適化のアイデアを紹介します
- マイクロサービスとSOAの違い、長所と短所
- SQL低速クエリ最適化計画、インデックスおよびテーブル最適化計画。
- MySQLとMongoDBの違い、大量のデータのストレージ
- RedisとMemcachedの違い、長所と短所の比較などのキャッシュフレームワーク
- 一貫性のあるハッシュアルゴリズムについて説明してください
- 分散セッションの共有スキームとは何ですか?長所と短所は何ですか
- 高い同時実行性、システムの最適化スキーム、および優先順位付け。
- インタビュー概要
4つの側面:
- ArrayListとlinkedlistの違い。ArrayListが範囲外になるかどうか。
- ArrayListとハッシュセットの違いは何ですか。ハッシュセットに保存されている番号は順序付けられていますか?
- 揮発性と同期の違い
- 多形性の原理
- データベースエンジンInnodbとmyisamの違い
- Redisデータ構造
- Redisはメモリベースですか?
- Redisのリストzsetの基本的な実装
- httpとhttpsの違い、tcpハンドシェイクプロセス
- jvmガベージコレクションアルゴリズム手書きバブリング
- 手書きのシングルトンにはマルチスレッドが含まれます
- Javaスレッド間の同期を実現する方法、notify()とnotifyAll()の違い
- データベースの悲観的ロックと楽観的ロックのアプリケーションシナリオ。
- ソートアルゴリズムの複雑さ、クイックソートは非再帰的に実装されます。
- 大量データフィルタリング、URLのブラックリストフィルタリング。
5つの側面:
- リストセットマップの基礎となる実装の典型的な実装は何ですか
- ハッシュマップはどのように拡張され、なぜ2の累乗なのですか?
- コンカレントハッシュマップがスレッドセーフである理由と、高い同時実行性に対処するためにどのような対策が取られているか
- スレッドプールパラメータの意味は何ですか
- Springmvcリクエストプロセス
- Spring IOC、自動配線の実装方法
- 春のブーツ
- SpringCloundの基本的なアーキテクチャ設計
- DubboとSpringCloundの違い、長所と短所は何ですか
- 一貫性のあるハッシュアルゴリズムについて話す
6つの側面:
- 分散アーキテクチャ設計のどの側面がよりよく知られているか
- CDN、分散キャッシュとローカルキャッシュの違いについてのあなたの理解について教えてください
- マルチスレッドと高同時実行性の違いは何ですか
- 高並行性の下で一般的に使用される技術的ソリューションは何ですか?3つの高並行性シナリオの設計例を挙げてください
- 実用的な手順や方法など、JVM最適化の実際的な事例について話します
- Dockerを使用して理解しましたか?DockerとJVMの違いは何ですか?
- Dockerの基本的なアーキテクチャと使用シナリオは?
- どのオープンソースフレームワークがロードバランシングにさらされており、長所と短所は何ですか?
- データベースサブデータベースサブテーブルを実装する方法は?
- データベース側の一般的な最適化戦略?
- スパイクシステムの設計を依頼された場合、どのような設計アイデアがあり、なぜこのように設計するのですか?
インタビューの概要:
javaの基本的な知識ポイントは、主にコレクションクラスとマルチスレッドを中心に展開します。ArrayList、LinkedList、HashSet、HashpMapのデータ結果、拡張方法、およびConcurrentHashMap関連のマルチスレッドの安全性です。
JVMメモリ割り当て、いくつかの一般的なガベージコレクションのアルゴリズムと原則、および対応するJVM最適化パラメータを覚えておく必要があります。
ネットワーク:ネットワークプロトコルの習得に重点を置いて、TCPのスリーウェイハンドシェイクおよびその他のネットワークに問い合わせる必要があります。
Redis:分散キャッシングの主力として、基本的には毎回BATをテストする必要があり、データ構造、メモリ、
アルゴリズム、永続性、およびmemcachedおよびその他のキャッシュの長所と短所。
マルチスレッド:状態フロー、マルチスレッドの実現、高い同時実行性との違いなど。
Springフレームワークが最も多くを求め、BATはマスタリングに焦点を合わせて非常に多くを求めます。
最後に、分散アーキテクチャの設計
一般的に使用される分散アーキテクチャ設計ソリューション:シングルサインオン、分散キャッシュ、ストレージ、メッセージ選択、およびデータ
ライブラリ側の最適化計画(事前に知っておく必要があります)。
スパイクのようなプロジェクトについて事前に学ぶことをお勧めします。インタビュアーが同様のプロジェクトについて質問した場合は、設計することができます。
あなたのアイデアを出してください、これはあなたのインタビュー結果にとって大きなプラスです。
片側
1.はじめに
2.最も学んだと思うプロジェクト、使用されているテクノロジー、課題はどこにあるかについて話します。3。SpringBeanの範囲は?(例:シングルトン、プロトタイプなど)
4. SpringはIOCをどのように実装しますか?パラメータなしのコンストラクタをインスタンス化できませんか?パラメータコンストラクタインジェクション?(Xml構成)
5.振り返りを通して、メソッド領域について話し、次にクラスの読み込みメカニズムについて話しましたか?
6.同期の実現原理は?Volatileは原子性を保証できますか?どうして?
7.ハッシュマップとコンカレントハッシュマップのサイズ方式を実現する方法
8. JVMチューニングパラメータ?(-Xmn、-Xmsおよびその他の特定のパラメーター設定)
9.スレッドプールの利点、パラメーター、newSingleThreadPollを実装する場合、どのように構成する必要があり、どの構築方法を渡す必要がありますか?
パラメータ
10. mysqlデッドロックを解決する方法、実行順序が不要な場合、デッドロックを解決する方法
11.iocとaopの原理
12.スレッドの5つの状態?変換プロセス?
13. TCPスリーウェイハンドシェイク、なぜスリーウェイハンドシェイク?
14. JVMメモリパーティション?(メインメモリ、作業メモリ、ヒープ、スタック...)
15.GCについて教えてください。
16.なぜ新旧の世代を使用するのですか?
17.新しい世代が古い世代に入るとどうなりますか?
18.新世代のパーティション?
両面
- メソッドを変更し、スレッドプールに関する多くの知識を求めました(主に対応するパラメーターを調べます)
- javaメモリモデル
- ロックと同期の違い
- 再入国ロックの実装
- ハッシュマップ和concurrenthashmap
- B +ツリーとB-ツリーの違い
- 複合インデックス
- クラスター化インデックスと非クラスター化インデックスの違いは?
- データベースインデックスのプライマリキーと一意のインデックスの違いは何ですか?インデックスの障害状態とインデックスを作成するタイミング
- innDBとMyISAMの違いは?
- スレッドの安全性(ブロッキング同期、非ブロッキング同期、同期なし)
三面
- 主に高い同時実行性と分散アーキテクチャ設計
- サーバーモデルとの違い
- スレッドプールの設計
- スレッドプールの負荷を分散する方法
- スレッドスケジューリングアルゴリズムを実装する方法
- 複合インデックスはどのように実装されていますか?
- シングルサインオンの設計方法、シングルサインオンの原則
- redisキャッシュとmemcachedキャッシュの違い、およびそれらの長所と短所
- 大規模で同時実行性の高いWebサイトのパフォーマンスを最適化する方法:Webパフォーマンス、データベースパフォーマンス、アプリケーションサーバーパフォーマンスなど。
- 実際にMySQLを最適化する方法:SQLステートメントとインデックスの最適化、データベーステーブル構造の最適化、システム構成の最適化、
- ハードウェアの最適化
- サブデータベースサブテーブルと読み取り/書き込み分離を設計する方法
- マイクロサービスアーキテクチャ:dubboとspringcloudの違い、およびそれらに対応する使用シナリオ。
タオバオ側:
インタビュー紹介
1)自己紹介しますか?
2)プロジェクトの紹介?
3)遭遇した最大の困難は何ですか?それを解決する方法は?
4)このプロジェクトをどのように最適化できると思いますか?
面接の質問
1)JVMについて話す
2)JVMの世代別コレクションと特定のアルゴリズムについて話します
3)JVMのガベージコレクターを見ると、G1とCMSの違いは何ですか?
4)変数の生成から終了までのプロセス、および文字列定数のプロセスについて教えてください。
5)スレッドの安全性の問題の原因は何ですか?
6)楽観的ロックと悲観的ロックについて話す7)楽観的ロックはどのように一貫性を保証するか
8)Integerとintの違いは何ですか?integerの特別な機能は何ですか?
9)データベースの分離レベルについて話します
10)MVCCについて話す
11)クラスター化インデックスと非クラスター化インデックスの違いは何ですか
タオバオの両面:
1.バブルソーティング、高速ソーティング、マージソーティング、およびその長所と短所、および最適化について質問します。
2.ネットワークには7層のosiと5層のtcp / ipがあり、プロトコルと機能は何ですか。
3.クローラーはどのデータ構造を使用しますか?
4.TCPフロー制御と輻輳制御
5. mysqlが使用するストレージエンジン、このストレージエンジンが使用するデータ構造、長所と短所、およびその使用方法
6、JVMガベージコレクションメカニズムとガベージコレクター
7.春の物の隔離レベル
8. jdk1.8concurrenthashmapの新機能。ソースコードを見たことがありますか。
9. threadlocalを理解していますか?
10.(容量の拡張、無効なキーのクリーニング戦略など)など、redisについていくつか質問しました。
11.残りはプロジェクトのものです(kafka filebeat elkの原則、マスタースレーブの選択、複製など)
12.後で拡張に関連するいくつかのビッグデータについて質問し、いくつかのビッグデータ処理フレームワークについて理解しているかどうかを尋ねました。
全体のプロセスは約40分です
タオバオ三面
主なプロジェクト、どのプロジェクトを実行し、どのテクノロジーを使用しましたか?どのようなフレームワークを理解していますか?あなたのスキルを最も向上させるものは何だと思いますか
あなたのスキルを向上させたものはどれですか?
1)SpringAOPとIOCの基本的な実装について話します
2)ハッシュコードの役割について教えてください。HashMapの基礎となる実装?HashMapとHashTableの違い3)concurrentHashMapとhashTableのパフォーマンスの違いについて教えてください。そして、この違いの理由
4)ヒープとヒープソートについて話す
5)B +ツリーとバイナリ検索ツリーの違いについて教えてください。バイナリ検索ツリーとAVLツリー、赤黒ツリーの違いについて話します
6)2つのファイル(文字列形式)を提供して、それらの違いを見つける方法を教えてください。
7)今言ったことをどのように最適化できますか?
タオバオ四方交差点
三方の終わりは時の面だと思っていたのですが、別の十字架を受け取りました
1. 50億行の文字列、マシン4Gメモリ(1台のマシンのみ)を提供し、最も頻繁に繰り返される文字列の行を見つけますか?
(行単位では、1行あたり10文字以内)
2.10gの2つの大きなファイルを10mのメモリ内の3番目のファイルに繰り返し配置できることを実現するアルゴリズムを設計します。
ファイル
3.平均的なクイックソートはどのくらい複雑ですか?最悪の場合は何ですか?(この質問はおそらく厄介な雰囲気を和らげるためです)
アリペイ側
4.自己紹介します。
5.プロジェクトに関係するコアデザインは何ですか
6.ArrayListおよびLinkedListの最下層
7. HashMapとスレッドセーフなConcurrentHashMap、およびそれらの長所と短所
8.Javaがスレッドの安全性を実現する方法
9.同期とロックのどちらが良いですか?
10. HashMapのget()メソッドはどのように実装されていますか?
11. HashMapはどのようなシナリオで使用できますか?
12. JVM、ガベージコレクションメカニズム、メモリ分割など。
13. SQL最適化、一般的に使用されるインデックス?
14.これ以上質問する必要があります。
Alipayの両面
16.自己紹介なしで、あなたが行ったJava開発関連のプロジェクトを尋ねてください。
17.どのテクノロジーに精通していますか?
18.マルチスレッド状態図、状態はどのように流れますか?
19.デッドロック、デッドロックの原因
20.ページロック、楽観的ロック、悲観的ロック?
21.楽観的なロックはどのようにスレッドの安全性を保証しますか?
22.スレッドプール、対応する利点、およびその使用方法を使用しましたか?
23. 2つの10Gファイル、いくつかのURLがあり、メモリは1Gのみです。これらの2つのファイルをマージして、同じものを見つける方法
URL?
24. 1000個の複数の同時スレッド、10台のマシン、それぞれ4コア、設計スレッドプールサイズ。25.コードの問題:2つの順序付けられた配列。配列に重複する番号があり、それらを順序付けられた配列にマージして、重複する番号を削除します。
26.自分の強みについて話します。
Alipayの3つの側面
28.jvmパフォーマンスチューニングで行われたこと
29.データベースのパフォーマンス調整を行う方法
30.分散システムの原則:CAP、最終的な一貫性、独立した操作など。
31.同時実行性が高い場合、システムはどのようにして多数の要求をサポートしますか?
32.クラスターがセッション状態を同期する方法
33.一般的に使用されるNOSQLですが、比較しましたか?
34.どのような状況で雪崩が発生し、どのように対処しますか?
35.負荷分散の原則
36.データベーストランザクションのプロパティ
上記は完全なAlibabaの技術面接の質問とAlibabaの面接経験の要約です。お役に立てば幸いです。
インタビュー回答!
インタビューへの回答が整理されました。このテクニカルインタビューのポジションはAliP8です。比較できます!