我们是王者
作为一名面试官,我很少面试语言的细节,这些都是可以通过看书或者手册学习到的。我比较喜欢看应聘者解决问题的能力。
原文太长,就不贴出来了。一次关于浮点数的面试。
很多毕业生都把计算机学成了文科,他们不是在学习理论知识,而是被动接受/背诵记忆这些知识。他们来公司,编程只是他们的工作而已,聘用他们的真正目的是解决问题,用程序解决很多人共性的问题。
我面试时,他们可以使用任何工具甚至Google,当然,我出的题目一般都不能直接个Google到,虽然网上没有现成的答案,但是可以总结出答案。我的观点是,如果你的任何问题都可以用Google直接解决,你不可能成为一名特别优秀的程序员。
你搜索到的是数据,即使你保存在了evernote,说白了就是01串,你阅读了,思考了,这些数据就变成了信息,0101010…11101 编程了 int a = 4; 你再继续思考,使用,深化,这些信息就变成了知识。 你会说:『哦,这不是李氏代换原则吗?』
还有我的一个朋友问我公司
作为一名做 Web 开发的 Java 工程师,算法在工作中基本不怎么用到,但为什么面试总会问算法的问题?
现在大家用 JavaScript 都讲求模块化,例如AMD、CMD 之类的。假设网站上要用到的功能都是 JavaScript 模块,它们的依赖关系也是已知的,页面对这些模块的依赖关系也是已知的,例如页面 X 需要模块 A、B,页面 Y 需要模块 B、C。我们也知道通常网站在发布时会把非常多的 JavaScript 源文件打包成少数几个文件,这样可以减少对每一个源文件独立请求一次的开销,但又能保证几个文件能够并行下载。
简化的问题是这样子的:假设只考虑上面提到的页面 X 和 Y,模块 A、B、C,请问该如何打包?说得直白点,应该分两个打包 [A, B] 和 [B, C] 还是就一个打包 [A, B, C]?假设我们已知页面 X 和 Y 的流量,也有数据能够表明多少访问页面 X 的用户会点击打开 Y 的链接,或者是反向。假设我们也有 TCP/HTTP 性能开销的数据。如何计算以便作出判断?
真实存在的问题其实是这样子的:对于好像 Facebook 这样复杂的网站,如此之多的页面和模块以及如此复杂的依赖关系,如何打包模块才能使得用户在下载 JavaScript 文件资源时的时间开销尽可能小?Facebook 是有专门一套概率模型来解决这个问题的,感兴趣的话可以自行搜索 Velocity 相关视频。
你只看着你手头上的问题和工具,当然说不需要扩充工具包了,因为你没想过要去解决更大的问题。你要敢去想象那些看起来无法解决的问题,然后才知道自己缺了什么。