Java面接-面接官シリーズRedis基礎を吊り下げる


あなたが知っているほど、あなたが知らないことも多くなります.
見終わったら、「いいね」をクリックしてから見ましょう.「いいね」をクリックしてから見ましょう.習慣をつけましょう.
前言
Redisはインターネット技術のストレージの面でこのように広く使われており、ほとんどのバックエンド技術の面接官はRedisの使用と原理の面で仲間たちを360°いじめなければならない.インターネット会社で一度offerを取るボスとして( )、無数の競争相手を打ち負かして、毎回すべて無数の寂しさの影が失望して離れることを見ることしかできなくて、少し罪悪感を感じて、1つの寂しさに耐えられない夜、私は深く考えて、面接官のシリーズを書くことを決めて、各位の読者の後で面接の勢いが竹を破るように助けることができることを望んで、面接官に対して360°の反撃を行って、あなたの面接官に首を吊って、首を吊って一緒に面接しますの同僚( )、大工場offerをクレイジーに刈り取る!
面接開始
お腹がぺこぺこで、チェックのシャツを着た中年の男が、傷だらけのmacを持ってあなたに向かって歩いてきて、ハゲそうな髪を見て、ニマのトップクラスのアーキテクチャ師に違いないと思っていました.しかし、私たちの腹には詩書の気があって、怖くない.
こんにちは、履歴書にあなたのプロジェクトにRedisが使われていると書いてありますが、なぜRedisを使っていますか.
心の中で思わず悪口を言って、これは何の問題ですか.みんなこれを使っているのではないでしょうか.しかし、あなたは言えません.
イケメンで魅力的な面接官こんにちは、従来の関係型データベース、例えばMysqlはもうすべてのシーンを適用できません.例えば、秒殺の在庫控除、アプリのトップページのアクセスフローのピークなど、データベースを崩しやすいので、キャッシュミドルウェアを導入しました.現在市販されているキャッシュミドルウェアにはRedisとMemcachedがあるが,彼らの長所と短所を考慮し,最後にRedisを選択した. Redis Memcached , , 。
あの若者、Redisにはどんなデータ構造があるのか聞いてみましょう.
文字列String、辞書Hash、リストリスト、集合Set、整列集合SortedSet. 99% Redis 5 。 , 。
しかし、Redisの上級ユーザーで、今回の面接で他の候補者との違いを強調するには、次のデータ構造HyperLog、Geo、Pub/subを加える必要があります.
もしあなたがまだ加点したいなら、BloomFilter、RedisSearch、Redis-MLのように、Redis Moduleを游んだことがあると言っています.この时、面接官は目が明るくなって、この若者に何かあると思っています. : Redis , BloomFilter( ) , , , , ? ↓
キャッシュ破壊の利器を避けるBloomFilter
同じ時間の期限切れを設定するキーが大量にある場合は、一般的に何に注意しますか?
大量のkeyの期限切れの設定が集中しすぎると、期限切れの時点になると、redisは短いカートン現象が発生する可能性があります.深刻な場合、キャッシュ雪崩が発生します.一般的には、期限切れの時間を分散させるために、時間にランダムな値を追加する必要があります. , , , ,
Redis分散ロックを使ったことがありますか?
まずsetnxを持ってロックを争い、奪った後、expireでロックに期限切れの時間を加えてロックが解放されないようにします.
このとき、相手はあなたに答えがいいと言って、setnxの後にexpireを実行する前にプロセスが意外にcrashしたり、メンテナンスを再開したりしたらどうなりますか?
この时、あなたは惊くフィードバックを与えなければなりません:ああ、そうですね.このロックは永遠に解放されません.次にあなたはが必要で、次の結果はあなたが自発的に考えたようで、それから答えます:私はset命令に非常に複雑なパラメータがあることを覚えていて、これはsetnxとexpireを同時に1つの命令を合成して使うことができるはずです!
相手はこの時笑顔を見せて、心の中で黙念し始めます:うん、この子は悪くなくて、少し面白くなりました.
もしRedisの中に1億個のkeyがあったら、そのうち10 w個のkeyはある固定的な既知の接頭辞で始まり、もしそれらをすべて見つけたら?
keysコマンドを使用して、指定したモードのkeyリストをスイープします.
相手は、このredisがオンラインのビジネスにサービスを提供している場合、keysコマンドを使用すると何か問題がありますか?
このとき、redisの重要な特性:redisの単一スレッドに答えます.keys命令はスレッドがしばらくブロックされ、オンラインサービスは命令の実行が完了するまで停止し、サービスは回復しません.このときscanコマンドを使用することができ、scanコマンドは指定したモードのkeyリストをブロックなく抽出することができますが、一定の繰返し確率があり、クライアントで1回の重さ除去をすればよいのですが、全体的にkeysコマンドを直接使うよりも時間がかかります.
Redisを非同期キューとして使用したことがありますか?どうやって使用しますか?
一般にlist構造をキュー,rpush生産メッセージ,lpop消費メッセージとして用いる.lpopにメッセージがない場合は、適切なsleepを後で再試行します.
もし相手が追及したらsleepを使わなくてもいいですか?
リストにはblpopという命令があり、メッセージがないときはメッセージが来るまでブロックされます.
一度に何度も生産できるかと問い詰められたら?
pub/subトピックサブスクライバモードを使用すると、1:Nのメッセージキューを実現できます.
相手がpub/subに問い詰め続けるとどんな欠点がありますか?
消費者がオフラインになった場合、生産されたメッセージは失われ、rabbitmqなどの専門的なメッセージキューを使用する必要があります.
もし相手が究極TMにredisにどのように遅延キューを実現するかを問い詰めたら?
この一連の技は、面接官を殺したいと思う( )、野球棒を手に持っている場合は控えめですが、興奮した心を落ち着かせ、sortedsetを使用してタイムスタンプをscoreとし、メッセージ内容をkeyとしてzaddを呼び出してメッセージを生産し、消費者はzrangebyscore命令でN秒前のデータポーリングを取得して処理します. , 。 A+, , 。
Redisはどのように持続しますか?サービス・ホストはデータからどのように対話しますか?
RDBはミラー全量持続化を行い,AOFは増分持続化を行う.RDBは時間がかかり、リアルタイムが足りないため、ダウンタイム時にデータが大量に失われるため、AOFを組み合わせて使用する必要があります.Redisインスタンスが再起動されると、RDB永続化ファイルを使用してメモリが再構築され、AOFを使用して最近の操作命令が再生され、完全なリカバリ再起動前の状態が実現されます. , RDB ,AOF , , , , 。
突然機械が落ちたらどうなるのかと相手に問い詰められた.
AOFログsyncプロパティの構成によっては、パフォーマンスが要求されない場合は、書き込みコマンドごとにディスクをsyncすると、データが失われません.しかし、高性能の要求で毎回syncは現実的ではなく、通常は1 s 1回などのタイミングsyncを使用しており、このときは最大1 sのデータが失われることが多い.
相手がRDBに問い詰める原理は何ですか?
2つの語彙を与えればいい、forkとcow.forkとは、redisがサブプロセスを作成することによってRDB操作を行うことを意味し、cowはcopy on writeを意味し、サブプロセスが作成されると、親子プロセスはデータセグメントを共有し、親プロセスは読み書きサービスを提供し続け、汚いページデータを書くとサブプロセスから徐々に分離される. : , AOF RDB , ( ), , Redis 。 , 。
Pipelineに何のメリットがあるのか、なぜpipelineを使うのか.
pipelineが実行する命令間に因果関係がないことを前提として、複数回IO往復の時間を1回に短縮することができる.redis−benchmarkを用いて圧力測定を行ったところ,redisのQPSピークに影響する重要な要因の一つはpipelineロット指令の数であることが分かった.
Redisの同期メカニズムを知っていますか?
Redisは、スレーブ同期、スレーブ同期を使用できます.最初の同期では、プライマリノードはbgsaveを1回行い、その後の変更操作をメモリbufferに記録し、完了後にRDBファイルをレプリケーションノードに全量同期し、レプリケーションノードが完了した後にRDBミラーをメモリにロードする.ロードが完了したら、期間中に変更されたオペレーションレコードをレプリケーションノードに同期して再生するようにプライマリノードに通知すると、同期プロセスが完了します.後続の増分データはAOFログで同期され、データベースのbinlogに似ています.
Redisクラスタを使用したことがありますか.クラスタの高さはどのように保証できますか.クラスタの原理は何ですか.
Redis Sentinalは高可用性に着目し、masterのダウンタイム時に自動的にslaveをmasterにアップグレードし、サービスを継続します.
Redis Clusterは拡張性に着目し,単一redisメモリが不足している場合にはClusterを用いてスライスストレージを行う.
面接終了
若者はいいですよ.いつ出勤する時間がありますか.明日来ませんか.
君は落ち着いたふりをしているのに,こんなに急いでいるのに,私はまだ家を借りる必要があるから,来週の月曜日にしないと.
この子はNBが多くのOfferを手にしているのではないかと思っています.だめです.hrにお金を追加させなければなりません.
最后まで耐えられるようになって、あなたは自分で自分にほめてあげられませんでした( ).
まとめ , Redis , , , , , 。
もう一つは、なぜRedisを使うのかと聞いたら、すぐに質問に答えないでください.このように答えてもいいです.
かっこいい面接官こんにちは、まず私达のプロジェクトDBはボトルネックに出会って、特に秒杀とホットスポットのデータのこのようなシーンDBは基本的に担ぐことができなくて、それではキャッシュのミドルウェアの加入が必要で、今市场のあるキャッシュのミドルウェアはredisとmemcachedがあって、彼らの优劣......これらを総合してから、私たちのプロジェクトの特徴を結びつけて、最後に私たちは技術の選択型の時に誰を選びましたか.
もしあなたがこのようにきちんとしていて、根拠があって私の質問に答えて、しかもこんなに多くの私の質問以外の知識点を言ったら、私はあなたがコードを書くことができる人だけではないと思って、あなたの論理ははっきりしていて、あなたは技術の選択型に対して、中間品に対してプロジェクトに対してすべて自分の理解と思考を持っていて、はっきり言ってあなたのofferが芝居があります.
以上がこの文章のすべてですが、Java面接吊りシリーズとJavaテクノロジースタックに関する文章を更新し続けます.もしあなたが何か知りたいことがあれば、いいねを押して私にメッセージを残してもいいです.私は时間があれば書きます.私たちは一緒に進歩します.
もしあなたがあなたに役に立つと思ったら歓迎します あなたが知っているほど、あなたが知らないほど多くなります.
敖丙|文