Android面試之Java基礎筆試題

Java IO流

  • 按照數據流的方向不一樣能夠分爲:輸入流和輸出流。java

  • 按照處理數據單位不一樣能夠分爲:字節流和字符流。數組

    • 字節流:一次讀入或讀出是8位二進制,後綴是Stream是字節流
    • 字符流:一次讀入或讀出是16位二進制,後綴是Reader,Writer是字符流
  • 按照實現功能不一樣能夠分爲:節點流和處理流。安全

    • 節點流:直接與數據源相連,讀入或讀出
    • 處理流:與節點流一塊使用,在節點流的基礎上,再套接一層,套接在節點流上的就是處理流
  • FileInputStream:字節輸入流,屬於節點流類型bash

  • FileOutputStream:字節輸出流,屬於節點流類型微信

編碼和字節佔用

String s = "我 java"; 
複製代碼

String類型裏的漢字,按照編碼格式的不一樣,分爲2-4個字節的佔用,UTF-8佔用3個字節,特別的佔用4個字節,一個漢字佔三個字節,因此上面的字符串佔用8個字節。多線程

計算類型的轉換

System.out.println(100%3);
System.out.println(",");
System.out.println(100%3.0);
複製代碼

輸出爲:1,1.0ide

「static」關鍵字是什麼意思?Java中是否能夠覆蓋(override)一個private或者是static的方法?

「static」關鍵字代表一個成員變量或者是成員方法能夠在沒有所屬的類的實例變量的狀況下被訪問。函數

不能。靜態方法和私有方法在程序編譯的解析階段中就肯定了惟一的調用版本,是運行期不可變的,不能被重寫和重載性能

static修飾的變量不用初始化

static int num;
System.out.println(num);
複製代碼

結果:輸出的是0,由於static修飾的變量在類加載的準備階段會進行內存的分配和值的初始化,基本類型的初始值基本都是0,boolean是false,引用類型是nullui

抽象類和接口的區別

  • 接口中全部的方法隱含的都是抽象的。而抽象類則能夠同時包含抽象和非抽象的方法
  • Java接口中的成員函數默認是public的。抽象類的成員函數能夠是private,protected或者是public
  • 類能夠實現不少個接口,可是隻能繼承一個抽象類
  • Java接口中聲明的變量默認都是final的。抽象類能夠包含非final的變量
  • 接口是絕對抽象的,不能夠被實例化。抽象類也不能夠被實例化

什麼是值傳遞和引用傳遞

對象被值傳遞,意味着傳遞了對象的一個副本。所以,就算是改變了對象副本,也不會影響源對象的值。 對象被引用傳遞,意味着傳遞的並非實際的對象,而是對象的引用。所以,外部對引用對象所作的改變會反映到全部的對象上。

移位計算

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

int a=2<<3
複製代碼

String、StringBuffer與StringBuilder

  • String是不可變類,也就是說,每一次改變都會建立新的String對象,老的對象就會被回收,因此就會建立、回收這樣致使效率比較低
  • StringBuffer是線程安全的,不少方法能夠帶有synchronized關鍵字,平時用的並很少,由於非多線程環境下效率就會低
  • StringBuilder不是線程安全的,是可變的變量,不會有頻繁的建立、回收,性能要好
  • StringBuffer與StringBuilder底層都是經過一個char的數組來存儲數據,而StringBuffer就是在StringBuilder的基礎上一些方法加了synchronized關鍵字

String s = new String(「xyz」);建立了幾個String Object?

兩個,一個是在堆中建立的s一個是在字符串常量池中建立的「xyz」。

請說出做用域public,private,protected,以及不寫時的區別

做用域 當前類 同一package 子孫類 其餘package
public
protected x
friendly x x
private x x x

不寫的話默認是friendly或者是default,表示能夠被同一個包裏的類訪問,包括子類;但不能被不一樣的包訪問,即便是子類

java裏 equals和== 區別

  • java中equals和==的區別 值類型是存儲在內存中的堆棧(簡稱棧),而引用類型的變量在棧中僅僅是存儲引用類型變量的地址,而其自己則存儲在堆中
  • ==操做比較的是兩個變量的值是否相等,對於引用型變量表示的是兩個變量在堆中存儲的地址是否相同,即棧中的內容是否相同
  • equals操做表示的兩個變量是不是對同一個對象的引用,即堆中的內容是否相同
  • ==比較的是2個對象的地址,而equals比較的是2個對象的內容,顯然,當equals爲true時,==不必定爲true。

HashMap和Hashtable有什麼區別?

  • HashMap和Hashtable都實現了Map接口,所以不少特性很是類似
  • HashMap容許鍵和值是null,而Hashtable不容許鍵或者值是null
  • Hashtable是同步的,而HashMap不是。所以,HashMap更適合於單線程環境,而Hashtable適合於多線程環境
  • HashMap提供了可供應用迭代的鍵的集合,所以,HashMap是快速失敗的。另外一方面,Hashtable提供了對鍵的列舉(Enumeration)

ArrayList和LinkedList有什麼區別?

  • ArrayList和LinkedList都實現了List接口
  • ArrayList是基於索引的數據接口,它的底層是數組。它能夠以O(1)時間複雜度對元素進行隨機訪問。與此對應,LinkedList是以元素鏈表的形式存儲它的數據,每個元素都和它的前一個和後一個元素連接在一塊兒,在這種狀況下,查找某個元素的時間複雜度是O(n)
  • 相對於ArrayList,LinkedList的插入,添加,刪除操做速度更快
  • LinkedList比ArrayList更佔內存,由於LinkedList爲每個節點存儲了兩個引用,一個指向前一個元素,一個指向下一個元素

參考文章


歡迎關注個人微信公衆號,和我一塊兒天天進步一點點!
複製代碼

AntDream
相關文章
相關標籤/搜索