寫在最前面:有時候某人的放棄,將會成就你更好的選擇!
剛開始面試的時候我真的是處處碰壁,面一家掛一家,面完之后懷疑自我,是不是自己真的太菜了找不到作業,還是真的是像網上所焦慮的那樣,Android開發真的是要涼了?這次跳槽經歷讓我明白,作業本身就是雙向選擇,一家不行再換一家,總有合適的,千萬不要因為別人的一句話就全盤否定自己、懷疑人生,一定要自信,
戰況(時間排序)
-
最右二面掛
-
猿輔導一面掛
-
伴魚offer(兩輪技術+一輪HR)
-
順豐二面掛
-
百度二面掛
-
微博一面掛(一面就問意向薪資,面的還行,要多了沒有后續了)
-
老虎證券offer(兩輪技術+一輪HR)
-
滴滴一面掛
-
快手簡歷掛
-
位元組offer(三輪技術+一輪HR
-
美團HR面(三輪技術)
-
騰訊HR面(三輪技術)
非技術準備方面
離職原因方面
其實大家換作業的原因,無非就是馬云所說的兩種情況:“錢沒給到位,心受委屈了”,對我而言,更傾向于前者,再加上考慮到自身成長方面原因,但是面試在講離職原因的時候一定不要過于實誠,請盡量往個人發展這個方向上靠攏,切忌一定不要說現任公司的壞話,尤其是跳槽頻繁或者像我這種第一份作業不滿兩年的,一定要想好自己的離職理由,我有幾家公司明顯技術答的還行,但是因為離職理由掛掉的,
簡歷投遞順序方面
如果你對自己很有信心的話,可以直接投你的意向公司,如果信心不夠強烈建議跟我一樣先面幾家體量不那么大的公司漲漲經驗看看現在外面的行情,順便通過面試復盤自己的技術短板,然后再投自己中意的公司,
心態準備方面
既然準備了要離職,就不要被任何其他事物影響心態,心態真的很重要,剛開始面試的時候我真的是處處碰壁,面一家掛一家,后來在一家面試程序中被面試官瘋狂嘲諷,面完之后懷疑自我,是不是自己真的太菜了找不到作業,后來也幸虧隔天有一家公司給我發了offer,讓我明白了不是自己的問題,作業本身就是雙向選擇,一家不行再換一家,總有合適的,千萬不要因為別人的一句話就全盤否定自己,一定要自信,
技術準備方面
剛開始面試的時候是準備把面試過的所有家都寫詳細的題目出來的,后來發現寫了面經發在牛客許愿offer的都掛了,也不知道是什么奇怪的玄學,后來就沒發過了,不過其實面過來面過去就那些問題,做了下面的歸納總結,
Java
-
怎么判斷一個字串的字符個數,比如說中文
-
Java的例外機制,為什么這么設計,什么時候用什么
-
HashMap,經典的就不一一列舉了,說幾個可以拓展的
解決hash沖突的方案有哪幾種
1.7和1.8有什么區別(鏈表頭插尾插方面)
hashmap高并發場景會怎樣
高并發鏈表成環會有什么問題
hashmap擴容時到底干了什么(位運算程序)
concurrentHashMap原理 -
String,StringBuilder,StringBuffer
-
ArrayList多執行緒下會有什么問題
-
內部類持有外部類參考的原理是什么
-
volatile有什么用,原理是什么
-
為什么會有StackOverflow,stack的大小是多少
-
虛擬機
Java虛擬機和Android虛擬機有什么區別
Android兩種虛擬機有什么區別
類加載程序
記憶體模型
四種參考型別
class檔案格式
synchronized底層實作原理
synchronized放在普通方法和靜態方法上有什么區別
synchronized的鎖實際是保存在哪里的(物件頭)
雙親委派機制,為什么要用雙親委派機制,如何打破雙親委派機制
記憶體收集整理的演算法
Android
-
Activity
Activity的生命周期
dialog會不會影響Activity生命周期,為什么
Activity的啟動模式(還會伴有場景讓你說這種場景選哪個合適)
Activity任務堆疊以及taskaffinity -
Service
Service存在的意義是什么
startService和bindService的生命周期
startService和bindService的區別
startService和bindService分別適合應用在什么場景
Service可以執行耗時操作嗎
IntentService和Service的區別
Service和執行緒都可以用來執行后臺任務,為什么選Service不選執行緒,明明執行緒用起來更簡單 -
broadcastreceiver
廣播的原理是什么 -
View的繪制流程
詳細講一下View的繪制流程有哪些
View的第一次繪制是怎么調到的
View的后續繪制是怎么呼叫的
View的onMeasure,onLayout,onDraw都分別用來干什么
除了上面三個,還有哪些關鍵的方法
invalidate的原理
invalidate和requestlayout的區別
requestlayout的作用范圍是多大
一個View被添加后第一個回呼的方法是哪個(onAttacthToWindow)
為什么View.post能拿到view的寬高
講一些位元組做過的自定義VIew的例子 -
觸摸事件分發
講一下Android事件分發的流程
怎么處理滑動沖突
怎么判斷手勢
講一些自己做過的處理滑動沖突的原理
事件分發
handler這套機制的原理
IdleHandler是什么
handler的postDelay怎么實作的
Message有個快取池,快取池大小是多少知道嗎
MessageQueue的中沒有訊息的時候為什么不會ANR
知道epoll的底層原理嗎
epoll是阻塞的嗎 -
ANR
ANR是什么
ANR的原理
什么情況下會發生ANR
如何檢測是否發生了ANR -
SharedPreference
SharedPreference原理
SharedPreference的優化
SharedPreference的commit和apply區別
什么情況下會選擇用SharedPreference -
序列化
Serlizeable和Parceable的區別
什么情況下選擇用哪個,為什么
有沒有了解過別的序列化方法
RecyclerView
RecyclerView的快取機制
RecyclerView和ListView對比
Recycler是怎么進行回收和復用的
LayoutManager怎么進行布局的 -
記憶體泄漏
記憶體泄漏的常見場景
怎么檢查記憶體泄漏 -
Binder
Binder原理
Binder比起其他跨行程的通信方式好在哪
網路
-
HTTP報文格式
-
HTTP在網路體系架構中的意義是什么
-
HTTPS和HTTP的區別
-
對稱加密和非對稱加密
-
TLS四次握手的程序
-
CA是干什么的
-
校驗證書的詳細程序
-
HTTPS一定是安全的嗎
-
TCP和UDP的區別(高頻)
-
HTTP1.0,1.1,2.0的區別
-
有沒有實際了解過HTTP2.0到底比1.1快了多少
-
詳細解釋“Keep-Alive”有什么用
-
UDP為什么比TCP快(存在誤導,UDP不一定比TCP快)
-
UDP可以進行廣播為什么TCP不行
-
為什么要三次握手,四次揮手
-
為什么握手僅需要三次而回收需要四次
-
HTTP是基于什么協議的(一般來說是TCP,可以借此引出QUIC,KCP等協議進行進一步的探討)
作業系統
-
執行緒間通信方式
-
執行緒的幾種狀態
-
行程間通信方式
-
執行緒和行程的區別
設計模式
設計模式沒有必要全都看,重要的是你會的幾種設計模式他們的優點是什么,缺點是什么,在哪些常見的地方用到了他們,要能夠舉一反三,例舉幾個我面試時常說的,
-
單例——單例一定要特別熟,特別高頻,尤其是DCL為什么這么寫,synchronized為什么那么加,有什么講究,volatile在這個地方起到了什么作用,不加會導致什么問題,靜態內部類的單例怎么能夠保證執行緒安全,等等,
-
Builder——常見,知道什么時候用就行了
-
責任鏈——要能擴展到Android的事件分發,okhttp的攔截鏈等,
-
觀察者模式——要能知道Android中哪些地方用到了觀察者,什么情況下使用,比如廣播機制就使用的是觀察者
-
享元模式——要知道享元模式是為了避免重復創建物件而導致的開銷,Message,String,執行緒池都是這樣的設計思想,
-
Adapter——要能想到ListView和RecyclerView,以及為什么他們設計的時候要用Adapter
-
代理模式——靜態代理,動態代理
演算法(手擼代碼)
就演算法來說,其實大部分公司(除了位元組和騰訊)問的都不是很難,一般都集中在陣列和鏈表上,基本就是劍指offer難度甚至直接就是原題,
-
移動零——一個陣列有0和其他數,不更改原本其他非0數字的順序,把0都移到陣列最末位(猿輔導)
-
手寫堆疊(伴魚)
-
陣列中只出現一次的數字——劍指原題(伴魚)
-
判斷鏈表是否有環(順豐,騰訊,美團)
-
有環鏈表環的長度(騰訊)
-
反轉鏈表(騰訊)
-
一道貪心——題目太長了且沒有原題(騰訊)
-
字串轉數字(百度)
-
回字形列印陣列(老虎證券)
-
插入5(https://www.lintcode.com/problem/188/)(老虎證券)
-
斐波那契數列(美團)
-
手寫DCL單例(位元組)
-
二叉樹路徑和——從根節點到葉子節點是否有一個路徑之和等于給定值(位元組)
-
最短子陣列長度——滑動視窗(位元組)
-
手寫觀察者模式(位元組)
-
兩個堆疊實作佇列(位元組)
-
獲取一個VIewGroup的最深深度(美團)
設計題
設計題這個部分其實大部分并沒有標準答案,更多的是看以你的知識量能夠想到什么比較好的解決方案,
-
設計行程安全的SharedPreference(位元組,騰訊)
-
設計一個gif加載框架(微博)
-
一個行程只有讀操作,一個行程只有寫操作,你怎么設計(微博)
-
如果一個APP需要有閑時加載任務的能力,你怎么設計(美團)
-
讓你設計一個流式標簽布局你怎么做,有哪些要考慮的點(最右)
-
設計一個下拉重繪的RecyclerView你有幾種方法(美團)
-
APP使用經常會有弱網環境,怎么確保APP資料的即使同步更新以及正確性(順豐)
-
讓你設計一個push的框架,你會怎么設計,考慮到哪些問題(百度)
-
設計一個檢測記憶體泄漏的框架(騰訊)
-
設計一個事件總線(最右)
專案
在專案上,一定要能做到融匯貫通,不僅從技術上也要從業務上,比如你做過的一個需求,為什么要做這個需求,這個需求的背景是什么,這個需求上線后帶來了什么影響或者有哪些收益,雖然你是個技術,但是你能夠知道這寫得話肯定是更好的,
其次在技術細節上,要能知道為什么要這樣技術選項,這么做的好處是什么,以及能夠橫向縱向拓展,比如說我的專案中有一個地方用JobService實作了定時任務,那么可以橫向拓展的點就有,Android中實作定時任務的方式都有哪些,他們都有哪些好處壞處,你的這個場景為什么要選JobService,JobService和普通Service的區別是什么,
縱向擴展的話就有,JobService的原理是什么,JobService在引數配置上的一些細節,JobService是不是會嚴格按照你配置的時間運行,這些都是可以擴展出來的,所以當你在對專案復盤的時候,一定不要只盯著你做的那一部分,還要把自己做的部分橫縱拓展一下,這樣才能做到無懈可擊,
除此之外,良好的表達能力也是非常重要的一環,如果不覺得麻煩的話可以在復盤專案的時候把自己做了什么,為什么這么做打個草稿,自己看自己的邏輯以及表達是否通順,以此來做調整,
最后
offer的話拿到了位元組、騰訊還有美團的,我這邊最后還是選擇了騰訊的offer,已經入職入職一周了,同事很nice,leader是一位非常樂于助人的技術大佬,感覺自己這輩子就跟騰訊磕著了,以上的面試題,我自己講決議答案做了歸納整理,當然也借鑒了不少“百度”高見,整理成了一份PDF,有需要的朋友,可以供以參考,點擊這里免費獲取!



轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/275834.html
標籤:其他
