2020年Java高階工程師面試總結

2020-09-19 12:04:28

在這裡插入圖片描述

今年行情不好,想要守住工作並且漲薪的、想要跳槽或者找工作的,技術不行怎麼辦呢?其實說實話,除了多學習最新的技術外,還要有深度,所以有這種想法的,可以點這裡,暗號:cszq,提供免費的Java後端和架構方面的學習途徑和資料,你想要的內容,這裡都有。

Java基礎

Hashtable和HashMap的區別。
抽象類與介面的區別。
final關鍵字的使用和區別。
異常分類和處理機制。
JDK版本區別。
StringBuilder內部實現機制。
反射機制的使用。
匿名內部類的使用。
泛型的概念和使用。
弱參照和虛參照的概念和使用方式。

開源框架

1、SpringMVC和Struts2的區別
2、Spring IOC和AOP的概念以及實現方式
3、Spring事務的管理
4、Hibernate與MyBatis的比較
5、Hibernate延遲載入的機制

JVM虛擬機器器

1、GC演演算法有哪些
2、垃圾回收器有哪些
3、如何調優JVM
4、快取和NoSQL
5、快取的使用場景
6、快取命中率的計算
7、Memcache與Redis的比較
8、如何實現Redis的分片
9、MongoDB的特點

分散式

zookeeper的用途
dubbo的用途以及優點
dubbo的實現原理
資料結構和演演算法
單向連結串列的逆序排列
雙向連結串列的操作
1億個整數的倒序輸出
找出給定字串中最長迴文(迴文:abcdcba,兩端對稱)

網路程式設計

Get和Post的區別
Https協定的實現
長連線的管理
Socket的基本方法

資料庫

inner join和left join的區別
複雜SQL語句
資料庫優化方式
資料庫拆分方式
如何保證不同資料結構的資料一致性

安全

什麼是XSS攻擊,具體如何實現?
開放問題:如何保障系統安全?

設計模式

寫出一個設計模式的類圖
設計模式的意義是什麼
寫個單例模式的程式碼

多執行緒

如何避免Quartz重複啟動任務
執行緒池滿了如何處理額外的請求 同一個物件的連個同步方法能否被兩個執行緒同時呼叫

已將資料整理成PDF檔案,有需要的可以點選進入,暗號:cszq,所有Java面試資料免費提供,還有各種Java後端學習資料,有需要的也可以
關注+私信 我!

在這裡插入圖片描述

異常分類和處理機制

分類:
執行時異常(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本身提供的快取機制不佳。

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服務治理方案。

資料結構和演演算法

將單項連結串列逆序排列
將單向連結串列逆序輸出,方法有三種:
遍歷連結串列,將每個節點的內容存入一個陣列中,然後逆序輸出陣列(最簡單的做法) 使用棧來逆序輸出 直接將連結串列(指標)逆序然後輸出

最後祝大家都能工作順利,年薪百萬!