Android面試題(1)

来源:http://www.cnblogs.com/panhouye/archive/2017/02/13/6392364.html
-Advertisement-
Play Games

1. Java語言基本數據類型有哪些?分別占用的記憶體空間是多少? 答: byte(1位元組),boolean(1位元組),char(2位元組),short(2位元組),int(4位元組),float(4位元組),long(8位元組),double(8位元組)。 答: &:數值運算時為按位與運算,邏輯值運算時分別計算 ...


1.  Java語言基本數據類型有哪些?分別占用的記憶體空間是多少?

答:

byte(1位元組)boolean(1位元組)char(2位元組)short(2位元組),int(4位元組)float(4位元組)long(8位元組)double(8位元組)

 

2.  &&&的區別。

答:

&:數值運算時為按位與運算,邏輯值運算時分別計算兩個表達式的值,再作與運算;

&&:邏輯與運算符,先計算第一個表達式的值,如果為true,那就計算第二個表達式的值,再作與運算,如果為false,不計算第二個表達式,直接返回false(常用)。

 

 

3.  sleep() wait() 有什麼區別?

答:

sleep 是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他

線程,但是監控狀態依然保持,到時後會自動恢復。調用 sleep 不會釋放對象鎖。

wait Object 類的方法,對此對象調用 wait 方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出 notify方法(或 notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。

 

4.  OverloadOverride的區別。Overloaded的方法是否可以改變返回值的類型?

答:

方法的重寫 Overriding 和重載 Overloading Java多態性的不同表現。重寫 Overriding是父類與子類之間多態性的一種表現,重載 Overloading 是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數, 我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)Overloaded 的方法是可以改變返回值的類型。

 

 

5.  給出一個數列251256708,使用冒泡排序法實現排序後輸出。

答:

public class SortDemo{

    public static void main(String[] args){

        int[] nums = {2,3,12,56,70,8};

        for(int i=0;i<nums.length-1;i++){

  for(int j=0;j<nums.length-i-1;j++){

  if(nums[j]>nums{j+1}){

  int temp = nums[j];

  nums[j]=nums[j+1];

nums[j+1] = temp;

}

}

}

System.out.println(“排序後的結果為:”);

for(int i=0;i<nums.length;i++){

  System.out.print(nums[i]+” ”);

}

}

}

 

6.  寫出Singleton模式的代碼實現。

Singleton 模式主要作用是保證在 Java 應用程式中,一個類 Class 只有一個實例存在。

一般 Singleton 模式通常有幾種種形式:

第一種形式: 定義一個類,它的構造函數為 private 的,它有一個 static private的該類變數,在類初始化時實例話,通過一個 public getInstance方法獲取對它的引用,繼而調用其中的方法。

public class Singleton {

    private Singleton(){}

    //在自己內部定義自己一個實例,是不是很奇怪?

    //註意這是 private 只供內部調用

    private static Singleton instance = new Singleton();

    //這裡提供了一個供外部訪問本 class 的靜態方法,可以直接訪問  

    public static Singleton getInstance() {

        return instance;   

    } 

第二種形式

public class Singleton {  

    private static Singleton instance = null;

    public static synchronized Singleton getInstance() {

        //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次     

        //使用時生成實例,提高了效率!

        if (instance==null)

            instancenew Singleton();

            return instance;  

        } 

    }

}

其他形式:

定義一個類,它的構造函數為 private 的,所有方法為 static 的。

一般認為第一種形式要更加安全些

 

7.  實現一個線程的方式有幾種,分別寫出示例代碼。

答:

兩種方式,分別是繼承Thread類和實現Runnable介面

1、繼承Thread類:

public class ThreadDemo extends Thread{

  public void run(){

  //實現代碼

}

}

啟動線程

new ThreadDemo().start();

 

2、實現Runnable介面

public class ThreadDemo implements Runnable{

  public void run(){

  //實現代碼

}

}

啟動線程

new Thread(new ThreadDemo()).start();

 

8.  try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後?

答:

會,在return前執行

 

9.  用最有效率的方法算出2乘以8等於幾?

答:

2<<3

 

10.面向對象的特征有哪些?簡單闡述自己的理解。

(1).抽象:

抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地註意與當前目標有關的方面。抽象並不打算瞭解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。

(2).繼承:

繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和實例變數,並且類可以修改或增加新的方法使之更適合特殊的需要。

(3).封裝:

封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的介面訪問其他對象。

(4). 多態性:

多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共用、代碼共用的優勢,很好的解決了應用程式函數同名問題。

 

11.RuntimeExcepionException的區別

答 :

異常表示程式運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java 編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。

 

12.StringStringBuffer的區別。

答:

String的長度是不可變的,StringBuffer的長度是可變的。如果你對字元串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffertoString()方法

 

13.列出最少10個常用的IO實現類。

FileInputStream,FileOutputStream,FileReader,FileWriter,BufferedInputStream,

BufferedOutputStream,BufferedReader,InputStreamReader,PrintStream,PrintWriter

 

14.Vector類和ArrayList類的區別

答:

ArrayListVector主要從二方面來說.

.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程式不安全的,不是同步的

.數據增長:當需要增長時,Vector預設增長為原來一培,而ArrayList卻是原來的一半

 

15.abstract classinterface有什麼區別?

答:

聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,併為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法

介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面

 

16.事務是什麼?

事務是單個邏輯工作單元,要麼全部做完,要麼全部不做,事務由兩種狀態,一個提交一個回滾。事務由四個特性ACID,原子性、一致性、隔離性和永遠性。

 

17.寫出查詢資料庫表的JDBC的連接步驟。

1、載入JDBC驅動程式

2、提供連接URL

3、建立一個資料庫的連接

4、創建一個Statement

5、執行SQL語句

6、處理結果

7、關閉JDBC對象

 

18.更新Student表中id10的記錄,把name欄位的值改為”jack,age欄位的值改為25,寫出SQL語句。

update Student set name=’jack’,age=25 where id=10

 

19.寫出查詢Student表中記錄總數的SQL語句

Select count(id) from student

 

20.JDBC編程中,StatementPreparedStatement有什麼區別

1Statement使用字元串拼接的方式編寫SQL語句,PreparedStatement使用占位符的方式編寫SQL語句,PreparedStatement方式的可讀性和可維護性更強;

2PreparedStatement盡最大可能提高性能,在被DB的編譯器編譯後的執行代碼被緩存下來,那麼下次調用時只要是相同的預編譯語句就不需要編譯,只要將參數直接傳入編譯過的語句執行代碼中就會得到執行,而Statement則每次執行都必須編譯語句。

3PreparedStatement具有防SQL註入的安全處理,而Statement容易被SQL註入,安全性差

 

21.Collection Collections的區別

答:Collection是集合類的上級介面,繼承與他的介面主要有Set List.

Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作

 

22.分別解釋java中的4種訪問修飾符的用法。

作用域     當前類   同一package      子孫類       其他package
public       √          √             √             √
protected    √          √             √             ×
friendly     √          √             ×             ×
private      √          ×             ×             ×

 

23.     常用的設計模式有哪些,並闡述作用。

Java 中的 23 種設計模式:

Factory(工廠模式),      Builder(建造模式),       Factory Method(工廠方法

模式),

Prototype(原始模型模式),Singleton(單例模式),    Facade(門面模式),

Adapter(適配器模式),    Bridge(橋梁模式),        Composite(合成模式),

Decorator(裝飾模式),    Flyweight(享元模式),     Proxy(代理模式),

Command(命令模式),      Interpreter(解釋器模式), Visitor(訪問者模式),

Iterator(迭代子模式),   Mediator(調停者模式),    Memento(備忘錄模式),

Observer(觀察者模式),   State(狀態模式),         Strategy(策略模式),

Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)

 

24.     請簡述Android的四大基本組件。

Android四大基本組件分別是ActivityService服務,Content Provider內容提供者,BroadcastReceiver廣播接收器。

Activity :

應用程式中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控制項也可以監聽並處理用戶的事件做出響應。

BroadcastReceive廣播接收器:

你的應用可以使用它對外部事件進行過濾只對感興趣的外部事件(如當電話呼入時,或者數據網路可用時)進行接收並做出響應。

Service 服務:

一個Service 是一段長生命周期的,沒有用戶界面的程式,可以用來開發如監控類程式。

Content Provider內容提供者 :

android平臺提供了Content Provider使一個應用程式的指定數據集提供給其他應用程式。

 

25.     請簡述Handler工作機制。

andriod提供了 Handler Looper 來滿足線程間的通信。

Handler 先進先出原則。

Looper類用來管理特定線程內對象之間的消息交換(Message Exchange)

 

1)Looper: 一個線程可以產生一個Looper對象,由它來管理此線程里的Message Queue(消息隊列)

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

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

4)線程:UI thread 通常就是main thread,而Android啟動程式時會替它建立一個Message Queue

 

26.     android中使用SQLiteOpenHelper這個輔助類時,可以生成一個資料庫,並可以對資料庫版本進行管理的方法是哪兩個?

public void onCreate(SQLiteDatabase db) {}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}

 

27.     Android中常用的五種佈局分別是?

AbsoluteLayoutFrameLayoutLinearLayoutRelativeLayoutTableLayout

 

28.     Android的五種數據存儲方式

SharedPreferences

文件

SQLite資料庫

ContentProvider

網路

 

29.     android 中有哪幾種方式解析xml?分別有什麼優缺點?

3

SAX: 優點:占用記憶體小,解析速度快,解析屬性方便,缺點:靈活性較差

DOM: 優點:可以任意讀取節點,靈活性高,API與集合類似,缺點:占用一定的記憶體空間

PULL: SAX原理類似具備SAX方式的所有優點,不同的地方是,PULL提供了更方便解析的API,方便操作

 

 

30.     談談AndroidIPC(或稱RPC)機制

IPC是內部進程通信的簡稱,是共用“命名管道”的資源。Android中的IPC機制是為了讓ActivityService之間的通信,類似於遠程方法調用,類似於C/S模式的訪問。通過定義AIDL介面文件來定義IPC介面。Server端實現IPC介面,Client端調用IPC介面本地代理。

 

31.     編程題:實現網路文件下載功能

要求:

(1)       下載地址為:http://www.github.com/finally-vince/android.rar

(2)       下載目的地:android手機sdcard根目錄

(3)       寫出核心方法即可。

         public String download(){

                            String actionUrl = "http://www.github.com/finally-vince/android.rar";

                            try {

                                     URL url = new URL(actionUrl);

                                   &

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java IO流學習總結六:ByteArrayInputStream、ByteArrayOutputStream 轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/54946762 本文出自 "【趙彥軍的博客】" 類的繼承關係 可以將字 ...
  • #pragma mark - 1.創建TextField - (void)createTextField { UITextField *textFiled = [[UITextField alloc] initWithFrame:CGRectMake(20, 40, 250, 45)]; textF ...
  • Android中通過Intent調用其他應用的方法(轉) Android中兩種序列化方式的比較Serializable和Parcelable http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1201/655.html Androi ...
  • activity的啟動模式一共有四種:standard、singleTop、singleTask和singleInstance,可以在AndroidMannifest.xml中通過給<activity>標簽指定android:launchMode屬性來選擇啟動模式。 1.standard 是活動預設 ...
  • 1. XCUIApplication 這是你正在測試的應用的代理。它能讓你啟動應用,這樣你就能執行測試了。它每次都會新起一個進程,這會多花一些時間,但是能保證測試應用時的狀態是乾凈的,這樣你需要處理的變數就少了些。 2. XCUIElement 這是你正在測試的應用中UI元素的代理。每個元素都有類型 ...
  • 經檢查,原來是Activity的onCreate(Bundle savedInstanceState)裡面沒有寫: ...
  • CleanCacheActivity.java 我們需要導入aidl文件,如下圖 導入。 aidl是為了進程間通信.為了學習aidl,我們可以參考 http://www.open-open.com/lib/view/open1469494852171.html activity_clean_cach ...
  • 1.在DOS視窗下進入自己的keystore所在位置,輸入 keytool -list -v -keystore xxxx.keystore -storepass 密碼 xxxx.keystore是自己的keystore文件,後邊密碼不能忘了 2.要查看其他信息,按下圖指定代碼輸入即可 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...