Java開發崗面試常見問題總結

Object中有哪些公共方法?
1.equals()
2.clone()
3.getClass()
4.notify(),notifyAll(),wait()
5.toString

什麼是單例模式?
單例模式是指一個類僅允許創建其自身的一個實例,並提供對該實例的訪問權限。它包含靜態變量,可以容納其自身的唯一和私有實例。它被應用於這種場景——用戶希望類的實例被約束爲一個對象。在需要單個對象來協調整個系統時,它會很有幫助。

什麼是依賴注入?

堆和棧的區別?

java 創建對象的幾種方式
1.採用new
2.通過反射
3.採用clone
4.通過序列化機制

==和eqauls()的區別
前者比較的是內存地址,如果需要比較對象內容,需要重寫equal方法

final,finalize和finally的不同之處
final 是一個修飾符,可以修飾變量、方法和類。如果 final 修飾變量,意味着該變量的值在初始化後不能被改變。finalize 方法是在對象被回收之前調用的方法,給對象自己最後一個復活的機會,但是什麼時候調用 finalize 沒有保證。finally 是一個關鍵字,與 try 和 catch 一起用於異常的處理。finally 塊一定會被執行,無論在 try 塊中是否有發生異常。

static的用法?
兩個基本的用法:靜態變量和靜態方法.也就是被static所修飾的變量/方法都屬於類的靜態資源,類實例所共享

進程和線程的區別?
進程是程序運行和資源分配的基本單位,一個程序至少有一個進程,一個進程至少有一個線程.進程在執行過程中擁有獨立的內存單元,而多個線程共享內存資源。同一進程中的多個線程之間可以併發執行。

&和&&的區別?
&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都爲true時,整個運算結果才爲true,否則,只要有一方爲false,則結果爲false。
&&還具有短路的功能,即如果第一個表達式爲false,則不再計算第二個表達式。
&還可以用作位運算符,當&操作符兩邊的表達式不是boolean類型時,&表示按位與操作。

ArrayList和LinkedList的區別?
ArrayList內部採用數組順序存儲。適用:數據連續寫入,需要根據index進行查找,按index寫入和刪除少。
LinkedList採用鏈表進行存儲。適用:數據需要按index插入或刪除,按index查找少。

數組有length的屬性,String有length()的方法。

多線程有幾種實現方法?同步有幾種實現方法?
多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口。
同步的實現方面有兩種,分別是synchronized,wait與notify。

關於List、Set和Map
List 以特定次序來持有元素,可有重複元素。Set 無法擁有重複元素,內部排序。Map 保存key-value值,value可多值。

GC是什麼? 爲什麼要有GC?
GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。

abstract method必須以分號結尾,且不帶花括號。
局部變量前不能放置任何訪問修飾符 (private,public,和protected)。
abstract的methods不能以private修飾。

排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序。
常見的排序算法:冒泡排序、選擇排序、快速排序。

Java實現數組逆置

 public static void swap(int a[]){

       int len = a.length;

       for(int i=0;i<len/2;i++){

           int tmp = a[i];

           a[i] = a[len-1-i];

           a[len-1-i] = tmp;

       }
  }

這是分隔符這是分隔符這是分隔符這是分隔符這是分隔符這是分隔符這是分隔符這是分隔符這是分隔符

MySQL有哪些常見的存儲引擎?
在這裏插入圖片描述
分佈式Redis?
以具體的項目組爲例,六臺虛機分成3主3從,每一主一從作爲一個槽。
需要緩存數據時,Redis會爲需要緩存的數據分配一個槽,存入master節點,作爲一個完整的集羣,每個負責處理槽的節點應該具有從節點,保證當它出現故障時可以自動進行故障轉移。
3個主節點負責處理槽和相關數據,3個從節點負責轉移故障。
redis集羣把所有的數據映射到16384個槽中。

Redis過期策略?
三種過期策略:
1.定時刪除
含義:在設置key的過期時間的同時,爲該key創建一個定時器,讓定時器在key的過期時間來臨時,對key進行刪除
優點:保證內存被儘快釋放
缺點:
若過期key很多,刪除這些key會佔用很多的CPU時間,在CPU時間緊張的情況下,CPU不能把所有的時間用來做要緊的事兒,還需要去花時間刪除這些key
定時器的創建耗時,若爲每一個設置過期時間的key創建一個定時器(將會有大量的定時器產生),性能影響嚴重
2.惰性刪除
含義:key過期的時候不刪除,每次從數據庫獲取key的時候去檢查是否過期,若過期,則刪除,返回null。
優點:刪除操作只發生在從數據庫取出key的時候發生,而且只刪除當前key,所以對CPU時間的佔用是比較少的,而且此時的刪除是已經到了非做不可的地步(如果此時還不刪除的話,我們就會獲取到了已經過期的key了)
缺點:若大量的key在超出超時時間後,很久一段時間內,都沒有被獲取過,那麼可能發生內存泄露(無用的垃圾佔用了大量的內存)
3.定期刪除
含義:每隔一段時間執行一次刪除過期key操作
優點:
通過限制刪除操作的時長和頻率,來減少刪除操作對CPU時間的佔用–處理"定時刪除"的缺點
定期刪除過期key–處理"惰性刪除"的缺點
缺點
在內存友好方面,不如"定時刪除"
在CPU時間友好方面,不如"惰性刪除"
難點
合理設置刪除操作的執行時長(每次刪除執行多長時間)和執行頻率(每隔多長時間做一次刪除)(這個要根據服務器運行情況來定了)

HashMap的基本原理?
HashMap的主幹是一個Entry數組。Entry是HashMap的基本組成單元,每一個Entry包含一個key-value鍵值對。
HashMap實際上是一個“鏈表散列”的數據結構,即數組和鏈表的結合體。
數組:存儲區間連續,佔用內存嚴重,尋址容易,插入刪除困難;
鏈表:存儲區間離散,佔用內存比較寬鬆,尋址困難,插入刪除容易;
Hashmap綜合應用了這兩種數據結構,實現了尋址容易,插入刪除也容易。
當我們給put()方法傳遞鍵和值時,我們先對鍵調用hashCode()方法,返回的hashCode用於找到bucket(桶)位置來儲存Entry對象。

HashMap和HashSet的主要區別?
1.HashSet是set的一個實現類,hashMap是Map的一個實現類;
2.HashSet以對象作爲元素,而HashMap以(key-value)的一組對象作爲元素,且HashSet拒絕接受重複的對象;

ArrayList和LinkedList的大致區別?
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因爲LinkedList要移動指針。
3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因爲ArrayList要移動數據。

MySQL索引在什麼情況下無法命中?
1、如果條件中有 or ,即使其中有條件帶索引也不會使用(這也是爲什麼儘量少用or的原因)
2.、like查詢是以%開頭,索引不會命中
3. 如果列類型是字符串,那一定要在條件中將數據使用引號引用起來,否則不使用索引
4. 沒有查詢條件,或者查詢條件沒有建立索引
5. 查詢條件中,在索引列上使用函數(+, - ,*,/), 這種情況下需建立函數索引
6. 採用 not in, not exist
7. B-tree 索引 is null 不會走, is not null 會走

SpringBoot中@Service和@Component註解的區別?
@Component是通用註解,其他三個註解是這個註解的拓展,並且具有了特定的功能
@Repository註解在持久層中,具有將數據庫操作拋出的原生異常翻譯轉化爲spring的持久層異常的功能。
@Controller層是spring-mvc的註解,具有將請求進行轉發,重定向的功能。
@Service層是業務邏輯層註解,這個註解只是標註該類處於業務邏輯層。

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