第10章システム設計の検査ポイント

システムテストセンター


テストサイトでは、焦点を合わせます

システムテストセンター

  • システム設計とは何ですか?

  • システム設計は、どのような知識を知っておく必要がありますか?

  • バックエンドシステムの設計サービスを設計し、実装する方法?


システム設計とは何ですか?(システム設計)

システム設計の定義は、システム・アーキテクチャ、モジュール、インターフェースであり、特定のニーズを満たすためにデータを処理します

  • 例えば:赤い封筒システムをつかむ、短いURLサービス、サービスのレビュー、フィードフローシステムを設計します

  • ショートURLサービスは、すべての他の用途のためのサービスを提供しています。たとえば、

多くのマイクロアーキテクチャサービスシステムは、事業分割、独立した設計システムサービスの必要性によるものです

  • システム設計の難しさ

    唯一の方法でシニアエンジニア

  • 特定のアーキテクチャ設計能力があり、アルゴリズム、関連分野での経験を持っている必要があります
  • アートは、例えば、バックエンドコンポーネントに精通している:メッセージキュー、バッファ、データベース、フレーム
  • 書き込みでは、総合的な能力のフローチャート作成、アーキテクチャ設計、コーディング実現

システム設計の要素

デザイン三つの要素

  • 使用シナリオと制限

  • データストレージの設計

  • アルゴリズムモジュール設計

どのようなシナリオや使用条件?

このシステムは、どこで使用されますか?

  • 例えば:短いのURL局システムは、短いURLを生成するサービスを提供します

    制限事項:ユーザーの推定数?少なくとも、ユーザーの数(サービス)をサポートすることができますか?

    同時推定QPS:ピークQPSどのくらいですか?平均QPSどのくらい?(毎秒どのくらいのリクエスト?)

デザインデータストレージシステム

選択データベース

  • 必要性をフィールドデマンド設計データテーブル、どのタイプ?スケールデータの増加

  • データベースの選択:永続化の必要性?リレーショナルまたはのNoSQLを使用しますか?

  • どのように最適化するには?どのようにインデックスを設計するには?私はキャッシュを使用することはできますか?

設計アルゴリズム関連のモジュール

システム= +ストレージサービス

  • インタフェースが必要ですか?デザインをインターフェイスする方法

  • どのようなアルゴリズム?またはモデル?

  • 長所と異なる実装の短所とのコントラストが、どのように選択するには?

、フォールトトレラントを延長するには?

  • ユーザーより、高いQPSはどのように対処するには?

  • データストレージを維持するのに十分よりもっとどのように対処するには?

  • 失敗をどのように扱いますか?故障、マルチポイントの障害、雪崩問題のシングルポイント

短いURLシステムを設計し、実装する方法?

短いURLシステムとは何ですか?どのような機能(インターフェース)が含まれて?

ショートURLストレージ設計システム?どのフィールドを保存する必要がありますか?

短いURLを生成するためのアルゴリズムを設計するには?


短いURLシステムとは何ですか?

TinyURLのサービス

ショートURLサービスに長いURLを有効にするには

例えば:https://bitly.com/

変換URLの接尾辞を超えない7(文字または数値)した後、

使用シナリオと制限

  • 使用シナリオ:それぞれの会社のビジネスサービスへのショートURLサービスを提供

  • 機能:短いURLと記憶手段に長いURL、短い長いURLのURLを削減

  • 要件:短いURLサフィックスが7つ以上(大文字、小文字と数字)ではありません

    マグニチュードの推定ピーク挿入要求:数百、クエリの大きさ:約32,000

データストレージの設計

データを設計する必要が保存されています

  • 満たすためにMySQLを使用して

  • 必要なフィールドとは何ですか?

  • クエリに基づいてインデックスを設計するには?

MySQLのデータシート

ID token(索引) URL(元サイト) created_at
1

アルゴリズム設計?

ショートURL生成アルゴリズムいくつかの?長所と短所を比較?

2 API:long2short_url、short2long_url

インクリメントID - ?>カウンタ - >使用Redisの

要求 - > RedisのINCR index->​​エンコード(インデックス) - > mysqlの保存

#递增序列算法
def mybin(num): #10进制->2进制
    if num == 0:
        return 0
    res = []
    while num:
        num, rem = divmod(num, 2)   # 2 -> 62
        res.append(str(rem))
    return ''.join(reversed(res))

print(mybin(10))

CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

def encode(num):
    if num == 0:
        return CHARS[0]
    res = []
    while num:
        num, rem = divmod(num, len(CHARS)) #62
        res.append(CHARS[rem])
    return ''.join(reversed(res))

print(encode(1))
print(encode(61))

解答

答えるために3つの要素を遵守

  • デザインは、データテーブル、APIの設計、アルゴリズムを含みます

  • 図示の、データテーブル、インタフェース定義、フローチャートであります


システム設計に関する質問

スパイクシステムを設計する方法

難点:高同時ユーザの要求に対処する方法

  • スパイクシステムとは何ですか?

  • 言及した三つの要素に基づいて、スパイクのシステムを設計するには?

  • バックエンドコンポーネントを含むスパイクシステム

おすすめ

転載: www.cnblogs.com/xuzhaoping/p/11619255.html