“那就再爱一次吧”我前女友要有这种魄力就好了# Love - 情爱幽幽
h*6
1 楼
写在前面:
昨天有私事麻烦done版务,来回折腾好几次。done版务始终尽心尽职,最终解决问题,
在此向他表达最诚挚的谢意。
历史回顾:
1.我从上大学才开始接触编程,最早学习的是谭浩强的《C语言程序设计》。当时啥也
不懂,只知道用最直接的方法实现问题,写个素数程序都可以执行几分钟。加之机时紧
张,常常在白纸上写好代码,上机调试,出错,再在草稿纸上修改,然后继续上机调试。
这期间写了算24、黑白棋、俄罗斯方块、模拟选课系统几个程序。
2.后来开始自学C++,买了张盗版VC,还经常去书店看白书。看的书主要分为两类,
Windows控件和C++语法。现在看起来觉得好笑,可惜当时被宏大空泛的书名所迷惑,其
实整本书只讲了怎样在对话框上添加几个按钮。由于对C的先入为主,我也一直认为C++
就是可以随处定义变量并有升级版struct的C。囫囵吞枣看下去的诸多概念也没有时间
消化运用。
这期间写了一些游戏的存档修改器和数据编辑器,写这类东西主要是寻找地址麻烦,找
到地址之后就剩一些累傻小子的活了。
至此为止,我所谓丰富的编程经验仅仅是一些依赖编译环境的编码和调试经验,虽然学
了很多数据结构和算法,但从来没有一次主动的运用到程序之中。
找工准备:
1.最初,我完全没有准备就开始投简历,第一个电话面试过程也就令人啼笑皆非。面试
官让我写斐波那契数列,我写了个递归函数,就一句话,连递归中止条件都没有,必然
会导致堆栈溢出。
int f(int n){return f(n-1)+f(n-2);}
放下电话很久之后,我才发现这个错误,跟面试官发信去解释并附上正确代码,结果
只收到了一封拒信。
2.后来投Facebook,被要求在Linux做一个BUFFET puzzle。
在虚拟机上安装了Ubuntu系统,开始做Hoppity Hop!熟悉环境。接着做Liar, Liar试试
手,却没有通过,盯着题目想了半天,突然省悟到需要用二分法来查找名字,这大概是
我第一次主动在程序中使用算法吧。
接下来的facebull却花了我一个星期。忙着去图书馆借书,学习行脚商人的解法。并根
据点和边的相对数目分级优化、剪枝,甚至还写了一棵二叉树用于表示稀疏数组。一周
后终于通过机器人测试,我感觉自己对于数据结构和算法的理解有了显著提高。
3.此后,终于意识到没有系统学习是不行的。我花了大约两周把CLRS走马观花过了一遍
,并把Topcoder的教程看了一大半,做了其中简单的习题,顺带学习了STL的用法。
Topcoder的教程在这里:
http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=alg_index
说个小插曲,以前我一直习惯用VC6的,可是自从学习STL之后,忍受不了VC6的各种问
题,如不能使用long long, min, max, STL容器叠加时会产生莫名其妙的警告,于是我
毅然转向了VS2008。
有了一定的算法基础之后,我一期不落的参加Topcoder训练,参加今年的google
codejam比赛,并做了前两年的题目,闲暇时还来到版上来做别的版友所遇上的面试题
。这其中,有些是不必要的、过于偏重数学的题目,但我完全凭借着一股激情坚持下来
了。
到后来,我已经能做出每期Topcoder SRM中除了Div1 1000外的所有题目,版上的面试
算法题,也能做到90%以上,于是可以去onsite试试手气了。
4.google面试是失败的,我自以为已经复习的很好了,结果却把求图最短路径的Floyd-
Warshall算法的内外层循环给弄反了。面试官没有当面指出,却拍照回家研究。我直到
两个多星期以后,在SRM中写出同样的算法,却怎么也调不通,这才恍然大悟,原来我
死得不冤。
5.microsoft的面试题就简单得多,但即使这样,我也没有做到完全一次写对。被当场
抓住一个BUG,某变量在循环中没有清零,好在最终拿到了offer,无伤大局。
昨天有私事麻烦done版务,来回折腾好几次。done版务始终尽心尽职,最终解决问题,
在此向他表达最诚挚的谢意。
历史回顾:
1.我从上大学才开始接触编程,最早学习的是谭浩强的《C语言程序设计》。当时啥也
不懂,只知道用最直接的方法实现问题,写个素数程序都可以执行几分钟。加之机时紧
张,常常在白纸上写好代码,上机调试,出错,再在草稿纸上修改,然后继续上机调试。
这期间写了算24、黑白棋、俄罗斯方块、模拟选课系统几个程序。
2.后来开始自学C++,买了张盗版VC,还经常去书店看白书。看的书主要分为两类,
Windows控件和C++语法。现在看起来觉得好笑,可惜当时被宏大空泛的书名所迷惑,其
实整本书只讲了怎样在对话框上添加几个按钮。由于对C的先入为主,我也一直认为C++
就是可以随处定义变量并有升级版struct的C。囫囵吞枣看下去的诸多概念也没有时间
消化运用。
这期间写了一些游戏的存档修改器和数据编辑器,写这类东西主要是寻找地址麻烦,找
到地址之后就剩一些累傻小子的活了。
至此为止,我所谓丰富的编程经验仅仅是一些依赖编译环境的编码和调试经验,虽然学
了很多数据结构和算法,但从来没有一次主动的运用到程序之中。
找工准备:
1.最初,我完全没有准备就开始投简历,第一个电话面试过程也就令人啼笑皆非。面试
官让我写斐波那契数列,我写了个递归函数,就一句话,连递归中止条件都没有,必然
会导致堆栈溢出。
int f(int n){return f(n-1)+f(n-2);}
放下电话很久之后,我才发现这个错误,跟面试官发信去解释并附上正确代码,结果
只收到了一封拒信。
2.后来投Facebook,被要求在Linux做一个BUFFET puzzle。
在虚拟机上安装了Ubuntu系统,开始做Hoppity Hop!熟悉环境。接着做Liar, Liar试试
手,却没有通过,盯着题目想了半天,突然省悟到需要用二分法来查找名字,这大概是
我第一次主动在程序中使用算法吧。
接下来的facebull却花了我一个星期。忙着去图书馆借书,学习行脚商人的解法。并根
据点和边的相对数目分级优化、剪枝,甚至还写了一棵二叉树用于表示稀疏数组。一周
后终于通过机器人测试,我感觉自己对于数据结构和算法的理解有了显著提高。
3.此后,终于意识到没有系统学习是不行的。我花了大约两周把CLRS走马观花过了一遍
,并把Topcoder的教程看了一大半,做了其中简单的习题,顺带学习了STL的用法。
Topcoder的教程在这里:
http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=alg_index
说个小插曲,以前我一直习惯用VC6的,可是自从学习STL之后,忍受不了VC6的各种问
题,如不能使用long long, min, max, STL容器叠加时会产生莫名其妙的警告,于是我
毅然转向了VS2008。
有了一定的算法基础之后,我一期不落的参加Topcoder训练,参加今年的google
codejam比赛,并做了前两年的题目,闲暇时还来到版上来做别的版友所遇上的面试题
。这其中,有些是不必要的、过于偏重数学的题目,但我完全凭借着一股激情坚持下来
了。
到后来,我已经能做出每期Topcoder SRM中除了Div1 1000外的所有题目,版上的面试
算法题,也能做到90%以上,于是可以去onsite试试手气了。
4.google面试是失败的,我自以为已经复习的很好了,结果却把求图最短路径的Floyd-
Warshall算法的内外层循环给弄反了。面试官没有当面指出,却拍照回家研究。我直到
两个多星期以后,在SRM中写出同样的算法,却怎么也调不通,这才恍然大悟,原来我
死得不冤。
5.microsoft的面试题就简单得多,但即使这样,我也没有做到完全一次写对。被当场
抓住一个BUG,某变量在循环中没有清零,好在最终拿到了offer,无伤大局。