研究のタイトルは、クイズに参加できる惑星、舞台裏の返信「知識の惑星」の知識から来ています。
二日前に通信の友人を得るために、彼らは機能ユニークな注文番号を生成して、コードが白羽、およびこの方法に問題が尋ねましたか?どのようにテストを変更しますか?
次のように最初にコードをリリース:
/**
* 生产唯一的交易订单号
*
* @return
*/
public static String createUniqueOrderNo() {
SimpleDateFormat nyrsfm = new SimpleDateFormat("yyyyMMddHHmmss");
return nyrsfm.format(new Date()) + getRandomLengthCode(4);
}
/**
* 获取随机的短信验证码
*
* @return
*/
public static String getRandomLengthCode(int length) {
return String.valueOf((int) ((Math.random() * 9 + 1) * Math.pow(10, length - 1)));
}
最初の製造指図番号、及び第二は、4つの方法の乱数を生成することです。私はアイデア最初の方法についてお話しましょう:二つの部分、1時間での注文番号(これに応じてyyyyMMddHHmmss
、第二部は、4つの乱数形式です)。第二の方法:double型の数値を生成する[0、1)と(9 + 1)式により1,10との間の数)を得、次いで、特定のに10を乗じします*次いで、[1000,10000)数を与える電源(ここでは3)、及び[1000,10000の範囲の4つの整数)を与えるために、INTと強いに変換されます。
解釈が完了すると、次はこの方法の私の知識を共有しています。私たちが問題の中心的な問題だったから始まることである:重複した注文番号になります。明白な答えは次のように説明することである。第二のレベルに正確な時間を、乱数範囲の概算は9000で、1秒未満ならば9000件の注文を生成し、その後、確かにそこに繰り返されます。
それでは、どのようにそれをテストするのですか?またはどのようにこのバグはそれを言及変更するには?
私は2つの選択肢を提案した。一つはコンテンツとして、口頭または書面で説明することで、2番目は、試験に合格するために、繰り返し注文番号を生成することです。
オプション1:
男は、ものを見て、それが判明し、この方法ではうまく動作しません。
ない非認識の開発のための主な理由は、しかし、2つの理由で変更する必要性を感じていないこと、一つはビジネスのそんなにボリューム、そして第二に、発生確率が小さすぎではありません。
オプション2:
注文番号を繰り返すことで発生する圧力を測定する、それがN回繰り返されるテストは、注文番号を得られなかった、非常に面倒に動作します。
主な理由は、おそらく、QPS(全体オーダーインタフェース)の十貧弱なパフォーマンステスト環境で、長すぎるために測定された圧力は、サービスが不安定にすぎダーティデータをリードします。
以下は、プログラムへの惑星の知識のパートナーは以下のとおりです。
分プラス➕SMS確認コードは、注文日の固有の番号を構成しています。リスク:特定の環境、複数のサーバで一緒に実行する場合、同じ注文番号可能。名前などのユーザを設定するだけ推奨値。私たちは、UUIDをお勧めします。コードは以下の通りであります:
/**
* 生产唯一的交易订单号
*
* @return
*/
public static String createUniqueOrderNo() {
return UUID.random.toString;
}
その他のソリューションは、マルチスレッドを使用せずに、一人でテストするために、このメソッドを置くことです。レコードのループスルーのためにすぐに、私のテストコードを共有します:
public static void main(String[] args) {
List<String> list = new ArrayList<>();
range(250).forEach(x->
{
String randomLengthCode = getRandomLengthCode(4);
if (list.contains(randomLengthCode))
output(x);
else
list.add(randomLengthCode);
});
}
より良い方法がある場合は、議論を開始し、メッセージや知識惑星の交換を残すことを歓迎します。
第二に、私はまた、微話す機会を持っているパフォーマンスの問題が心配です。
より多くのソリューションは、多くのフレームワークは、ユーザーのIDに関連付けられている一般的意志のIDをサポートしています。比較的単純な言った:より支払う一意のオーダ番号、ユーザIDなどのような標識、ユーザインタフェース制約は、その後(例えばのみ次単一5Sベルなど)次の周波数を生成します。
- 厳粛に宣言する:記事は再生(テンセントクラウドを除く)第三者を禁止し、公開し、何が起こっていたかのテスト巣、7元は私の家でも黒を引くコピーし、あなたの良心は傷つけることはありませんか?