更新時間:2019-12-17 13:43:13 來源:動力節點 瀏覽2481次
java基礎以及多個“比較”
1.Collections.sort排序內部原理
在Java 6中Arrays.sort()和Collections.sort()使用的是MergeSort,而在Java 7中,內部實現換成了TimSort,其對對象間比較的實現要求更加嚴格
2.hashMap原理,java8做的改變
從結構實現來講,HashMap是數組+鏈表+紅黑樹(JDK1.8增加了紅黑樹部分)實現的。HashMap最多只允許一條記錄的鍵為null,允許多條記錄的值為null。HashMap非線程安全。ConcurrentHashMap線程安全。解決碰撞:當出現沖突時,運用拉鏈法,將關鍵詞為同義詞的結點鏈接在一個單鏈表中,散列表長m,則定義一個由m個頭指針組成的指針數組T,地址為i的結點插入以T(i)為頭指針的單鏈表中。Java8中,沖突的元素超過限制(8),用紅黑樹替換鏈表。
3.String 和 StringBuilder 的區別
1)可變與不可變:String不可變,每一次執行“+”都會新生成一個新對象,所以頻繁改變字符串的情況中不用String,以節省內存。
2)是否多線程安全:StringBuilder并沒有對方法進行加同步鎖,所以是非線程安全的。StringBuffer和String均線程安全。
4.Vector 與 Array 的區別
1)ArrayList在內存不夠時默認是擴展50% + 1個,Vector是默認擴展1倍。
2)Vector屬于線程安全級別的,但是大多數情況下不使用Vector,因為線程安全需要更大的系統開銷。
5.HashMap 與 Hashtable 的區別
1) 歷史原因: Hashtable繼承Dictonary類, HashMap繼承自abstractMap
2) HashMap允許空的鍵值對, 但最多只有一個空對象,而HashTable不允許。
3) HashTable同步,而HashMap非同步,效率上比HashTable要高
JVM
1.JVM如何加載一個類的過程,雙親委派模型中有哪些方法
類加載過程:加載、驗證(驗證階段作用是保證Class文件的字節流包含的信息符合JVM規范,不會給JVM造成危害)、準備(準備階段為變量分配內存并設置類變量的初始化)、解析(解析過程是將常量池內的符號引用替換成直接引用)、初始化。
雙親委派模型中方法:雙親委派是指如果一個類收到了類加載的請求,不會自己先嘗試加載,先找父類加載器去完成。當頂層啟動類加載器表示無法加載這個類的時候,子類才會嘗試自己去加載。當回到最開的發起者加載器還無法加載時,并不會向下找,而是拋出ClassNotFound異常。
方法:啟動(Bootstrap)類加載器,標準擴展(Extension)類加載器,應用程序類加載器(Application ),上下文(Custom)類加載器。意義是防止內存中出現多份同樣的字節碼 。
2.GC算法(什么樣的對象算是可回收對象,可達性分析),CMS收集器
jvm是如何判斷一個對象已經變成了可回收的“垃圾”,一般是兩個方法:引用記數法和根搜索算法。引用記數法沒辦法解決循環引用的問題,所以用根搜索。從一系列的”GC Roots“對象開始向下搜索,搜索走過的路徑稱為引用鏈。當一個對象到”GC Roots“之間沒有引用鏈時,被稱為引用不可達。引用不可到的對象被認為是可回收的對象。
幾種垃圾收集器:1,Serial New/Serial Old(串行),2,Parrallel New (并行),3,Parrallel Scavenge,4,Parrallel Old,5,CMS(CMS收集器是一個以獲得最短回收停頓時間為目標的收集器,它是一種并發收集器,采用的是Mark-sweep算法。),6,G1(是一款并行與并發收集器,并且可建立可預測的停頓時間模型,整體上是基于標記清理,局部采用復制)
3.JVM分為哪些區,每一個區干嗎的?
1)方法區(method):被所有的線程共享。方法區包含所有的類信息和靜態變量。
2)堆(heap):被所有的線程共享,存放對象實例以及數組,Java堆是GC的主要區域。
3)棧(stack):每個線程包含一個棧區,棧中保存一些局部變量等。
4)程序計數器:是當前線程執行的字節碼的行指示器。
4.JVM新生代,老年代,持久代,都存儲哪些東西?
持久代主要存放的是Java類的類信息,與垃圾收集要收集的Java對象關系不大。所有新生成的對象首先都是放在年輕代的,年老代中存放的都是一些生命周期較長的對象。
5.內存溢出和內存泄漏:
內存溢出:程序申請內存時,沒有足夠的內存,out of memory;內存泄漏值垃圾對象無法回收,可以使用memory analyzer工具查看泄漏。
并發,鎖
1.volatile關鍵字, Lock
并發編程中:原子性問題,可見性問題,有序性問題。
volatile關鍵字能保證可見性,字能禁止指令重排序,但是不能保證原子性。可見性只能保證每次讀取的是最新的值,但是volatile沒辦法保證對變量的操作的原子性。在生成的會變語句中加入Lock關鍵字和內存屏障。
Lock 實現提供了比使用synchronized 方法和語句可獲得的更廣泛的鎖定操作,它能以更優雅的方式處理線程同步問題。用sychronized修飾的方法或者語句塊在代碼執行完之后鎖自動釋放,而用Lock需要我們手動釋放鎖
2.MYSQL常用優化(sql優化,表結構優化等)
SQL優化、表機構優化、索引優化、緩存參數優化
3.java每改一點都需要重新編譯打包部署,有沒有更好的方法
可以使用熱加載
4.進程間通信有哪幾種方式?
1)管道(Pipe),2)命名管道(named pipe),3)信號(Signal),4)消息(Message)隊列,5)共享內存,6)內存映射(mapped memory),7)信號量(semaphore),8)套接口(Socket)
網絡、數據庫
1.TCP如何保證可靠傳輸?三次握手過程?
在TCP的連接中,數據流必須以正確的順序送達對方。TCP的可靠性是通過順序編號和確認(ACK)來實現的。TCP 連接是通過三次握手進行初始化的。三次握手的目的是同步連接雙方的序列號和確認號并交換 TCP 窗口大小信息。第一次是客戶端發起連接;第二次表示服務器收到了客戶端的請求;第三次表示客戶端收到了服務器的反饋。
2. 常用的hash算法有哪些?
1.加法hash:所謂的加法Hash就是把輸入元素一個一個的加起來構成最后的結果。
2.位運算hash:這類型Hash函數通過利用各種位運算(常見的是移位和異或)來充分的混合輸入元素
3.乘法hash:33*hash + key.charAt(i)
3. 什么是一致性哈希?
設計目標是為了解決因特網中的熱點(Hot spot)問題,一致性hash算法提出了在動態變化的Cache環境中,判定哈希算法好壞的四個定義:1、平衡性(Balance) 2、單調性(Monotonicity) 3、分散性(Spread) 4、負載(Load)
4. 數據庫中的范式有哪些?
第一范式----數據庫中的表(所有字段值)都是不可分割的原子數據項。
第二范式----數據庫表中的每一列都和主鍵相關,而不能只和主鍵的某一部分相關。
第三范式----數據庫表中每一列數據都和主鍵直接相關,不能間接相關。范式是為了減小數據冗余。
以上就是動力節點Java培訓機構小編介紹的“最近常被關注的Java面試題匯總”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
相關推薦
最新最全java面試題及答案(初級到高級)
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習