采访失败:我认为谷歌很艰难

时间:2012-03-17 03:44:58

标签: c# .net byte bits

好的,我一直在接受一些艰难的采访,但这太荒谬了。给了我一个问题,给出了一个笔,纸,计算器,“URL安全”字符的定义,以及20分钟完成问题。问题是(我记得最清楚):

  

编写一个函数来生成一个表示给定的唯一URL安全字符串   我们正在部署的IIS Web服务器上的文件修改时间点   明天。 “时间点”的解决方案是一秒钟。

     

“URL安全”字符的.NET RegEx模式= [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安全字符表示。

你怎么回答这个问题?!我觉得我是一个非常优秀的开发者,但是我已经很多年了,因为我不得不担心计算两个人的权力!

2 个答案:

答案 0 :(得分:5)

这似乎就像FizzBu​​zz问题......基于要求

DateTime.UtcNow.ToString("yyyyMMddhhmmss");

或者与它非常相似的东西是一个很好的答案,作为一名访谈员,我会对没有编写任何代码的人表示高度怀疑,因为他们选择使问题变得不必要地复杂化。

答案 1 :(得分:3)

也许我误解了问题的意图,但

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

应该是唯一的并且“URL安全”,不是吗?