java面试题:2018年6月
18年5月份開始找工作,發現他們的問題其實有很多東西都是和網上差不多,發現面試過程中對基礎要求比較多,同時對框架的加載問題問的比較多,一些面試官建議要看spring的源碼,以及hasmap的源碼等等,問的比較雜,自己先記錄下,同時給一樣找工作的朋友做參考,后續我會把把自己認為的答案補充上去,歡迎交流
java基礎問題:
1:請說說hashmap,hashtable的區別
? ? hashtable是線程安全的,他里面的大部分方法都被synchronize修飾;
? ? hashmap是線程不安全的,在多個線程執行到put方法的時候可能會造成死鎖
2:請講講hashmap的數據結構以及談談rehash()
? ? ?具體的結構最好去看下專門的網站介紹
? ? ?jdk1.7:采用數組+鏈表的模式
? ? ?jdk1.8:采用數組+鏈表+紅黑樹
? ? ?rehash:
? ? ? 就是當里面的節點數據兩達到75%(默認的加載因子),此時就需要進行擴容處理,擴容的處理方式會有些區別,簡單講,就是創建一個新的數組,然后將對應的鏈表數據重新連到各自鏈表中
? ?jdk1.7:遍歷每個數組鏈表節點,然后重新計算hashcod,連接到各自的數組中,插入時是插入頭節點,使鏈表原位置顛倒
? ?jdk1.8:遍歷每個數組的鏈表節點(樹結構先不說),不需要重新計算hashcod,做個與運算,插入在鏈表的隊尾。
? 闡述可能不太詳細,可以去看源碼或者其他博客講解
3:請講講hashmap怎么獲取對應的值,什么情況下會使用到其中的鏈表結構;
? ? ? 計算hashcode,hashcode相同的時候會發生碰撞,此時該數組節點下面會有鏈表
4:voliate關鍵字了解么,談談對他的理解
? ? 線程間是可見的,但是不安全的;
? ? 將線程中的的私有內存和公共內存的數據進行同步,但是在進行(load加載+use操作+asign賦值)計算操作時,公共內存的數據可能會變化,導致數據不一致
5:你了解強引用,弱引用,虛引用么?你使用過么?
? ? ? 強引用:不會被垃圾收集器回收(new T() 這個比較常用)
? ? ? 軟引用:jvm不足的時候會被回收(網上說可用于圖片緩存,我實際中沒用到過)
? ? ? 弱引用:都會被垃圾收集器回收
? ? ? 虛引用:不影響對象的生命周期? ? ?
6:請講講linkedlist,arrayList的區別?
? ? ?一個是鏈表結構,一個是線性的數組結構
7:假如讓你實現arraylist的話,你會怎么設計?
8:你的項目中使用過哪些集合類?請講講
? ? ?我在傳統行業,只用過hashmap
9:鎖有哪幾種?請講講
? ? ? 這個我甩連接吧https://www.cnblogs.com/lxmyhappy/p/7380073.html? ? ??
10:請講講java的反射機制
11:請講講你們項目中的異常是怎么處理的
12:樂觀鎖和悲觀鎖請講講? ? ??
jvm問題:
1:請講講類加載機制的過程;
? ? ? 加載:通過類全名獲取對應的二進制流,結構的轉化存儲到方法區中
? ? ? 驗證:驗證該class是否符合要求
? ? ? 準備:static修飾的變量在方法區分配內存,并賦默認初始值-默認值不是自己定的指
? ? ? 解析:常量池中的符號引用替換為直接引用
? ? ?初始化:執行類中的方法
2:請講講jvm的內存結構是什么?
? ? 程序計數器,棧(vm棧+native method棧),堆,方法區,
? ? 1.8里面其實有個元空間,去了解下
3:請講講gc的方法有哪些?
? ? ? 標記清除法,標記整理法,復制算法(最好結合不同的垃圾收集器去看看)
4:什么情況下對象會進入到老年代?
? ? ? 1)一個對象的空間大于新生代的eden區的剩余空間
? ? ? 2)一個大對象,需要連續的內存空間的,比如很大的String或者數據
? ? ? 3)長期存活的對象(jvm會給每個對象定義一個年齡計數器,用來計算每次minor gc以后仍然存活的次數)
? ? ? 4)某個年齡的所有對象大小總和>survivor的一半,此時大于等于該年齡階段的對象直接進入
框架問題:
1:請講講springMVC加載順序?
2:spring的注釋是怎么實現的?
3:spring的源碼有看過么?(請講講aop和ioc的的兩個包)
4:請講講mybatis的加載過程
5:請講講servlet的加載過程
? ? ? 實例化,初始化,接受請求service,銷毀destory
中間件問題:
1:請講講tomcat的加載過程;
? ? emmm。。。。比較煩? ? ?
2:有使用過消息中間件么?請講講
? ? rabbitMQ,kafaka(這里我簡單寫了)
設計模式:
1:你的項目中有哪些使用了觀察者模式?
2:你的項目中的哪些地方使用了單例模式?
數據庫:
1:請講講對索引的理解
2:請講講b+樹的結構以及理解
3:你了解oracle的行鎖么,請講講
4:oracle中的hint了解么,請講講
5:oracle的分頁是怎么寫的?
6:你知道oracle使用rowid方法的時候在多個條件排序下會有個bug,你了解么?
7:請說說左連接,右連接,內連接的區別
8:請寫個查詢語句分組出男女的總數
9:請講講索引的種類
10:請講講,你的日常的sql優化是怎么操作的?
11:請講講in和between and的區別?
12:mysql的分頁是怎么實現的?
?
上面回到有問題,歡迎留言指導
? ? ??
?
總結
以上是生活随笔為你收集整理的java面试题:2018年6月的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点云处理学习笔记(八)-- 点云配准
- 下一篇: 防爆破登录:配置/etc/hosts.d