2012-03-17 15 views
4

好吧,我一直在進行一些艱難的訪談,但這很荒謬。我被問了一個問題,給了一支筆,紙,計算器,「URL安全」字符的定義,以及20分鐘來完成問題。問題是(盡我所能記得了):訪談失敗:我認爲Google很艱難

編寫一個函數,產生代表在時間的IIS Web服務器上的文件的修改,我們正在部署一個給定的 點的唯一網址安全的字符串明天 。 「時間點」的解決方案是一秒鐘。

爲「URL安全」字符.NET正則表達式模式= [0-9a-zA-Z\$\-\_\.\+\!\*\'\(\)]

我慌了,只是寫了我的思維,而不是寫實際代碼。他們在查看我的「答案」後駁回了我的看法,因爲我實際上沒有編寫任何代碼。 :(

我寫的是這樣的:。

- 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安全字符,在最具代表性的

將如何你已經回答了這個問題?!我覺得我是一個相當不錯的開發者,但是我已經經歷了很多年,因爲我不得不擔心兩個計算能力!

+5

它說他們在尋找*最小長度* URL安全字符串?有沒有這個任務呢? – BrokenGlass 2012-03-17 03:53:06

+0

嗯,而不是代表時間作爲一個字符串然後哈希,爲什麼不表示今晚午夜的秒數?您可以使用Date和Timespan類快速實現它。 – psr 2012-03-17 03:54:53

+0

認爲比特,而不是字節。和base72編碼。 – 2012-03-17 04:00:50

回答

3

也許我誤解了問題的意圖,但

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

應該是唯一的和「URL安全」,不是?

+1

應該確實是UtcNow,因爲您的代碼可能會在時區和DST中多次生成相同的值。 – Yaur 2012-03-17 04:18:46

+0

是的,你是對的。另一方面:時間戳的來源是示例中的文件修改時間(而不是.Now/.UtcNow),所以我希望它們以UTC爲準。 – Frank 2012-03-17 13:34:26

5

這看起來幾乎像FizzBu​​zz問題......根據要求

DateTime.UtcNow.ToString("yyyyMMddhhmmss"); 

或東西非常相似,它是一個很好的答案,作爲面試官,我會高度懷疑任何人誰沒有寫任何代碼,因爲他們選擇使這個問題不必要地複雜。