
前言
金三銀四,又是一年校招季。
經曆過,才深知不易。最近,和作為校招面試官的同僚聊了聊,問他們是如何去考察一個學生的,我簡單歸為以下幾點:
- 聰明、反應快,這點自不必說,聰明意味着學習能力、适應力強,能夠快速勝任工作。
- 算法不錯,代碼基本功好,這點其實考察的是算法能力和代碼是否寫得優雅。
- 基礎過硬,技術崗面試最核心的還是考察「技術儲備」,包括了語言基本功,作業系統、網絡、體系結構、系統設計。
- 語言組織和表達能力,這點很重要,很多同學懂得某個知識點,卻很難用簡潔準确的語言表述出來。
想必有很多同學在刷題、刷面經,不過我想說“面經雖好,不要貪杯哦~”,面經可以刷,看看面試官都是怎麼提問的,但不要寄希望于原題。
因為面試過程中的問題往往是一環扣一環的,這意味着你需要有足夠的技術深度,将知識由點連接配接成面,而不是停留在互相孤立的知識點上。
是以還是建議系統性的看書,如果覺得時間不夠,可以關注文章裡的重點内容。
接下來是我曆時幾個月整理出來的Android進階開發面試題以及答案 整理,裡面都是一些面試進階工程師必備的知識點,比如:
Handler、Activity、Fragment、Service、Android 布局優化、BroadcastReceiver、AsyncTask、Android 事件分發機制、Android View 繪制流程、ANR、Android 記憶體相關、Android 螢幕适配
等等。
接下來我們來看看這些知識點在面試中那些大廠的面試官是怎麼問的?自己又能回答多少出來呢?(有些問題不知道答案的這裡由于篇幅原因不友善把答案全部放出來,但是答案我都整理成了一份文檔文末可以自行領取~)
第一階段:Android 基礎知識回顧:
- 回顧Android 開發程式設計,深入了解Android系統原理和層次結構,深入分析Handler源碼和原理;
- 回顧Java,C/C++,Kotlin、dart 在Android開發中必用的語言,熟悉一下幾種語言混淆後的特性;
- 回顧Android IPC和JNI的底層原理和熱更新技術回顧Native開發要點,使用C++結合NDK完成Android Native開發;
- 回顧Android開發中常用的 AMS、PMS、WMS原理和App啟動中服務加載的流程;
- 回顧Android開發中必用的 Google的MVVM架構:DataBinding+LiveData+ViewModel;
- 回顧Android開發中必用的 Google的MVP架構:Dagger2;
- 回顧Android開發必用的網絡架構:Okhttp3+RxJava2+Retrofit2+Rxdownload4+Rxcache+Glide;
Android 逆向基礎知識:
- 熟悉Android逆向工具的使用,如apktool,IDA,dex2jar,JEB,Androidkiller,Androguard等;
- 深入分析APK中包含的各檔案格式,分析Android系統源碼中解析APK的相關代碼;學習和熟悉smali語言(重點);
- 仿微信寫一個APP,并利用工具逆向出apk内的代碼,并對比源碼分析。
入門知識總結和實戰(逆向入門):
- 知識梳理,常用工具安裝,adb指令與Linux常用指令,常見登入邏輯分析;
- 分析ELF可執行程式,調式ELF可執行程式;ARM彙編與寄存器,ARM反彙編速成,ARM指令機器碼,常用ARM指令集;
- 反編譯ELF檔案與ObjDump,ELF檔案解析與readelf,ELF檔案解析與010Editor,深入分析ELF檔案結構;IDA靜态分析,IDA動态調式;
- 簡易電腦實作及分析(練習);
- 字元串加密與解密,冒泡排序算法分析;
- 關鍵android_server檔案檢測,IDA調試端口檢測;
- ELF可執行程式加載so庫,DEX解析與dexDump,DEX解析與010Editor;
- 實作自己的Dex解析工具與GDA(練習);
- Androidkiller動态調試smali代碼插件,AS+smalidea調式smali代碼;
- Log注入實作免注冊,如何定位關鍵代碼,去除java層簽名驗證,去除廣告和彈窗(實戰);
- 推薦閱讀《AndroidXXXXXX……》随便找本系統源碼講解的書看看吧;
Android 基礎算法和安全協定:
- 密碼學,對稱加密算法,非對稱加密算法,散列函數;
- 數字簽名,數字證書,SSL證書檢測,協定與安全協定;
- 了解伺服器端與用戶端通信協定分析;
- 使用Charles抓登入封包和驗證碼,協定構造與Java層MD5算法,動态調式smali代碼與sign字段;
- 協定構造類與SO層DESCBC算法,協定關鍵字段SIGN與SO層MD5算法,動态調試協定字段,動态調式協定關鍵字段SIGN;
- 協定關鍵字段pwad和sign,動态調式協定字段拼接與MD5加密,分析so層OpenSSLSHA1算法;
- 封包加密與反編譯失敗,使用方法跟蹤分析加密;java層逆向分析,分析so層TEA算法;
- 練習:抓取驗證碼和登入封包,分析協定關鍵字段與RSA算法,證書與RSA原理及源碼分析;
- 對稱加密AES、PBE與CRC算法,數字簽名RSA、DSA算法;
第二階段:Android 逆向進階學習:
- Android 系統結構深入分析,自定義 ClassLoader,自定義注解和元注解原理分析;
- 了解AndroidNDK,靜态注冊,動态注冊,SO加載分析,
- App保護政策去除霸哥磁力搜素APK簽名驗證,一鍵去除簽名驗證,靜态代{過}{濾}理,動态代{過}{濾}理Hook Activity啟動函數,
- Hook簽名驗證函數介紹xposed架構:Xposed架構:
- 繞過驗證碼注冊Xposed架構:
- 登陸劫持Xposed架構:
- 篡改IMEI資訊介紹CydiaSubstrate架構:
- Java層Hook:
- 篡改系統文字顔色Java層Hook:
- 修改方法傳回值繞過登入Java層Hook:
- 篡改遊戲金币Java層Hook:
- 篡改主機名和端口号
- Native層Hook:
- ADBI架構:ELFARMHOOK架構記憶體摳取Dex檔案過反調試技巧C++遊戲
- 逆向練習:動态調試2048純算法遊戲,Zygote+Hook使2048遊戲秒過關;
Android NDK與JNI全面剖析:
- so動态庫的介紹
- JNI動态注冊和靜态注冊
- NDK Build 工具介紹
- Cmake工具介紹
- JNI.h介紹
- Android 源碼工具和技巧
- ijkplayer 源碼分析及原理講解
- AndFix 源碼分析及原理講解
- Java調用so庫的動态流程解析
- NDK實作增量更新
- 案例:NDK實作換臉等工業級圖像識别
- 案例:NDK檔案實作拆分和加密處理
Android 加強防護和脫殼簡介:
- DEX檔案、ODEX檔案與OAT檔案;
- XML檔案與ARSC檔案;
- 分析App加強的産生及背景,最初加強方式,加強技術的發展;
- HOOK制作脫殼機,定制自己的脫殼系統;
- DexClassLoader動态加載分析,DEX自解析重構技術;
- 三代梆梆加強原理分析;愛加密加強原理分析;
- 360加強與脫殼機,360加強VM與置換表;
- 輔助脫殼機,IDA動态調式脫愛加密殼;
- IDA動态調式脫360殼,IDA動态調式脫SO殼;
- 脫360殼-dex2oat,脫360殼-drizzleDumper;
- 百度加強DD大法,百度加強VM與置換表;
- 阿裡加強與脫殼機,騰訊樂固;
- ARSC資源保護與注解;
- 脫殼神器ZjDroid:
- 捕魚達3加強技術總結;
Android 脫殼與反脫殼分析:
- Android脫殼中的思路,技巧elf結構詳解:
- 動态運作庫so檔案的檔案組成結構elf結構詳解:
- 加載so檔案的流程elf檔案變形與保護,elf檔案修複分析,so加殼檔案修複常用調試檢測方法與過檢測方法
- Android源碼定制添加反反調試機制Android dvm 脫殼,Dalvik dex處理分析IDA脫殼腳本編寫,Odex修複方法,
- IDAOdex修複腳本編寫
進階知識總結和企業級實戰(逆向進階):
- 病毒分析與脫殼學習,用Ransomware類和木馬類進行學習;
- 手動脫殼《王者X耀》練習;
- 從0開始打造自己的破解代碼庫;
第三階段:Android 漏洞分析和挖掘:
- 學習常見的漏洞類型和原理。例如堆溢出,棧溢出,UAF等,可以參考漏洞分析相關書籍;
- 關注Android Security Bulletin,根據提供的diff分析漏洞成因;
- 學習并調試以前的經典漏洞;
- 學習漏洞挖掘fuzzing思路,參考書籍推薦《Android安全XXXX》;
- 病毒分析與病毒脫殼實戰;
Android 虛拟機技術、系統源碼分析、刷機機制介紹、制作ROM刷機包:
- ASP代碼注入式寫法;
- Android 免root進行hook;
- Android虛拟機原理,Android多開原理講解;
- 在apk内部寫一個虛拟機,在apk内安裝apk;
- 虛拟機适配Android 10和64位系統;
- 從0開始開發自己的虛拟機庫;
- 最完善的刷機工具 :魔趣 ROM;
- 最完善的刷機工具 :Devices - TWRP;
總結
其實要輕松掌握很簡單,要點就兩個:
- 找到一套好的視訊資料,緊跟大牛梳理好的知識架構進行學習。
- 多練。 (視訊優勢是互動感強,容易集中注意力)
你不需要是天才,也不需要具備強悍的天賦,隻要做到這兩點,短期内成功的機率是非常高的。
對于很多國中級Android工程師而言,想要提升技能,往往是自己摸索成長,不成體系的學習效果低效漫長且無助。下面資料部分截圖是我花費幾個月時間整理的,誠意滿滿:特别适合有3-5年開發經驗的Android程式員們學習。
- 自行下載下傳直達領取連結:【點選我即可獲得!】
- 以上進階BATJ大廠學習資料可以免費分享給大家,需要完整版的朋友,【點這裡可以看到全部内容】。
8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)】。**
[外鍊圖檔轉存中…(img-HLbzkpp1-1615037393178)]