我想问下 你们觉得算法达到什么样子的熟练程度能基本达到面试官要求(校招)呢

2013-07-29 16:31:22 +08:00
 linzhi
排除ACMer这种个案,就大多数人来说,不被阿里、百度、腾讯、豆瓣、盛大等等这一级别的公司面试官鄙视的算法功底是个什么样子的呢,

就以常用的算法作为描述对象吧,DP、贪心、分治、回溯等等等等。

不包括特别方向的,数据挖掘、机器学习、图像图形啥的。

主要是楼主算法功底太弱了,所以有此问题,,,就DP这类的题目来说,很多就不会做。。。。。
7282 次点击
所在节点    程序员
23 条回复
behappy
2013-07-29 18:54:16 +08:00
我也想知道。 为什么校招算法要考这么难。果然还是我太菜了。
stackpop
2013-07-29 19:15:08 +08:00
校招的时候,楼主所述的公司除了阿里,offer都拿到了。说说个人的一些经验。也面过google us和facebook,虽然最终没有拿到offer。

我觉得如果算法太弱,楼主还是系统地学习和训练一下,去各个OJ分类练习一下各种题目。这个一方面可以帮助你应对各种面试时候碰到这些典型问题和数据结构。另外一方面可以打开思路,让你考虑问题多一些角度。

除此之外,完全新的一些问题(也就是你没有在各种面经以及经典问题中碰到过),你尽量试图去找与他接近的问题的思路,把你一步步解决问题的思路阐述给面试官,我觉得也是不错的,虽然也许你最终没解出问题,个人经验是,很多时候也不会因此否决你。

另外多看面经和经典面试问题,这些是要准备的,很多问题的思路都有用。不是为了碰到同类问题,而是拓宽思路。比如海量数据的题目,没碰到过,要想到确实还是挺难的。

编程之美、以及一些不错的博客、微博上的题目,多看看,开拓思路,积极准备,应对算法和问题求解,基本上也就是这样了。

其实也有算法比较差的进入这些公司的,我觉得主要看你这个人身上有没有足够的亮点让他们觉得你又能力胜任对应的职位。
linzhi
2013-07-29 20:01:51 +08:00
@stackpop 恩,感谢你的面试经验。

面试官的问题,我觉得他只是在考察你的思路,除非遇到那种脑残的知道就是知道,不知道就是不知道的题目。对于不知道的问题,主动和面试官交流,一步步分享自己的想法,说不定也能获得面试官的青睐。

最近也在看面经,面试的问题范围还是很广的,即使精简到最少,至少也要准备四部分,比重由强到弱可以看做 语法 > 算法 > 操作系统 > 网络(针对互联网公司),算法在这四个里面,感觉是投资回报率最低的一个(个人看法),有可能花了很多时间看编程之美,各种OJ,面试时候依然表现不好。当然,我不是说把算法放了全心准备别的。假设就考虑国内这些公司,你觉得什么样子的算法水平可以作为一个一般化的标杆呢。

LeetCode可以算一个标杆,实际上我觉得,上述公司的面试官心里的标杆应该比这个低。。。。。
stackpop
2013-07-29 20:08:18 +08:00
@linzhi 算法和数据结构,就找工作而言,看这个投资回报率绝对最高,相信我。
其它的其实主要还是记忆性质的,所需要付出的努力并没那么大。

互联网公司考算法和数据结构的多点,考纯粹网络尤其是网络工程的不多哈,我觉得可能问你一些socket通信过程之类的和七层协议模型、TCP、UDP协议的基本区别之类的这些常识性的东西
stackpop
2013-07-29 20:11:11 +08:00
@linzhi 有本书貌似叫code interview,以前扫过一眼,觉得不错。

我觉得百度的面试题属于有参考价值的标杆。

我觉得编程之美上的题目,还是稍微有点不那么实用的,但还是经常碰到,比如我面雅虎时就碰到过。
linzhi
2013-07-29 20:14:33 +08:00
@stackpop 恩,,,,那还得多补补算法。

其实 我还计划把Unix网络编程 卷1 套接字联网API 过一遍。。。。。网络方面可以说接触的很少,只学了些课本的知识,,不是这个方向的。
linzhi
2013-07-29 20:17:11 +08:00
@stackpop crack code interview也准备看一下的。

编程之美 这本书。第二章、第三章 面试时候会碰到的,别的两章应该少
binux
2013-07-29 20:22:15 +08:00
如果你没有正好满足这个职位的技能的话,那么算法是最重要的。
通过算法能看出包括但不限于以下几点技能:
1、程序化思维方式
2、性能判断
3、智商

算法题并不要求你一开始就是对的,能在60秒内判断出大致的方向,并且预估出这个方向时空效率是否可行。在5分钟内抽象出问题本质,给出第一个性能可以接受的算法,**通过和面试官讨论这个算法,理解面试官给出的提示**,调整算法。

而xx语言能力反而并不重要,因为
1、互联网不特别强调一定要用什么语言
2、不一定有机会使用一门语言超过30%的功能
stackpop
2013-07-29 20:36:32 +08:00
@binux 赞同,所以我个人也是非常反感抠出一些非常trick的语言特性来考察人的面试官(当然,假设这个特性并不是这个特定语言和其它语言的重要区别)
linzhi
2013-07-29 21:07:19 +08:00
@binux 恩 赞同,虽然只有三点,但是这三点难度都不小。

必须能灵活、娴熟运用一些基本算法和数据结构
Ricepig
2013-07-29 21:15:31 +08:00
其实这些面试题都是考解决问题的能力

只是在应试教育无比强大的大天朝,演变成现在这样的吧。

当然,切题无数也是提高水平的一种方式。
zebinary
2013-07-29 22:39:00 +08:00
我的算法很烂。
我的优势是代码的阅读理解能力,能够快速阅读现有代码,然后以最小代价新增功能,或定位问题。
我的优势很难在面试时体现出来。
shibo501c
2013-07-29 23:03:51 +08:00
@behappy 豆瓣都拿到了啊,个人很喜欢豆瓣~
shibo501c
2013-07-29 23:04:50 +08:00
@behappy 抱歉@错人了
shibo501c
2013-07-29 23:05:04 +08:00
@stackpop 豆瓣都拿到了啊,个人很喜欢豆瓣~
iveney
2013-07-30 01:41:51 +08:00
最起码要达到10分钟写完红黑树并且一次编译通过!


Just kidding :-D
bsbgong
2013-07-30 08:21:40 +08:00
不上OJ也一样,我就不喜欢OJ。

互联网公司确实是要算法的“熟练度”。
还有TCP/IP原理的“熟练度”。重点是TCP/IP中对一些经典算法和数据结构的应用,为什么在这个协议场景下用这种数据结构和算法来处理,因为这是学算法的目的。比如滑动窗口、UDP/TCP的数据处理为什么有那种区别。
同理还有Unix系统。
基本上互联网公司的算法就是这样:先熟练算法与数据结构,再以算法和数据结构的角度来熟练TCP/IP、Unix。

不过,基本上好的公司,要求还是有点的。一般到3面或这2面的时候会考察到DP的水平,所以这是必须。
说起来的话,还有概率论。
breeswish
2013-07-30 08:54:05 +08:00
刷OJ对于提升算法很有帮助
一些著名的OJ:
poj (EN)
BZOJ (CN) (现在应该叫lydsy)
vijos (CN)
RQNOJ (CN)
cxshun
2013-07-30 09:24:01 +08:00
同样是算法很杯具的人,OJ真心没兴趣刷下去啊,感觉有点枯燥。
话说如果数学没学好,算法有希望搞好吗?
celon
2013-07-30 12:32:53 +08:00
算法看看就行,不用背书一样的死记吧。实际遇到的很多问题不是像学校期末考试那样考你记忆力的。如果某公司面试太注重教科书般的算法而不是你的思考过程,你完全可以忽略它。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/77337

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX