システムテストセンター
テストサイトでは、焦点を合わせます
システムテストセンター
システム設計とは何ですか?
システム設計は、どのような知識を知っておく必要がありますか?
バックエンドシステムの設計サービスを設計し、実装する方法?
システム設計とは何ですか?(システム設計)
システム設計の定義は、システム・アーキテクチャ、モジュール、インターフェースであり、特定のニーズを満たすためにデータを処理します
例えば:赤い封筒システムをつかむ、短いURLサービス、サービスのレビュー、フィードフローシステムを設計します
ショートURLサービスは、すべての他の用途のためのサービスを提供しています。たとえば、
多くのマイクロアーキテクチャサービスシステムは、事業分割、独立した設計システムサービスの必要性によるものです
システム設計の難しさ
唯一の方法でシニアエンジニア
- 特定のアーキテクチャ設計能力があり、アルゴリズム、関連分野での経験を持っている必要があります
- アートは、例えば、バックエンドコンポーネントに精通している:メッセージキュー、バッファ、データベース、フレーム
書き込みでは、総合的な能力のフローチャート作成、アーキテクチャ設計、コーディング実現
システム設計の要素
デザイン三つの要素
使用シナリオと制限
データストレージの設計
アルゴリズムモジュール設計
どのようなシナリオや使用条件?
このシステムは、どこで使用されますか?
例えば:短いのURL局システムは、短いURLを生成するサービスを提供します
制限事項:ユーザーの推定数?少なくとも、ユーザーの数(サービス)をサポートすることができますか?
同時推定QPS:ピークQPSどのくらいですか?平均QPSどのくらい?(毎秒どのくらいのリクエスト?)
デザインデータストレージシステム
選択データベース
必要性をフィールドデマンド設計データテーブル、どのタイプ?スケールデータの増加
データベースの選択:永続化の必要性?リレーショナルまたはのNoSQLを使用しますか?
どのように最適化するには?どのようにインデックスを設計するには?私はキャッシュを使用することはできますか?
設計アルゴリズム関連のモジュール
システム= +ストレージサービス
インタフェースが必要ですか?デザインをインターフェイスする方法
どのようなアルゴリズム?またはモデル?
長所と異なる実装の短所とのコントラストが、どのように選択するには?
、フォールトトレラントを延長するには?
ユーザーより、高いQPSはどのように対処するには?
データストレージを維持するのに十分よりもっとどのように対処するには?
失敗をどのように扱いますか?故障、マルチポイントの障害、雪崩問題のシングルポイント
短いURLシステムを設計し、実装する方法?
短いURLシステムとは何ですか?どのような機能(インターフェース)が含まれて?
ショートURLストレージ設計システム?どのフィールドを保存する必要がありますか?
短いURLを生成するためのアルゴリズムを設計するには?
短いURLシステムとは何ですか?
TinyURLのサービス
ショートURLサービスに長いURLを有効にするには
変換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の設計、アルゴリズムを含みます
図示の、データテーブル、インタフェース定義、フローチャートであります
システム設計に関する質問
スパイクシステムを設計する方法
難点:高同時ユーザの要求に対処する方法
スパイクシステムとは何ですか?
言及した三つの要素に基づいて、スパイクのシステムを設計するには?
バックエンドコンポーネントを含むスパイクシステム