**歡迎訪問我的個人博客轉發請注明出處:http://wensibo.top/2017/04/13/2017Tencent_review/ **
前言
先做個自我介紹,本人大三狗一枚,就讀的是廣州一個普通的一本大學(非985、211),專業是比較尷尬的電子商務(非計算機學院,連C的課程都沒有就只有Java),但是一切的尷尬並沒有阻擋我對Android開發的熱愛,自學一年多差不多兩年了,基礎以及開發的技術也掌握的相對成熟了。在即將要變身大四狗的關鍵節點看到了騰訊爸爸暑期實習生的招聘,便刻不容緩地參加筆試,很開心順利收到面試通知,可惜最終止步二面,以下是我此次面試的整個過程,希望對大家有所幫助。
伏筆
一面的時間是11號下午2點鍾,因為對酒店的位置不熟悉,所以提前了兩個小時出發,下公車過馬路的時候下起了小小雨,所以撐起了雨傘,這時站在我前方的一個中年女士回頭看着我的雨傘,我似乎看到了她眼神中對雨傘的渴望,所以走上前去給她撐傘,她愣了一下說她不是想要撐傘,只是想到今天自己忘記帶雨傘了不知該怎么辦。送她走過馬路的過程中,我告知她要去參加騰訊的面試,她說面試所在酒店的老板是她朋友(蜜汁劇情😂),后來告別的時候她說祝我好運並叫我記得跟面試官說我今天運氣很好喲(尷尬連 😳)。其實面試結束之后覺得此事很蹊蹺,但也被她說中我一面運氣很好,所以也很感激這位陌生的中年女士吧!
一面

來一面的人很多,等候的會議廳里顯得有點嘈雜,不過很意外的是來面試的學生中男女比例相當,更可以說女生稍稍比男生多一丟丟,看來程序媛也很努力啊!
2點過幾分鍾,系統發短信提醒我可以面試了,騰訊的高效可見一斑,以下是正文。
我:敲門,問好,深深鞠躬並雙手遞上簡歷。一面的面試官有些許靦腆,偏瘦偏黑,坐得很直,第一感覺很Nice。
面試官:你好,先做個自我介紹吧。
我:將自己准備了許久的自我介紹順利地講了一遍,面試官很認真的聽並逐點看我的簡歷。
面試官:聽完自我介紹之后,問道:你是自學Android還是學校里有相關的課程。
我:苦逼的我當然是自學的啦,大一的時候學校教的是Java,老師很好,也是我在大學期間覺得唯一的一個好老師了。講自己從一開始通過看郭霖的《第一行代碼》入門,到中間走了許多彎路去看了一些補習機構的教程視頻,再到后來自己總結出了一個學習路線圖,並開始專注於看優秀的圖書和勤打代碼,並且做了一些比較拿得出手的項目和維護着一個個人博客 。
面試官:頻頻點頭,似乎很同意我的學習歷程並且對我目前的狀態表示滿意。接着問,知道Android中的ANR嗎?解釋一下。
我:知道,ANR就是Application Not Responding ,即應用程序未響應,之所以會造成這種異常是因為Android是在主線程即UI線程中更新界面的,但是如果在UI線程中進行過多的耗時操作就會堵塞主線程從而造成ANR,具體造成ANR的原因有三個:Activity耗時操作超過5s,Broadcast Receiver 超過10s,Service超過15s。
面試官:似乎很滿意,接着問道,那Android中是如何避免ANR的?
我:這些問題因為都是很基礎的,並且面試前復習過了,所以對答如流。我說我舉一種方法吧,例如AsyncTask,具體介紹了他的doInBackground和updateProgress以及postExecute三個方法的使用以及參數的類型轉換,還分析了AsyncTask的缺點,就是它所維護的線程池大小為128,同一時刻只能有5個工作線程和一個緩存線程,如果耗時操作工作量巨大就會導致線程池大小不夠用,這就是它的缺點,另外我還介紹了它的解決方式,就是由一個控制線程來處理AsyncTask的調用,判斷線程池是否已經滿了,如果滿的話就停止處理。
面試官:一番回答下來面試官從看着簡歷到一直看着我並且頻頻點頭,似乎對我的回答十分滿意,我也暗自竊喜。接着他就問除了AsyncTask之外,有用過Handler嗎?具體解釋一下它的實現過程。
我:這種問題可以說是每次面試必問的,並且自己也研究過源碼,對Looper的實現機理十分熟悉,所以又是講了一大堆。
面試官:對我的回答十分滿意,並問我是不是經常看源碼?
我:還好,畢竟也不是什么源碼都看,如果被問到沒看過的就尷尬了,還是謙虛點。
面試官:Android應用程序之間是通過哪些方式共享數據的?
我:File,Sqlite,Content Provider,Service,BroadCast Receiver,Intent,同個Application內部的話還可以通過靜態變量共享數據。
面試官:點點頭,這個面試官很喜歡點頭。那能不能說說Content Provider的生命周期?
我:感覺有點懵逼,四大組件中似乎很少接觸到Content Provider的生命周期,自己也不是很確定,就說生命周期不是很懂,但是我可以說一下它的實現機理,就說了Content Provider,Content Resolver之間的使用規則,具體到程序間的URI。后來回學校之后查了一下,發現Content Provider並沒有生命周期這一說法,不知道面試官是問錯了還是故意挖坑給我跳的,好在沒往里面跳。
面試官:開始問到簡歷上面的項目,先問了Volley的實現機理。
我:因為之前寫過四篇文章來介紹Volley,所以Volley的實現機理很清楚,便給他詳細的介紹了起來,具體的可以看我的這篇Volley源碼分析 。
面試官:你剛才對Volley的實現機理講的十分詳細,調理也很清晰,很不錯,那你知道為什么線程池里面是有5個線程在循環呢?為什么不是6個7個或者8個呢?
我:哎呀,這個問題倒是沒有細細去想,但是當初也很奇怪為什么會定5作為全局常量呢?會不會因為5是開發者的幸運數字呢(黑人問號 😂),后來想了一下對面試官說,可能是因為Volley面向的網絡請求是請求量比較小但是請求比較頻繁的操作,所以5應該是剛好能夠處理得來的,又或許5是一個經過大量的數據實驗之后得到的一個相對符合的數量吧!
面試官:笑了笑,其實我也不是很清楚。(尷尬 😧 ,面試官好像想逗我一下)。接着問:說道網絡請求方面,你能不能說說像QQ這種IM的通訊機理是怎么樣的?
我:有點緊張 😰 ,因為復習時間比較短,所以還沒仔細看網絡方面的知識,所以就大概說了一下4層結構還有3次握手。
面試官:似乎覺得還可以,繼續點頭。接着問:Volley網絡請求了哪些數據類型?
我:String字符串,圖片,XML,JSON。
面試官:服務器是自己搭的嗎?
我:尷尬了一下,不,不是自己搭的,是用到了一些天氣和全國城市的接口數據,因為當時在做調試,所以沒有心思去搭建一個服務器,不過在大二的時候學過WEB開發,對Tomcat比較熟悉,並且簡歷上的第二個項目就是我當初做的Blog項目,所以對服務器的搭建還是有一些心得的,接着就跟他說了一些搭建的步驟。
面試官:對我的回答很滿意,畢竟學Android的如果能夠對服務器端有比較深的認識的話在做數據測試的時候是可以省去團隊的很多開支的。接着問:說說XML、JSON、GSON有什么樣的聯系?
我:這個很簡單了,有接觸過的應該都知道,XML全稱叫做可擴展標記語言,它的結構相對簡單,可讀性強,但是對於一些比較復雜的數據結構就很難存儲,JSON的話剛好彌補了XML的這些缺點,至於GSON的話,是因為Google的一個開源庫而得名的,這個開源庫可以很方便地將JSON數組轉換為對象,這在開發中簡化了將JSON的字段轉換為屬性的步驟。
面試官:看着簡歷問了我的便簽項目是如何實現的?
我:因為我做過的很多項目都是會寫一些文章來介紹里面實現的機理,如果你對此感興趣,可以看我這篇寫一個小便簽 。
面試官:數據庫的操作用到的是什么類型的數據庫?
我:用到的普通的Sqlite。其實我還可以多擴展點的,例如用過GreenDAO框架,所以還可以說說用了GreenDAO與用傳統的Sqlite的操作的區別。
面試官:說說你用Github做了些什么?
我:有點不太清楚面試官問這個問題的意思 😮 ,就說經常push項目,訂閱了代碼家的郵箱推送,每天會推送一些Github的好項目,所以會fork一些優秀的項目,並且在Indigo項目中積極地發issue。
面試官:點點頭,似乎覺得還可以。學過C/C++嗎?
我:很尷尬,作為一個電子商務專業的學生很怕被問到這個問題,不過還是如實地向他說明情況,沒學過C/C++,但是學過JAVA,數據結構、算法、計算機網絡,並且我在自學操作系統。
面試官:顯然很驚訝沒有學過C,但是考慮到是Android開發,所以也就沒多為難我,並且了解到我自學操作系統露出了笑容,接着讓我說一下算法。
我:咳 😥 ,算法准備的不是很充分,所以雞賊的向他講了最簡單的冒泡排序,還沒講完他就頻頻點頭。舒了一口氣。
面試官:經常寫博客對吧!說說自己寫得最好的一篇博客吧。
我:很欣喜,向他講起了寫Volley源碼的那四篇文章,他也聽得津津有味,感覺自己堅持做的一些事情終於得到別人的認可了,很開心 😊 。
面試官:有沒有覺得自己做得比較自豪的事情但是我還沒有問到的?
我:寫博客啊!向他說道一開始是用的博客園的第三方博客,但是后來很想有自己可以DIY的個人博客,並且很喜歡Material Design所以就花了很多時間來建站,從博客程序的安裝,到域名購買、服務器維護、網站推廣,自己都用了很多的時間和心思,還說了自己很喜歡MarkDown,真心覺得Word可以仍掉了。他邊聽邊笑。
面試官:聽到我寫博客的這個過程很是滿意,對我露出了笑容。看了看時間,說道:面試快結束了,有什么問題想要問我的嗎?
我:面試前就准備好問題了,所以像個小孩子一樣問他我可以問您兩個問題嗎?右手比起了剪刀手。
面試官:當然可以。
我:第一個問題是讓他對我的此次面試做一個評價,第二個的話是想問一下面試官的郵箱,以便在往后的學習工作中請教。
面試官:“HR團隊有規定,面試官不能與學生們私下交流,所以這個請求我可能無法實現,如果接下來的面試有機會的話我再跟你聯系,希望你見諒。至於第一個問題的話,我覺得你挺優秀的,作為一個不是計算機專業的學生能夠在大一的時候就清楚自己未來在Android開發的方向,並且為此而努力着,你說到你寫博客的時候我也很喜歡。” 他講起他與他的同事們在工作中也累計了很多的經驗與知識,但是分享的群體也就局限於他們團隊,他說像我這樣把我學到的知識分享給更多的人,這種也是開源精神的一種體現,希望我繼續葆有這樣的熱情,另外就是我對源碼的研究十分的仔細,回答問題的時候邏輯十分清晰,看來對源碼的理解是十分的到位的,希望我能夠繼續保持這個習慣,這樣我才能夠學到更多的知識。
不出意料,當天晚上接到了二面的通知,第二天早上10點20的面試,似乎覺得自己運氣挺不錯的,也好像應了那位女士說的。
二面

二面前天晚上,因為想到二面可能是總監面,所以抓緊時間復習數據結構、算法還有網絡方面的知識,因為就差這兩塊沒有復習了,記得那天晚上躺在床上看到了一點多😖 ,第二天早早起床也是提前兩個多小時出發,因為適逢上班高峰期,所以過了好多輛公車還是擠不上,好不容易來了一輛,擠上去又被擠下來了😒 ,好在最后終於上了公車,在公車上看到一個好消息,我的上一篇文章被郭霖的公眾號收錄啦!心里是十分的開心啊,因為與郭霖大神也交流了一段時間,並且一直將其視為自己學習的目標,所以自己寫的文章能夠通過他的審核也是十分的開心。也在期待着今天的二面能有好結果。
短信通知進入房間面試,二面的面試官有點胖胖,跟一面的瘦瘦面試官一看就不是同種類型的,似乎更難對付,暗自捏了一把汗。
我:敲門,問好,深深鞠躬並雙手呈上簡歷。
面試官:你好請坐,先做個自我介紹吧!
我:跟一面一樣,把自我介紹順利的說了一遍,當然相比一面也適當加了一些內容,因為涉及隱私,所以就不方便寫出來啦。
面試官:績點很高哦(本人專業課學霸),Android是自學的對吧?學習多久了?
我:跟一面一樣,如是回答。
面試官:印象似乎很深刻,覺得我自學能力不錯,並且學習成績好,應該還是個比較有追求的少年。電子商務專業有哪些課程?(又是這個問題,已經麻痹了😒)
我:像上面的一面回答那樣,我很真誠的回答面試官的問題,面試官邊聽邊點點頭,聽到自己在自學操作系統,就抬起頭向我微微笑(有點開心😊)。
面試官:說一下你這個Volley項目吧!講講你學到了什么?
面試官:像一面一樣,我詳細地講解了Volley的實現機理,並且加上一面面試官問到的為什么是5個線程的問題,闡述了自己對這個問題的看法,面試官從看着簡歷到雙眼凝視我。
我:感覺很有戲,不過也預感總監會問一些比較難的問題,所以還是心有余悸。
面試官:在自己做項目的時候是怎么優化代碼的?
我:感覺總監面問的就不是一般的問題,因為過了一面所以底子怎么樣他應該是心里有數了,所以就問一些宏觀上面的問題,考察我開發的一些習慣,這點對於團隊合作開發是至關重要的,沒有哪個頭想招一些編程習慣不好的孩子吧!所以我就向他介紹了Lint,以及日常經常使用的DDMS里面的traceview,heap,allocation tracker,並且分別介紹他們的功能是怎么樣的。說完一大堆之后自己舒了一口氣,也沒有一開始的怯場了。
面試官:應該覺得我的回答不錯,我介紹每個工具的用途的時候他就點點頭。接着問,如果你來騰訊實習,是想做UI,業務邏輯,還是網絡方面的?
我:很開心能夠被問到這種問題,因為我對UI很感興趣,所以我向面試官說到我對UI的敏銳性比較強,並且向他介紹了Google的Material Design設計規范,因為考慮到騰訊旗下的許多產品並沒有遵循這個設計規范,所以我也就沒有展開比較騰訊的產品(要是說的產品是面試官負責的,不就GG了),而是將MD設計扯到了我的博客網站,向他說我的網站使用的是Indigo的主題,這個主題充分利用了MD的設計規范,所以我一開始見到它的時候就喜歡上了,並且花了幾天幾夜的時間開始搭建並且從博客園遷移到Hexo。后來因為過於激動,向面試官說起今天郭霖收錄了我的文章。(這個細節處理的不是很好,直接向面試官說起了這件事,感覺十分突兀,可能面試官會覺得我有些許輕狂😴)
面試官:禮貌性的笑了笑並且點點頭,並且用MBP打開了我的網站,應該有看到吧!問我怎么看Android的UI中的動畫?
我:有點懵逼,不知道面試官想問哪方面?就說了Android的三種動畫:Tween,Frame,Property(3.0之后推出的),還說了Activity的進入退出的動畫的實現方式,例如使用style定義Activity的淡出淡入效果,還有可以復寫Activity的overridePendingTransition方法實現這個效果。
面試官:似乎覺得我說得不錯,讓我說說我的博客。
我:很開心的向他介紹起整個搭建的過程,並且積極地為Indigo的主題發Issue,解決Bug。
面試官:使用的是Android Studio對吧(因為簡歷上寫了擅長使用Android Studio),以前用過Eclipse嗎?
我:對這方面有很深的體會,因為一開始使用Eclipse很成熟的時候,發現現在很多開發者都是使用AS,但是自己電腦配置又跟不上,並且因為天朝的關系,編譯速度巨慢,Gradle的下載就是隔靴搔癢,但是為了解決這一系列的問題,自己讀了很多文章,並且看了一本十分不錯的書《Android Studio實戰 快速、高效地構建Android應用》,向其介紹起書上的內容。
面試官:很滿意的看着我,問我平常逛什么網站。
我:平時喜歡逛Github,並且喜歡網絡紅人代碼家,訂閱了郵箱推送,每天會推送一些Github的優秀項目,所以會Fork別人的好項目,另外的話喜歡看Android的中文開發者網站,還向面試官表達了Google推出中文開發者網站的時候自己激動的心情,他很理解的點點頭表示贊同。
面試官:績點很高哦(6/175),有沒有想過要考研啊?
我:跟面試官聊到后來,感覺他都不想問我技術問題了,於是就有點開始得瑟起來,也有點High,這點可能是二面被刷的一個原因吧。於是就說自己對考研興趣不大,自己更想在興趣方面(Android開發)有所發展,想早點有立足之地。
面試官:習慣性的還是點點頭,可能心里覺得我這個人不太靠譜吧!接着問,如果公司給你提供實習機會,同時學校給你提供保研機會,那你會怎么選擇?
我:當然會選擇來騰訊實習,因為對考研興趣不大,想盡快抱住騰訊爸爸的大腿,結交更多的良師益友,讓自己更加強大。(現在想起來,覺得回答的有點單薄,也有點讓人覺得自己勢力心很強,唉😴)
面試官:什么時候可以來實習呢?可以實習多久?
我:我在官網的招聘信息中看到,官方要求是6月8月,我說6月已經學期結束了,我可以隨時到公司實習,實習時間23個月都是可以的,聽從公司的安排。
面試官:點點頭,似乎沒什么問題想問了,就問我有什么問題想問我的嗎?
我:跟一面一樣,我想請面試官評價一下我此次的面試。謝謝!
面試官:說了我的一些好話,什么學習成績優秀,有項目經驗,經常寫博客,說要我繼續保持下去,如果有下一輪的話,會安排領導的面試和一輪HR的面試,說了很多。
我:心想面試官覺得我還是不錯的,不過實際上是不是這樣覺得的我就不得而知了,有可能面試官只是不想打擊我而已😂。
面試官:還有什么問題嗎?
我:愣了一下,心想為什么面試官為什么一直要問我問題?也就沒想太多,隨便說,我想請問一下面試官在騰訊工作了這么多年了有什么感受嗎?
面試官:很慷慨的向我描述他在騰訊的一些經歷和感悟,具體的就不方便寫出來了。最后還繼續問我,還有什么問題想問我的嗎?
我:很尷尬的笑了笑,覺得面試官很想我問他問題欸,不過自己實在沒有准備其他問題,就說大概就是這兩個問題了,謝謝面試官。(現在想想,面試官是在試探我吧,看看我有沒有膽量問他問題,因為大部分學生都是處於比較怯場的狀態,只會問一些比較平常的問題,既然面試官這么堅要我問他問題,那就是想考驗我與其他人有沒有不同的地方啊,唉,怪自己太年輕!)
最后面試官說:“那我把你的簡歷留下咯!” 我很開心的說好的,非常感謝面試官對我的面試,深深鞠躬然后離開。回到學校之后一直在等待三面的通知,以為會像一面一樣晚上8點多發短信通知,但是直到第二天中午還是沒有消息,自己還是很着急的。第二天下午上課的時候查了一下簡歷的狀態,顯示自己的此次面試已經結束了。
總結
得知自己錯過三面的時候突然間覺得有點懵和失望,不過也還是接受了這個結果。可能是二面的時候自己有一些表達上面需要更加斟酌,並且在向面試官提問上面需要更加大膽一點吧!主要有下面幾點吧:
- 更加深厚的底子,同等實力看學校,同等水平看顏值(微笑臉,自己兩者都沾不到邊)。
- 面試過程中需要更加沉穩,好好回答每個問題,不能夠輕浮。越簡單的問題越應該引起注意,而不是自我感覺良好,整個人要飄起來了。
- 多發揮自己的優勢(我的話是博客可能寫的好一點,當然說自己的優勢時不要太得瑟!切忌!)。
- 面試官想你問他問題的時候,應該表現得跟其他面試者不一樣,記住每個問題都是展現自己與眾不同的機會,好好把握。
- 不要因為一次的失敗就停滯不前,可以不開心一陣,但是要重整旗鼓,對下次面試發起挑戰!
推薦
我想向大家推薦一下一個非計算機專業的學生是如何自學Android的,不過這僅僅代表我個人的學習方式,絕不是最好的。
書籍
網站
其他
- 勤奮打碼
- 勤奮打碼
- 勤奮打碼
- 重要的事情說三遍
后記
這篇文章是我第一次面試后記錄的,這只能是我個人的經驗總結,並不一定全部對,也不一定適合所有人,所以如果大家覺得我有哪些講得不好的請給我留言,希望我們能夠繼續交流。也祝大家在面試工作中好運!
