[知乎]作为一名做 Web 开发的 Java 工程师,算法在工作中基本不怎么用到,但为什么面试总会问算法的问题?
我一般不在面试的时候,问候选人算法题。因为,通常算法题,都是最容易事先准备好答案的。
我一般会问候选人在实际工作中,碰到的问题,然后追问、追问、再追问。看看他面对这个问题,究竟做了多么深入的思考,以及尝试过多少种解决的方案。
再换一种思路,假设我给你一个算法题,你以前没有遇到过,你会有怎样的思路?打算如何下手?有哪些可能的尝试方向?通过这些我也可以考察出你的水平高低来。毕竟,工作中遇到的大多数问题,都远远比那种一句话能够说清楚的算法题,更加复杂。
再换一个角度来谈,面试策略。一个面试官给你一道算法题,说明他至少是清楚的。这当然也是他懒惰的一种体现。你如果能够通过现场的思考,将他引向更加有深度的领域,那你就转变一个主导者了。
再谈一点:你到这里来提问,似乎想有人告诉你:算法并不重要。我可以贴一个以前的文章给你,算是帮你说两句,题目是《算法算老几》
http://www.iteye.com/topic/65655
1、无论是做软件,还是任何其他行业,甚至包括做人,很多时候,都是在解决问题。遇到麻烦,想办法解决。
2、最简单的问题,就是能够在书上找到现成答案的问题。比如:哪种排序的效率更高。
3、如果一个问题,书上没有现成的答案,能够通过Google、查找相关论文等等手段,找到答案的,也是简单问题。
4、如果,搜索不到现成答案,但是能够找到询问的人,问出答案来。比如Google不到,只能到论坛来求人,哀告,冒着被隐藏的危险提出问题。无论当事人觉得如何困难,其实都是小Case。
5、如果无论如何都找不到答案,怎么办?自己找呀!比如,这是一个开放源代码的项目,那就看代码。如果源代码都不开放,那就Hacking。反编译、debug、单步跟踪、设断点、打log,用尽一切办法,找到答案。
6、有很多问题,根本就是左右为难,你也知道了整个困难的全貌。然后怎么去解决他呢?左思右想,反复权衡,尽可能找到最好的方案。甚至如果有创意的话,能够想到一个两全其美的解决方案。
7、更加困难的问题是:它根本就没有正确答案,没有最优解。连如何评价各种解决方案的好坏,都说不清楚。怎么办?你还是得做出决策,然后执行。
8、再进一步,它本来就没有问题。但是,一个原本已经解决了的问题,你现在来考虑,有没有可能存在更好方案。比如:新的切入点;新的框架;新的语言;新的开发模型。这就更加困难了。
不再把人的问题牵涉进去了,那是没底的。
那么,算法算老几?