問題和通俗易懂的答案,覆蓋鴻蒙開發的核心知識點和實際場景,方便面試時快速評估候選人能力:
一、基礎概念(必問)
-
鴻蒙和安卓最大的區別是什么?舉個實際例子。
答案:鴻蒙是“分布式操作系統”,比如你可以用手機操控電視、手表聯動,數據自動同步(比如手機導航流轉到車機),安卓做不到這種跨設備協作;另外鴻蒙系統更輕量,適合智能家居等小內存設備。 -
鴻蒙的HAP包是什么?分哪幾種?
答案:HAP就是鴻蒙的應用安裝包,類似安卓的APK。分三種:- Release包(.hap):正式發布用,刪除了調試信息;
- Debug包(.hap.debug):測試用,帶日志;
- Preview包(.hap.preview):臨時測試用,不能上架。
-
鴻蒙的“微內核”是什么?為什么用這個設計?
答案:微內核只保留最基礎的功能(比如任務調度),其他功能(比如文件系統)獨立運行。好處是更安全(一個模塊崩潰不影響整體)、系統更穩定,適合物聯網設備。
二、開發技能(重點考察)
-
鴻蒙的頁面和組件生命周期有哪些?
答案:- 頁面生命周期:
onPageShow
(顯示)、onPageHide
(隱藏)、onBackPress
(返回鍵); - 組件生命周期:
aboutToAppear
(創建前)、aboutToDisappear
(銷毀前)。
- 頁面生命周期:
-
父子組件怎么傳值?兄弟組件呢?
答案:- 父傳子:用
@Prop
(單向,子改不了父)或@Link
(雙向,子能改父); - 子傳父:通過父組件定義的方法回調;
- 兄弟組件:通過共同的父組件中轉,或者用全局狀態管理(比如AppStorage)。
- 父傳子:用
-
如何保存用戶的登錄狀態?
答案:- 小數據用
Preferences
(類似安卓的SharedPreferences); - 大數據用
KV-Store
鍵值數據庫; - 復雜數據用
RelationalStore
關系型數據庫(類似SQLite)。
- 小數據用
三、實際場景(看實戰經驗)
-
鴻蒙的UI布局和安卓有什么不同?
答案:鴻蒙用ArkUI框架,布局用聲明式語法(類似Flutter),比如:Column() { // 縱向排列Text('Hello').fontSize(20)Button('Click').onClick(() => { ... }) }
安卓是用XML寫布局,鴻蒙更簡潔。
-
遇到頁面跳轉卡頓,可能是什么原因?怎么優化?
答案:- 原因:頁面資源過大、網絡請求阻塞、動畫未異步執行;
- 優化:用
router.replaceUrl
預加載下一頁、圖片壓縮、耗時操作放子線程。
-
鴻蒙如何實現跨設備調用(比如手機調用電視的攝像頭)?
答案:- 用
分布式任務調度
:先發現設備(deviceManager
),然后通過Ability
調用遠程服務; - 數據通過
分布式數據管理
自動同步。
- 用
四、高級問題(考察深度)
-
鴻蒙的Stage模型和FA模型區別是什么?
答案:- FA模型:早期版本,適合簡單應用;
- Stage模型:推薦用!組件生命周期獨立,更適合復雜應用和跨設備協同。
-
如何實現一個拖拽排序的列表?
答案:- 用
List
組件 +onTouch
事件監聽拖動位置; - 通過
@State
更新數據源,觸發列表重新渲染; - 復雜交互可以用
@Animatable
添加動畫。
- 用
-
應用啟動白屏時間長,如何優化?
答案:- 減少首屏資源加載(懶加載非必要組件);
- 用
SplashScreen
設置啟動頁背景圖; - 預加載數據(比如用戶信息)。
五、行為問題(看潛力和態度)
-
如果鴻蒙官方文檔和實際代碼效果不一致,你怎么辦?
答案:- 先確認文檔版本是否過時;
- 查社區(比如官方論壇、CSDN)是否有類似問題;
- 自己寫Demo驗證,反饋給官方。
-
最近鴻蒙更新了哪些新特性?你研究過嗎?
答案:- 示例:ArkTS語言增強、Stage模型推廣、分布式硬件池(比如調用多設備算力);
- 考察候選人是否持續學習。
六、終極驗證(壓軸題)
- 現場寫一段代碼:實現一個按鈕,點擊后數字+1,并保存到本地。
答案:@Entry @Component struct CounterPage {@State count: number = 0 // 狀態管理private storage = Preferences.getPreferences() // 持久化async aboutToAppear() {this.count = await this.storage.get('count', 0) // 讀取保存的值}build() {Column() {Text(`Count: ${this.count}`).fontSize(30)Button('Add +1').onClick(() => {this.count++this.storage.put('count', this.count).flush() // 保存到本地})}} }
總結
- 新手:能答對基礎概念和簡單代碼;
- 中級:能結合實際項目說優化方案;
- 高手:對分布式設計和Stage模型有深入理解,代碼簡潔高效。