1. 程式人生 > >BAT面試題&&答案——JAVA篇(1)

BAT面試題&&答案——JAVA篇(1)

前言

今早看到首頁蹦出來的一篇標題是一篇文章,內容還沒仔細看,這個表我嚇了一大跳。回想當年拿著4000塊實習的苦日子,現在的大學畢業生實在幸福了。BAT爸爸們不是一般的土豪啊。但要進BAT也不是那麼容易的,少不了過五關斬六將的各種面試。

網際網路大廠應屆生校招薪酬

想起大學時當家教的經歷,突然又教一下學生,過過當老師的癮了。於是找了一份BAT等大公司的面試題彙總,逐一加上答案和參考資料,跟同學們分享交流。希望各位應屆的同學看了都能當上大廠的碼農,不用當小廠的碼畜。

 

ps:

  • 面試題的量很大,我會分批持續更新,做成一個系列
  • 每題下面除了答案之外,我還會附上參考資料,想更深入瞭解與答案相關的知識,可以查閱這些資料
  • 答案加上了我自身的理解,如有錯漏或者看不懂的地方,可以通過qq跟我交流,我的企鵝號是244095135
  • 如果要轉載的請先與我聯絡並註明出處,尊重別人的勞動成果是一個人的基本素質

 

JAVA面試題(1)

1.java中==和equals和hashCode的區別

== 對兩個變數進行值的比較
equals 對兩個變數進行記憶體地址的比較
hashcode 獲取變數在集合中所儲存的區域

 

參考資料

https://blog.csdn.net/tiantiandjava/article/details/46988461

http://wiki.jikexueyuan.com/project/java-enhancement/java-twentysix.html

 

2.int、char、long各佔多少位元組數

型別 儲存需求 bit 數 取值範圍 備註
int 4位元組 4*8 -2147483648~2147483647 即 (-2)的31次方 ~ (2的31次方) - 1
short 2位元組 2*8 -32768~32767 即 (-2)的15次方 ~ (2的15次方) - 1
long 8位元組 8*8   即 (-2)的63次方 ~ (2的63次方) - 1
byte 1位元組 1*8 -128~127 即 (-2)的7次方 ~ (2的7次方) - 1
float 4位元組 4*8   float 型別的數值有一個字尾 F(例如:3.14F)
double 8位元組 8*8   沒有後綴 F 的浮點數值(例如:3.14)預設為 double
boolean 1位元組 1*8 true、false
char 2位元組 2*8   Java中,只要是字元,不管是數字還是英文還是漢字,都佔兩個位元組。(因為java使用的是unicode編碼)

參考資料

https://www.jianshu.com/p/fd560bc39adb

 

3.int與integer的區別

  1. Integer是int的包裝類;int是基本資料型別; 
  2. Integer變數必須例項化後才能使用;int變數不需要; 
  3. Integer實際是物件的引用,指向此new的Integer物件;int是直接儲存資料值 ; 
  4. Integer的預設值是null;int的預設值是0。

參考資料

https://blog.csdn.net/chenliguan/article/details/53888018

4.談談你對java多型的理解

  • 多型的定義:相同類項的變數執行同一個方法時,呈現出不同的行為特徵這就是多型。
  • 多型的實現方法:
  1. 子類繼承父類
  2. 子類重寫父類的方法
  3. 父類引用指向子類物件
  4. 通過父類引用呼叫子類重寫後的方法,執行具有子類特徵的行為

參考資料

https://blog.csdn.net/woshiermingerming/article/details/52324861?utm_source=blogxgwz6

 

5.String、StringBuffer、StringBuilder區別

String 字串常量,實際是一個不可變的物件,每個對其內容進行變更都相當於重新生成這個物件。在字串需要頻繁更改時,很耗效能,不推薦使用
StringBuffer 字串變數,執行緒安全。推薦在需要頻繁更改字串的場景中使用,可通過toString()轉換成String物件
StringBuilder 字串變數,非執行緒安全。效能比StringBuffer高出10%-15%,但由於其執行緒不安全的特性,多數場景下不推薦使用

參考資料

https://blog.csdn.net/kingzone_2008/article/details/9220691

 

6.什麼是內部類?內部類的作用

 

  • 內部類的定義:定義在一個類內部的類
  • 內部類的作用:
  1. 可通過private和protected限制類的訪問許可權
  2. 內部類擁有外圍類的所有元素的訪問許可權
  3. 可實現多重繼承
  4. 可以避免修改介面而實現同一個類中兩種同名方法的呼叫。

參考資料

https://blog.csdn.net/mid120/article/details/53644539

 

7.抽象類和介面區別

抽象類(abstract class):不能例項化的類,內部可包含抽象方法,可通過extend被其他類繼承

介面的定義(interface):抽象方法的集合,可通過implements被其他類實現

區別:

抽象類 介面
抽象類可包含一般方法,抽象方法 介面只包含抽象方法
繼承抽象類的子類如果是抽象類可以不實現父類的抽象方法,否則必須實現所有的抽象方法 實現介面的類需要實現介面中的所有方法

抽象類可以有構造器

介面不能有構造器

抽象方法可以有public、protected和default等修飾符

介面方法預設修飾符是public。不可以使用其它修飾符

一個子類只能存在一個父類,所以不能繼承多於一個抽象類

一個類可以實現多個介面
抽象類新增新方法時,可以提供預設的實現,不需要改動先有的程式碼 介面新增新方法時,所有實現了該介面的類都要新增對新方法的實現

參考資料

https://www.jianshu.com/p/038f0b356e9a 

 

8.抽象類的意義

  1. 為子類提供一個公共的型別;
  2. 封裝子類中重複內容(成員變數和方法);
  3. 定義有抽象方法,子類雖然有不同的實現,但該方法的定義是一致的。

參考資料:

https://www.jianshu.com/p/4ed470d0cf38

9.介面的意義

  1. 功能性:一個類可以實現多個介面,介面作為抽象類不能被多繼承這一缺陷的補充,完善了java的面向物件能力
  2. 規範性:在多人協作的專案中,可以由架構師先行編寫主要的介面,確定要實現的主要功能,同時也規範了這些功能的方法命名
  3. 擴充套件性:用介面來引用實現了該介面的類,如果介面對應的功能需要大面積改動,只需要替換實現它的類就可以了,原理類似C++中父類指標指向子類物件的多型呼叫
  4. 安全性:系統提供對外服務時,只提供介面,這樣可以防止洩露方法實現細節

參考資料

https://blog.csdn.net/Caide3/article/details/68490883

10.抽象類與介面的應用場景

  1. 需要一些有預設實現的方法時,用抽象類
  2. 基礎功能會平凡增刪的情況,用抽象類
  3. Java不支援多繼承,可以用實現多個介面的形式來解決
  4. 沒有特殊需要時,推薦使用介面,保留擴充套件性

參考資料

https://www.jianshu.com/p/b7ddefc7588c