最近Java高階工程師面試總結
面試總結
Java基礎
Hashtable和HashMap的區別。
抽象類與介面的區別。
final關鍵字的使用和區別。
異常分類和處理機制。
JDK版本區別。
StringBuilder內部實現機制。
反射機制的使用。
匿名內部類的使用。
泛型的概念和使用。
弱引用和虛引用的概念和使用方式。
開源框架
SpringMVC和Struts2的區別
Spring IOC和AOP的概念以及實現方式
Spring事務的管理
Hibernate與MyBatis的比較
Hibernate延遲載入的機制
JVM虛擬機器
GC演算法有哪些
垃圾回收器有哪些
如何調優JVM
快取和NoSQL
快取的使用場景
快取命中率的計算
Memcache與Redis的比較
如何實現Redis的分片
MongoDB的特點
分散式
zookeeper的用途
dubbo的用途以及優點
dubbo的實現原理
資料結構和演算法
單向連結串列的逆序排列
雙向連結串列的操作
1億個整數的倒序輸出
找出給定字串中最長迴文(迴文:abcdcba,兩端對稱)
網路程式設計
Get和Post的區別
Https協議的實現
長連線的管理
Socket的基本方法
資料庫
inner join和left join的區別
複雜SQL語句
資料庫優化方式
資料庫拆分方式
如何保證不同資料結構的資料一致性
安全
什麼是XSS攻擊,具體如何實現?
開放問題:如何保障系統安全?
設計模式
寫出一個設計模式的類圖
設計模式的意義是什麼
寫個單例模式的程式碼
多執行緒
如何避免Quartz重複啟動任務
執行緒池滿了如何處理額外的請求
同一個物件的連個同步方法能否被兩個執行緒同時呼叫
1、零基礎(沒有任何程式設計經驗)
2、有前端基礎(HTML+CSS+JAVASCRIPT),沒有JAVA基礎
3、有前端基礎(HTML+CSS+JAVASCRIPT),有JAVA基礎(沒有相關工作經驗)
4、有前端基礎(HTML+CSS+JAVASCRIPT),有JAVA工作經驗
5、沒有前端基礎,有JAVA基礎(沒有相關工作經驗)
6、沒有前端基礎,有JAVA工作經驗
多年工作經驗的梳理和總結,帶著大家全面、
科學地建立自己的技術體系和技術認知!
部分答案
Java基礎
HashMap和Hashtable的區別
HashMap是非執行緒安全的,Hashtable是執行緒安全的。
HashMap的鍵值都可以為null,Hashtable的鍵值都不可以為null值。
HashMap繼承自AbstractMap類,Hashtable繼承自Dictionary類。
ps : Properties類繼承自Hashtable類。
異常分類和處理機制
分類:
執行時異常(Runtime Exception)
受檢查異常(Checked Exception)
執行時異常:
必須繼承RuntimeException類,
定義方法時不必宣告會丟擲執行時異常。
呼叫方法時不必捕獲執行時異常。
受檢查異常:
不繼承自RumtimeException類
定義方法時需要丟擲可能會丟擲的Checked Exception
呼叫方法時需要捕獲Checked Exception或者繼續向上丟擲。
邏輯上:
執行時異常:一般不需要或者不知道如何處理此類異常;
受檢驗異常:一般需要知道如何處理可能發生的異常情況。
StringBuilder內部實現機制
StringBuilder內部有一個字元陣列,程式碼如下
char[] value; //字元陣列int count; //字串長度
每一次append操作都是將新的字串加入到可變長的字元陣列中,長度計算方式與ArrayList類似。呼叫toString()方法時,new一個String物件即可。
public String toString() { return new String(value, 0, count);// Create a copy, don`t share the array}
ps: StringBuffer是執行緒安全的,StringBuilder是非執行緒安全的。
匿名內部類的使用
匿名內部類是沒有名字的類,只在某一處被使用,不會被多處呼叫,一般是某個父類或介面的特定實現。
強引用、軟引用、弱引用和虛引用
強引用: 一般的引用都是強引用,即使OutOfMemory也不會回收這部分被把持的引用記憶體。
軟引用(SoftReference): 如果記憶體空間足夠,垃圾回收器就不會回收它;如果記憶體空間不足了,就會回收這些物件的記憶體。只要垃圾回收器沒有回收它,該物件就可以被使用。++軟引用可以用來實現記憶體敏感的快取記憶體。++
弱引用(WeakReference):弱引用的物件擁有更短暫的生命週期。當垃圾回收期發現只有若引用的物件,不論記憶體空間足夠與否,都會回收它。
虛引用():虛引用不會決定物件的生命週期,如果一個物件僅持有一個虛引用,那麼它隨時可能被回收。++虛引用主要用來跟蹤物件被垃圾回收器回收的活動。++
開源框架
SpringMVC和Struts2的區別
SpringMVC的方法級別的攔截,Struts2是類級別的攔截;
SpringMVC是基於Servlet實現Controller,Struts2是基於Filter實現;
SpringMVC效能和安全性高於Struts2;
SpringMVC更加元件化和流程化,易於擴充套件,比如返回JSON通過設定@ResponseBody即可;
Struts2更加無耦合,比較純粹,但是需要更多的自行開發的程式碼以支援更多功能。
Spring事務的管理
分類:宣告式事務、程式設計式事務
宣告式事務:通過統一配置實現事務的統一管理,一般配置TransactionMananger以及相關屬性即可。
程式設計式事務(註解方式):在需要事務的方法上配置相關的註解(包括事務型別、回滾策略等)
事務型別:
PROPAGATION_REQUIRED
PROPAGATION_SUPPORTS
PROPAGATION_MANDATORY
PROPAGATION_REQUIRES_NEW
PROPAGATION_NOT_SUPPORTED
PROPAGATION_NEVER
PROPAGATION_NESTED
事務隔離級別
ISOLATION_DEFAULT
ISOLATION_READ_UNCOMMITTED
ISOLATION_READ_COMMITTED
ISOLATION_REPEATABLE_READ
ISOLATION_SERIALIZABLE
Hibernate與MyBatis的比較
Hibernate完全實現物件關係對映(ORM),MyBatis實現的是SQL Mapping
MyBatis可以進行更為細緻的SQL優化,可以減少查詢欄位。比Hibernate容易掌握,Hibernate門檻較高。
Hibernate的DAO層開發比MyBatis簡單,Mybatis需要維護SQL和結果對映。
Hibernate對物件的維護和快取要比MyBatis好,對增刪改查的物件的維護要方便。
Hibernate資料庫移植性很好,MyBatis的資料庫移植性不好,不同的資料庫需要寫不同SQL。
Hibernate有更好的二級快取機制,可以使用第三方快取。MyBatis本身提供的快取機制不佳。
JVM虛擬機器
GC演算法有哪些
引用計數
複製
標記-清除
標記-壓縮
分代(新生代、老年代、永久代)
垃圾回收器有哪些
序列回收器:新生代序列回收器、老年代序列回收器
並行回收器:新生代ParNew回收器、新生代ParallelGC回收器、老年代ParallelGC回收器
CMS回收器:(Concurrent Mark Sweep、併發標記清除)
G1回收器(1.7以後代替CMS回收器)
如何調優JVM
標準引數:
-client -server模式
-Xmn、-Xms、-Xmx
監控:jps、jstat、jinfo、jmap、jhat、jstack…
Java 中堆和棧有什麼區別?
JVM 中堆和棧屬於不同的記憶體區域,使用目的也不同。
棧常用於儲存方法幀和區域性變數,而物件總是在堆上分配。
棧通常都比堆小,也不會在多個執行緒之間共享,而堆被整個 JVM 的所有執行緒共享。
快取和NoSQL
快取命中率的計算
命中快取次數/(命中快取次數+未命中快取次數) = 命中率
Memcache與Redis的區別
memcache把資料存在記憶體之中,斷電後會掛掉;Redis部分資料持久化在硬碟上,斷電不會丟失。
memcache存的是key-value對,redis支援更多的資料結構和資料型別
memcache可以使用一致性hash做分散式,redis可以做主從同步
redis單執行緒,只使用1個cpu
如何實現Redis的分片
使用一致性雜湊對資料進行對映
實現方式:客戶端分片(每個客戶端對應一個分片)、代理協助分片、查詢路由分片;
使用redis叢集,如codis(豌豆莢,依賴zookeeper);
分散式
zookeeper的用途
zookeeper作為分散式應用協調系統,已經用到很多分散式專案中。
可以用來完成統一命名服務、狀態同步服務、叢集管理、分散式應用配置項等管理工作。
zookeeper的主要操作分一下幾種:
建立節點
讀取節點資料
更新節點資料
刪除節點
監控節點變化
應用場景:
統一命名服務,使用create自動建立節點編號;
配置管理,多個節點的共享配置,當配置發生變化時,可利用zookeeper讓使用這些配置的節點獲得通知,進行重新載入等操作。如dubbo服務。
叢集管理:叢集選舉主節點,資源定位。
共享鎖
負載均衡
應用專案:
dubbo服務叢集、redis叢集、Hadoop叢集等
dubbo的用途以及優點
Dubbo是一個分散式服務框架,致力於提供高效能和透明化的RPC遠端服務呼叫方案,以及SOA服務治理方案。
資料結構和演算法
將單項鍊表逆序排列
將單向連結串列逆序輸出,方法有三種:
遍歷連結串列,將每個節點的內容存入一個陣列中,然後逆序輸出陣列(最簡單的做法)
使用棧來逆序輸出
直接將連結串列(指標)逆序然後輸出
如果對自己未來有想法,想提升自己,你現在在JAVA這條路上掙扎,也想在IT行業拿高薪,可以參加我們免費的公開課試聽學習 乾貨滿滿的,選擇最適合自己的課程學習,技術大牛親授,課程內容有:Java工程化、高效能及分散式、高效能、深入淺出。高架構。效能調優、Spring,MyBatis,Netty原始碼分析和大資料等多個知識點。如果你想拿高薪的,想學習的,想就業前景好的,想跟別人競爭能取得優勢的,想進阿里面試但擔心面試不過的,你都可以來。
群號:468947140
進群修改群備註:開發年限-地區-經驗
點選連結加入群聊【Java-BATJ企業級資深架構】:https://jq.qq.com/?_wv=1027&k=52j2FVO
相關文章
- 面試總結——Java高階工程師面試Java工程師
- JVM知識點總覽:高階Java工程師面試必備JVMJava工程師面試
- 面試問題總結(Java工程師 20190301)面試Java工程師
- PHP 高階工程面試題彙總PHP面試題
- 史上最全的中高階JAVA工程師-面試題彙總Java工程師面試題
- 測試工程師的面試總結工程師面試
- 一個兩年Java工程師的面試總結Java工程師面試
- 轉:測試工程師的面試總結工程師面試
- Java開發工程師常見的面試總結走起.....Java工程師面試
- 面試高階前端工程師必問之流-stream面試前端工程師
- 高階工程師面試大全- 資料庫篇工程師面試資料庫
- 【最全】Java 進階面試總結Java面試
- 2019 Android 高階面試題總結Android面試題
- Python-爬蟲工程師-面試總結Python爬蟲工程師面試
- 高階工程師-Java註解工程師Java
- 八年phper的高階工程師面試之路PHP工程師面試
- 某TMD公司iOS高階工程師面試回憶iOS工程師面試
- 2019 必看 Android 高階面試題總結Android面試題
- 面試過了,總結測試工程師面試題(含答案)工程師面試題
- 面試java高階工程師、專案經理等的常見問題面試Java工程師
- Java高階面試-面經Java面試
- 高階前端工程師面試必備(持續更新中)前端工程師面試
- 高階工程師面試大全- 訊息中介軟體篇工程師面試
- 【演算法工程師】Python面試問題總結演算法工程師Python面試
- 吃透這份Java高階工程師面試497題解析,Java微服務架構訓練營Java工程師面試微服務架構
- JAVA高階面試必過知識點彙總Java面試
- 2018年一線網際網路公司Java高階面試題總結Java面試題
- java面試總結Java面試
- 面試5家公司的高階Java工程師,有4家給了我offer......面試Java工程師
- 成功應聘Java高階開發工程師必備的8大的面試考綱!Java工程師面試
- 前端工程師面試題彙總(轉)前端工程師面試題
- Java高階面試題及答案Java面試題
- 招聘.net高階工程師工程師
- 面試數十家Linux運維工程師,總結了這些面試題Linux運維工程師面試題
- 2018中高階Android面試題總結上(附答案)Android面試題
- 初、中、高階測試工程師成長指南工程師
- 高階Java工程師必備 ----- 深入分析 Java IO (三)Java工程師
- 【演算法工程師】機器學習面試問題總結演算法工程師機器學習面試