首先,放下你手上那些大部头的书和堆成山的资料。
其次,不要觉得“收藏了就等于学会了”,毕竟收藏夹里的资料再好再牛逼,你不去学、不去的话也是一堆垃圾。
接下来,开始入门编程。
先奉上我的刷题笔记:
书的话,只推荐 2 本:
《 Head first Java 》:不急着读完,大概看完前三章,跟着作者玩游戏、解谜题,让你感觉到“原来编程这么好玩”,这本书的目的就达到了。当然,当你熟练编程后,你又会发现这本书其实涉及到了很多重要知识点,属于寓教于乐的类型。
《编程之美》:这本书收集了约 60 道算法和程序设计题目,这些题目大部分在近年的笔试、面试中出现过,作者试图从书中各种有趣的问题出发,引导读者寻找更优的解法,这里也有《编程之美》的配套习题。
接下来,学着刷题。
刷题一定要循序渐进,否则你就会感觉“学完二分法,做二分不会;学完 DFS,做 DFS 不会,学完……”,开始陷入刷题的自我怀疑。
感兴趣的话可以去刷LintCode的 [新手编程必刷 50 题] ,我刷了一部分,感觉还不错:很基础,很小白。
刷完这 50 道题,你就能对算法和数据结构有最最最基本的认识,同时能够极大地提升你对编程的兴趣。
如果一定需要有个“老师”带着你,我之前上过《算法基础班》,老师讲得很详细,用了 Java & Python 双语言讲解,全程都会带着你“码”一遍,有兴趣的话可以先白嫖下前四节试听课,也能让你对编程有初步的认识。
我把这个过程拆成以下六步,当然,大家也可以根据自己的情况调整,仅供参考。
①无脑狂抄。
我刚开始 coding 的时候脑子就是一团浆糊,曾经有一次做一道题做了整整一下午,连个 p 都没做出来。那天我叫的奶茶外卖还把吸管搞丢了,心态直接崩溃。
还好这时候我朋友建议我先照着题解抄,直到抄出题感为止。
你还别说,这个方法确实有效。一开始我觉得我在做一份很无聊很机械的工作,后来慢慢就能看懂别人的思路了,最关键的是不会犯一些基础的错误(比如少了一些符号导致代码编译错误)。
②思考题目的底层逻辑。
站在面试官 /出题者的角度想,这道题考的是什么思想?考察做题者的什么能力?
比如是基本概念、逻辑运算、数据结构的掌握程度?在做题之前多想一点,会让你的做题轻松一大半。
③举一反三,一题多解,多题一解。
这一步其实比较玄学,但又是对于我的提升最有用的一次。看到一道题的时候,想到解法以后再进阶想一下:除了 A 解法,还能不能用 B 解法? C 题的解法,是不是也能用到 D 题上?
会让你有触类旁通的感觉。
④学会讲题,阐述解法思路
这是我在《九章算法班》上学到的“应试技巧”。其实大多数人学算法都是为了找到好工作,而找到好工作最关键的一步就是应对算法面试。
而算法面试并不是把题目做出来就能过,在面试官面前写代码、讲思路非常考验自己的心理素质和逻辑思维,也很大程度的决定你能不能拿到 offer。
所以大家可以去找朋友、老师,在他们面前练习讲题、大胆把思路讲出来。咱虽然是哑巴英语,至少不至于是哑巴中文不是?
⑤找到刷题套路,套模板解题
分享我在 ACM 金牌选手令狐冲老师那拿到的** [算法模板] ,包括面试常考算法和数据结构(二分法、双指针、动态规划等)的代码模板,还把使用条件、复杂度、参考例题**都整理好了。
在《九章算法班》的首节免费试听课上可以获取,令狐老师的课程也敲有意思,大家不妨去试试~
⑥学习算法优化
包括注重代码质量、规范变量命名等。等到了这一步,你就可以搞定大多数公司的算法面试了。
终于到了最关键的一步,我的习惯是会在面试前一周看该公司的面试真题。LintCode上也有详细的整理,并持续更新中。
最后是一些实用面试技巧:
①做一个题之前,先沟通清楚。得到面试官肯定,再开始写代码,写完以后再解释
②不要闷头写,也不要一边写一边解释太多(容易写不完)
③可以要提示,经过提示做出来的题,也是可以拿到 Hire 的,但是先自己努力想一下,别太容易放弃,容易让人觉得不会主动思考问题。
④别和面试官吵架。面试官带着答案来面试你的,不同意见在大部分情况下,都是你自己想错了。
⑤会就会,不会就不会,不要遮遮掩掩,坦诚很重要,容易让人觉得和你沟通“不顺畅” 。
⑥做过的题就说做过,不要故意说没做过。因为他既然已经怀疑你做过了,即使你说没有,他也无法打消这个顾虑,还不如让他换题。
令狐冲主讲的春招公益讲座《 FB 面试官揭露面试技巧:如何做到刷 100 题胜过别人刷 300 题》中包含了我刚才讲到的全部内容,此外,关于提升代码质量的 12 个技巧、在面试中如何和面试官有效的沟通、如何用最快的速度刷最核心的题目等算法面试的方方面面,令狐冲在前四节试听课上讲得很清楚了,感兴趣的朋友可以去试听体验一下~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.