-2

これは私が最近受けたインタビューの質問です。これは、私があまり経験していないフロント Web 開発に関連している可能性があります。

問題は、「ウェブサイトが過去 5 分間に受け取った訪問数をどのように計算するか」です。

/* コメントと反対票によると、私/私の友人の考えをもっと書くことにしました。私の現在の解決策は、訪問のタイムスタンプを格納するキューを構築することです。新しい訪問があれば、5 分前のすべての訪問を消去してから、この新しい訪問を追加します。しかし、これは効率的ではないようです。1) キューの先頭にある要素を削除するのは効率的ではありません。2) キューの長さは訪問数と同じです。*/

インタビュアーはコードを尋ねますが、私はそれについて何も知りません。

任意の提案/コメントをお待ちしております!

4

1 に答える 1

1

免責事項: 問題と考えられる解決策を理解することはあなたの関心事であるため、コードを追加するのではなく、いくつかの考えだけを追加します。後でそれについて考えて、独自のコードを実行することができます (そしてすべきです)。

1 つの詳細が、データの保存方法に違いをもたらす可能性があります。「分」の粒度はどのくらいですか? たった 1 分ですか、60 秒ですか、それとも 60,000 ミリ秒ですか? たとえば、現在のタイムスタンプが 03:44:30,820 であるとします。03:39:31,820 に受信したリクエストは「最後の 5 分」以内に発生したか? 「分」の粒度が 1 分の場合、そうではありません (03:44、03:43、03:42、03:41、および 03:40 のリクエストのみ)。「分」の粒度が 60 秒の場合、それは過去 5 分以内に発生します。

したがって、「分」の粒度が 1 分であると仮定します (簡単にするため)。このように、「キュー」の長さはわずか 5 桁です。各位置には、その 1 分間に発生したリクエストの数を含めることができます。あなたの問題#2は終わりました。また、キューの代わりにリンクされたリストがある場合は、headtailポインターを維持できるため、問題 #1 も解消されます。

可能な最適化 (数分間リクエストがない場合にコードを少し複雑にする可能性がありますが、とにかく調査する価値があります) は次のとおりです。リストのサイズは固定されているため (この場合は 5)、循環を使用することもできます。ポインタのペアを取り除き、lastポインタだけを保持します。

これらはアイデアの一部にすぎませんが、インタビュアーの意図はおそらく、問題について考えさせ、質問をさせ、アイデアを投げ出させ、そこからコードを導き出すことでした。

于 2013-04-23T18:55:55.320 に答える