
前言
首先,自我介紹一下,我來自廣東某工業(yè)大學(xué)的大四學(xué)生,本科專業(yè)是通信工程。大二開始自學(xué)Android相關(guān),斷斷續(xù)續(xù)地看書,做項(xiàng)目,直到真正找公司發(fā)現(xiàn)始終還是一個(gè)渣渣。
后面自從今年(2017)8月中旬在實(shí)習(xí)的公司離職之后,一直在忙復(fù)習(xí)基礎(chǔ),找工作,所以很多事情都擱置了。后面發(fā)現(xiàn)好久沒寫過文章了,并在秋招中有一些個(gè)人的感受,因此想記錄下秋招的一些有趣的公司的面試,大神們請(qǐng)輕噴哈。
阿里筆試批
以下都是阿里系統(tǒng)的視頻面試
一面北京優(yōu)酷
1.onStart和onResume區(qū)別
2.activity, view,window區(qū)別
3.點(diǎn)擊按鈕的事件傳遞過程,view的事件分發(fā)
4.view的繪制過程
5.handler機(jī)制
6.項(xiàng)目
先介紹項(xiàng)目,負(fù)責(zé)哪塊,難點(diǎn),解決方式
以下是面試官提及到的一些問題
- 框架源碼
網(wǎng)絡(luò)庫比較,Glide和UIL區(qū)別,優(yōu)勢(shì)缺點(diǎn)等等 - 空指針,oom(MAT原理),anr(trace文件查看原因),出現(xiàn)的原因以及如何處理
- 屏幕適配(同一個(gè)apk,一套720*1280圖片,如何適配多臺(tái)手機(jī))
7.情景
- 視頻平緩屏幕放大變橫屏功能如何實(shí)現(xiàn)
- 團(tuán)隊(duì)開發(fā)等等,只選擇杭州嗎,項(xiàng)目角色,對(duì)團(tuán)隊(duì)的向往
二面北京支付寶
講項(xiàng)目
1.設(shè)計(jì)今日頭條首頁有圖片又有視頻的列表
2.設(shè)計(jì)手機(jī)通信錄,如何通過輸入名字快速查找到號(hào)碼
3.一個(gè)非常簡單的問題作為結(jié)束:數(shù)組鏈表區(qū)別
hr面
阿里的hr可是懂技術(shù)的,問的問題相對(duì)多,比如手機(jī)淘寶,手機(jī)京東的技術(shù)上有什么區(qū)別等等,大概40+分鐘。
這是再加上我春招找實(shí)習(xí)阿里的面試經(jīng)歷。
首先謝謝助班還有助班的朋友,幫我內(nèi)推了手機(jī)淘寶技術(shù)部,其中還提了很多寶貴的建議。如果下次還有阿里的內(nèi)推,我建議大家還是早點(diǎn)內(nèi)推,越早內(nèi)推簡歷基本不刷,后面就開始刷簡歷了。
在網(wǎng)上完成的測評(píng)之后還有一道編程題之后(目測還是動(dòng)態(tài)規(guī)劃)一個(gè)星期之后接到一面電話:
一面(57分鐘)
1.項(xiàng)目源碼(Eventbus),數(shù)據(jù)結(jié)構(gòu)(數(shù)組鏈表區(qū)別)
算法(快排怎么實(shí)現(xiàn),兩個(gè)字符串最長的公共子序列(動(dòng)態(tài)規(guī)劃)
2.Java基礎(chǔ)(抽象類和接口區(qū)別,static類,sychronized,==和equal區(qū)別,try,catch,finally)
3.JVM(內(nèi)存泄漏,類加載,雙親委派模型)
4.安卓的(activity的生命周期,自定義view,
view事件分發(fā),handler機(jī)制,內(nèi)存泄露,apk的生成原理和過程)
5.網(wǎng)絡(luò)(http如何請(qǐng)問和返回?cái)?shù)據(jù),從請(qǐng)求到解釋等等)
以上基本90%能答上來,其間我還提及到了C++方面和Java對(duì)比的(析構(gòu)函數(shù),多繼承等等)所以很愉快地過了一面,問的問題比較廣,基本把我學(xué)的都問了個(gè)遍,后面提問環(huán)節(jié)才知道他就是內(nèi)推我的那個(gè)人。 真的很幸運(yùn),后面郵件他也提了一些建議,“小伙子要穩(wěn)重謙遜點(diǎn)等等,哪個(gè)方面要加強(qiáng)等等”。真的謝謝他!
剛好又過了一周接到了2面電話,是一個(gè)非常有經(jīng)驗(yàn)的面試官。
二面(56分鐘)
1.項(xiàng)目(listview和recyclerview區(qū)別、說到listview沒有itemType的時(shí)候,面試官說真的沒有嘛?其實(shí)我已經(jīng)說錯(cuò)了。所以面試出了一題如何實(shí)現(xiàn)listview的itemType、
不同item布局如何避免擦除tag(面試官提醒有沒其他setTag的重寫方法,我說用sp保存tag,面試官還算滿意)、OkHttp源碼(請(qǐng)求方法、請(qǐng)求報(bào)文和響應(yīng)報(bào)文的結(jié)構(gòu)。狀態(tài)碼300-400-500,keep-alive哪個(gè)http版本引入(我答了1.0,很模糊。其實(shí)是版本1.1),所以面試官叫我解釋一下長連接)
圖片緩存庫(由于我說到源碼的弱引用的時(shí)候所以面試問了我虛引用場景)、支付sdk 、Activity的啟動(dòng)模式,任務(wù)棧的管理(面試官一直引導(dǎo)我由哪個(gè)管理的,估計(jì)面試官想我答AMS,ActivityTask相關(guān)的,沒答出來)
listview的tag問題:
http://blog.csdn.net/zhuangxiaozhi/article/details/66551453
2.handler機(jī)制、內(nèi)存泄漏(對(duì)象的創(chuàng)建,生命周期的長短關(guān)系)、threadocal源碼(由于我忘記了,所以面試官又問叫我如何實(shí)現(xiàn)一個(gè)threadlocal場景)、于是我說了互斥鎖的場景,后面發(fā)現(xiàn)自己已經(jīng)挖坑了,所以面試官接著問鎖的類型區(qū)別(對(duì)象鎖和類鎖)、可重入鎖,死鎖怎么產(chǎn)生,如何避免死鎖(銀行家算法)
3.進(jìn)程線程區(qū)別、進(jìn)程的通信方式、Binder的區(qū)別和操作系統(tǒng)的進(jìn)程間通信方式優(yōu)勢(shì)
4.垃圾回收機(jī)制、判斷對(duì)象可回收的算法以及源碼理解(又是問源碼,JVM哪里來的源碼看呢?)
這次真的是問得好深,很多問題都是刨根問底,感覺準(zhǔn)備得還是不夠充足,還有答錯(cuò)的,基本60%能打出來。
后面過了一個(gè)月之后,內(nèi)推的人查到掛第二面了,已經(jīng)沒有技術(shù)面了,一次很接近hr的機(jī)會(huì)就丟失了。
阿里的面試官真的挺有水平的。
總結(jié)就是有時(shí)候面試官不一定要你回答問題,而是看你的思考方式,還有自己了解的深度。還有遇到不懂要自信點(diǎn),并且學(xué)會(huì)轉(zhuǎn)移話題。
騰訊筆試批
一面mig手機(jī)管家
1.手寫快速,c語言版本實(shí)現(xiàn),快排的優(yōu)化,時(shí)間復(fù)雜度,nlogn的其他排序以及對(duì)比
2.項(xiàng)目,當(dāng)時(shí)項(xiàng)目總結(jié)得不是很好,自己進(jìn)了一個(gè)大坑。所以建議自己的項(xiàng)目一定要總結(jié)好。Lv和Rv區(qū)別
3.提問
二面
計(jì)算機(jī)組成原理,gg。
這是再加上我春招找實(shí)習(xí)騰訊的面試經(jīng)歷。
內(nèi)推一面(17分鐘)
師兄的內(nèi)推,真的很感謝他。 據(jù)說騰訊的內(nèi)推是刷簡歷的,當(dāng)時(shí)覺得就沒多大機(jī)會(huì),很多事情想想都是猝不及防的。嗯,騰訊其實(shí)才是我最早應(yīng)該面試的公司,但是和舍友投了久邦數(shù)碼之后,不知為什么有兩個(gè)來自深圳的未知電話(上面寫著騰訊公司),后來打回去是客機(jī),之后一個(gè)星期都沒打來了(已經(jīng)打算放棄了)。有一天晚上做完筆試,不知為何又有深圳的電話打來,一想便知是騰訊的。后來面試完,查找通話記錄發(fā)現(xiàn),后面的一周內(nèi)面試官原來打了我不少于10次的電話。
是個(gè)女面試官,感覺是簡歷面,(好像是拿著題庫來問我)
1.項(xiàng)目負(fù)責(zé)哪一部分,性能上有什么優(yōu)化?
2.圖片的緩存,ANR ,內(nèi)存泄漏
3.自定義View
4.四大組件的生命周期
5.數(shù)據(jù)的持久化保存方式
基本能答出來,后面還是沒過。(應(yīng)該內(nèi)推的要求還是比較高吧)
正式招聘
筆試(4.2)
在線上完成的筆試,題目還是比較難的,涉及到c/c++的比較多,網(wǎng)絡(luò),操作系統(tǒng),數(shù)據(jù)庫,還有兩三道Android,還有一題OC的。問答題是騰訊產(chǎn)品快報(bào)Fragment的功能設(shè)置,面向?qū)ο蟮娜筇匦裕幊淌怯嘘P(guān)單詞的(沒做出來),變形的二分查找。做完就很絕望啊,沒想到某天晚上收到面試通知。
一面(4.12)
其實(shí)我也很絕望,當(dāng)天下午EDA考試,還有兩天的感冒在宿舍睡了兩天。模模糊糊地看了下書啥都不想做,提前交了卷后,打開手機(jī)發(fā)現(xiàn)工作人員打了我8次電話,就急沖沖地趕到了酒店,下著雨,從地鐵站坐了個(gè)滴滴到了酒店,已經(jīng)5點(diǎn)多了,看起來還是好多人哇。(貌似挺多人來霸面的)
后面hr問誰在5點(diǎn)30分前預(yù)約面試還是沒接到面試的上前面,后來我就解釋了一下因?yàn)榭荚嚨脑?,后面就在前排等著,后來收到微信的推送和短信通知,就進(jìn)了某個(gè)房間開始了面試。
面試官先叫我做了個(gè)自我介紹,之后看著我簡歷寫了熟悉Java,就問了比較多有關(guān)Java的。
Java:1.線程安全,鎖的實(shí)現(xiàn),以及各種線程同步方法的區(qū)別。四大引用,重載重寫區(qū)別(我還涉及到JVM的動(dòng)態(tài)分派和靜態(tài)分派),hashmap源碼(jdk1.8為什么要加入紅黑樹)和hashtable區(qū)別,stringBuilder,stringBuffer 區(qū)別
項(xiàng)目和Android:2.項(xiàng)目負(fù)責(zé)哪一塊,圖片緩存策略,廣播的注冊(cè)方式,動(dòng)態(tài)注冊(cè)在activity哪個(gè)方法注冊(cè),好處。數(shù)據(jù)的持久化存儲(chǔ)方式(第二次問了)
3.手寫單例模式(寫多了一個(gè)同步鎖,面試官發(fā)現(xiàn)了),隨機(jī)存儲(chǔ)0-99這些數(shù)到int[100]數(shù)組中,不能重復(fù)(寫得不全,一直在想優(yōu)化算法的問題,一開始還存在數(shù)組越界的問題,又被面試官發(fā)現(xiàn)了)
后面就是慣例問問題,我的問題問得比較傻,也可能是被刷的原因之一,所以建議各位同學(xué)事先好好準(zhǔn)備幾個(gè)問題。
后面問了面試官的建議以及評(píng)價(jià)
面試官最后的回答是:基礎(chǔ)還算比較扎實(shí),但是語言的表達(dá)(先理清思路再回答),騰訊這么大的公司算法也是要過關(guān)的。可能沒給面試官留給心思縝密的印象,當(dāng)晚面試從6點(diǎn)多面到7點(diǎn)多,當(dāng)時(shí)大家還沒吃飯,我是最后一個(gè)面試的。面完一個(gè)傻傻的站在酒店樓下發(fā)呆了一下。當(dāng)時(shí)回到學(xué)校查了下微信顯示“當(dāng)前職位可能不適合您”。最終和騰訊就這樣失之交臂。
富途證券
這是一家由騰訊控股的公司,感覺挺不錯(cuò)的。
一面,評(píng)價(jià)A
1.實(shí)習(xí)做的項(xiàng)目介紹各個(gè)技術(shù)點(diǎn)(要有自己亮點(diǎn))
如界面卡頓(列表緩存優(yōu)化), EventBus注意點(diǎn)
(混淆代碼后注冊(cè)方法被混淆了咋辦,3.0加入APT注解工具)等等
2.Android:oom,內(nèi)存泄露,http請(qǐng)求方法,get,post區(qū)別
- Java相關(guān):
抽象類和接口區(qū)別(忘記已經(jīng)多少次問了)
死鎖,n個(gè)線程n個(gè)資源n個(gè)Lock,如何避免死鎖
4.一個(gè)6升和5升的水壺,沒刻度,如何得到3升水
5.交換變量,不能用中間變量,解決的原理
面試官人很好,交流的時(shí)候有提示
二面跟騰訊的套路很類似,評(píng)價(jià)B*+
1.上來就把做對(duì)做錯(cuò)的題問一下,還有筆試的sql語句不會(huì)寫,繼續(xù)寫,還是錯(cuò)
2.變形二分查找(本人筆試字體丑),繼續(xù)寫
3.馬鈴薯,買和賣各一天,100天,求最大利益
其實(shí)就是股票的買賣最大利益
4.100瓶藥水,有且只有一瓶毒藥水,老鼠喝了7天才有反應(yīng)。問至少多少只老鼠才能找出那瓶毒藥水
CVTE提前批
一面
都是面完一個(gè)面完上一個(gè)。沒有順序,兩個(gè)面試官,看樣子都是搞Android的
1.我項(xiàng)目中的一個(gè)寫到了推送的TCP心跳包,就細(xì)問了一下原理(如何保證后臺(tái)進(jìn)程不被kill等等)
2.線程啟動(dòng)的方法(三個(gè))
3.軟引用、弱引用區(qū)別,見我回答得比較快又爽,就問了下虛引用的引用場景等等
4.Activity的四種啟動(dòng)模式
5.Handler機(jī)制
6.HashMap源碼
7.MVP,MVC,MVVM區(qū)別,用圖畫出來
8.Java垃圾回收 --babalala
9.泛型
10.鎖(sychronized/look&&reentrantlock)
11.手寫算法:找出字符串第一個(gè)只出現(xiàn)一次的字符,秒了。講了下思路
12.講下RxJava的flatMap的原理
13.面試官說沒什么問了,就多問一下多線程的知識(shí)--如何結(jié)束線程(當(dāng)時(shí)忘了就講了一個(gè)不常用的stop)
14.怎么學(xué)習(xí)Android,有沒寫博客(多少篇),有沒開源(多少個(gè)star)
15.有沒學(xué)習(xí)新的語言,原來面試官是想知道有沒學(xué)Kotlin
可能有些是忘記了,但是基本按照自己知道的全部都說了,然后面試官叫我到那邊坐著等一下先,所以知道一面是過了
二面
等了一會(huì),很快就有人叫我上去二面了。面試官是一個(gè)年輕的小伙子
1.首先他一上來就問了一個(gè)算法,據(jù)說是經(jīng)常經(jīng)常問的一個(gè):1 11 111 1111 。。。2017個(gè)1,求輸出
我沒問輸入是什么,然后他就問我輸入你都不知道是什么就開始寫了,整個(gè)過程一直被壓著。他說n是2017,然后我就開始寫了,5分鐘沒寫完。然后他問我寫完沒,再給了2分鐘。后面基本講了下思路吧。那時(shí)候感覺就不好了,有種壓力面的感覺。
2.后來他說這個(gè)先這樣吧,說先問問網(wǎng)絡(luò)吧,HTTP是哪層協(xié)議(應(yīng)用層),說到了基于TCP,然后他問了我如何UDP模仿TCP安全傳輸,然后我就說了下ack序列號(hào)滑動(dòng)窗口等等。有些可能是跑偏了,然后他又說我跑偏了,那時(shí)候真的想直接回去了GG。這個(gè)問題上扯了好長時(shí)間,好像沒令他滿意。就問了一下數(shù)據(jù)怎么安全性,我說了加密,還有ca證書等等。這個(gè)時(shí)候已經(jīng)感覺自己跪了。
3.說到了內(nèi)存溢出,圖片的JPG和PNG區(qū)別,還有5.0加入的SVG,圖片大小如何計(jì)算,圖片如何壓縮,算法
4.然后就問我看過了什么源代碼,我說了一下設(shè)計(jì)模式相關(guān)的看得多(他們比較喜歡問設(shè)計(jì)模式),然后說到了屬性動(dòng)畫原理是反射,然后就問反射的缺點(diǎn)(忘了),再說到了代理模式,就問了下靜態(tài)代理和動(dòng)態(tài)代理區(qū)別。我也忘了。
5.問我如果接到一個(gè)項(xiàng)目,你會(huì)從哪個(gè)方面考慮,從代碼方面講述,還有性能方面等等,后面他又說我跑題了。我整個(gè)人都不好了。
6.最后他說他了解得差不多了。問了一下對(duì)自己的表現(xiàn)評(píng)價(jià),我說我秋招再來吧,面的不好。然后就問了下公司的情況知道嗎,有沒有覺得剛才你覺得你優(yōu)勢(shì)的地方我沒有問出來的等等。
7.知道自己跪了,就禮貌地跟他握了個(gè)手,他笑了一下,他說他也是我們學(xué)校畢業(yè)的。
終面
因?yàn)槊娴貌缓?,所以問HR是否能回去了,沒想到HR跟我說還有一面,心里想,這也能過。后面就是兩個(gè)HR對(duì)三個(gè)人
1.家庭成員
2.職業(yè)規(guī)劃
3.以后想工作的城市
4.想加入的公司
5.對(duì)自己影響最大的一個(gè)人
6.理想薪酬
7.學(xué)習(xí)成績
8.壓力最大的時(shí)間
9.對(duì)提前批的看法
10.有無其他公司offer
11.什么行為是自己不能接受的
12.對(duì)加班的看法
13.父母對(duì)自己的期待
美團(tuán)深圳一面,霸面掛
1.Java:
HashMap的底層和HashMap的hash算法
volatile的含義,使用場景,線程yield的作用
2.垃圾回收機(jī)制,有多少能說多少
3.網(wǎng)絡(luò),OkHttp底層源碼,請(qǐng)求隊(duì)列具體到是一種怎么的隊(duì)列,畫一下請(qǐng)求包結(jié)構(gòu),請(qǐng)求頭有哪些常用字段,如何加快網(wǎng)絡(luò)的加載速度,從客戶端,服務(wù)器方面,代碼優(yōu)化方面等
4.Android:
內(nèi)存泄漏場景,Handler機(jī)制,循環(huán)消息是執(zhí)行在哪里的線程?如果沒有消息,它是一種怎么樣的情景
ListView可以優(yōu)化的地方
apk瘦身
如何讓app啟動(dòng)加快,(冷啟動(dòng)),
插件化原理,hook原理
點(diǎn)擊圖標(biāo)Launcher進(jìn)程啟動(dòng)另外一個(gè)進(jìn)程的過程,binder相關(guān)的,比如client是如何向servermanager注冊(cè)binder的,能說多少就說多少。
activity的啟動(dòng)模式和引用場景
Android如何保持service不給skill掉?有哪幾種進(jìn)程?優(yōu)先級(jí)從高到低。
加載圖片列表的優(yōu)化,oom問題如何避免,bitmap相關(guān)等
viewstub作用
RxJava使用的優(yōu)勢(shì)
MVC,MVP,MVVM畫圖解釋區(qū)別優(yōu)劣勢(shì)
5.假設(shè)有一個(gè)最大線程數(shù)是5的線程池,當(dāng)加入6個(gè)任務(wù)的時(shí)候,你是如何設(shè)計(jì)解決這樣一種場景
6.手寫判斷鏈表有環(huán)
至此,當(dāng)時(shí)找到還算不錯(cuò)的工作就不想再折騰了,所以美團(tuán)毫不猶豫地掛了。但是美團(tuán)的面試體驗(yàn)是非常友好的,為hr和面試官點(diǎn)贊。
至于我去哪里,就保密吧哈哈。
手寫算法常見
1.鏈表:插入,刪除,反轉(zhuǎn),判斷單鏈表是否有環(huán)
2.排序:快排,歸并,堆排,比如第k大的數(shù)
3.實(shí)現(xiàn)一些常見的數(shù)據(jù)結(jié)構(gòu),比如棧等
4.字符串的處理,特別是第一次只出現(xiàn)一次等情況的字符查找。
秋招的一些體會(huì)
上面只是記錄了一些覺得參考價(jià)值較大的面試,就可以體現(xiàn)出Android開發(fā)在校招的一些要求??梢缘贸鲆韵乱恍﹤€(gè)人的總結(jié):
1.數(shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ),特別是大公司的筆試或者面試都可以體現(xiàn)出來
網(wǎng)絡(luò):TCP/HTTP,設(shè)計(jì)模式,Java基礎(chǔ),Android基礎(chǔ)都是需要非常扎實(shí)的。
2.項(xiàng)目,一定需要有自己的深度和亮點(diǎn)。至于實(shí)習(xí)經(jīng)歷那塊,最好是有大廠的實(shí)習(xí)經(jīng)歷,這樣可以通過很多公司的簡歷篩選。
3.再說說一些軟實(shí)力,比如語言的表達(dá)能力,后面多參加幾個(gè)公司的面試就培養(yǎng)起來了,一開始我也不是特別好,后面面多了就成精了。
4.心態(tài),不要因?yàn)橐淮蔚氖《鴼怵H,也不要因?yàn)橐淮蔚某晒Χ湴?。面試存在著一定的運(yùn)氣成分,找工作是雙選選擇。
5.最后,Android的需求確實(shí)趨于穩(wěn)定了,對(duì)于Android開發(fā)人員的要求越來越高,很多需要透過源碼的本質(zhì)去分析,所以平時(shí)更需要嚴(yán)格地要求自己。
以下是個(gè)人看過的一些書籍
1.有關(guān)C/C++:
C primer第五版:http://product.dangdang.com/8976834.html
C程序設(shè)計(jì)語言第二版(至今都未更新,大神出的書):
http://product.dangdang.com/8766529.html
- C++primer第四版:
http://product.dangdang.com/9157098.html
- 數(shù)據(jù)結(jié)構(gòu)和算法
- 數(shù)據(jù)結(jié)構(gòu)和算法分析(C語言描述)
http://product.dangdang.com/8767364.html
(個(gè)人認(rèn)為最好能表達(dá)出數(shù)據(jù)結(jié)構(gòu)的精華就只有C/C++)
- 算法(第4版)【Sedgewick之巨著,與高德納TAOCP一脈相承】:
http://product.dangdang.com/22880871.html
- 有關(guān)Java和虛擬機(jī):
- Java編程思想(第4版)
http://product.dangdang.com/9317290.html
(后來看不下去了,太多,代碼和字太密)
- Effective Java中文版(第2版):
http://product.dangdang.com/20459091.html
(很多人都說它是本好書,你覺得呢)
- Java并發(fā)編程實(shí)戰(zhàn)
http://product.dangdang.com/22606835.html
- Java核心技術(shù) 卷1 基礎(chǔ)知識(shí)(原書第9版)
(師兄送了卷1和卷2,我只看了卷1->>>英文版,推薦)
- 深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐(第2版)
http://product.dangdang.com/23259731.html
- 有關(guān)安卓:
第一行代碼第一版(去年12月出的第二版),Android編程入門經(jīng)典(高級(jí)編程還沒看),Android開發(fā)藝術(shù)探索,Android 源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn) 。
- 有關(guān)操作系統(tǒng):操作系統(tǒng)精髓與設(shè)計(jì)原理
http://product.dangdang.com/20919066.html
其實(shí)更推薦深入理解操作系統(tǒng)那本書。
最后的,有需要Android面經(jīng)總結(jié)的,可以在下面留個(gè)郵箱,看到的一定會(huì)回復(fù)。