首頁 > 常見問題 > 百度Android面試題分享

百度Android面試題分享

藏色散人
發布: 2020-07-31 17:06:09
轉載
3232 人瀏覽過

推薦:《2020年Android面試題大總結【收藏】

      1 Android dvm的進程和Linux的行程##, 應用程式的程式是否為同一個概念

DVMdalivk的虛擬機器。每一個Android應用程式都在它自己的進程中運行,都擁有一個獨立的Dalvik 虛擬機器實例。而每一個DVM都是在#Linux 中的一個行程,所以說可以認為是同一個概念。 #

2sim卡片的EF #檔案有何作用

#sim卡的檔案系統有自己規範,主要是為了和手機通訊,sim 本身可以有自己的作業系統,EF#就是要儲存和手機通訊用的

#3、內嵌作業系統記憶體管理有哪幾種,各有何特性 ?

頁式,段式,段頁,用到了##MMU,虛擬空間等技術

4、什麼是嵌入式即時作業系統, Android #作業系統屬於即時作業系統嗎?#

嵌入式即時作業系統是指當外界事件或資料產生時,能夠接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間之內來控制生產過程或對處理系統作出快速回應,並控制所有即時任務協調一致運行的嵌入式作業系統。主要用於工業控制、軍事​​設備、
航空航太等領域對系統的反應時間有嚴格的要求,這需要使用即時系統。又可分為軟實時和硬實時兩種,而android#是基於linux#核心的,因此屬於軟實時。

5#、一條最長的短訊息約佔多少#byte?

中文70(包括標點),英文

#160個位元組6## android

#中的動畫有哪幾類,它們的特徵和差異是什麼? 兩種,一種是#Tween動畫、還有一種是Frame動畫。 Tween動畫,這種實作方式可以使視圖元件移動、放大、縮小以及產生透明度的變化;另一種

## ##Frame#########動畫,傳統的動畫方法,透過順序的播放排列好的圖片來實現,類似電影。 ##########

7handler #機制的原理

#

andriod提供了 Handler Looper 來滿足執行緒間的通訊。 Handler 先進先出原則。 Looper類別用來管理特定執行緒內物件之間的訊息交換(Message Exchange)
    1
Looper: 一個執行緒可以產生一個Looper對象,由它來管理此執行緒裡的Message Queue(訊息佇列)
2
Handler: #你可以建構Handler 物件來與Looper溝通,以便push新訊息到Message Queue裡;或接收#Looper##從#Looper##從 Message Queue取出
)
所寄來的訊息。     3 Message Queue(訊息佇列
):
是用來存放執行緒放入的訊息。     4)執行緒:UI thread ##通常是 main thread,而Android在啟動程式時會替它建立一個

Message Queue#########。 ##########

8、說說mvc#模式的原理,它在android中的運用

MVC(Model_view_contraller)」 模型_檢視## _控制器 MVC應用程式總是由這三個部分組成。 Event(事件)導致# Controller改變ModelView ,或者同時改變兩者。只要 Controller改變了

Models#########的資料或屬性,所有依賴的# ########View#########都會自動更新。類似的,只要#########Controller#########改變了###################,##### ####View#########會從潛在的#########Model#########中取得資料來刷新自己。 ################

View重繪與記憶體外洩的好像是面試常問的問題
1. View

#:# handle.sendmessage發送訊息,然後在

######handle###### ####的#########getmessage#########裡面執行#########invaliate#########或######### #####postinvaliate.#######

2. GC記憶體外洩
##出現狀況:1.
#資料庫的##cursor 沒有關閉2.
建構adapter,沒有使用快取#contentview
##衍生
listview的最佳化問題-----減少建立##view的物件,#充分使用contentview, 可以使用一靜態類別來最佳化處理getview#的過程/3. Bitmap
物件不使用時採用recycle()##釋放記憶體 4.activity
中的物件的生命週期大於activity
##偵錯方法
##: DDMS==> HEAPSZIE==>dataobject==>[Total Size]#

Activity的生命週期
#Activity變成一個視窗: Activity屬性設定
#三 你後台的Activity#被系統
回收怎麼辦:onSaveInstanceState
#四##調用與被呼叫:我們的通訊使者 - Intent

## Activity的生命週期和其他手機 平台

#########的應用程式一樣,#########Android###### ####的應用程式的生命週期是被統一掌控的,也就是說我們寫的應用程式命運掌握在別人(系統)的手裡,我們不能改變它,只能學習並適應它。 ##########

簡單地說一下為什麼是這樣:我們手機在運行,一個應用程式的時候,有可能打進來電話發進來短信,或者沒有電了,這時候程序都會被中斷,優先去服務電話的基本功能,另外系統也不允許你佔用太多資源,至少要保證電話功能吧 #,所以資源不足的時候也就有可能被幹掉。言歸正傳,Activity的基本生命週期如下程式碼所示:

Java 程式碼

#
public class MyActivity extends Activity{
    protected void onCreate(Bundle savedInstanceState);
    protected void onStart();
    protected void onResume();
    protected void onPause();
    protected void onStop();
    protected void onDestroy();
}
登入後複製

你自己寫的Activity#會依需求重 載這些方法,onCreate是免不了的,在一個Activity正常啟動的過程中,他們被呼叫的順序是 onCreate -> onStart ->onResume, Activity被幹掉的時候順序是onPause -> onStop -> onDestroy #,這樣就是一個完整的生命週期,但是有人問了,程式正運作著呢來電話了,這個程式咋辦?中止了唄,如果中止的時候新出的一個Activity#是全螢幕的那麼:onPause->onStop ,恢復的時候onStart->onResume ,如果打斷這個應用程式的是一個ThemeTranslucent ##Dialog Activity那麼只是onPause ,恢復的時候onResume 。詳細介紹一下這幾個方法中系統在做什麼以及我們應該做什麼:
onCreate:在這裡建立介面,做一些資料的初始化工作
####onStart:
到這一步變成用戶可見不可交互的
#onResume:
##變成和用戶可交互的,(在activity 堆疊系統透過堆疊的方式管理這些個Activity的最上面,運行完彈出棧,則回到上一個#Activity)onPause:
#這一步是可見但不可交互的,系統會停止動畫等消耗#CPU 的事情從上文的描述已經知道,應該在這裡保存你的一些資料,因為這個時候你的程式的優先順序降低,有可能被系統收回。這裡保存的數據,應該在 onResume裡讀出來,注意:這個方法裡做的事情時間要短,因為下一個activity不會等到這個方法完成才啟動#onstop:
##變得不可見,被下一個activity覆蓋了onDestroy: 這是activity被幹掉前最後一個被呼叫方法了,可能是外面類別呼叫#finish方法或是系統為了節省空間將它暫時性的幹掉,可以用 isFinishing()#來判斷它,如果你有一個Progress Dialog#在線程中轉動,請在onDestroy裡把他cancel掉,不然等執行緒結束的時候,呼叫##Dialogcancel方法會拋異常的。 onPauseonstop#, onDestroy ,三種狀態下 activity都有可能被系統幹掉為了保證程式的正確性,你要在onPause ()裡寫上持久層操作的程式碼,將使用者編輯的內容都儲存到儲存媒體上(一般 #都是資料庫)。實際工作中因為生命週期的變化而帶來的問題也很多,例如你的應用程式起了新的線程在跑,這時候中斷了,你還要去維護那個線程,是暫停還是殺#掉還是資料回滾,對吧?因為Activity可能被殺,所以線程中使用的變數和一些介面元素就千萬要注意了,一般我都是採用 Android的訊息機制 [Handler,Message]來處理多執行緒與介面互動的問題。這個我後面會講一些,最近因為這些東西頭已經很大了,等我理清思緒再跟大家分享。

#讓Activity#變成一個視窗:Activity屬性設定

#

講點輕鬆的吧,#可能有人希望做出來的應用程式是一個漂浮在手機主介面的東西,那麼很 簡單你只需要設定一下Activity##的主題就可以定義了在AndroidManifest.xml 中定義# Activity的地方一句話:Xml
程式碼#android:theme="@android:style/Theme.Dialog"
android:theme="@android:style/Theme.Dialog"

#這就使你的應用程式變成對話框的形式彈出來了,或者 Xml代碼android:theme="@android:style/Theme.Translucent"
android:theme="@ android:style/Theme.Translucent"

#變成半透明的,[友情提示-.-]##類似的這種 #activity的屬性可以在android.R.styleable 類別的AndroidManifestActivity 方法中看到,AndroidManifest.xml中所有元素的屬性的介紹都可以參考這個類別 android.R.styleable#上面說的是屬性名稱,具體有什麼值是在android.R.style
可以看到,像是這個」@android:style/Theme.Dialog"就對應android.R.style.Theme_Dialog ,#(##'_'換成'.' <--注意:這個是文章內容不是笑臉)就可以用在描述檔
#中了,#找找類別定義和描述檔中的對應關係就都明白了。

#你後台的Activity#被系統回收怎麼辦:onSaveInstanceState#

當你的程式中某一個Activity A 在運行時中,主動或被動地運行另一個新的Activity B 這個時候#A會執行Java程式碼
public void onSaveInstanceState(Bundle outState) {
     super.onSaveInstanceState(outState);
     super.onSaveInstanceState(outState);
    outStateState.putLong(" id", 1234567890);
}
public void onSaveInstanceState(Bundle outState) {
B 完成以後又會來找#A , 這時候就有兩種情況,一種是A被回收,一種是沒有被回收,被回 收的A要重新呼叫onCreate()方法,不同於直接啟動的是這回 onCreate()裡是帶上參數 savedInstanceState,沒被收回的就還是onResume就好了。
###savedInstanceState
是一個Bundle對象,你基本上可以把他理解為系統幫你維護的一個 Map物件。在onCreate()裡你可能會用到它,如果正常啟動onCreate就不會有它,所以用的時候要判斷是否為空。
Java

#if(savedInstanceState !=null){
     long id =savedInstanceState .getLong("id");
}
if(savedInstanceState !=null){
就像官方的Notepad教學
裡的情況,你正在編輯某一個note,突然中斷,那麼就把這個note#的##id#記住,再起來的時候就可以根據這個id
#去把那個#取出來,程式就完整一些。這也是看你的應用程式需要不需要保存什麼,例如你的介面就是讀取一個列表,那就不需要特殊記住什麼,哦,

沒準你需要記住捲軸的位置...

##########呼叫與被呼叫:我們的通訊使者###############Intent# ########

#Intent了, Intent就是這個這個意圖,應用程式間Intent進行交流,打通電話啦,來個電話啦都會發Intent, 這個是Android #架構的松耦合的精髓部分,大大提高了組件的複用性,比如你要在你的應用程序中點擊按鈕,給某人打電話,很簡單啊,看下代碼先:
#Java
程式碼 :
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL) ;
intent.setData(Uri.parse("tel:" number));
startActivity(intent);
複製程式碼
丟出這樣一個意圖,系統看到了你的意圖就喚醒了電話撥號程序,打出來。什麼讀聯絡人,發短信啊,郵件啊,統統只需要扔出intent就好了,這個部分設計地確實很好啊。
#Intent透過什麼告訴系統需要誰來接受他呢?通常使用Intent有兩種方法,第一種是直接說明需要哪一個類別來接收程式碼如下:
Java
程式碼
Intent intent = new Intent(this,MyActivity.class);
intent.getExtras().putString( "id","1");
startActivity(intent);
Intent intent = new Intent(this,MyActivity.class);intent.getExtras().putString("id","1"); tartActivity(intent);
複製程式碼
#
第一種方式很明顯,直接指定了MyActivity##為接受者 ,並且傳了一些資料給MyActivity,在MyActivity 裡可以用getIntent()#來的到這個intent 和數據。
第二種就需要先看一下AndroidMenifest#中的intentfilter的配置了#Xml
代碼

########################################### #############
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:value="android.intent.action.EDIT" />
<action android:value="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<action android:value="android.intent.action.EDIT" />
<action android:value="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/vnd.google.note" />
</intent-filter></p>
<p style="text-indent:21pt;"><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">这里面配置用到了</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">action, data, category</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">这些东西,那么聪明的你一定想到</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">intent</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">里也会有这些东西,然后一匹配不就找到接收者了吗?</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">action</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">其实就是一个意图的字符串名称。</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us"><br></span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">上</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;"> </span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">面這段</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">intent-filter</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">#的設定檔說明了這個</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">Activity</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">可以接受不同的</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us"> Action</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';"> ,當然對應的程式邏輯也不一樣咯</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">,</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">提一下那個</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us"> mimeType,</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">他是在</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">ContentProvider</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">裡定義的,你要是自己實作一個</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">ContentProvider</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">#就知道了,必須指定</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us"> mimeType</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">才能讓資料被別人使用。不知道原理說明白沒,總結一句,就是你調用別的介面不是直接</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">new</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">那個介面,而是透過丟出一個</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">intent</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">,讓系統幫你呼叫那個介面,這樣就多麼鬆藕合啊,而且符合了生命週期被系統管理的原則。想知道</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">category</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">都有啥,</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">Android</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">為你預先訂製好的</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">action</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">都有啥等等,請親自造訪官方連結</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">Intentps:</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">想知道怎麼呼叫系統應用程式的同學,可以仔細看一下你的</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">logcat</span><span style="color:#000000;font-size:10.5pt;"><span style="font-family:'宋体';">,每次執行一個程式的時候是不是有一些資訊例如</span></span><span style="font-family:Verdana, 'sans-serif';color:#000000;font-size:10.5pt;" lang="en-us" xml:lang="en-us">:</span></p>#<pre class="brush:php;toolbar:false">Starting activity: Intent {action=android.intent.action.MAINcategories={android.intent.category.LAUNCHER}flags=0x10200000comp={com.android.camera/com.android.camera.GalleryPicker} }
登入後複製

再对照一下Intent的一些set方法,就知道怎么调用咯,希望你喜欢:)

一,listview你是怎麼優化的。
#二, view的刷新,之前說過
三,IPC與原理
#四,Android
多重執行緒#Android為什麼要設計4#大元件,他們之間的聯繫,不設計行不行(主要是為了實現
#######MVC########模式,然而#########java#########中最難的模式也是這個,很少有產品能將這個模式做得很好【######### Technicolor#########的面試官問的這個】)#############
六,service的週期,activity
# #Android內部應用程式的了解,例如他做電話,以及聯絡人等等應用程式。框架層有很多東西還是多看看,熟悉Android怎麼做的,不管你做應用程式開發還是應用框架層開發很有好處的。 在就是你專案經驗,突顯你遇到什麼難點,然後是怎麼解決的!盡量將每個技術點凸顯出來,當然面試官有時候會為了體現你是否真正做過,他會問你,你在這個應用中做那個模組,用了多少個類之類的問題。偶爾有的面試官會問你,你用過Android 自備的單元測試了沒,怎麼用的?當然我面試過很多家單位,有的是做平板,手機,數位電視,有的是做出個erp之類的客戶端等等,出於前面的三個,基本上都是把Android的全部改掉,如果真正要做Android的話,大家要學的還很多。總

#########之,一句話,什麼樣的面試官都有,去面試的時候要做好一切心理準備,不管是技術還是基礎都得紮實。一個人的交談能力也很重要,總之不是非常標準的普通話,######### #########最起碼你說的得讓別人聽得懂,而且得把麵試官講得非常徹底,這樣你獲得#########offer##########的機會更大,談工資也有優勢########~~## #######當然曾經一家公司的面試官跟我說過,技術######### ##########是不惜錢的,只要你有能力,多少錢他都請。 ##########

1.View如何刷新?
2.DDMS
#TraceView##的差別? 3.activity
被回收了怎麼辦? 4.
#JavaC語言?
參考答案# :1.View
可以調用invalidate()#與#postInvalidate()##這兩個方法刷新2.DDMS
是一個程式執行檢視器,在裡面你可以看見線程和堆疊等信息,TraceView 是程式效能分析器3.activity
回收了,那就只有另起了 4.java
呼叫C語言程序,可以用JNI介面來實作
上面答案僅供參考,畢竟我個人能力也有限嘛,難免會回答錯誤,呵呵.....##:
1.View
#受系統刷新(系統內部有循環,監控事件、做業務處理、繪圖UI),可以用postInvalidate()促使系統刷新。
2.
(還真不知道)
3.
#請參考Activity生命週期,如果被系統##destroy了,也就是說的回收,只有從新start4.
透過JNI呼叫。建議閱讀《

###The Java Native InterfaceProgrammer's Guide and Specification#########》,英文版的,從#########sun##### ####網站下吧。 ##########

以上是百度Android面試題分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板