1、小紅書Android面
Java篇
- 靜态變量和執行個體變量的差別
- “==” & equals()
- 淺拷貝 & 深拷貝
- HashMap , 擴容機制
- 多個線程如果共享多個資源,需要怎麼保證安全
- volatile,CAS/ABA
Android篇
- 事件的分發機制
- Handler原理
- TCP UDP
- Kotlin和Java的差別
- 啟動優化
- 記憶體優化
- 多程序通信
2、快手 Android
- Android/ 布局優化
- Activity啟動模式
- RecyclerView和ListView差別
- Handler機制,loop方法為何不會造成ANR
- View繪制流程
- SingleTop和standard啟動模式下,生命周期回調有何不同
- onStart和onResume差別
- Java/ 面向對象三大特性
- Array和Linked差別
- HashMap底層
- 程序間通信方式
- equals和==差別
- 線程間加鎖的方式
- 知道啥設計模式
- synchronized的不同使用
- 異常
- 線程池
- 建立線程的方式
- OS/ 死鎖
- 網絡/ tcp和udp的差別
3、愛奇藝Android工程師
- 介紹項目
- Android布局嵌套深有什麼問題
- kotlin協程
- HashMap原理
- 算法:手寫快排
- Activity啟動模式
- Activity A → B的生命周期在這四種啟動模式下的狀态
- 廣播類型
- 有序廣播如何實作的按順序收到廣播
- 持久化存儲方式
- SharedPreferences的格式
- xml解析方式
- json與xml的差別,json為什麼比xml更好
- Android view繪制流程
- surfaceView
- sp, dp, px的差別
- 機型大小适配
- 适配語言
- ANR 什麼時候出現,如何排查
- Android動畫
- startService與bindService的差別
- Service保活方式
- java泛型,<? extends T>能否add元素
- 重寫equals方法需要重寫hashCode方法嗎
- ThreadLocal
- wait,sleep,yield,join的差別
- 算法1:字元串全排列
- 算法2:删除連結清單中倒數第n個節點
4、 微信視訊号安卓工程師
Android
- 講一下Android發生Crash的整體流程
- Native層Crash是如何捕獲到的?
- Java層Crash是如何捕獲到的?
-
如何做到發生異常時不會殺死APP?在
UncaughtExceptionHandler.unCatchException方法調用Looper進行死循環可以
- 講一下Handler機制
- Looper的定時器是用如何實作的?
- APK包裡有什麼?
- APP在運作時是通過什麼來擷取到layout檔案的?
- 講一下surfaceview跟textview
- Activity A 啟動 Activity B 時,他們在同一個棧的情況下生命周期以及執行順序是怎麼樣的?
- Destroy()方法是什麼時候調用的?
Java
- 有什麼線程同步的機制?
- volatile關鍵字講一下。
- volatile如何實作可見性?
- synchronize如何實作可見性?
- volatile防止指令重排代碼級别如何實作?
作業系統
- 講一講作業系統核心态跟系統态的了解。
- 作業系統核心是什麼?
- 作業系統核心本質上就是作業系統代碼的常駐機構。
- 作業系統核心就是管理所有代碼和資料結構的集合。
- 作業系統核心是軟體和硬體之間的媒介。
- 為什麼作業系統要有核心态、系統态的存在?
- Linux有什麼信号?
- sigill信号在什麼情況下會觸發?
5、抖音社交Android工程師
一面
- 項目
- volitale與synchronized的差別
- 手寫單例
- 匿名内部類如何持有外部類對象
- 記憶體洩漏的概念
- 記憶體洩漏的場景
- 記憶體洩漏檢測的工具
- handler原理,sendMessage與sendMessageDelay如何保證Message放入MessageQueue中的順序
- 兩個Message相隔5秒,這5秒内線程會一直阻塞嗎
- 自定義 View如何特殊處理wrap_content,padding的實作
- MVVM和MVP 的差別(引出了一系列問題,不是很了解就直接說不了解比較好)
- LiveData與RxJava的差別
- LiveData生命周期感覺如何實作
- 介紹RxJava
- https與http的差別,中間人如何修改密鑰
- 算法:二叉樹z字形列印
二面
- 項目
- final、finally與finalize的差別
- java開啟一個線程的方式
- Thread.start()與直接調用run()的差別
- Java預設提供了幾種線程池
- thread{ i++ }執行10次結果,如何讓i最後等于10
- synchronized與reentrantlock差別
- 死鎖
- 悲觀鎖樂觀鎖
- gc垃圾回收
- 垃圾标記階段,Python如何實作的斷開循環引用
- Retrofit傳回的是什麼資料類型
- 伺服器傳回的資料有哪些類型,為什麼不能用xml類型傳回
- 請求資料這個過程發生了什麼
- get與post請求的差別,get與post攜帶資料的差別
- java注解
- kotlin擴充函數原理
- 算法:兩個連結清單相加
三面
- main方法執行之前發生了什麼
- System.out.println(“a”)将字元輸出到螢幕發生了什麼
- 輕按兩下QQ發生了什麼
- 浏覽器輸入url發生了什麼
- 根據前序周遊和中序周遊輸出後序周遊
- 如果排期隻有一周的任務,但是以我的能力需要兩周才能完成,這個時候你會怎麼辦。
- k個一組反轉連結清單
6、抖音電商Android工程師
一面
- 實習學到的架構
- MVVM
- Dagger原理
- livedata原理
- 程序和線程
- 作業系統IO模型
- 程序通信方式
- 管道通信原理
- TCP協定如何實作可靠傳輸
- UDP如何實作可靠傳輸
- java建立線程
- 線程池原理
- 線程池拒絕政策
- synchronized與reentrantlock實作方式的差別
- AQS原理
- handler原理
- Retrofit原理
- 算法: 二叉樹右視圖 — 非遞歸實作
二面
- Navigation的優缺點
- 如何實作的自定義navigate方法切換fragment,如何讓被覆寫的fragment感覺到生命周期
- gc如何判斷垃圾對象
- 成員變量與局部變量的差別,局部變量的值一定是存放在堆中嗎()
- jvm類加載的時機
- jvm類加載過程
- 雙親委托機制是什麼
- 雙親委托機制什麼時候會被破壞
- 記憶體洩漏是什麼
- volatile的作用
- 寫一個死鎖
- 算法:判斷A是否是B的子樹
三面
- 自己是如何學習Android的
- 實習過程中的難點說一個
- 實習過程中和哪些人接觸的比較多
- 如何和别人溝通的
- 挑一個項目說一下
- 裡氏替換原則
- http狀态碼
- http多路複用
- 資料庫
- 算法 漢字表示的數字轉成阿拉伯表示。
7、小米android開發
- http與https的差別。
- Java構造器工作工程。
- Java中的引用類型有哪些。
- http,http1.1,http2.0有啥差別。
- TCP/IP最大容量的意義是什麼?
- 還有Integer與int類型差別?各自怎麼比較大小?
- 還有垃圾回收機制還有final的用法
- 為什麼HashMap在1.8中采用了紅黑樹?你能說下啥是紅黑樹嗎?啥是平衡二叉樹?啥是二叉搜尋樹?啥是滿二叉樹?
- Java1.7采用數組加連結清單與1.8采用紅黑樹有啥差別?
- HashMap 線程不安全原因是啥?分版本作答
- 如果線程安全的話 要用哪個?我說Hashtable。他說HashTable效率太低,怎麼安全又效率高?
- 對稱加密與非對稱加密?
- SSL是幹嘛的?
8、美團移動端一面
- jvm記憶體模型
- new 對象的過程
- 類加載過程
- ClassLoader源碼
- final關鍵字
- 匿名内部類
- 講下垃圾回收算法
- LinkedList && ArrayList
- hashMap
- 常用注解,spring中的注解
- 鎖,synchronized底層原理
- https && http
- 浏覽器輸入位址後的過程
- 狀态碼 303 304
- 你知道的設計模式
- 單例模式 說了雙重校驗鎖,靜态内部類 ,不同場景下如何選擇
- 雙重校驗鎖為什麼要兩次判空
- volatile,指令重排