android-java 面試題蒐集

一、註冊廣播有哪幾種方式,有什麼區別
1-1.常駐型廣播 註冊方式就是在應用程序的AndroidManifast.xml中進行註冊,這注冊方式一般又被稱做靜態註冊
action android:name="android.provider.Telephony.SMS_RECEIVED"/>
1-二、很是駐形廣播
··很是駐型廣播,當應用程序結束了,廣播天然就沒有了,   好比在 Activity 中的onCreate或者onResume中注廣播接收者,在onDestory 中註銷廣播接收者。這樣廣播收者就一個很是駐型的了,這種註冊方式也叫動態註冊

二、繪製 Activity 的生命流程圖
三、註冊Service須要注意什麼
Android是單線程模型,這意味着Android UI操做並非線程安全的而且這些操做必須在UI線程中執行,因此你單純的new一個Thrad而且start()不行的,由於這違背了Android的單線程模型。這裏我推薦使用Hanlder和AsyncTask,尤爲是AsyncTask,

四、Service與Activity怎麼實現通訊
    第一:經過Intent,這個比較簡單了,能夠指定package name和class name的方式調用,Intent。setClassName這個成員
便可。經過putString進行數據裝載,startService(intent)便可
    第二:經過IPC,這個比較麻煩,通常用不着,這裏不談
----------怎麼反過來呢
    第一:Service經過廣播的形式發送boardcast,咱們寫一個boardcastReceiver便可。
    第2、service直接向activity發intent,在service裏面進行startActivity,是屬於在Activity外
startActivity即在task外啓動activity,所以,必須在intent加入一個參數以下:
Intent intentSend=new Intent(Constants.ACTION_STATUS);
intentSend.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intentSend.putExtra("status","end");
startActivity(intentSend);


五、Handle通訊具體到源碼,是怎麼實現的
    Message這個類裏有個 Handler target成員,表示這個消息由哪一個Handler處理。Handler的sendMessage方法就是將這個成員變量設置爲當前的Handler。不一樣類(非Activity)只要把Handler變量傳進去就行。

六、Handle的機制
    1. Looper:(至關於隧道) 一個線程能夠產生一個Looper 對象,由它來管理此線程裏的Message Queue( 車隊,消息隧道) 。

2. Handler: 你能夠構造Handler 對象來與Looper 溝通,以便push 新消息到Message Queue 裏;或者接收Looper( 從Message Queue 取出) 所送來的消息。

3. Message Queue( 消息隊列): 用來存放線程放入的消息。

4. 線程:UI thread 一般就是main thread ,而Android 啓動程序時會替它創建一個Message Queue 。

每個線程裏可含有一個Looper 對象以及一個MessageQueue 數據結構。在你的應用程序裏,能夠定義Handler 的子類別來接收Looper 所送出的消息。

七、怎麼實現ListView多種佈局?
    在自定義adapter中須要重寫兩個方法:getItemViewType() 、 getViewTypeCount(), getViewTypeCount這個方法返回是佈局的數量,當返回的佈局大於1時,adapter 會分配多個convertview,而根據getItemViewType 返回的type進行標記, getItemViewType返回的type是從0-n 開始的,也就是和數組的下標相同,若是返回的type >=getViewTypeCount 就會報錯。如下代碼是業務邏輯的一部分。僅供參考

八、ListView與數據庫綁定的實現
    1.將Sqlite數據庫的內容查詢出來並放入數組列表中,造成ListView的數據源;
    2.適配器綁定數據源,顯示在ListView item中。

九、怎麼實現一個部分更新的 ListView?
    Adapter的notifyDateSetChanged()方法便可。


十、JAVA多態的實現原理

抽象的來說,多態的意思就是同一消息能夠根據發送對象的不一樣而採用多種不一樣的行爲方式。(發送消息就是函數調用)
實現的原理是動態綁定,程序調用的方法在運行期才動態綁定,追溯源碼能夠發現,JVM 經過參數的自動轉型來找到合適的辦法。

十一、JAVA 垃圾回收機制
    什麼是垃圾回收機:釋放那些再也不持有引用的對象的內存
    
十二、JAVA 中堆和棧的區別,說下java 的內存機制
    基本數據類型比變量和對象的引用都是在棧分配的
    堆內存用來存放由new建立的對象和數組
    類變量(static修飾的變量),程序在一加載的時候就在堆中爲類變量分配內存,堆中的內存地址存放在棧中
    實例變量:當你使用java關鍵字new的時候,系統在堆中開闢並不必定是連續的空間分配給變量,是根據零散的堆內存地址,經過哈希        算法換算爲一長串數字以表徵這個變量在堆中的"物理位置」,實例變量的生命週期--當實例變量的引用丟失後,將被GC(垃圾回收器)        列入可回收「名單」中,但並非立刻就釋放堆中內存
    局部變量: 由聲明在某方法,或某代碼段裏(好比for循環),執行到它的時候在棧中開闢內存,當局部變量一但脫離做用域,內存立        即釋放

1三、講講 Java 中的集合有多少種,區別是什麼?
    ArrayList、LinkedList、Vector的區別:ArrayList 和Vector底層是採用數組方式存儲數據,Vector因爲使用了synchronized方法(線程安全)因此性能上比ArrayList要差,LinkedList使用雙向鏈表實現存儲,隨機存取比較慢
    HashMap和 HashTable 的區別:
        HashTable比較老,是基於Dictionary 類實現的,HashTable 則是基於 Map接口實現的
        HashTable 是線程安全的, HashMap 則是線程不安全的
        HashMap可讓你將空值做爲一個表的條目的key或value
1四、ListView卡頓的緣由與性能優化,說的越多越好
     ListView卡頓緣由分析
   1..Adapter的getView方法裏面convertView沒有使用setTag和getTag方式;
   2.在getView方法裏面ViewHolder初始化後的賦值或者是多個控件的顯示狀態和背景的顯示沒有優化好,抑或是裏面含有複雜的計算和耗時操    做;
   3.在getView方法裏面 inflate的row 嵌套太深(佈局過於複雜)或者是佈局裏面有大圖片或者背景所致;
   4.Adapter多餘或者不合理的notifySetDataChanged;
   5.listview 被多層嵌套,屢次的onMessure致使卡頓,若是多層嵌套沒法避免,建議把listview的高和寬設置爲fill_parent. 若是是代碼     繼承的listview,那麼也請你別忘記爲你的繼承類添加上LayoutPrams,注意高和寬都是fill_parent的;
1五、Android中的動畫有哪些,區別是什麼
    一個是補間動畫、一個是逐幀動畫
····區別:補間動畫這種實現方式可使組件移動 放大 縮小 以及旋轉的變化
········逐幀動畫 相似電影經過播放排序好的圖片    
········補間動畫、經過核心API AlphaAnimation---TranslateAnimation--ScaleAnimation--RotateAnimation 設置屬性
    animation.setDuration(3000)來設置頻率

桌幀動畫核心api是 AnimationDrawable 和anim下的dance.xml下的Animation_list配合使用

    animation_drawable=(AnimationDrawable) stage.getBackground();


1六、說說內存泄露的狀況有哪些
    1. 查詢數據庫而沒有關閉Cursor
    2. 調用registerReceiver後未調用unregisterReceiver().
    3. 未關閉InputStream/OutputStream
    4. Bitmap使用後未調用recycle()
        5. Context泄露
1七、OOM是怎麼引發的?怎麼儘可能避免 OOM 問題的出現

    由於刷機失敗而致使系統取讀系統文件失敗,因此所引起的安全機制。

    1)使用更加輕量的數據結構
    避免在Android裏面使用Enum
        減少Bitmap對象的內存佔用
    使用更小的圖片
       複用系統自帶的資源
    避免在onDraw方法裏面執行對象的建立
    StringBuilder
    

1八、什麼是 ANR 問題?爲何會引發 ANR 問題?
      在Android裏,應用程序的響應性在Android裏,應用程序的響應性是由Activity Manager和WindowManager系統服務監視的 。當它監測到如下狀況中的一個時,Android就會針對特定的應用程序顯示ANR:1.在5秒內沒有響應輸入的事件(例如,按鍵按下,屏幕觸摸)
2.BroadcastReceiver在10秒內沒有執行完畢

1九、如何避免ANR?
    一、運行在主線程裏的任何方法都儘量少作事情
    二、應用程序應該避免在BroadcastReceiver裏作耗時的操做或計算
    三、避免在Intent Receiver裏啓動一個Activity,由於它會建立一個新的畫面,並從當前用戶正在運行的程序上搶奪焦點

20、Socker編程的步驟
     建立服務器的步驟:
1,指定端口實例化一個ServerSocket
2,調用ServerSocket的accept方法以在等待鏈接期間形成阻塞
3,獲取位於該底層Socket的流以進行讀寫操做
4,將數據封裝成流
5,對Socket進行讀寫
6,關閉打開的流
  建立客戶端的步驟:
1,經過IP地址和端口實例化Socket,請求鏈接服務器
2,獲取Socket上的流以進行讀寫
3,把流包裝進BufferedReader/PrintWriter的實例
4,對Socket進行讀寫
5,關閉打開的流

21/設計一個圖片緩存加載機制

22/Fragment嵌套多個Fragment會出現bug嗎
23/Scrollview怎麼判斷是否滑倒底部
    一、實現OnTouchListener來監聽是否滑動到最底部
    二、重寫ScrollView的onScrollChanged的方法,在onScrollChanged函數中判斷

2四、怎麼把字符串轉成字節數組、String.spits
    怎麼把字節數組放到集合裏面  arrays.toArray();
    Arrays.asList();
2五、任意五個路徑
2六、hashMap hashtable 區別
2七、arraylist 和hashMap的區別  前者是線性集合結構、後者是鍵值對
2八、線程和進程的區別
    答:線程是程序執行的最小單元、線程依賴進程、而且由代碼控制 、進程則由操做系統控制、還有進程具備獨立的內存空間、線程共享進程資源




一、播放音頻:一、mediaPlayer
1.一、在Res文件目錄下建立raw文件夾、裏面放置音頻文件、
二、SoundPool/assets
2----------------------------------
視頻播放器 VideoView 核心API MediaController控制器
這個時候須要配置權限、寫入和建立
關鍵代碼:
VideoView view=(VideoView)findViewById(R.id.video);
MediaController controller=new MediaController(MainActivity.this);配合使用
三、錄音:mediaRecoder
四、拍照
五、多線程:
六、多個線程併發進行、斷點續傳,充分挖掘CPU資源,提升程序的執行效率
七、線程和進程 互相依賴
八、什麼是進程?進程是有操做系統控制,線程是應用程序執行的最小單位,不可分割,由代碼控制
一個進程包含多個線程,進程具備獨立的內存空間,線程共享進程內的資源。
九、tcp udp
前者安全協議,須要三次握手
後者不須要握手、非安全協議
十、socket通訊 :點對點通訊、不少即時通訊都是經過這個完成的,網絡通訊機制、每臺設備有本身的端口號,
十一、網絡交互:URL/Httpclient/XUtils
十二、第三方框架、一句話:xutils網絡訪問、AChartEngine報表、image_loader 圖片加載。
1三、上線了嗎?上線了、百度助手、360、可能下架了
1四、負責模塊、編碼主要本身作、前段的設計什麼的  都是由經理帶着作的
1五、項目介紹:我是會計:
    個人錢包、安全設置、數據備份、主題設置、其餘設置、關於軟件以及月/周/學期統計
1六、處理事件的方式;回調、setOnclickListener/監聽
1七、監聽有五種:外部內、內部類、匿名內部類、activity自己、click綁定時間
1八、四大組件:activity/service/contentprovider/boastCast receiver;
1九、底層實現
20、異步處理的方法
2一、HttpConectionURL
2二、計時器Timer



財務部 市場部 研發部 行政部門  5我的 老大帶領anandroid和java  行政部 20來個


android的核心文件 androidManifest.xml 根節點Manifest--第二層application--第三層activity-intent

30、activity的生命週期
  從開始到銷燬的過程--oncreate=ondestory的過程

2九、
2八、sax pull二者類似 基於事物處理
29/list map
330/hashmp hashtable
3四、瀏覽器兼容
3五、前段框架 jquery html5
3六、四大組件
3八、六大布局
3九、layout_gravity
40、數組和集合  長度/
    String是個final類、不能派生出子類
          Object是一切類的父類html

相關文章
相關標籤/搜索