狗狗昂赛

(如果你是来想看有什么题的,然而并没有,但是个人觉得面什么题真的不重要。。如果感兴趣,请往下看。。)
背景:
在职跳,但是也没想好要不要跳,哥们内推直接昂赛。0[刷题],准备一个月,断断续续(有家有娃)每天一道,周末3道的样子。一共刷了没有70个题。

准备过程:
recuiter 很nice 给我发了很多东西,其中有一个帖子 https://www.quora.com/How-should … tware-engineer-role 真的很有用,我就按这个上面一步一步来的

面试过程:
5轮面试的题都不是很难,有Medium有Easy,对Easy 你没有看错,而且5道题,有2个是Easy,1一个介于Medium和Easy,2个非常经典的Medium。不知道是不是运气好,但是感觉总体Bar很低。这里我不想讨论面了什么题,因为这些都不重要,请往下看。

面完感觉:
感觉不好说,虽然题都很简单,但是有两个Easy做的很差,是的两个Easy的String processing 做的很差。而且Easy的题很难把握面试关想要考察什么。

有感而发:
因为准备时间短,所以基本吧经历集中在比较经典的算法,DFS,BFS,DP(一维),还有基本的概念Graph,BST,HashMap,LinkedList。后面开帖详细的分享如何融汇贯通这些算法。做的题基本都是Medium,一般一个Easy热身一个Medium睡觉。这里基本没有连String processing,也给面试埋下伏笔。所以千万别忽略最基础的东西!!!教训!!!面完之后和我哥们讨论,他面过一些人,他说他已经没有bar了,问的都是Easy,然后还有很多人不会,这里我并不是想表达什么,只是想说面试本身就是考验实力的。如果你想看看面经侥幸过关,那还真不如去直接买彩票好了。但是看面经有没有用,那要看你怎么看:

个人觉得看面经首先心态要放平,因为有些面经不是很详细,所以你看了并想不出所以然,但是别慌,面试前慌了你就乱了,所以如果你心态不好,建议面试之前几天别看新的,可以想想或者动手写写之前看过的面经比较详细的题。还有对于比较详细的面经,这里就更要小心了,因为出题的时候最开始只有一句话或者这一些条件,至于最后完整的条件,是需要你一步一步和面试关交流去发现和探索的,这个交流的过程直接影响整个面试的走向,(打个比方Dota前期对线5分钟直接后面滚雪球,前期崩了,后期翻盘就比较难了,对手得犯错)所以看着这种详细的面经,背后是有着写面经大神交流的过程的,你前面交流顺畅,算法思路分析正确,那面试官也会更容易理解你写的code,这里又是关键点了,如果写完code面试关不理解,这就是red flag(个人观点)如果你能解释清楚为什么这么写并且面试关明白了,那恭喜你翻盘了,但是不是每次都能翻盘的,记住如果你的思路对,但是面试官很弱,半天都想不出来,那还是很悬,就算面试官后来想明白了,也可能会给你扣上交流能力差的feedback。

这里有同学就会问,那详细的也不行,不详细的也不行,这怎么搞?对,没法搞,这就是我为什么不发题的原因。但是如果你想明白的这其中的tradeoff,带着平和的心态,去了解一下大概的Bar在哪里,找到自己的差距和薄弱的地方,这才是面经给你的价值。所以楼主告诉你,现在狗狗Bar真的不高,只要你认真看看CTCI。(这里又要说CTCI比leetcode好就好在上面的题目是原始的面试题,对原始指的是面试最初告诉你的就是那么一句话,你需要自己去想怎么交流出一个能写code的题)

说了一堆,如果有不同观点,轻轻拍。最后祝各位好运!

好奇楼主在哪个site面的?

楼主 google很喜欢考graph 然后graph的题不太熟练 怎么办

在MTV面的

(写完这一堆,发现和CTCI基本也就差不太多了。。。真的,好好看CTCI,慢慢就通了)
一般来说Medium的graph题 基本都是DFS或者BFS 加tracking一些state。如果比较复杂的state可能要和DP又连在一起,但感觉Medium的题都不会。我的Graph开始也很烂,你可以专攻利口这一类型,刚开始不懂可以看别人的代码,但是一定要自己写写,并且搞明白,然后可以找猫画虎,做一道新的,做不出来没关系,在看答案。练着练着你就发现DFS,BFS的code structure就掌握了,剩下的就是根据不同的题,怎么track不同的状态,可以object gobal passing,或者是每次更新状态。然后你就慢慢熟悉DFS和BFS的区别了。在复杂一点题可能会DFS完了在BFS。但是万变不离其中。
有几个tips:

  1. 用visited记录避免重复访问
  2. DFS一般都是recursion,recursion关键是想好结束条件和怎么掉下一个recursion,掉下一个recursion的state怎么update
  3. BFS一定要用queue,有时候在queue存的每个node可能需要一些meta来优化,BFS写起来code会长,因为自己要maintain state,而DFS借助了语言的recursion特性,本质上的时间空间复杂都是一样的
    4。在复杂一点像扫地机器人之类的unknown maze,再加上backtracking的思想,每次DFS之后在退回原地就行
  4. 如果是在写不出来,用别人的code多跑跑test case,这样就能看清execution flow,对于理解很有帮助。

如果掌握这些Medium的题就都能做了,至少思路会有的。Graph题还有一个难点就是,有些题看似一堆数字,但是要用Graph来解,这就要归于Graph其实也是一种数据结构,如果一个题你发现HaspMap,BST,LinkedList,Two pointers之类的都不行,这时候就要看看能不能找到一些节点和边的关系,用Graph结构来解。一个典型的例子就是汇率。

多谢楼主耐心回复 领教了 准备lc和 ctci 把graph这两块好好看看.

多练,无他。。。

请问lz:你有一轮是专门考domain knowledge吗? 多谢

感觉不好说,应该没有考,但是上来第一轮考的题让我从test cases说起,最后越说越多。。然后code没时间写了。。。

楼主想问一下你是先过的HC还是先team match的呢?谢谢!