工作中几乎用不到算法
对查看候选人如何使用这些工具解决问题的兴趣更大。就像汽车修理工需要正确的工具来修理汽车并使其正常运行一样,程序员也需要正确的工具(算法和数据结构)来使软件正确运行。因此,面试官想找到一个候选人,可以应用正确的工具来解决给定的问题。 在像Google,Microsoft,Facebook,Amazon这样的公司工作的工程师与其他公司不同,在这些公司中,编码只是实现,大约需要20-30%的时间分配给项目。大多数时间都在使用最佳算法来设计事物,以节省公司的资源(服务器,计算能力等)。这就是为什么这些公司中的采访集在算法上的主要原因,因为他们希望开箱即用的人设计可以为公司节省数千美元的算法。 示例:假设您在Facebook公司工作。您提出了时间复杂度为O(nLogn)而不是O(n ^ 2)的问题的最佳解决方案,并假定公司的问题的n实际为生活场景为1亿(考虑到在Facebook上注册的用户数超过10亿)。nLogn为8亿,而n ^ 2为10 ^ 70亿。在成本方面,您可以看到效率提高了10 ^ 7倍以上,这在服务器成本和时间方面可以节省很多。 从用人者角度毋庸置疑,面试是用来筛选候选人的,在这个僧多粥少的时候,就需要提高筛选条件,例如最常见的学历,不是说学历一般的人不好,而是总体来说,学历好的人里面挑选到合适的概率比较大而已,这就是现实。而面试题中,算法相比于其他记忆型的题目,就能很好的体现一个人的逻辑和思路,因而也是一个很好的筛选条件。当然像操作系统,网络,Linux等都是很多公司喜欢考察的点。 所以为了面试还是需要准备学习算法的。 从个人角度进去的第一家公司基本用不上什么算法(血的教训,在学校的时候一定要好好准备),甚至用不上网络编程,基本就是简单纯C开发,因为那些东西早就封装好了(由另外一个组负责开发维护),只需要调用即可。包括后来去面试,主要面试了两类公司,一类是传统通信技术类,一类是互联网公司,前者关注项目本身,以及基本的技术技能更多一些,而后者考察的方面通常比较多,包括操作系统,数据库,算法,网络等知识。 那么面完之后是不是真的就完全没用了呢?确实,大多数时候根本用不上。你写的可能多是业务代码,是业务流程的设计,代码实现可能只是很小的一环。而且现有算法实现一搜一大把,基本不太可能要你自己去实现什么快排,跳表,快排,红黑树之类的算法,但是学习算法有好处。
例如,你可能要根据你的业务排序需求来选择是用稳定排序还是非稳定排序;你可能会根据插入和删除数据的频率来选择使用array list还是link list;你可能为了处理top K问题采用堆相关算法;可能为了某种情况下的快速查找而使用哈希;你可能在设计你的业务数据结构时引用了基本数据结构的思想。 (编辑:鞍山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |