1つの葉は盲目ですが、オファーは表示されません
序文
MySQLは、今日のバックエンドテクノロジーの世界に不可欠な要素です。ほとんどすべてのバックエンドの技術面接担当者は、MySQLの原理と使用法に行き詰まることなく、面接対象者を相互調査します。MySQLからの反対尋問は遅れる可能性がありますが、欠席することは決してありません。Old Naは、面接担当者が自信を失った目を暗くするのに耐えられませんでした。1か月の暗くて風の強い夜、私はようやく、Redisのインタビュー資料を収集して整理し、すべての生物を普遍化することを期待して「インタビューハートスートラ」シリーズを書くことを決心しました。
注:この質問と回答はMySQL 8.0に基づいています
インタビュー開始
ずさんなハゲの中年男が傷ついたMacを持ってあなたの方へ歩きます。あなたのまばらな髪を見て、私が性交していると思って、これは少なくとも上級建築家です。でも「インタビュー心経」を見てきた私達はまだ落ち着いていて
こんにちは、少年です。履歴書にはMySQLがプロジェクトで使用されていると書いてあります。MySQLを1文で要約してください。
このとき、あなたは内側にのろいをせざるを得ず、頭がはげており、尋ねられた質問はとても普通でした、これだけですか?しかし、それを示すことはできません。
真剣に答える:MySQLは、Oracle Corporationによって開発および保守されているリレーショナルデータベース管理システムです。
インタビュアーは調べませんでした、そして次に尋ねました:
MySQLインデックスとは何ですか?用途は何ですか?
インデックス(インデックス)は、MySQLが効率的にデータを取得するのに役立つデータ構造です
これは理解しやすいです。MySQLが本である場合、その中の記事はデータのようなものであり、インデックスは本の目次です。本の記事を読みたい場合は、目次を開いて検索できます。記事のページ番号、次に直接対応するページ番号を参照してください。ただし、目次がない場合は、最初のページから始めて、検索を停止して読みたい記事が見つかるまで、ページごとに前に検索する必要があります。(読みたい記事がたまたま本の最後のページにある場合は、本全体を検索する必要があります。効率は想像できます)
ボーイ、MySQLのインデックスの種類を知っていますか?
コヒーレント応答:4つの一般的なインデックスがあります。つまり、PRIMARY KEY(主キーインデックス)、UNIQUE(一意インデックス)、INDEX(一般インデックス)、およびFULLTEXT(フルテキストインデックス)です。これは、いくつかのBツリー実装の使用です。
これらのインデックスの違いを簡単に紹介することをお勧めします
注:B +ツリーはBツリーの一種です
独自のものを強調したい場合は、次のように言うこともできます。さらに、インデックスの空間データタイプのRツリー実装の使用、MEMORYテーブルはハッシュインデックスもサポートします
あなたの骨が素晴らしいと人々に感じさせたい場合は、次のように言うことができます:さらに、MySQLはマルチカラムインデックス、非表示インデックス(非表示インデックス)、降順インデックス(降順インデックス)もサポートしています
インタビュアーはゆっくりと頭を上げ、目がわずかに狭くなっているのを見て、質問を続けました。
先ほどBツリーについて説明しましたが、Bツリーのバランスのとれたバイナリツリーの違いは何ですか。バランスの取れたバイナリツリーでインデックスを実装しないのはなぜですか?
回答:平衡二分木は、左と右の木の高さが≤1の二分木であり、Bツリーはポリツリーです。Bツリーの各ノードは複数の要素を格納できるため、Bツリーのツリーの高さは、同じ量のデータの下でのバイナリツリーのツリーの高さよりも小さいことが多く、データの取得速度が速くなります
注:データの取得は常にルートノードから開始されます。ツリーの高さ=ディスクI / Oの数
複数列のインデックス(複合インデックスとも呼ばれます)を使用および作成するときは、何に注意する必要がありますか?
風清雲は言った:最も左の原則
左端の原則:たとえば、3列のインデックス(col1、col2、col3)がある場合、検索条件が(col1)、(col1、col2)または(col1、col2、col3)のとき、両方インデックスクエリを取得できます
MySQLトランザクションを理解していますか?その機能について話す
注:InnoDBはトランザクションをサポートしていますが、MyISAMはサポートしていません
考えずに言う:原子性、一貫性、分離性、耐久性であるACID
インタビュアーは続けて尋ねました:MySQLトランザクションにはいくつの分離レベルがありますか?
低から高の4つのレベルがあります。コミットされていない読み取り、コミットされた読み取り、繰り返し可能な読み取り、およびシリアライズ可能です。
注:MySQLのデフォルトの分離レベルは、反復可能読み取り(反復可能読み取り)です。
ダーティリーディング、繰り返し不可のリーディング、ファントムリーディングを個別に説明する
このとき、あなたはこっそりと応援しなければなりません:「小さな、私はあなたが尋ねるのを恐れていません。あなたが尋ねないのではないかと心配しています。老人はすでに準備ができています」
ダーティリードとは、トランザクションが別の変更COMMITデータへのトランザクションを読み取らなかった後を意味します。繰り返し不可の読み取りとは、トランザクションが同じデータを複数回読み取ることを指します。このトランザクションの複数の読み取りの間に追加のデータがあります。変更とCOMMITにより、同じデータを複数回読み取る結果に一貫性がなくなります。ファントムリードと繰り返し不可の読み取りは同様ですが、繰り返し不可の読み取りフォーカスが変更され、新しいフォーカスはファントム読み取りまたは削除されます
MySQLのストレージエンジンとは何ですか?
回答:InnoDBとMyISAMが一般的に使用されています。MEMORY、CSV、ARCHIVEなどもあります。
次に、InnoDBとMyISAMの違いについて説明します。
InnoDBはトランザクションをサポートし、MyISAMは
InnoDBが外部キーをサポートしません。MyISAMはInnoDBをサポートしません。
クラスター化インデックス、MyISAMは非クラスター化インデックスです。(クラスター化インデックス≠主キー)
MyISAMはテーブルの行の総数を保存します
。InnoDBはInnoDBの最小のロックの細分度を行ロックに保存しません。MyISAMの最小のロックの細分度はテーブルロックです
インタビュアーは少しうなずき続けた。
クラスター化インデックスについて説明しましたが、どのように機能しますか?
各InnoDBテーブルには、クラスター化インデックスと呼ばれる特別なインデックスがあり、行データを格納するために使用されます。表に定義されていない場合、主キーを選択する;典型的には、クラスタ化インデックスは主キー索引であるNOT NULLを一意インデックス(一意の)クラスタ化インデックスとして、修飾UNIQUEない場合、InnoDBの内部まで隠さ生成しますインデックスGEN_CLUST_INDEX
注:通常、列の連続する増分ごとにInnoDBテーブルを作成または選択します(増分IDなど)。ただし、厳密に言えば、主キーは必要ありません**
VARCHAR(10)とCHAR(10)の違いは何ですか
A:VARCHAR(10)およびCHAR(10)は、フィールドが最大10 文字(注:これはバイトではない)を格納できることを表しますが、格納と取得の方法は異なります。それらの最大長と、後続スペースを保持するかどうかも異なります。
CHAR列の長さは、0から255までの任意の値にすることができます。CHARが値を格納すると、MySQLは指定された長さまでスペースを埋めます。CHAR列の値を取得すると、末尾のスペースは破棄されます(データ自体に末尾のスペースがある場合は、それも破棄されます)。VARCHAR列は可変長の文字列を最大65535 バイト(異なる文字セット、文字が占めるバイトは異なる場合があります)を格納します。格納されたデータが指定された長さに達しない場合、スペースで埋められません。さらに、VARCHAR列がデータを保管する場合、データ長を節約するために余分な1または2バイトが費やされます
CHAR(2)列に値「abcde」を設定するとどうなりますか?
考えるふりをすることができます、答え:SQLモードがstrictに設定されている場合、値は保存されず、エラーがスローされます。SQLモードがstrictに設定されていない場合、値は切り捨てられて保存され、警告がスローされます。たとえば、 'ab'はここに保存されます
MySQLマスターとスレーブを理解していますか?マスタースレーブ同期プロセスを簡単に説明してください
マスタースレーブ同期の原理は、実際には、レプリケーションバイナリファイルに基づいており、相同コピー(マスターマルチスレーブまたはマスタースレーブ)およびマルチソースコピー(マルチマスターマルチスレーブ)になり、ここではマスターマルチスレーブに一般的に使用されます。
言語を少し整理して話します。マスターはすべての操作コマンド(追加、削除、変更)をデータにbinlogファイルに書き込み、スレーブはマスターのbinlogファイルを読み取って実行します。
必要に応じて、少し詳しく説明することもできますマスタースレーブレプリケーションの具体的な手順は次のとおりです。
フロントエンド:マスターと各スレーブは一意のサーバーID(server_idシステム変数を使用)で構成されており、マスターはbinlogを開きます。
- マスター:binlogスレッド- データへのすべての操作コマンド(追加、削除、変更)をbinlogファイルに書き込みます
- スレーブ:IOスレッド後に開始スレーブを使用して、それを引っ張っする責任があるbinlogのコンテンツをマスターからして、独自にそれを置くリレーログ。(それは次の時間を読み取ることができるように、各スレーブは、最後の読み取りの場所を記録します。このまた、複数のスレーブをマスターに接続して、同じバイナリログの異なる部分を実行できることも意味します)
- スレーブ:SQL実行スレッド実行中の文をリレーログ(スレーブは、特定のデータベースまたはテーブル上で動作のみハンドルイベントに構成することができます)
インタビュアーの目が明るくなったああ、これは宝物です
インタビュー終了
男の子はかなりいいです、それはほとんど夕食の時間です、または階下のレストランに行き、食事をしながらおしゃべりしましょう。さて、あなたは何を食べたいですか?
微笑んで言った:それは名誉です
これはまれな良い機会です。この状況に遭遇するほど幸運である場合、面接担当者があなたを非常に認識している可能性が高くなります。食事中に会社の状況を知ることができ、会社のテクノロジースタックや趣味について話すこともできます。 、お互いの距離を狭める。どんなに悪くてもお腹がいっぱいになる...
最後に書く
多くのことが非常に単純に思えて、あなたもそれができると思うかどうかはわかりませんが、あなたはそれをしたくないだけです。多くの知識は自分自身に知られているようですが、インタビュアーが尋ねると、あなたはできません論理的な答えは明確で完全であり、その後、私は自分ですべてを行うことができると感じましたが、うまく機能しませんでした...
以前も同じでした。しかし、私は私が怠惰ではないことを理解しました。私がゴミであることを認めたくありません。
お腹を空かせ、愚か
さは自分のスキルの可視性と幅を広げるよう努めます。面接に合格するための必要条件です。
通常は、より多くのことを考えて要約し、面接中に話せるようにします。
また、自信と冷静さを保つと、信頼性が高まります。面接合格率を向上させる
この記事は、通常のインタビュー経験に基づいており、要約され、完成されています。スペース上の理由により、一部の回答は完全ではない場合があります。インタビュー中の一般的なテストサイトについては、後の記事で詳しく分析します。
最も単純な言語では、最も高級なBのふりをします
最後に、皆さんが早く上陸してほしいと思います。私たちのスローガンは、次のとおりです。!!
あなたの称賛と注意の点は私にとって非常に役に立ちます