說一說 oneway 吧,瞭解過這個修飾符作用嗎?原理是什麼?怎麼理解單向呼叫?
面試官提了一個問題,我們來看看 A、B 和 C 三位同學的表現如何吧
A
面試官️:看你簡歷上寫熟悉 AIDL,說一說 oneway 吧
A:oneway 是什麼?跟 AIDL 沒關係吧,我熟悉 AIDL 指的是使用 AIDL 介面進行跨程式通訊。
面試官:AIDL 介面的方法可以用 oneway 修飾符來修飾,瞭解過這個修飾符的作用嗎?
A:可以提高效能嗎?我覺得沒必要使用,我從沒用過,程式也跑的好好的,沒出過什麼問題。
面試官:好的,回去等通知吧
B
面試官:看你簡歷上寫熟悉 AIDL,說一說 oneway 吧
B:用 oneway 修飾的 AIDL 介面方法,是單向呼叫,不需要等待另一個程式的返回結果,所以方法的返回型別也只允許是 void.
面試官:怎麼理解 "單向呼叫" ,有了解過它的實現原理嗎?
B:由應用程式到服務程式是通過 binder 驅動進行 IPC 通訊的,單向的意思應該是應用程式只向 binder 驅動傳送一次資料就結束返回,不再等待回覆資料;而不用 oneway 修飾的方法需要等待 binder 驅動與服務端通訊完後,再回複資料給應用端。
面試官:只向 binder 驅動傳送資料嗎?binder 驅動有沒有回覆應用?
B:嗯... 我理解的是既然不需要返回值,所以沒有回覆吧
面試官:好的,回去等通知吧
C
面試官:看你簡歷上寫熟悉 AIDL,說一說 oneway 吧
C:oneway 主要有兩個特性:非同步呼叫和序列化處理。非同步呼叫是指應用向 binder 驅動傳送資料後不需要掛起執行緒等待 binder 驅動的回覆,而是直接結束。像一些系統服務呼叫應用程式的時候就會使用 oneway,比如 AMS 呼叫應用程式啟動 Activity,這樣就算應用程式中做了耗時的任務,也不會阻塞系統服務的執行。
序列化處理是指對於一個服務端的 AIDL 介面而言,所有的 oneway 方法不會同時執行,binder 驅動會將他們序列化處理,排隊一個一個呼叫。
面試官:有了解過相關的 binder 協議嗎?
C:瞭解過,圖會更直觀一些,我來畫一下圖吧,首先是非 oneway 的情況:
如果是 oneway 的話,客戶端就不需要掛起執行緒等待:
涉及到的 binder 命令也有規律,由外部傳送給 binder 驅動的都是 BC_ 開頭,由 binder 驅動發往外部的都是 BR_開頭。
面試官:怎麼理解客戶端執行緒掛起等待呢?有沒有實際佔用 CPU 的排程?
C:這裡的掛起相當於 Thread 的 sleep,是真正的"休眠",底層呼叫的是 wait_event_interruptible() Linux 系統函式。
面試官:你是從哪裡瞭解到 wait_event_interruptible() 函式的呢?
C:在學習 Handler 機制的時候,Handler 中最關鍵的地方就是 Looper 的阻塞與喚醒,阻塞是呼叫了 nativePollOnce() 方法,當時對它的底層實現感興趣,就去了解了一下,也學習到 Linux 用來實現阻塞/喚醒的 select、poll 和 epoll 機制
面試官:可以,我們再來聊聊別的。
作者:位元組走動_Android
連結:https://www.jianshu.com/p/133def697c24
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
相關文章
- Java中final修飾符都有什麼作用Java
- Java中的執行緒池用過吧?來說說你是怎麼理解執行緒池吧?Java執行緒
- 面試官:說說React服務端渲染怎麼做?原理是什麼?面試React服務端
- 1、說說你瞭解過、使用過什麼程式語言?比較小他們的優點 2、說說你瞭解過、使用過什麼程式設計工具?程式設計
- 說說你對keep-alive的理解是什麼?Keep-Alive
- 說說webpack的熱更新是如何做到的?原理是什麼?Web
- 關於Java中各種修飾符與訪問修飾符的說明 (轉)Java
- 憑什麼說這是前端最好的時代?前端
- 面試官:說說你對NoSQL的瞭解,為什麼要有NoSQL面試SQL
- Vite為什麼快呢?快在哪?說一下我自己的理解吧Vite
- 面試官:你給我說一下什麼是時間輪吧?面試
- 什麼是框架?為什麼說 Angular 是框架?框架Angular
- 你真正瞭解什麼是CloudNative嗎?Cloud
- 災備是什麼意思?怎麼簡單理解?
- DNS協議 是什麼?說說DNS 完整的查詢過程?DNS協議
- 你說說RPC的一個請求的流程是怎麼樣的?RPC
- 什麼是物件?什麼是抽象?怎麼理解物件導向的程式設計思想?物件抽象程式設計
- 為什麼說PHP是個貧民區PHP
- 對laravel框架你瞭解多少,為什麼說是優雅的框架Laravel框架
- 一個故事教你看懂什麼是數字證書,它的原理是什麼?它的作用是什麼?
- 到底什麼是AQS?面試時你能說明白嗎!AQS面試
- 架設wordpress,,,,說明什麼是外掛?什麼是主題?背後的實現原理是什麼?試用至少10個外掛及三個主題,並說明其用途與配置過程
- python是什麼?這些你都瞭解了嗎?Python
- 為什麼說列舉更佔記憶體,列舉原理是什麼?記憶體
- 大家說說看過的最有幫助的 Oracle 圖書是什麼 ?Oracle
- 你說一下Redis為什麼快吧,怎麼實現高可用,還有持久化怎麼做的?Redis持久化
- 這麼說吧,Netty很簡單,其實就是個Jar包,是作為通訊元件用的NettyJAR元件
- 《面試補習》- 你來說說什麼是限流?面試
- 為什麼說物件導向是一次偉大的進步?物件
- 什麼是CDN?CDN的原理和作用是什麼?
- 大家說說這樣的內容怎麼設計類?怎麼持久化?持久化
- 工作這麼多年,你能向新人解釋清到底什麼是物件導向程式設計嗎?物件程式設計
- PHP 物件導向 (一)許可權修飾符PHP物件
- 防火牆是什麼?怎麼理解?防火牆
- 做遊戲為什麼這麼難?從一個動畫和一把椅子說起遊戲動畫
- 說說webpack proxy工作原理?為什麼能解決跨域?Web跨域
- 什麼是DDI?DDI的原理和作用是什麼?一文看懂
- javaScript面試題整理 --- 什麼是閉包,什麼是立即執行函式,它的作用是什麼?簡單說一下閉包的使用場景JavaScript面試題函式