本来想很早起这篇帖子的。万万没想到天空中传来张辽的“没想到吧”四个大字,公司说跨专业申请h-1b 会有问题,收回了offer 。
经历了最黑暗的两个月,开始继续面试刷题,年初拿到两个startup 的offer ,现在已经暂时入驻city 了。当时觉得公司是嫌麻烦甚至无赖,目前小公司也在帮我申请签证,发现确实跨专业不止在背景和面试方面是个坎儿,将来办理h-1b 也存在相当严重的问题,也就不再责备撤销offer 的事情了。虽然每年机会愈发渺茫,仍然求祝福能中签…
前言: 如果是科班cs的话,请直接右上角。由于本人专业和计算机毫不相关,master期间也没上过一门cs的课,有Java基础,但如果涉及到数据结构,算法,系统,可以说一窍不通。过去也向前辈们请教,但从未听说我这个专业转去做cs的,所以摸着黑,一心奔着南墙上撞。
1 前期准备 Projects,datastructure,algorithm,database,和朋友交流 Projects: 这主要是应对HR。找了一段时间的工作以后,一次朋友交流,他告诉我,任何做过的一个project,要能准备出来一个人单口十分钟的量。虽然我到现在也没达到他的境界,但面到后来可以做到不用看resume,任何时间HR打过来,能把做过的东西清楚表达出来。其实现在工作的这个地方第一轮面试我就是一直在大街上边走边聊的,当时房东找人来家里装修,伴着电锯大锤,街上各种汽车鸣笛,bart行人来来往往的背景音度过了那轮面试。打电话中间各种sorry,so sorry, really sorry, pardon me, apologize把学过的英语里能当做抱歉的词说了个遍。 做过的项目,在真实的基础上,往大了吹。因为无论吹多大,咱们也吹不过老美老印,所以别太害羞。
2 简历 网上很多模板,各种“如何让你的简历脱颖而出”这类帖子太多了,就不过多陈述。找美国的同学或者导师修改一下语言词汇。把和Coding相关的词突出一下,比如:RESTService Design [Jersey, REST, Java]. 把括号里的词Bold 投简历我主要用Glassdoor,indeed和找的内推回应不多,据说dice和monster上也很多。每周至少投50份,招聘季的时候如果职位够多的话翻倍。别太在乎description上说的多少经验,即使要求1-3年经验又何妨,万一碰上了呢。
3 准备材料 Leetcode,简直是神器。有意思的是后来我还被邀请加入出题小组(我是有多爱刷题…),不过好几个月没上leetcode,已经不是top10user了。 Cracking the coding interview当初snapchat面我的小哥儿还在视频里举了这本书说这个很推荐。 programming interviews exposed,cmu朋友推荐给我的,当我看到这书封面的时候,感觉它将要把我引到人生巅峰的样子,很激动的立刻就买了。 head first java和同系列的Design pattern (大部分朋友没把这当做必备,但看看无妨,尤其在理解概念和design方面有帮助,值得单独花些时间)。 数据结构,可以找点课件看看,重点还是做题时候怎么用。但面试时候不止一次问到非常细节的如何实现hashtable,我就完整的看了两遍hashtable的实现,到后来又问我"doyou know hashtable?" 我把记得的所有细节(比如initialcapacity和loadfactor),collision怎么办,自己理解的什么时候用到,自己说了5分钟,然后就能感受到那边很开心满足的样子。 基础题,网上也可以找到什么Javainterview 100 questions类似的东西,大同小异。很多概念性东西,比如interface和abstract区别,为什么不能final一个abstractclass,对于我这样基础的人来说,了解的同时也知道如何表达。 Programming Pearls是我当初不知道但后来发现所有人都在推荐,后悔没早点开始看,推荐程度仅次于以上材料。 其他:effectivejava, introduction to algorithm, 其实有太多经典书籍,非常值得研读,能大大提升coding 的B 格。但是如果纯粹为了找工作面试,重点还是前面那些。
4 刷题 以下都是个人的经验,弯路走了不少,所以省去了些自己实践后觉得用途不大的步骤。 翻开那本书前我确实没听说过dfsbfs。所以Ctci每章讲解部分,每字每句每个提到的点都搞懂。然后开始看题,真的只是看看。 最开始,每题想想怎么做和思路,然后直接看答案文字分析。当然了,肯定会觉得一上来就看分析知道思路了没有千辛万苦想出来答案来的爽,但参看前言部分,不是不想思考,是真不知道该怎么想,给我再多时间让我用bitwise解出singlenumber也是做不到的啊! 看完一遍以后开始做题,每道先eclipse写,并加几个testcase,觉得差不多了看看答案。方法错了或者有什么漏掉的cornercase稍微记一下。 做完第一遍大概的感想就是:tmdqueue都不会用呢怎么又来了个priorityQueue,reverselinked list怎么定义了这么tm多的node,我看googlemap用着挺简单的原来graph这么难这么难,recursive究竟在搞毛…? 那确实就是看完第一遍的感受。不过既然真心想探路,那就继续走走看。再做一遍。这一遍会觉得少了点痛苦,但上一段的那些疑问仍然存在。除了OOD ,bitmanipulation ,最后hard 部分和sy stem相关的章节,每题认真在eclipse 上做,不断往书上答案的思路上靠。 第二遍完了其实大部分题还是一知半解,然后开始做leetcode,还是在eclipse上写,然后弄几个testcase,然后发现除了input= null 的情况是正确的其它全不对…找答案,看思路。当时做题时候不懂AC是什么,遇到买股票的题还好,碰到regex那种题就有想死的心了。开始一道挨着一道做的,后来朋友才告诉我刷前几十道基本够用(但看网上面经,wordladder等经典题还是会见到的)。就这样从中等难度的题只能靠看答案,一道道做,慢慢发现其实自己好像明白什么是recursive了,直到碰到了scramblestring… 开始每天5道左右,夹杂着看看基础。第二天记得看看前一天做过的能通过的(抄的)解法,加深印象。这个时候,简单题可以秒杀了。中等题不看别人答案还是很艰难。 没办法,硬着头皮继续做吧。 结果,开窍了。 突然觉得爬楼都不累了,其实现在看来那个时候的感觉只是个错觉,离标准差得远。但至少看到大部分题都能瞬间有一些(网上答案的)思路,偶尔凭借自己的力量还能通过中等难度的oj了。不过难题仍然望而生却。 每天刷leetcode刷的不要不要的,都快忘了还有ctci那本书,再找出来翻开看了看前几章,突然觉得自己像是什么都会了(错觉,不服的话看看hard那章马上就回原型了)。不过这遍看ctci是我全程收获最大的一遍,因为基础的datastructure已经会用了,做了那么多leetcode有些思路也已经会了(背下来了)。再次静下来一字一句的看解法的分析,会发现一步步算法和复杂度的改进,都十分有条理。这遍书看完,觉得有点入门了,这次不是错觉。 再往后,我又回到了leetcode上,开始再用eclipse写一遍,但发现网上面试时候都是不带“自动联想”的,改用googledoc,写完以后粘贴到eclipse里,结果不堪入目通篇syntax括号方法引用错误,不过稍微练练很快就能克服了,习惯问题而已。 再做leetcode,不再注重回忆答案,多想想为什么用这个方法,在doc里简单敲几句话注明思路,这在今后面试帮助很大。每道题完整敲出来,oj跑,查错,循环,直到过为止。 做完这遍感觉长进不少,也发现过去网上那些答案即使能过oj,很多也都很不清晰,没有达到真正面试的要求。看了有的答案标题3lines solution用着库了定义好的method,好像很clean的样子,面试不挂就怪了。 中等难度的题不妨慢点,多想想优化,recursive变成iterative,dfs变bfs,尽量不用库里现有的函数,经常能看到有人写的blog,不同方法的分析,现在电脑里还存着几十个觉得po主很用心分析很到位的帖子,由衷感谢他们和地里人所有的分享。 刷题期间,别忘了不断看看基础,微博上关注了1个经常分享文章的主页,看到有文章分析各种List区别啊 java内存结构啊,碰到觉得有用的就看看,如果帖子是翻译过来的,坚决看英文的,其实更多的是熟悉该怎么能用英文表达。 最后一遍做题,手写。这边真的是长进很大,并且和电脑打完全不同的感觉,长进相当大。 算是为真正的onsite做准备了,cc+leetcode,中等难度的题能够很流畅写出来,但其实难题问题仍然很多,不过实在不懂的话也不再纠结,面试的话随缘分了。 边写边说。非常,非常,非常重要。 交流,开始阶段是我最大的问题,话多了影响写的速度,话少了觉得没有在和人交流,所以在开始的时候先和自己说说思路,然后写题,中间偶尔讲一两句这一步大概是干什么的。最开始叨咕的时候发现语无伦次,自己都听不下去,慢慢就会好了。这一遍做完,感觉像是开始提到那本书封面的人了。 把每一步做好,只要bar不那么高的公司,基本没问题。但如果目标只有flag的话,应该也不会把这帖子看到这儿。剩下的,碰到大家分享的面经,多思考一下,有些很经典的但是书里没有的,挖个帖子看看。曾经被问到treeserialization和de-serialization,后悔没提前准备。 剩下的,看缘分了。
5 面试
6 口语 看到有人总是抱怨为什么第一轮完事就没消息了,开始我也不爽。后来录了个自我介绍,听了一下,差点聋了。 发音咬字什么的注意一下,其实不难,但也许面试官听着会舒服很多很多。另外,虽然我从没试过,但学校能够提供mockinterview的机会,应该帮助很大。
7 心态 尽最大的努力,做最坏的打算。 无论发生什么,被拒或是offer,move on。经历一段时间面试以后要做到面试完就不再去想,放下电话直接准备下一个。 整个找工作过程下来,面了不少,开始时候hr 那关过后基本没消息,之后慢慢更正自己说话方式,开场白,自我介绍,项目介绍,对公司的背景了解,包括一点behaviorquestion ,并且不断刷题。到后来如果把h1b和与职位不match 因素排除在外,第一轮hr 和技术电面都能过。由于背景实在弱,外加上接了offer 入职以后陆陆续续的面试就推掉了,最后只有4 个onsite (其中一个是skypeloop interview ),幸运的拿到3 个offer (其中一个就是最早那个被放鸽子了)。命中率较高就当是对当初那段黑暗期的安慰了,总之,目前这个形势来看,刷题是咱们的必经之路,即使工作后才知道刷题学到的东西和工作可以说毫不相关。
觉得自己走的这条路虽然有些奇怪,但现在算是有个着落了。我相信很少有人和我一样第一遍看完ctci那书只有骂街心情。如果基础比我好很多,就努力往更高的目标努力。 有些经验也是在开始时候走了不少弯路后才意识到的,所以找一找志同道合的朋友偶尔交流一下很有必要,相互激励一下。“偶尔”真的就足够,因为刷题这事儿…每次看到网上有人发帖说一起刷题,各种小群组织的很是生动活泼风生水起,感觉没必要。讨论(交换答案)半天不如自己闷头想清楚。对我来说,别人一天做20道也没法激励和改变我每天只能做5道的基础。 如果已经横下心来转专业做cs ,别去听论坛里“就业形势不好”,“除cs 和统计外根本找不到工作”这类谣言。一定记得:如果没找到工作,原因只有一个,不够努力。 感谢本版各位分享的面经,找工作期间帮助太大了。 感谢小圆。上次发帖被认识的小伙伴认出来了,真心感谢你们的帮助鼓励。 有什么可以帮助到各位的,欢迎留言或私信讨论。
补充内容 (2015-4-5 10:08):
http://www.1point3acres.com/bbs/thread-106824-1-1.html.鏈枃鍘熷垱鑷1point3acres璁哄潧
之前发过的面经合集 |