前言
一個Android開發的朋友跟我談他面試經曆,上周去愛奇藝面試,其他問題都答得不錯,面試官問了一個哈夫曼算法的題沒答出來,後來面試官很明确的說,我們還是想找一個會些算法基礎的。

如果之前有學過資料結構和算法,建議大家不定時的去刷刷算法題
因為從面試的角度來講,目前 BAT 和 TMD 等一線網際網路企業或多或少都會有幾個算法題,而對應屆畢業生來說,算法的要求度則更高!這裡可以分享一下我收集整理的資料結構算法題含答案。
AWTK 主要特色:
1、跨平台
AWTK 是跨平台的,這有兩個方面的意思:
- AWTK 本身是跨平台的。目前支援的平台有 ZLG AWorks、Windows、Linux、MacOS、嵌入式 Linux、Android、Web 和嵌入式裸系統,可以輕松的移植到各種 RTOS 上。AWTK 以後也可以運作在各種小程式和 iOS 等平台上運作。
- AWTK 同時還提供了一套跨平台的基礎工具庫。其中包括連結清單、數組、字元串 (UTF8 和 widechar),事件發射器、值、對象、檔案系統、互斥鎖和線程、表達式和字元串解析等等,讓你用 AWTK 開發的應用程式可以真正跨平台運作。
2、高效
AWTK 通過一系列的手段保證 AWTK 應用程式高效運作:
- 通過髒矩算法隻更新變化的部分。
- 支援 3 FrameBuffer 讓界面以最高幀率運作 (可選)。
- UI 描述檔案和主題檔案使用高效的二進制格式,解析在瞬間完成。
- 支援各種 GPU 加速接口。如 OpenGL、DirectX、Vulkan 和 Metal 等。
- 支援嵌入式平台的各種 2D 加速接口。目前 STM32 的 DMA2D 和 NXP 的 PXP 接口,廠家可以輕松擴充自己的加速接口。
3、穩定
AWTK 通過下列方式極力讓代碼穩定可靠:
- 使用 cppcheck 和 facebook infer 進行靜态檢查。
- 使用 valgrind 進行動态記憶體檢查。
- 近兩萬行的單元測試代碼。
- ZLG 強大 GUI 團隊的支援。
- 經過多個實際項目驗證。
- 多平台 / 多編譯器驗證。
- 優秀的架構設計。
- Code Review。
- 手工測試。
4、強大
- 豐富的控件 (持續增加中)。
- 支援各種圖檔格式 (png/jpg/gif/svg)。
- 支援各種字型格式 (點陣和矢量)。
- 支援視窗動畫
- 支援控件動畫
- 支援高清屏。
- 支援界面描述檔案。
- 支援主題描述檔案。
- 支援控件布局政策。
- 支援對話框高亮政策。
- 豐富的輔助工具。
- 支援從低端的 Cortex M3 到各種高端 CPU。
- 支援無檔案系統和自定義的檔案系統。
- 支援裸系統和 RTOS。
5、易用
- 大量的示例代碼。
- 完善的 API 文檔和使用文檔。
- ZLG 強大的技術支援團隊。
- 用 AWTK 本身開發的界面編輯器 (開發中)。
- 聲明式的界面描述語言。一行代碼啟用控件動畫,啟用視窗動畫,顯示圖檔 (png/jpg/svg/gif)。
6、高度擴充性
- 可以擴充自己的控件。
- 可以擴充自己的動畫。
- 可以實作自己的主循環。
- 可以擴充自己的軟鍵盤。
- 可以擴充自己的圖檔加載器。
- 可以擴充自己的字型加載器。
- 可以擴充自己的輸入法引擎。
- 可以擴充自己的控件布局算法。
- 可以擴充自己的對話框高亮政策。
- 可以實作自己的 LCD 接口。
- 可以擴充自己的矢量引擎 (如使用 skia/cairo)。所有擴充元件和内置元件具有相同的待遇。
7、多種開發語言
AWTK 本身是用 C 語言開發的,可以通過 IDL 生成各種腳本語言的綁定。生成的綁定代碼不是簡單的把 C 語言的 API 映射到腳本語言,而是生成腳本語言原生代碼風格的 API。目前支援以下語言 (以後根據需要增加):
- C
- Lua
- Javascript on jerryscript
- Javascript on nodejs
- Javascript on quickjs
8、國際化
- 支援 Unicode。
- 支援輸入法。
- 支援字元串翻譯 (實時生效)。
- 支援圖檔翻譯 (實時生效)。
- 文字雙向排版 (計劃中)。
作者2013年從java開發,轉做Android開發,在小廠待過,也去過華為,OPPO等大廠待過,18年四月份進了阿裡一直到現在。
參與過不少面試,也當面試官 面試過很多人。深知大多數國中級Android工程師,想要提升技能,往往是自己摸索成長,不成體系的學習效果低效漫長,而且極易碰到天花闆技術停滞不前!
我整理了一份阿裡P7級别的最系統的Android開發主流技術,特别适合有3-5年以上經驗的小夥伴深入學習提升。
主要包括阿裡,以及位元組跳動,騰訊,華為,小米,等一線網際網路公司主流架構技術。如果你想深入系統學習Android開發,成為一名合格的進階工程師,可以收藏一下這些Android進階技術選型
我搜集整理過這幾年阿裡,以及騰訊,位元組跳動,華為,小米等公司的面試題,把面試的要求和技術點梳理成一份大而全的“ Android架構師”面試 Xmind(實際上比預期多花了不少精力),包含知識脈絡 + 分支細節。
![]()
android自動化測試!我的移動開發春季曆程,已拿到offer
Java語言與原理;
大廠,小廠。Android面試先看你熟不熟悉Java語言
![]()
android自動化測試!我的移動開發春季曆程,已拿到offer
進階UI與自定義view;
自定義view,Android開發的基本功。
![]()
android自動化測試!我的移動開發春季曆程,已拿到offer
性能調優;
資料結構算法,設計模式。都是這裡面的關鍵基礎和重點需要熟練的。
![]()
android自動化測試!我的移動開發春季曆程,已拿到offer
NDK開發;
未來的方向,高薪必會。
![]()
android自動化測試!我的移動開發春季曆程,已拿到offer
前沿技術;
元件化,熱更新,熱修複,架構設計
![]()
android自動化測試!我的移動開發春季曆程,已拿到offer
網上學習 Android的資料一大堆,但如果學到的知識不成體系,遇到問題時隻是淺嘗辄止,不再深入研究,那麼很難做到真正的技術提升。希望這份系統化的技術體系對大家有一個方向參考。
我在搭建這些技術架構的時候,還整理了系統的進階進階教程,會比自己碎片化學習效果強太多,GitHub可見;《Android架構視訊+學習筆記》
當然,想要深入學習并掌握這些能力,并不簡單。關于如何學習,做程式員這一行什麼工作強度大家都懂,但是不管工作多忙,每周也要雷打不動的抽出 2 小時用來學習。
BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**
當然,想要深入學習并掌握這些能力,并不簡單。關于如何學習,做程式員這一行什麼工作強度大家都懂,但是不管工作多忙,每周也要雷打不動的抽出 2 小時用來學習。
不出半年,你就能看出變化!