編程學習網 > 程序人生 > 程序員面試技藝 > 程序員面試經歷
2015
08-16

程序員面試經歷

背景


自從2013年離開北京后,就沒有在固定單位上班了。
期間搗鼓過一些東西,也掙了點小錢,日子也沒有到過不下去非要找工作的地步。
只是覺得自身仍有不足,作為技術,還是想再開闊一點,再深刻一點,再專業一點。
也沒有去刻意地投遞簡歷,本來老婆懷孕,自己在家,時間比較多,所以就寫寫博客,所以會有一些來自私信的機會。
既然有機會,那就愉快地去追一下,本篇,就記錄一下最近幾個月的一些經歷。

云XX


這個公司招聘全棧,要求精通編譯、操作系統、計算機網絡,要精通一門底層語言,比如匯編或者C,要精通一門高級語言,比如C++或者Java,沒有.Net方面的要求。
因為不是自己投的,一般看到諸如要求精通的,我就呵呵一下,然后就掃其他的了,但是機緣巧合,可能HR妹妹比較具有親和力,所以也就答應應試。
約的兩周后聊,不過由于老總臨時有事,就和CTO哥哥先聊下,主要聊的一些內容是:
操作系統的進/線程區別,Linux Kernel進線程調度的機制,以及操作系統原理概念上的調度算法。
分布式存儲的一些問題,比如分布式鎖、鎖性能、Master-Master多主架構和Master-Slave架構的各自優劣,等等。
作為第2個問題的延續,會聊到CouchBase和HBase的一些實現原理,但并不深入,還會聊到性能上的東西,比如為什么不選擇HBase。
自己的一些項目經歷,一些比較泛的知識點,看似隨意,但應該是在考察知識結構,是否全面。
知道哪些開源軟件或者框架,看沒看過源碼,有沒有自己的理解等等。
Java多態的實現和體現,接口和抽象類的關系,我從java和vm層面大概做了敘述。
第二天,和老總聊,這個比較有趣,因為老總的技術很厲害,而且也很堅持己見的,這次聊的很久,大概有3個小時,主要還是爭論,其實到這一步基本就沒打算要這個offer了:
碩士為什么沒有畢業。
天文科學家為何要選擇Python來處理數據,而不選擇其他的語言。我說這是歷史原因,然后老總說這個設計方向不是用來處理這個的。這里也有點小爭議,略過吧。
為什么要在Python虛擬機上做核間并行,在kernel里做會不會更舒服。
聊到老總面過的一些人,包括985出來的,和BAT出來的一些T,能把編譯、裝載、鏈接,說清楚的人不超過5個。我說你們公司要求挺嚴格的,老總說不是他們要求嚴格,是行業整體水平太低。很多做WEB開發的,后面的東西一點不懂,但也能做,你說能做好嗎。這一點,各自有不同的看法,但分歧到沒有大到要爭論的地步。
中途我問到了一個問題,為什么選擇Erlang作為開發語言。因為這家公司目前主要做云通訊(之前CTO自己的定位),而這個問題也是本次面試最大的爭議所在。

老總說你應該自己做做homework,當時我是覺得吧,通過這個點讓人家介紹下業務,畢竟沒業務聊啥都是比較泛,自己想有點針對性,但被這么當頭一棒,覺得自己是在浪費人家的時間,而且“做做homework”如果你聽了也會有點火吧,呵呵。

從這里開始,基本各種爭論的東西也就出來了,比如,聊到ZooKeeper:

老總:ZooKeeper太重,在他們的架構中是臃腫的或者累贅。
我:可以不用zk,但一致性和同步也得自己實現吧。
老總:他們自己基于paxos算法實現了。同時列舉了一些行業內的反例,說其實用zk等開源框架拼出來的系統,都存在邏輯上的問題。
我:提到了twitter。
老總:如果你有機會可以去twitter看看,我們現在做的是取代他們的老框架。
我:雖然我沒在twitter工作過,不過各種Con,各種Summit,各種SlideShare,還是有看過的。

后來又聊到多主結構,和主從結構:


我:我之前有了解到,類似p2p這種,捕獲網絡拓補變化的速度會比較慢,隨著節點數的上升,可能時間復雜度過高。
老總:我們從不空談問題。很多業內觀點,認為這種架構不好,但事實上我們有一套老系統性能特別高,目前的通訊也是基于這個,30-40個節點沒有什么問題。
我:那心跳是怎么維護的?
老總:是由每個節點互相維護心跳。
我:好的。但好像這樣也是將同步和協調機制耦合進去了,我覺得Hadoop和HBase那種Master-Slave的,抽象出NameNode或者MasterNode,然后維護一些metadata在zk上,也是已經被成功證明的一種架構呀?
老總:我問你,如果狀態節點和數據節點之間發生網絡割裂怎么辦?
我:發現網絡拓補這塊不通后,肯定要進行節點間復制,并等待網絡恢復,比如阿里那次光纖切斷事件。而且,您為什么一定覺得狀態節點一定是單個節點呢?
老總:所以,它們之間并沒有解耦。
我:哦,我說的解耦不是說徹底不協作了,只是從設計上按照獨立角色原則分離開來,這樣清晰一些。
老總:那還是耦合的。

期間,老總還覺得Java不是一門比較好的語言,當然,這一點我也有同感,但我覺得生態可能更重要一些。

最后,還是回到了那個Homework問題:


我:X總,您應該是一直受西化文化的影響,所以覺得問這個問題會沒有什么價值?因為您的homework回答,讓我感覺有點過于直接和難以接受。
老總:公司需要以效率為重。
我:其實,我個人聽HR說您的技術很厲害,我也搜過一些新聞和對您的采訪,我覺得我個人是作為一個follower來取經的,不過這么干脆的拒絕,的確我是第一次見。
老總:講了很多公司開會的方式,比如先做好準備再開會,否則要一直給某個不懂的人講,會算白開了。
我:這個我同意,但我是面試,所以不清楚你們公司的業務,只是想聽聽作為創始人,對這個技術選型的看法,而且很多大牛,如果你郵件給他,他也會很謙虛,很詳實地回答你的問題。

期間又聊到StackOverflow,我提到,記得以前有個人對于回答問題的人,表示了感謝,站務覺得這是廢話,后來有很高reputation的人站出來發聲:至少在我們的國度,如果有人幫了你,說聲謝謝,是有教養的體現。如果覺得表示感謝這樣的話,過于社交向,那不如去掉reputation和回答者的個人鏈接好了。

后面的很多問答,其實也是在互相表達團隊溝通的一些原則,我只是覺得,公司不是招聘機器人,大家都是專家獨當一面,開會高效,無可厚非,但人與人之間普遍存在差距,一個好的leader,如果這么冷面,那團隊氛圍會利于激發創新么?

的確,老總說的很多都是有道理的,比如美團,就有要么牛逼,要么滾蛋之類的宣言,但我個人覺得任何事,得3-7開,不能那么絕對。
覺得像云XX這樣的公司,走Geek路線,全招的是專家或者有潛力成為專家的全棧牛,而且對智能硬件、云通訊、實時系統有自己的一套理念和實現,還是很有前途的,祝福一下吧。

極客XX


教育類公司,職位好像是大數據就業班主管布道師,就是研發管理大數據方向的課程。
這個是從獵聘上來的機會。
HR要了簡歷后,覺得太簡單了,我又大概補充了下,3天后,跟數據中心負責研發的leader聊,主要內容是:
算法課程,在大學和在培訓機構的課程,有什么不同。
對方leader表示算法雖然沒什么用,學起來沒有干貨的感覺,但是可以幫助一些學員就業,比如一些公司會考算法。
Hadoop和Spark。
項目經歷。
上班時間,課程開發的一些過程,等等。
有個槽點就是,對方leader把C#念作"C井",我當時有點慌,如果糾正說C-Sharp,會不會留下不好的印象,如果說C井,好像又很別扭. : ]
本來覺得聊得還行,結果HR后來說,可能此方面直接項目經驗少了些。

民XXX


這個機會,接觸了來回有2個多月的感覺,對方的總監是個很好的人,上海交大的碩士,素質很高。
因為接觸的時間挺長,所以對我的一些擅長和不足都有較深的了解,去上海時,和總監聊的少一些。
去上海終面,先和負責數據中心研發的leader聊,人非常不錯,平易近人,聊的內容也挺廣泛。
項目經歷.
Hadoop.
HBase是否適合作為行為分析的后端storage,二級索引等。
淘寶dubbo.
Phoenix.
Storm的混合拓補問題,比如同時支持最少一次和僅一次的數據處理語義。
SOA,異步,原子服務。
Spark.
流式處理。
實時系統構建,主要問下有沒有一個完整的設計和想法。
Kafka,全局序的一些限制和問題。
目前數據中心的研發狀態和產品。
這個leader哥,人真的很好,哈哈,中午請我吃了一餐。
下午和CIO聊,主要是聽人家的看法,因為他之前以為我是應聘數據科學家,后來發現是想聘基礎平臺的搭建,傾向于工程師,所以數據挖掘和數據倉庫沒有問太多。
大概介紹了互聯網金融行業內的一些生態,對數據倉庫和ODS的異同表達了一些見解。
對數據中心期待的數據倉庫,有什么,應該是什么,做了一些設計上的表述,讓我更明白一些已經實現的,和沒有實現的,從整體上有個把握。
數據挖掘的一些東西,比如分類、聚類、關聯規則、有監督和無監督學習等等。
音頻和視頻數據的處理和知識發現。
結構化數據和非結構化數據,在生產環境的一些強制要求。
北京、成都、上海,各個研發中心的一些情況,看更傾向于在哪里,從事何種工作,大數據方向的還是在上海。
敏捷,自我驅動,等等內容。
基礎平臺的重要性,以及領域專家發現知識的價值,等等關系。
工程師文化。
CIO感覺深不可測哈,因為他之前在國外一些挺著名的搞DW的公司做,所以經驗很豐富,理論素養也很高,因為聊得東西很廣泛,所以我更多是在聽,表達的比較少一點。

結語


僅作流水記錄,感謝每個給機會的人和公司,呵呵。

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取