說在前面,千萬不要頻繁跳槽。
本來華為很想去的,面試前花了一個月的時間准備,面試過程挺順利的,也拒絕了其他的所有面試邀請,而我拒絕其他面試邀請的底氣,則是之前面試過程中的良好表現,薪資和定級都談好了。
HR給出的拒絕理由是:在工作的3年內,換了4份工作,其中有2份單位的工作時間在半年左右,工作不是很穩定。
我在入職表上還有面試時已經說明情況了,直接說不用去面試就行了,搞心態就有點難受了。
我是面試Android開發的,3年經驗,下面是面試流程:
一面:
-
包括自我介紹
-
工作經歷
-
做過哪些項目,在項目中扮演什么樣的角色,遇到了什么困難,是怎么解決的。
-
開發常用的一些庫等等
-
最后問了一些職業規划
二面(筆試)
java基礎的比較多,兩道算法題,然后是Android相關的題
三面是技術面
-
面試官開始讓介紹所做的一些項目,技術點之類的
-
然后就逮着技術點進行深入挖掘
-
設計模式六原則
-
子線程怎么用handler
-
問網頁連接怎么啟動本地app.
-
android四大組件Android四大基本組件分別是Activity,Service服務,Content Provider內容提供者,BroadcastReceiver廣播接收器。
-
2 ANR(ActivityNot Respone)(無響應)先介紹下Main線程(也稱為UI線程、主線程)
-
功能: 1.創建UI控件2.更新UI控件狀態3.事件處理 限制:Main線程不建議有超過5秒的事件 出現條件: 當用戶輸入事件5s內沒有得到響應,將彈出ANR對話框 廣播接收者的onReceive()執行時間超過10s解決方案(原則): 所有可能的耗時操作都要在子線程()中執行 常見耗時操作:I/O:網絡操作SDcard數據運算
-
FC(Force close)原因:1.Error OOM(out of memory error) StackOverFlowError
-
RuntimeException解決辦法: 看日志
-
針對項目問了具體的問題
-
問一下Java的基礎技術問題,多線程,jvm相關。
13.Android部分主要問的也是一般的基礎性的問題。
四面是綜合面
-
為什么離職
-
有沒有職業規划
-
對公司未來的展望
4.以前公司的薪資待遇
- 期待的薪資
技術知識梳理目錄
一、Android基礎+進階
1.Activity啟動模式
2.Activity的啟動過程
3.進程通訊
4.Android Binder之應用層總結與分析
5.進程保活方法
6.從源碼了解handler looper ,messageQueue思路
7.handler如何實現延時發消息postdelay()
8.Android中為什么主線程不會因為Looper.loop()里的死循環卡死?
9.RxJava原理及如何封裝使用
10.okhttp源碼分析
11.retrofit源碼分析
......
12.LeakCanary核心原理源碼淺析
13.LruCache 使用及原理
14.ARouter原理
15.注解框架實現原理
16.Android 如何編寫基於編譯時注解的項目
17.RxJava2+Retrofit2+OkHttp3的基礎、封裝和項目中的使用
18.Rxjava2.0+Retrofit+Okhttp(封裝使用)+MVP框架搭建
19.Android 插件化和熱修復知識梳理
20.Android開發中比較常見的內存泄漏問題及解決辦法
21.如何檢測和定位Android內存泄漏
22.圖片占據的內存算法
23.為什么圖片需要用軟引用,MVP模式中的view接口用弱引用
24.基於DataBinding與LiveData的MVVM實踐
25.App穩定性優化
26.App啟動速度優化
27.App內存優化
28.App繪制優化
29.App瘦身
30.網絡優化
31.App電量優化
32.安卓的安全優化
33.為什么WebView加載會慢呢?
34.如何優化自定義View
二、Java基礎+進階
1.HashMap
2.ArrayList
3.LinkedList
4.Hashset源碼分析
5.內存模型
6.垃圾回收算法(JVM)
7.垃圾回收機制和調用 System.gc()的區別?
8.類加載過程
9.反射
10.多線程和線程池
11.創建多線程方式、線程池工作原理
12.設計模式(六大基本原則、項目中常用的設計模式、手寫單例等)
13.斷點續傳
14.Java 四大引用
15.Java 的泛型
16.接口、抽象類的區別
17.從 java 容器類的設計討論抽象類和接口的應用
三、數據結構與算法面試題
1.常用的數據結構有哪些?
2.數組
(1).如何在一個1到100的整數數組中找到丟失的數字
(2).如何在給定的整數數組中找到重復的數字? (小米)
(3).如何在未排序整數數組中找到最大值和最小值?(字節跳動)
(4).在Java中如何從給定數組中刪除多重復制?
(5).大數相加(今日頭條)
3.鏈表
(1).那查詢第一個跟倒數第二個呢?(這就不一樣了,第一個直接給了頭結點,倒數第二個需要從倒數第一個開始查詢,走兩步) (騰訊)
(2).arrayList底層原理 (滴滴)
(3).如何在一次遍歷中找到單個鏈表的中值?(中國平安)
(4).如何證明給定的鏈表是否包含循環?如何找到循環的頭節點?(優酷)
(5).兩個有交叉的單鏈表,求交叉點 (華為)
(6).如何得到單鏈表的長度?(360)
(7).如何在不使用遞歸的情況下逆轉單鏈表?(小米/美團)
(8).怎么判斷鏈表有環? (滴滴)
4.隊列&堆棧
(1).如何使用棧實現隊列的功能(廣州荔枝FM)
(2).兩個棧實現一個隊列(蘑菇街)
(3).兩個隊列實現一個棧 (騰訊)
(4).對比一下隊列和棧,以及它們底部實現 (騰訊)
5.二叉樹
(1).如何在給定的二叉樹中執行先序遍歷?(百度)
(2).如何實現后序遍歷算法?(百度)
(3).如何在給定數組中執行二分法搜索?(蘇寧)
(4).已知前序遍歷為{1,2,4,7,3,5,6,8},中序遍歷為{4,7,2,1,5,3,8,6},它的二叉樹是怎么樣的?
(5).輸入兩棵二叉樹 A 和 B,判斷 B 是不是 A 的子結構。 (愛奇藝)
(6).請實現兩個函數,分別用來序列化二叉樹和反序列化二叉樹(YY)
(7).平衡二叉樹和紅黑樹的區別?(字節跳動)
(8).什么是平衡二叉樹,它有什么特征 (美團)
(9).B 樹,B+樹
6.HashMap
(1).HashMap的底層原理是什么?線程安全么? (百度)
(2).HashMap中put是如何實現的? (滴滴)
(3).談一下hashMap中什么時候需要進行擴容,擴容resize()又是如何實現的?
(4).什么是哈希碰撞?怎么解決? (滴滴)
(5).HashMap和HashTable的區別 (小米)
(6).HashMap中什么時候需要進行擴容,擴容resize()是如何實現的? (滴滴)
(7).hashmap concurrenthashmap原理 (美團)
(8).arraylist和hashmap的區別,為什么取數快?(字節跳動)
7.圖
(1).旋轉輸出矩陣
(2).給定一個矩陣 int matrixA[m][n],每行每列都是增序的,實現一個算法去尋找矩陣中的某個元素 element. 搜狗
8.排序算法有哪些?
9.查找算法
10.串
四、計算機網絡部分
1.HTTP協議
2.TCP/IP協議
3.TCP的三次握手與四次揮手理解及面試題
4.網頁中輸入url,到渲染整個界面的整個過程,以及中間用了什么協議?
5.TCP和UDP的區別?
6.HTTP的幾種請求方法具體介紹
7.HTTP請求和響應報文的格式,以及常用狀態碼
8.一個 TCP 連接上面能發多少個 HTTP 請求