2012-03-17 8 views
4

さて、私はいくつかのハードインタビューを行ってきたが、これはばかげていた。私は、ペン、紙、電卓、 "URLセーフ"の文字の定義、そして質問を完成させるのに20分という質問があった。質問は(最高のように私が覚えて)であった。インタビュー失敗:Googleが厳しいと思った。

私たちが展開しているIIS Webサーバ上のファイルの変更のための時間に与えられた ポイントを表す一意のURLセーフな文字列を生成する関数を書きます明日は です。 「ポイント・イン・タイム」の分解能は1秒です。私はパニックと[0-9a-zA-Z\$\-\_\.\+\!\*\'\(\)]

「URLセーフ」の文字の

.NET正規表現パターンは=実際のコードを書くのではなく、私の考えを書きました。彼らは実際にコードを書くことはなかったので、私の "答え"を見て私を却下しました。 :(

私のようなものだった書いた:

つまり
- 365 days in a year so "day of year" can be represented in 2 bytes 
- 4 digits in year (0 - 9999) so year can be represented in 3 bytes 
- 2 digits in hour (0 - 23) so year can be represented in 1 byte 
- 2 digits in minutes (0 - 59) so minutes can be represented in 1 byte 
- 2 digits in seconds (0 - 50) so seconds can be represented in 1 byte 

TOTAL: 2+3+1+1+1 = 8 bytes total that use 0 - 255 

- URL-safe range == 10 + 24 + 24 + 10 == 0-9 + a-z + A-Z + special chars == 68 
- 4 bits required to represent URL safe char  

ANSWER: 

- A byte is 8 bits 
- Only 4 bits per byte needed to represented the 8 bytes in a date 
- 8/2 = 4 

FINAL ANSWER: 
- Only 4 actual bytes needed to represent hash 

、タイムスタンプのハッシュが合理的に最大で4 URLセーフ文字で表すことができる

どうだろう。あなたはこれに答えましたか?私はかなり良い開発者だと思っていますが、私は2のべき乗を計算することを心配しなければならなかったので、何年も前です!

+5

どこが*最小長* URLセーフな文字列を探していたとしますか?それは本当に仕事ですか? – BrokenGlass

+0

さて、文字列とハッシュの時間を表現するのではなく、今夜真夜中からの秒数を表すのはなぜですか? DateおよびTimespanクラスを使用してすぐに実装できます。 – psr

+0

バイトではなく、ビットを考えます。そして、base72エンコーディング。 –

答えて

3

多分私質問の意図を誤解しますが、

var timestamp = DateTime.Now.ToString("yyyyMMddhhmmss"); // or whatever DateTime source 

は無い、独自の「URLセーフ」すべきですか?

+1

は実際にはUtcNowである必要があります。これは、コードがタイムゾーンとDSTで複数回同じ値を生成する可能性があるためです。 – Yaur

+0

はい、あなたは正しいです。一方、タイムスタンプのソースは、この例ではファイルの変更時刻です(今は.Now/.UtcNowではありません)。だから、私はそれらがいつでもUTCになることを期待しています。 – Frank

5

これはほとんどFizzBu​​zz問題のように思える...要件

DateTime.UtcNow.ToString("yyyyMMddhhmmss"); 

またはそれに非常に類似した何か良い答えであるとインタビュアーとして、私は書いていない、誰の非常に懐疑的になるに基づいて彼らは問題を不必要に複雑にすることを選んだからです。

関連する問題