說在前面,面試時(shí)最好不要虛報(bào)工資糟袁。本來字節(jié)跳動(dòng)是很想去的判族,幾輪面試也通過了,最后沒offer项戴,自己只想到幾個(gè)原因:1形帮、虛報(bào)工資,比實(shí)際高30%肯尺;2、有更好的人選躯枢,這個(gè)可能性不大则吟,我看還在招聘。我是面試Android開發(fā)的锄蹂,3年經(jīng)驗(yàn)氓仲,下面是面試流程:
一面
1.插件化。啟動(dòng)activity的hook方式。taskAffity敬扛。
2.okhttp支持HTTP2晰洒?http2的功能有哪些?tcp方面擁塞控制啥箭?tsl的握手和具體的非對(duì)稱加密算法谍珊。非對(duì)稱名稱
3.handler的post(Runnable)如何實(shí)現(xiàn)的。callback急侥,runnable砌滞,msg的執(zhí)行優(yōu)先級(jí)。
4.阻塞是怎么實(shí)現(xiàn)的坏怪?為什么不會(huì)阻塞主線程贝润?
5.求二叉樹中兩個(gè)節(jié)點(diǎn)之間的最大距離。
6.206含義铝宵,未修改資源是哪個(gè)打掘,302含義,301含義
7.多進(jìn)程通信問題鹏秋。binder優(yōu)勢(shì)尊蚁。aidl生成的java類細(xì)節(jié)。多進(jìn)程遇到哪些問題拼岳?
8.動(dòng)態(tài)代理傳入的參數(shù)都有哪些枝誊?非接口的類能實(shí)現(xiàn)動(dòng)態(tài)代理嗎?ASM的原理
9.Application和Activity在Context的繼承樹上有何區(qū)別惜纸?二者使用上有何不同叶撒?
10.任意一顆二叉樹,求最大節(jié)點(diǎn)距離
二面
1.設(shè)計(jì)一個(gè)日志系統(tǒng)耐版。
2.內(nèi)存泄露的分類祠够。怎么查看內(nèi)存泄露的問題
3.touch事件源碼問題。
4.組件化的問題粪牲。module和app之間的區(qū)別古瓤。moduler通信是如何實(shí)現(xiàn)的。
5.native奔潰的日志采集腺阳,怎么處理落君?
6.注解實(shí)現(xiàn)一個(gè)提示功能:如果int的值大于了3需要提示。
三面
1.介紹下flutter的啟動(dòng)流程
2.介紹下flutter與weex的區(qū)別
3.組件化介紹一下
4.webview中與js通信的手段有哪些亭引?
5.介紹下flutter_boost的原理
四面
1.適配器和裝飾模式各自特點(diǎn)和使用場(chǎng)景
2.視頻編解碼是怎么做的
3.三色球排序
HR面
1.詢問了除字節(jié)跳動(dòng)以外绎速,還在看其他工作機(jī)會(huì)么?分別是什么
2.字節(jié)焙蚓、XXX公司纹冤、XXX公司洒宝,你的優(yōu)先級(jí)是什么,為什么萌京?
3.之前薪資待遇是多少雁歌?你期望的薪資是多少?
4.平時(shí)有什么愛好知残?
5.了解職位需求嗎靠瞎?
6.有沒有想問的?
這是我在某論壇看到的故事橡庞,我知道我們很多程序員都有一個(gè)大廠夢(mèng)较坛,但如何針對(duì)大廠進(jìn)行面試準(zhǔn)備,如何和 HR 聊天扒最,比如談錢等等丑勤,很多程序員就顯得手足無措了。本文就根據(jù)自己一些見解談?wù)勥@些問題吧趣。
什么是合適的候選者
在介紹如何面試之前法竞,這里先從公司的角度來分析:”到底什么樣的候選者是公司所需要的技術(shù)人才?“就我在現(xiàn)在這家公司的一些面試官經(jīng)驗(yàn)來說强挫,一個(gè)具有如下特征的Android程序員是我們所需要的:
- 具有本科及以上學(xué)歷(名校更好)
- 具有2年及以上的工作經(jīng)驗(yàn)(名企更好)
- 技術(shù)扎實(shí)岔霸,有技術(shù)追求和工作激情
- 良好的溝通和協(xié)作
在上面的四條中,其中第3條是最為重要的俯渤,即技術(shù)呆细,技術(shù)是決定能否通過面試的最重要最直接的原因。一般來說八匠,越是大公司絮爷,其對(duì)技術(shù)的要求就越高,盡管部分崗位并不需要那么好的技術(shù)梨树,但是為了對(duì)候選者做出區(qū)分坑夯,其面試過程仍然會(huì)面試一些稍微深入的話題,相信大家都有所體會(huì)抡四。
除了技術(shù)以外柜蜈,良好的溝通和協(xié)作能力也是比較重要的。也許很多人覺得這個(gè)比較抽象指巡,心里會(huì)想:”你怎么知道我有沒有良好的溝通和協(xié)作能力呢“淑履?其實(shí)這個(gè)問題并不難,面試過程就是一次溝通過程藻雪,如果不能和面試官很好地溝通秘噪,這就說明候選者的溝通有問題。如何很好地和面試官溝通呢阔涉?給如下幾點(diǎn)建議:
- 禮貌和尊重缆娃。
- 聽懂面試官的問題并直接回答。
- 謙虛謹(jǐn)慎瑰排、態(tài)度友好贯要。
下面對(duì)學(xué)歷和工作經(jīng)驗(yàn)做一些說明,學(xué)歷并不是一個(gè)硬性要求椭住,即使候選者學(xué)校不怎么好也是有可能通過面試的崇渗,這就要求候選者技術(shù)非常扎實(shí)。而工作經(jīng)驗(yàn)京郑,之所以是2年以上宅广,這是因?yàn)樯鐣?huì)招聘的對(duì)象一般都是有一定工作經(jīng)驗(yàn)的,而1年工作經(jīng)驗(yàn)略短了點(diǎn)些举,拿百度來說跟狱,社招的最低級(jí)別一般為T4,差不多剛好就是2年經(jīng)驗(yàn)左右户魏。
這里做下總結(jié)驶臊,理想的候選者應(yīng)該是這樣的:
- 扎實(shí)的技術(shù)功底,有技術(shù)追求(必須)
- 態(tài)度叼丑、溝通和為人都很好(必須)
- 2年左右工作經(jīng)驗(yàn)(基本必須)
- 名校关翎、名企、高學(xué)歷(非必須鸠信,加分項(xiàng))
基本來說纵寝,滿足1和2就能通過面試,3和4都是次要條件星立,但是一般來說不滿足3就很難滿足1爽茴,不要說特例,木有參考意義贞铣。
由此可見闹啦,技術(shù)是面試結(jié)果的決定因素。那么到底技術(shù)掌握到什么程度才能比較輕松地通過面試呢辕坝?說了那么多窍奋,好像和Android沒有一點(diǎn)關(guān)系,下面就開始以Android為例來分析下面試過程所需的技術(shù)酱畅。
技術(shù)知識(shí)梳理目錄
下面的所有技術(shù)知識(shí)點(diǎn)詳細(xì)內(nèi)容都整理在了開源項(xiàng)目【GitHub】,有需要的可以自取琳袄。
1.Java 基礎(chǔ)知識(shí)
- 面向?qū)ο蟮幕舅枷?/li>
- Object類相關(guān):Object類的幾個(gè)關(guān)鍵函數(shù)、String涉及到的常量池概念纺酸,序列化 & 反序列化窖逗。
- 重要關(guān)鍵字:final、static餐蔬。
- 內(nèi)部類:內(nèi)部類的分類碎紊、應(yīng)用場(chǎng)景佑附、內(nèi)部類編譯成class后是怎么樣的。
- 抽象類 & 接口:區(qū)別仗考、應(yīng)用場(chǎng)景音同。
- 編碼:編碼的目的、分類秃嗜。
- 異常:異常體系权均、自定義異常。
- 注解:注解的基本概念锅锨、分類叽赊、編譯時(shí)注解 & 運(yùn)行時(shí)注解。
- 容器:重要容器的內(nèi)部實(shí)現(xiàn)必搞、容器間的對(duì)比必指。
- 內(nèi)存模型。
- 垃圾回收恕洲。
- 類加載的過程取劫。
- 泛型:分類、通配符 & 上下邊界研侣、泛型擦除谱邪。
- 反射:使用。
2.Android 基礎(chǔ)知識(shí)
- Dalvik庶诡、Art虛擬機(jī)
- Activity:生命周期惦银、launchMode。
- Fragment:生命周期末誓、懶加載扯俱、兩種Adapter之間的區(qū)別。
- BroadcastReceiver:基本概念喇澡、廣播分類迅栅、權(quán)限。
- Service:生命周期晴玖、onStartCommand的返回值读存、startService和bindService的區(qū)別、相同進(jìn)程 & 不同* * 進(jìn)程的交互呕屎、IntentService實(shí)現(xiàn)原理让簿。
- 重要的工具類 & 源碼實(shí)現(xiàn):AsyncTask、HandlerThread秀睛、Handler尔当、IntentService、LruCache蹂安、LinkedHashMap椭迎、SparseArray锐帜。
- RecyclerView:緩存原理、和ListView的對(duì)比畜号、Adapter如何適配多種layout抹估。
- 存儲(chǔ):數(shù)據(jù)庫(kù)升級(jí) & 優(yōu)化、ContentProvider弄兜,SharePreference。
- SDK版本升級(jí)的兼容問題瓷式。
- Android的權(quán)限管理機(jī)制替饿。
3.圖片
- Bitmap相關(guān):Bitmap的大小計(jì)算、質(zhì)量贸典、inJustDecodeBounds视卢、inBitmap。
- 幾種圖片格式的對(duì)比廊驼、壓縮据过。
- 大圖加載:BitmapRegionDecoder
4.算法
別無捷徑,刷題妒挎,但是刷題的時(shí)候绳锅,要按照題的類型去總結(jié)。
5.開源框架
- RxJava:操作符的應(yīng)用場(chǎng)景酝掩、重點(diǎn)操作符的內(nèi)部實(shí)現(xiàn)鳞芙、和RxJava的對(duì)比。
- Glide:流程期虾、緩存相關(guān)的實(shí)現(xiàn)原朝。
- Retrofit:流程、動(dòng)態(tài)代理 & 注解解析镶苞。
- OkHttp:流程喳坠、隊(duì)列實(shí)現(xiàn)、緩存實(shí)現(xiàn)茂蚓。
6.性能
- 性能優(yōu)化技巧:?jiǎn)?dòng)速度優(yōu)化壕鹉、布局優(yōu)化、內(nèi)存優(yōu)化聋涨、電量?jī)?yōu)化御板、APK大小優(yōu)化、列表滑動(dòng)優(yōu)化牛郑。
- 性能優(yōu)化工具:TraceView怠肋、Systrace、調(diào)試GPU過度繪制 & GPU呈現(xiàn)模式分析淹朋、Hierarchy Viewer笙各、MAT钉答、Memory Monitor & Heap Viewer & Allocation Tracker、LeakCanary杈抢、Lint数尿。
- ANR
- ANR原因
- ANR產(chǎn)生過程源碼分析
- 信息收集過程
- trace文件分析
- 分析基本流程
- 具體示例
- 如何避免產(chǎn)生ANR
- 性能實(shí)踐:解決過的性能問題,從 遇到問題惶楼、分析問題右蹦、解決問題、結(jié)果 四個(gè)點(diǎn)進(jìn)行闡述歼捐。
7.View
- 繪制流程:measure何陆、layout、draw三個(gè)關(guān)鍵流程豹储。
- 事件分發(fā):事件分發(fā)的原理贷盲、處理過的滑動(dòng)沖突問題。
- 自定義View:Canvas & Path剥扣,實(shí)現(xiàn)過的比較復(fù)雜的自定義View巩剖。
8.架構(gòu)
- MVP:MVP的思想 & 優(yōu)劣勢(shì)、在項(xiàng)目中的應(yīng)用钠怯、
9.源碼
- AMS
- WMS
- Binder
- 應(yīng)用啟動(dòng)流程
- APK相關(guān)知識(shí)點(diǎn)
- APK構(gòu)成:resources.arsc組成佳魔、AndroidManifest.xml、aapt作用及原理
- APK打包過程
- APK安裝過程
- APK簽名 & 校驗(yàn)原理
- dexopt原理
10.網(wǎng)絡(luò)
基礎(chǔ)知識(shí):看一下對(duì)于 <<計(jì)算機(jī)網(wǎng)絡(luò)>> 晦炊,重點(diǎn)是網(wǎng)絡(luò)分層模型吃引、TCP/UDP、HTTP/HTTPS刽锤。
11.設(shè)計(jì)模式
按照23種網(wǎng)絡(luò)模型镊尺、三個(gè)分類進(jìn)行總結(jié),每種設(shè)計(jì)模式包含以下三個(gè)方面并思,至少要準(zhǔn)備常用的幾個(gè):
- 基本概念:UML圖庐氮、簡(jiǎn)單例子、應(yīng)用場(chǎng)景宋彼、優(yōu)勢(shì) & 劣勢(shì)弄砍。
- Android源碼中的實(shí)現(xiàn)
- 項(xiàng)目中的應(yīng)用
12.多線程
- 看并發(fā)編程的藝術(shù),這本書的目錄就是多線程最好的知識(shí)體系输涕。
- 遇到過的多線程問題音婶、怎么解決的。
13.Gradle
- 常用配置莱坎。
- 多渠道打包衣式。
14.插件化
- 插件化的核心思想。
- 幾種插件化框架實(shí)現(xiàn)的原理。
15.組件化
- 組件化的優(yōu)勢(shì)碴卧。
- Arouter:使用方式弱卡、實(shí)現(xiàn)原理。
16.Kotlin
有用到的可以看看住册。
17.多媒體
音頻婶博、視頻播放。
18.大前端
ReactNative荧飞、Flutter:沒學(xué)過的可以了解一下思想凡人。
19.JNI
調(diào)用實(shí)現(xiàn)方式。
所有的知識(shí)點(diǎn)都整理在了開源項(xiàng)目【GitHub】,有需要的朋友可以評(píng)論領(lǐng)取叹阔。
如何和 HR 聊天挠轴,比如談錢等等
首先你面到 HR 了,說明你基本已經(jīng)成為備選人之一了条获。這時(shí)候 HR 會(huì)和你聊很多問題,這些問題都是為了了解你的一些個(gè)人情況的蒋歌。比如說性格啦帅掘、反應(yīng)能力、情商等等堂油。另外大部分公司的 HR 并沒有一票否決權(quán)修档,面試沒有成功多半是有更好的備選人而不是因?yàn)?HR 把你卡掉了。
然后說到談錢的一個(gè)問題府框。首先以最少的工資招到需要的人肯定是 HR 的考核之一吱窝,所以壓價(jià)是很正常的一個(gè)事情。并且上家公司的薪資也是一個(gè)很重要的參考迫靖,一般來說漲薪幅度在 30% 以上是很牛逼的事情了院峡,通常都在 20% 左右。
你的開價(jià)一般就是 offer 的上限了系宜,考慮到壓價(jià)的情況照激,你可以在原本期望薪水上上浮 1K 左右,然后可以根據(jù)面試的情況來有選擇性的開價(jià)盹牧。
- 面的不錯(cuò)俩垃,本來想要 16K 的,那么就多要個(gè) 1-2K 沒啥問題
- 面的一般汰寓,那就報(bào) 16 K 吧
- 面的一般或者不大好口柳,但是又很想進(jìn)這家公司,可以酌情下降 1-2K有滑,這個(gè)主要還是看自己
- 不怎么想去這家公司跃闹,隨意開價(jià)
結(jié)語
如果你想去一家不錯(cuò)的公司,但是目前的硬實(shí)力又不到,我覺得還是有必要去努力一下的辣卒,技術(shù)能力的高低能決定你走多遠(yuǎn)掷贾,平臺(tái)的高低,能決定你的高度荣茫。
如果你通過努力成功進(jìn)入到了心儀的公司想帅,一定不要懈怠放松,職場(chǎng)成長(zhǎng)和新技術(shù)學(xué)習(xí)一樣啡莉,不進(jìn)則退港准。