Android開發工程師筆試題
1.請談一下Android系統的架構
Android系統從下往上分為Linux核心層(linux kerner),執行庫(runtime library),應用程式框架層,應用程式層
linuxkernel:負責硬體的驅動程式、網路、電源、系統安全以及記憶體管理等功能。
libraries和 androidruntime:libraries:即c/c++函式庫部分,大多數都是開放原始碼的函式庫,例如webkit,該函式庫負責 android網頁瀏覽器的執行
applicationframework(應用軟體架構),Java應用程式開發人員主要是使用該層封裝好的api進行快速開發。
applications:下層為上層服務,上層需要下層的支援,呼叫下層的服務,這種嚴格分層的方式帶來的極大的穩定性、靈活性和可擴充套件性,使得不同層的開發人員可以按照規範專心特定層的開發。
android應用程式使用框架的api並在框架下執行,這就帶來了程式開發的高度一致性,另一方面也告訴我們,要想寫出優質高效的程式就必須對整個 applicationframework進行非常深入的理解。精通
2.textview如何支援HTML標籤,webview中如何獲取超連結,如何適配圖
publicclassMain extendsActivity {
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtFirst=(TextView)findViewById(R.id.txtFirst);
String html="<font color='red'>樣式一</font> ";
html+="<font color='#0000FF'> <big> <i> 樣式二 </i> </big> <font>";
html+="<font color='@"+android.R.color.white+"'> <tt> <b> <big> <u> 樣式三 </u> </big> </b> </tt> </font> ";
html+="<big> <a href='http://blog.csdn.net/a_mean'>我的部落格:http://blog.csdn.net/a_mean </a> </big>";
CharSequence charSequence=Html.fromHtml(html);
txtFirst.setText(charSequence);
//該語句在設定後必加,不然沒有任何效果
txtFirst.setMovementMethod(LinkMovementMethod.getInstance());
}
3.淺談Android常用5中佈局
1.線性佈局(linearlayout):
android:orientation為horizonal,表示的是水平佈局,頂部,底部,水平居中生效
android:orientation為vertical,表示的是垂直佈局,左右對齊,垂直居中生效
另如果使用以下方法
android:layout_weight= "1"//表示按比例分配剩餘寬度,稱為權重
android:layout_width= "0dp"//水平佈局使用該方法
如果是垂直佈局使用以下方法
android:layout_weight= "1"//表示按比例分配剩餘寬度,稱為權重
android:layout_height= "0dp"//垂直佈局使用該方法
2.相對佈局(Relativelayout):
預設的是頂部左對齊,沒有方向,故沒有android:orientation,並無權重的概念
幾個常用的方法如下:
android:id = “@+id/tv4”//定義一個id
android:layoout_toRightof= "@id/tv3"//引用一個id
android:layout_centerInParent= "true"//水平垂直都居中
android:layout_above= “@id/tv2” //引用id,表示在tv2之上
android:layout_alignleft= “@id/tv2”//與tv2左對齊
3.幀佈局(FrameLayout):
預設是左上角對齊,幀佈局相當於一個TestView,常用的方法如下:
android:layout_gravity= "center"
4.表格佈局(TableLayout):
不用指定寬和高
<tablelayout
<tableRow
//行
/>
<TestView
//列
/>
/>
5.絕對佈局(absolutelayout)
指定x,y座標,一般用的比較少,在電視這塊會用到
4.Android常見資料儲存方式
Android系統一共提供了四種資料儲存方式。分別是:
1 SharePreference
2 SQLite
3 Content Provider
4 File
由於Android系統中,資料基本都是私有的,都是存放於“data/data/程式包名”目錄下,所以要實現資料共享,正確方式是使用Content Provider。
SQLite:
SQLite是一個輕量級的資料庫,支援基本SQL語法,是常被採用的一種資料儲存方式。Android為此資料庫提供了一個名為SQLiteDatabase的類,封裝了一些操作資料庫的API。
SharedPreference:
除SQLite資料庫外,另一種常用的資料儲存方式,其本質就是一個xml檔案,常用於儲存較簡單的引數設定。
File:
即常說的檔案(I/O)儲存方法,常用語儲存大數量的資料,但是缺點是更新資料將是一件困難的事情。
ContentProvider:
Android系統中能實現所有應用程式共享的一種資料儲存方式,由於資料通常在各應用間的是互相私密的,所以此儲存方式較少使用,但是其又是必不可少的一種儲存方式。例如音訊,視訊,圖片和通訊錄,一般都可以採用此種方式進行儲存。每個ContentProvider都會對外提供一個公共的URI(包裝成Uri物件),如果應用程式有資料需要共享時,就需要使用ContentProvider為這些資料定義一個URI,然後其他的應用程式就通過Content Provider傳入這個URI來對資料進行操作。
5.APP版本升級注意事項
http://blog.csdn.net/qq_30716173/article/details/50911819
6.訊息推送流程
http://jingyan.baidu.com/article/ce4366491084313772afd34a.html7.簡述Android廣播機制
http://www.cnblogs.com/RMBP975/archive/2013/03/12/2955733.html
8.Android常見非同步處理實現原理
http://blog.csdn.net/yanbober/article/details/45936145
9.Android記憶體回收機制
http://www.cnblogs.com/bastard/archive/2012/08/17/2644169.html
10.金字塔
請寫出返回金字塔的函式drawPyramid,例:drawPyramid(4)
*
***
*****
http://blog.csdn.net/lissdy/article/details/7792305
11.顛倒(reverse)
請寫出顛倒單詞(不是字母)順序的函式myReverse.每一個單詞以空格區分。不可直接使用split或separate等的字串分割函式。例:myReverse(“These questions are tooeasy for me”)==>”me for easy to arequestions These”
StringmyReverse(String s){
將程式碼寫在下面空白處
http://blog.sina.com.cn/s/blog_6217219f0101q2o8.html
}
12.只修改一個位元組(1 byte)使其for迴圈能夠輸出20個星號(2種辦法即可)
int i,n=20;
for(I=0;i<n;i--)
printf(“*”)
13.listview下拉重新整理的實現過程
http://blog.csdn.net/loongggdroid/article/details/9385535
14.圖片記憶體優化
http://blog.csdn.net/gao_chun/article/details/45391401