BAT大廠android面試題和答案

答案是自己寫的,不是標準答案,不對勿噴

Java面試題

java中==和equals和hashCode的區別

原始數據類型,如int,float等用 = = 進行比較時,是比較兩者的值,在其他情況下是比較對象地址,而equals是比較兩個對象的值,hashcode是取對象的哈希值,主要用在容器中。具體可參考
java中equals,hashcode和= =的區別

int、char、long各佔多少字節數

byte:1個字節 8位 -128~127
short :2個字節 16位
int :4個字節 32位
long:8個字節 64位
浮點型:
float:4個字節 32 位
double :8個字節 64位
注:默認的是double類型,如3.14是double類型的,加後綴F(3.14F)則爲float類型的。
char類型:
char:2個字節。
Boolean 類型
boolean: (true or false)(並未指明是多少字節 1字節 1位 4字節)

int與integer的區別

  1. Integer是int的包裝類,int則是java的一種基本數據類型
  2. Integer變量必須實例化後才能使用,而int變量不需要
  3. Integer實際是對象的引用,當new一個Integer時,實際上是生成一個指針指向此對象;而int則是直接存儲數據值
  4. Integer的默認值是null,int的默認值是0
  5. 當兩個非new Integer對象進行比較時,比如Integer a = 1 Integer b = 1;a==b返回true,但是當值超出-128 與 127這個返回時,比較結果就是false,原因就是java在進行裝箱時,如果integer對象的值是在-128 與 127之間,就會用對象池中的值,而不是去new一個新對象,這樣只要在-128 與 127之間的integer值進行比較,都是一樣的,當然前提是Integer對象不是通過new來創建
    詳細請參考Java Integer 與 int 深刻理解

String、StringBuffer、StringBuilder區別

String:不可變字符串
Stringbuilder:可變字符串,沒有創建新的對象
StringBuffer:作用同StringBuilder,但是線程安全
還有一些對象池的東西,詳細請參考面試官:String、StringBuffer,StringBuilder有什麼區別?

泛型中extends和super的區別

  • <? extends E> 上限通配符,用來限制類型的上限

即兼容所有E的子類

  • <? super E> 下限通配符,用來限制類型的下限

即兼容所有E的父類

父類的靜態方法能否被子類重寫

不能,可以繼承,但不能重寫

Serializable 和Parcelable 的區別

Serializable:屬於Java序列化技術,只需要將類實現Serializable接口就可以,不需要寫額外的代碼,實現原理是通過反射,可以將對象序列化到文件
Parcelable :android特有的序列化技術,使用的時候需要手動實現一些方法,比較麻煩,但是沒有開銷比Serializable小,不能保存到文件,只能內存時間傳輸
詳細請參考:
Parcelable 和 Serializable的區別和使用
Serializable和Parcelable區別

Java垃圾回收機制

直接參考Java 垃圾回收機制學習

UTF-8編碼方式中文佔幾個字節

一般佔
utf-8的中文是一個漢字佔三個字節長度嗎?

靜態代理和動態代理的區別

靜態:由程序員創建代理類或特定工具自動生成源代碼再對其編譯。在程序運行前代理類的.class文件就已經存在了。

動態:在程序運行時運用反射機制動態創建而成。可以給所有類添加代理,但是所有被代理的類所做的額外操作都是一樣的,因爲都是調用同一個invoke方法
可以參考靜態代理和動態代理的區別和聯繫

Java的異常體系

Java異常體系結構

泛型原理

主要是編譯時類型擦除
java泛型 泛型的內部原理:類型擦除以及類型擦除帶來的問題

Java中String深入理解

String水很深,具體可以參考這個
Java 乾貨之深入理解String

String爲什麼要設計成不可變的?

總體來說, String不可變的原因包括 設計考慮,效率優化問題,以及安全性這三大方面. 事實上,這也是Java面試中的許多 “爲什麼” 的答案
爲什麼String要設計成不可變的?

持續更新……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章