美団面接準備のデータベース

3153 ワード

  • 美団の重点はデータベース、linux、javaの上で、感じはあなたのjavaとデータベースが良い限り入ることができて、ちょうど良くて、私はC++をして、データベースはあまり熟知していません.
  • データベースのトランザクション、具体的にコードの中でどのようにトランザクションを実現します.例えば、私は1つの表にaを挿入し、bを挿入し、
  • を挿入します.
  • redisデータベースはローカルデータベースと何か違いがありますか
  • redisの実際の仕事で使ったことがありますか?
  • データ洗浄はどのように洗浄されたのか
  • どのような状況でredisを使用しますか?
  • データベースに詳しいですか?(熟知していないで、大丈夫で、私はいくつか質問します)インデックスを知っていますか?どんなシーンの下でインデックスを使って、インデックスはどんな利益があって、どんな欠点がありますか?
  • 面接官は私がインデックスの部分に答えるのはまあまあだと感じて、具体的なシーンをあげて、どのようにするべきですか(できません)
  • を聞きました
  • 大量問sql文
  • MVCCメカニズムと楽観ロックの違いMVCCは、読み取り-書き込みの衝突を解決し、読み取り操作が書き込み操作をブロックせず、書き込み操作が読み取り操作をブロックしない.楽観的なロックは、書き込みの競合を解決することです.MVCC:読み出し操作は、当該データが開始される前のデータベーススナップショットのみを読み取る.読み取り操作にはスナップショットの読み取りと現在の読み取りの2種類があります.簡単なselectで、ロックをかけないでスナップショットの読み取りに属します.selectは挿入/更新/削除操作があり、現在の読み取りに属し、ロックが必要です.select
  • は、現在のトランザクションIDよりも前に作成されたレコードのみを検索し、現在のトランザクションが読み込んだローがトランザクションの前にすでに存在するか、現在のトランザクションによって作成または変更されていることを確認します.
  • 行のDELETE BITが1の場合、現在のトランザクションIDよりも削除が遅いレコードを検索し、現在のトランザクションが開始される前に、
  • 行が削除されていないことを確認する.
  • Mysqlの一貫性読みはread view構造によって実現される.read viewは主に可視性判断に使用され、本トランザクションが表示されない現在の他のアクティブなトランザクションを維持します.このうち最も早いトランザクションIDはup_limit_idであり、最も遅いトランザクションIDはlow_limit_idである.可視性判定は、読み出したいローの最後にコミットされたトランザクションid(すなわち、現在のデータ行の安定したトランザクションid)がtrx_であると仮定する.id、可視性比較プロセスは以下の通りである.
  • trx_id < up_limit_id=>このレコードの最後の変更はread viewが作成される前に可視性を有し、ステップ5にジャンプする.
  • trx_id > low_limit_id=>このレコードの最後の変更はread viewの作成後、可視性を持たずにステップ4にジャンプします.
  • up_limit_id <= trx_id <= low_limit_id=>up_からlimit_idからlow_limit_idはtrx_idが彼らの中のトランザクションidに等しい場合、そのレコードの最後の変更が保存されておらず、可視性がなく、ステップ4にジャンプすることを示す.そうでなければ、可視性があり、ステップ5にジャンプします.
  • この記録からのDB_ROLL_PTRポインタが指すundo log(このレコードの前回の変更)は、undo logのDB_TRX_IDをtrx_idに付与し、ステップ1に移行して可視性の計算を再開する.
  • このレコードのDELELE_BITはfalseであり、このレコードが削除されていないことを示し、戻ることができ、そうでなければ返さない.

  • 楽観ロック:書くときに同時にその行のバージョン番号を取得します.書き終わったら、バージョン番号が以前と同じかどうか、違うかどうかを確認し、説明が他のトランザクションによって修正され、バージョン番号が変わらないまで操作を繰り返し、データを提出します.
  • 接続の種類
  • 左ジョイン:left joinまたはleft outer join左外部ジョインの結果セットには、ジョイン列が一致する行だけでなく、LEFTOUTER句で指定された左テーブルのすべての行が含まれます.左のテーブルの行が右のテーブルに一致していない場合、関連する結果セットの行の右のテーブルのすべての選択リスト列はNullです.
  • 右接続:right joinまたはright outer join右外部接続は、左外部接続の逆方向接続です.右のテーブルのすべてのローが返されます.右のテーブルの行が左のテーブルに一致していない場合、左のテーブルには空の値が返されます.
  • 完全外部結合:full joinまたはfull outer join完全外部結合は、左テーブルと右テーブルのすべてのローを返します.行が別のテーブルに一致しない場合、別のテーブルの選択リスト列には空の値が含まれます.テーブル間に一致するローがある場合、結果セットのロー全体にベース・テーブルのデータ値が含まれます.
  • 内連結内連結は、連結する列の値を比較演算子で比較する連結joinまたはinner joinが、条件を満たすtable 1とtable 2のみを返す列
    select * from table1 join table2 on table1.id=table2.id
  • に等しい.
  • A:select a.*,b.* from table1 a,table2 b where a.id=b.id
    B:select * from table1 cross join table2 where table1.id=table2.id ( :cross join       where,   on)
  • クロスコネクション(完全)cross join(条件なしwhere...)WHERE句のない交差結合は、結合に関連するテーブルのデカルト積を生成します.1番目のテーブルの行数に2番目のテーブルを乗じた行数は、デカルト積結果セットのサイズに等しい.(table 1とtable 2の交差接続による3*3=9レコード)は
    select * from table1,table2
  • に等しい.
  •