1. 程式人生 > 實用技巧 >Android開發5年,面試問到底層實現原理,被懟得“體無完膚”

Android開發5年,面試問到底層實現原理,被懟得“體無完膚”

近幾日逛論壇發現了這樣的一則帖子:

從事Android開發工作也有幾年了,最近換工作,基礎確實不太紮實,但做點簡單的東西應該問題不大。結果面試鬱悶了,問的都是如何實現的,原理是什麼之類的,感覺東西很多啊,難道這麼多技術都要了解的的這麼深入嗎?現用現學…雖然聽起來不太好,但是感覺也沒啥問題呀

如何準備技術面試

關於如何準備Android面試,相信大家都有這樣的感受。

我剛工作的時候,對面試總是很恐懼,一方面怕簡歷無法通過篩選,另一方面怕現場發揮得不好,浪費了自己和麵試官的時間。我當初並不知道對比其他求職者,自己的優勢和劣勢在哪裡,也不知道自己到底值多少錢。 面試的時候都覺得面試官很嚴肅,問的問題我也都答不上,肯定沒有機會入職,覺得自己爛透了,也不想浪費時間去面試多幾家了。

現在回過頭看,我覺得當初自己在欺騙自己,我真正擔心的是即使自己認真準備簡歷和麵試也對結果毫無影響,更不敢去想如果找不到工作沒錢繳房租怎麼辦,索性海投簡歷碰運氣。其實認真準備簡歷和麵試是很有用的,因為毫無準備,隨便面試的求職者真的太多了。

工作了幾年,我作為面試官篩選過千份簡歷,面試過不下 100 名工程師。我慢慢發現,招聘真的是一件非常難的事。招的人要有計算機基礎知識,有專案經驗,願意學習而且願意來這家公司。所以只要你有一定的實力,現在的網際網路行業還是買方市場,認真準備總是有收穫的。我希望把這幾年作為面試者和麵試官身份的的經驗給大家,希望大家可以學到從中一些面試的技巧,找到心儀的工作。

作為面試者,我與求職公司的關係

這其實很大程度上取決於自身的“自信程度”,如果自己的技術水平很差,那麼很可能就不自信,不自禁的就把自身的地位放置到了一種“弱勢”的地位。造成這種不自信的情況也有可能是自己學歷很差,沒有什麼值得驕傲或者拿得出手的作品,或者是沒有相關工作經驗。

其實我們首先應當擺正自己和麵試官或者所求職的公司的關係。以前我的上司跟我說過一句話,說“面試其實就像是相親,真的是看緣分,看得上我的我不一定看得上,我看得上的又不一定看得上我”。這不就跟現實生活中,“我喜歡的人不喜歡我,喜歡我的人我不喜歡”如出一轍了麼。求職也是一樣的,市場和人才就像是兩個金字塔,有要求高的公司,自然就有要求不那麼高的公司;有技術超級牛的人,自然就有技術不那麼牛的人,而且往往,底部的人數是最大的,所以作為求職者,我們不用擔心找不到工作。所以:

  • 我和麵試官的地位應當是平等的,互相尊重的:如果你面試過程中,遇到了不尊重你的面試官,你可以向HR提出反饋,而你,也不必進這一家公司,試想,面試過程中,面試官都如此囂張,那麼你進去之後呢(通常面試官都會是你的未來上司)?此外,通常技術面試會有兩輪左右,此後的面試通常是小組長以上的leader面,總監面,HR面,這一點通常可以應用於所有面試官,囂張的面試官的數量越多,你越不應該去這家公司,因為這說明這家公司的風氣有一些問題。所以首先,我們要抱著“此處不留爺,自有留爺處”的心態去面試,不應該向面試官低聲下氣。

  • 上一段說到,我們應該抱著“此處不留爺,自有留爺處”的心態去面試,但是這並不代表我們應當很囂張。其實一輪面試下來,我們對面試官會有一些初步的感受,面試官同樣也會對我們有一些初步的感受。如果整個面試過程中,你特別的“囂張”,但是背後又沒有與之匹配的實力,實在是有點“作”。

作為面試者,我能否向面試官提問?

面試官也是普通人,有可能他比我們更厲害,但同時,也有可能他沒有我們厲害。我們去面試,遇到不會的問題,其實是可以向面試官提出解答的請求的,我做面試官的時候,有問必答。但是,就我作為面試者的經歷,十個面試官有九個不會回答,我和多個面試官探討過這個問題,這其實是有一些套路在裡面的:

  • 面試官其實自己也不懂,或者略懂。通常要解釋清楚一個問題,是要真正的懂這個問題背後的原理,其實很多面試官自己也不懂,問題也很有可能只是從網上“抄來的”。這種面試官的通常表現是:

    • 惱羞成怒的反問:你是在問我嗎?我在面試某大廠的時候就遇到了這樣的水筆面試官。
    • 踢皮球:顧左右而言他,跟你說的很模糊,但就是不給你具體的答案。
    • 拒絕回答:“這個問題你回去搜尋吧”。
  • 有些面試官認為,不應該跟面試者解釋,因為面試者的問題是無窮無盡的。

  • 的確有些問題,一句兩句說不清楚,這種情況其實並不是面試官的鍋。

  • 自己表現實在是太差了,面試官認為“沒救了”,懶得說了。

  • 最好的情況就是遇到會回答你的面試官,本身你就不會,即便面試官只是給你一些關鍵字,或者推薦的部落格,書籍,也是有很大的幫助。

其實,我個人認為,面試中,遇到不會的問題,就應該反問,首先,表現出自己是好學的,遇到問題,是會想解決的。其次,萬一面試官回答了,解決了自己的疑惑,是不是又學了一些新東西?再者,就我當面試官的經歷來說,主動提問的面試者,多多少少都會加分的。

我能否問一些尖銳的問題?

這個其實就很難說了。與面試的表現和公司的文化尤其相關。這需要看具體面試情況決定,如果公司的是傳統的,保守的,而你非常想去這個公司,那麼最好還是不要問。反之,問。如果你面試表現非常好,問,反之,不問。

我問過最尖銳的問題是:“我看網上說貴司的管理很有問題,但是我想了解一下是否屬實,以及,你怎麼看?”。我得到了滿意的回答,並且薪資也並沒有受此影響,仍然達到了我的目標薪資。

面試官問我薪資怎麼辦?

一般來說,初面面試官是沒有權利問這個問題的,而作為面試者,你也是有權利拒絕的。如果初面面試官問了你這個問題,十有八九他在打探市場水平。不過,小組長,總監和HR是很有可能問這個問題的,他們通常會參與定薪,這種時候你仍然可以拒絕,但是一般來說,HR那裡是拒絕不掉的。

面試官問我是否單身?

不用想了,單身 = 方便加班。結婚或者生了小孩嗎 = 有家庭負擔。買了房嗎 = 看你是否穩定,要知道,被房貸押著的人,可是最穩定的。

面試的時候,怎麼進行自我介紹

  • “來,要不然,你先自我介紹一下?”
  • “你先做個自我介紹吧”

面試過程中,總是會有這一幕,但是很多時候你會發現,技術面試官往往在你說這些的時候都在看你的簡歷,而HR和總監只是瞄一瞄你的簡歷,並且有認真在聽你說。

技術面試官往往更在意你的技術

不知道你有沒有注意到這個細節,技術面試官往往在你自我介紹的時候心不在焉,反而是非常認真地在看你的簡歷,為什麼呢?因為通常技術面試官都非常忙,他們不一定有時間提前看簡歷,所以藉著你自我介紹的機會,趕緊讀一讀你的簡歷。此外,還有一種情況是,常規套路還是要走的。

但是總的來說,技術面試往往重點不在自我介紹,所以對於技術面試來說,自我介紹的重要程度並不是特別高,重要的是你簡歷上的內容和你曾經做過的東西,你的技術深度,廣度。沒有這些,技術面試都過不了,後邊的也就甭想啦。

HR和總監往往很重視你的自我介紹

通過了解你做過幾份工作,可以知道你是否“穩定”。通過了解你從什麼地方畢業,可以知道你是否“努力”。通過看你的表述,可以推測出你的交流和表達能力。要知道,很多HR其實招人全靠感覺的。所以面對HR的時候,自我介紹就顯得很重要了,如果你能表現的很優秀,那麼無疑,是加分。總監也一樣,不過,一般他們不會讓你自我介紹了,因為很顯然前邊已經介紹過很多遍了,他們也會直接問HR一些資訊—-面試的每一層都會互相交流的。

如何準備自我介紹?

正所謂知己知彼,百戰不殆。我們只需要弄清楚他們想要什麼資訊,那麼我們就可以給出對應的資訊即可。那麼HR最關心什麼資訊呢?

  • 學歷
  • 表達能力
  • 之前做什麼的
  • 如果有“不正常”的經歷,希望你能主動說明

所以,自我介紹的時候不要說自己喜歡打羽毛球或者游泳了,企業是僱你來幹活的,不是讓你來做運動教練的。事先準備好自我介紹,這樣說的時候就不會卡頓,讓HR覺得你的表達能力,不說好吧,最起碼,不差。可以簡略的介紹一下之前做什麼,做過什麼,什麼職位,至於為什麼離職,HR會問你的,不說也罷。如果有什麼不正常的經歷,可以主動說明。

當然,這並不是希望你利用“知己知彼”去騙HR或者怎樣,誠實永遠是第一位的。

舉個例子:

我叫xxx,2016年畢業於xxx大學xxx專業。曾經任職於xxx公司擔任xxx,完成了xxx功能,之後就職於xxx公司,擔任了xxx,完成了
xxx功能。主要的興趣在於高併發,平時也挺喜歡研究程式碼。這是我的一個基本的自我介紹。

  • 1
  • 2
  • 3

當然,實際自我介紹的時候,應當把這一段稍微擴充一下,顯得更有內容一些。

怎麼應對設計類面試題?

  • 請設計一個論壇
  • 請設計一個壓測工具
  • 請設計一個xxx

“首先,我們需要一個數據庫,資料庫的架構是。。。” — 面對此類問題,你是否直接就開始回答了?錯!大錯特錯!此類題目最大的坑就在於這裡 — 題目太過於寬泛,你所假定的並不一定是面試官所假定的。

因此,回答此類問題的第一個要記住的的地方就是 —一定要確定好所有的條件再開始答題。千萬不能想都不想就開是自以為是的假定一切資料,然後開始答題。以第一個題目為例,你可以反問面試官:

  • 這是一個什麼型別的論壇?
  • 大概有多少註冊使用者?
  • 高峰時期QPS大概是多少?

當你提出問題之後,面試官可能會回答你:

  • 這個論壇是一個討論Go語言的論壇
  • 大概有10萬用戶
  • 高峰時期QPS大概在6k/s

那麼根據經驗,我們可以知道,如果直接用一般配置的關係型資料庫來扛6k/s,還是有點小壓力的,流量只要再往上蹭,很有可能就會掛。但是,目前來說,題目還是不夠清晰,我們還需要把我們想要做的假定向面試官問清楚:

  • 通常來說,論壇都會是讀遠大於寫的系統,這個論壇也是這樣的對嗎?

如果面試官回答是,那麼我們所需要的一些基本資料便有了,我們需要設計一個論壇,這個論壇大概有10萬用戶,高峰時期QPS大概在6k/s,但是一個優秀的架構是可以輕鬆應對高峰時期的。相比最開始的題目“請設計一個論壇”是不是更清晰多了呢?這種時候我們再開始設計,把我們的設計從上往下(概述)講述出來,先講概況,再講細節,最好能在白板上將架構圖畫出來。此外,建議平時多看看架構設計類的文章,例如StackOverflow的架構:https://nickcraver.com/blog/2016/02/17/stack-overflow-the-architecture-2016-edition/。

回答時再加上自己的見解和如此設計的理由,就完美了。

我該選擇大公司還是小公司?

畢業後到現在一共經歷了三家公司。第一家是創業公司,開發團隊10人不到。第二家是大企業內部的創業團隊,開發團隊大約40人。現在是一家比較大的大公司,開發團隊人數規模不便透露。可以說我把類似畢業後去小公司還是大公司的這些問題裡各類答案都經歷了一遍。

先丟擲最想說明的觀點:

  • 自驅力是技術人成長的不二法則。無論業務是To B或者To C,都會有一套對應的技術棧,如果只是滿足於會用,是無法長久進步的。例如,使用Redis做快取,就可以瞭解快取的常見策略,瞭解Redis是怎麼做持久化的,Redis提供的那些資料結構是怎麼實現的,有哪些優缺點,何種時候用何種資料結構,Redis的協議為什麼要這麼設計,Redis裡儲存字串是怎麼儲存的,和C的字串儲存方式有何差別,優劣在哪等等。

  • 經歷一家To C產品的公司,是十分有意義的。做一款To C的產品,你可以獲得:

    • 處理高併發的能力
    • 認識到使用者體驗的重要性
  • 最好能把小公司和大公司都體驗一遍。

大公司和小公司的區別

接下來聊聊小公司和大公司的區別,優劣:

  • 大公司流程真的多,通常別人都會說大公司的流程很規範,其實我認為,相比規範所帶來的好處,大公司的流程帶來的更多的是效率的降低。可能你一個人3天就能做完的事情,經過一大波的流程之後,通常要兩週甚至更多時間才能做完,你會不斷的被阻塞。

  • 開會多不多隻和管理層的想法有關。有的管理層認為多開會無益,那麼整個團隊就會將這種無益的東西降低到最少。反之則多,我任職的第一家公司開發不到10人,但是每天都可以開會。但是,在大公司你能遇到不開會的機率,不高。

  • 只要你能力突出,總是能獲得比同齡人更高的薪資,但是如果管理層摳門的話,前面的話作廢。有的公司認為員工應該獲得該有的報酬,所以他們願意付出給員工比市場價略高的薪資。有的公司則不一樣,既想馬兒跑得快,又想馬兒不吃草。

  • 大公司能給你的增光,小公司做不到。除非你運氣足夠好,能蹭到一家爆發性增長的小公司。

所以,如果要我給出一些建議的話,那就是,在你的能力可選範圍內,去最大的。然後,以後的路程就很好走了。

就先寫到這,碼字不易,寫的很片面不好之處敬請指出,如果覺得有參考價值的朋友也可以關注一下我

①「Android面試真題解析大全」PDF完整高清版+②「Android面試知識體系」學習思維導圖壓縮包——————可以我的【Github】閱讀下載,最後覺得有幫助、有需要的朋友可以點個贊