请选择行业
请选择职位
请选择省份
请选择城市

关于码农找工作这点事儿

时间: 2015-04-14 15:37   作者: 51Testing软件测试网采编   点击次数: 
 
  我们都明白一个道理:学习别人的成功是不能重复的,而学习别人的失败是可以避免的。过去好几个月在硅谷找工作的日子里,走了很多弯路,错过了很多机会,最后还是挺过来了,拿到了心仪的offer。于是写一篇经验帖吧,希望小伙伴们以后可以少走弯路。
  毕业于神奇专业,因为看起来很不对口,所以面试机会少之又少。我一共网申了80多家公司,答应给我面试的只有2家!而另外一条途径会有效得多:内推。我的绝大多数面试来自我朋友的公司与朋友的朋友的公司。还有一个我完全错过的途径,是在学校的career fair,这个其实是最直接的方式,一定要在与HR面对面时展现出超凡的人格魅力,不能只是递交简历就走人。
  看有些人找工作真是顺利,投的第一份简历就中了,或者套套他面试时问了什么题目发现自己都会做。其实,他真的是运气好,而依赖运气的成功写成的经验帖就没什么意思了。我走了一条非常艰苦的修行之路,当我回头看时,发现不依赖运气的成功并没有捷径。
  出国的孩子们都是经历过GRE的折磨,那种日子能够熬过去,找工作也一样,也有红宝书、猴哥类反一样的资料可供参考。最重要的网站莫过于leetcode.com,里面的题目都非常非常重要的高频编程题。记得我当初花了两周多的时间过了一遍里面的100多道题目(不要自己做,直接理解答案),过了很多遍。几个月后我再复习这些题目时,已经能够instant recall了,三个小时就在脑海里全部完成一遍。这些题目构成了很好的出发点,很多题目都是由它们引申出来的,所以务必达到不用想就能回答的程度。
  当然,在走leetcode之前有一个重要前提:确定自己是懂点算法和数据结构的。有些HR会用几个问题来确定你是不是学过CS的,比如最简单的running time(average和worst case):hashtable, binary search tree, quicksort, mergesort。如果不能很快想出答案,建议回去补一补课咯。
  很多公司会强调,面试时注重的是你的thought process,不是你给的答案是否正确。我经历的绝大多数面试都没有履行这条。尤其是面试的小哥,喜欢用一道题面试别人一辈子,深信会做这道题的就和自己一样聪明。于是好几次,在题目被问出的瞬间,我脑海里已经有了代码的所有形状。两分钟内交卷,然后剩下半小时谈理想。后来想想,这么干虽然高效率,但是谈理想一事变数很大呀,于是我有了更高的招数,叫做“假装只想到brute-force解法”。举个例子,我在被问到Counting inversions时(自行google),我可以瞬间给出divide-an d-conquer解法,而我从最弱的O(n^2)解法开始,慢慢拖出O(nlogn)来,正好写完时时间差不多。
  很有可能遇到的题目就是没有见过的,甚至当最后揭晓答案时,你也确定自己没有见过类似的。我觉得,如果你是像我一样,认真地做过leetcode这些题库后,仍然遇到不可思议的题目,那么千万不要慌,马上意识到所有来面试的人都没有见过这道题,绝大多数人都吓得不知所措了吧!然后在白板上试验那些你知道的算法,看看能不能套用到这道题上。当你试到某个时,就会获得提示,这表示你已经比其他面试者要强了!
  有些经验是文字无法传达的,比如如何眼神交流,如何对付浓厚的老印英语,如何写一手漂亮的白板代码等等。我觉得只要亲自去onsite面试失败个两三次,自然可以领悟到什么是最重要的。
  当做题已经和吃饭一样自然时,你就意识到,市面上那些书都解决不了找工作过程中最困难的一环——找。老实讲,要想被那些HR相中真是一件难极了的事情,哪怕拿出写PS的精神写出cover letter,我都怀疑她们是不是真的看过。如果你是纯粹把受教育作为找工作的铺垫,那么就一定要让自己的背景看起来是80%正统+20%前卫,不然就像我一样,上一堆天马行空的课,20%正统+80%前卫,被HR无情地忽视掉。于是乎,唯一的行之有效的办法,就是不要放弃,坚信在某个公司里存在一个前卫的HR,欣赏你的传奇经历。
  最后是复习的checklist,面向的是generalist。估计同学们看到这个就忍不住要mark了。但是单看这个列表远远不够,里面每个知识点理解起来都要一番认真学习才行,还可能引出更多知识点。我觉得只要是认真地去准备,资源自然是会在浏览器弹出来的,看得越多,明白自己不会的越多,学得越多,发现自己不会的逐渐变少。
  算法/数据结构:leetcode.com, careercup.com, Cracking the Coding Interview电子书(自己google)。关于算法,我总结出最常见的几类(按照频率粗略排序):
  1. binary search (找出排好序数组中第一个大于a的数)
  2. recursion (找出排好序数组所有子集,使得和为k)
  3. hashtable空间换时间(anagram)
  4. binary tree (找出两个叶子的lowest common ancestor)
  5. dynamic programming (longest.../maximum…)
  6. graph(社交网络如何给你推荐可能认识的人?)
  7. linked list (reverse a linked list in place)
  8. numbers (reverse an integer: 42437->73424)
  9. greedy algorithm (排好序数组找到两个数和为k)
  C++:static, volatile, smart pointer, function pointer, STL, exception, virtual, abstract, const, pointer vs reference, class methods, overload vs override。(可以google出很多总结文章来,对于Java和Objective-C等等也有类似的。)
  面向对象:factory, singleton, observer, MVC, object serialization。
  线程:mutex, condvar, join, detach, deadlock, critical section, atomicity。
  内存:allocation/deallocation, segmentation, fragmentation, heap/stack, virtual memory, page table, LRU cache, memory map, memory pool, reference Counting, strong/weak pointer。
  网络:GET vs POST, TCP vs UDP, TCP/IP, socket, HTTP header, DNS, proxy, SSH, push notification, CDN。
  数据库:SQL Join, indexing, normal forms (BCNF, 4NF), ACID, CAP, constraint/trigger, authorization, view/materialized view, OLAP, data warehousing, UML。
  Unix:chmod, filesystem, process management, system calls, interrupt, special directories/files, df, grep, bash basics。
  其它:regular expression, probability, mapreduce。
  最后就祝愿小伙伴们能赢取HR的欢心。每个人的人生都能成为一个励志的故事。

打印本页 | 加入收藏

上一篇:如何从一名测试员转型为测试管理人员    

关闭  
主要城市: 北京 上海 杭州 广州 南京 武汉 长沙
全部城市: