今年不好過啊碟摆!特別是對于要找工作的小伙伴來說典蜕,我也不知道能幫到啥愉舔!這些面試題是Java后端面試會需要到的轩缤,只要是去個前景好點的公司仇让,基本上里面的內(nèi)容最少總會被問到一兩個的卫玖,所以多準備準備總是沒錯的踊淳!這也只是其中的一點點面試題陕靠,要是有需要面試和學習的都可以? ?關(guān)注+私信? ? 我!我這有最新最全的JAVA面試題和JAVA學習資料脱茉!免費提供!
Java基礎(chǔ)
Hashtable和HashMap的區(qū)別琴许。
抽象類與接口的區(qū)別。
final關(guān)鍵字的使用和區(qū)別榜田。
異常分類和處理機制。
JDK版本區(qū)別箭券。
StringBuilder內(nèi)部實現(xiàn)機制净捅。
反射機制的使用。
匿名內(nèi)部類的使用辩块。
泛型的概念和使用。
弱引用和虛引用的概念和使用方式废亭。
開源框架
SpringMVC和Struts2的區(qū)別
Spring IOC和AOP的概念以及實現(xiàn)方式
Spring事務的管理
Hibernate與MyBatis的比較
Hibernate延遲加載的機制
JVM虛擬機
GC算法有哪些
垃圾回收器有哪些
如何調(diào)優(yōu)JVM
緩存和NoSQL
緩存的使用場景
緩存命中率的計算
Memcache與Redis的比較
如何實現(xiàn)Redis的分片
MongoDB的特點
分布式
zookeeper的用途
dubbo的用途以及優(yōu)點
dubbo的實現(xiàn)原理
數(shù)據(jù)結(jié)構(gòu)和算法
單向鏈表的逆序排列
雙向鏈表的操作
1億個整數(shù)的倒序輸出
找出給定字符串中最長回文(回文:abcdcba捉腥,兩端對稱)
網(wǎng)絡編程
Get和Post的區(qū)別
Https協(xié)議的實現(xiàn)
長連接的管理
Socket的基本方法
數(shù)據(jù)庫
inner join和left join的區(qū)別
復雜SQL語句
數(shù)據(jù)庫優(yōu)化方式
數(shù)據(jù)庫拆分方式
如何保證不同數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)一致性
安全
什么是XSS攻擊,具體如何實現(xiàn)坏匪?
開放問題:如何保障系統(tǒng)安全?
設(shè)計模式
寫出一個設(shè)計模式的類圖
設(shè)計模式的意義是什么
寫個單例模式的代碼
多線程
如何避免Quartz重復啟動任務
線程池滿了如何處理額外的請求 同一個對象的連個同步方法能否被兩個線程同時調(diào)用 部分答案
Java基礎(chǔ)
HashMap和Hashtable的區(qū)別
HashMap是非線程安全的,Hashtable是線程安全的凭迹。 HashMap的鍵值都可以為null罚屋,Hashtable的鍵值都不可以為null值。 HashMap繼承自AbstractMap類嗅绸,Hashtable繼承自Dictionary類脾猛。 ps : Properties類繼承自Hashtable類。
異常分類和處理機制
分類:
運行時異常(Runtime Exception) 受檢查異常(Checked Exception) 運行時異常:
必須繼承RuntimeException類鱼鸠, 定義方法時不必聲明會拋出運行時異常猛拴。 調(diào)用方法時不必捕獲運行時異常羹铅。 受檢查異常:
不繼承自RumtimeException類 定義方法時需要拋出可能會拋出的Checked Exception 調(diào)用方法時需要捕獲Checked Exception或者繼續(xù)向上拋出。 邏輯上:
運行時異常:一般不需要或者不知道如何處理此類異常愉昆; 受檢驗異常:一般需要知道如何處理可能發(fā)生的異常情況职员。 StringBuilder內(nèi)部實現(xiàn)機制
StringBuilder內(nèi)部有一個字符數(shù)組,代碼如下
char[] value; //字符數(shù)組int count; //字符串長度 每一次append操作都是將新的字符串加入到可變長的字符數(shù)組中跛溉,長度計算方式與ArrayList類似焊切。調(diào)用toString()方法時,new一個String對象即可芳室。
public String toString() { return new String(value, 0, count);// Create a copy, don't share the array} ps: StringBuffer是線程安全的蛛蒙,StringBuilder是非線程安全的。
匿名內(nèi)部類的使用
匿名內(nèi)部類是沒有名字的類渤愁,只在某一處被使用,不會被多處調(diào)用深夯,一般是某個父類或接口的特定實現(xiàn)抖格。
強引用、軟引用咕晋、弱引用和虛引用
強引用: 一般的引用都是強引用雹拄,即使OutOfMemory也不會回收這部分被把持的引用內(nèi)存。 軟引用(SoftReference): 如果內(nèi)存空間足夠掌呜,垃圾回收器就不會回收它滓玖;如果內(nèi)存空間不足了,就會回收這些對象的內(nèi)存质蕉。只要垃圾回收器沒有回收它势篡,該對象就可以被使用。++軟引用可以用來實現(xiàn)內(nèi)存敏感的高速緩存模暗。++ 弱引用(WeakReference):弱引用的對象擁有更短暫的生命周期禁悠。當垃圾回收期發(fā)現(xiàn)只有若引用的對象,不論內(nèi)存空間足夠與否兑宇,都會回收它碍侦。 虛引用:虛引用不會決定對象的生命周期,如果一個對象僅持有一個虛引用隶糕,那么它隨時可能被回收瓷产。++虛引用主要用來跟蹤對象被垃圾回收器回收的活動。++ 開源框架
SpringMVC和Struts2的區(qū)別
SpringMVC的方法級別的攔截枚驻,Struts2是類級別的攔截濒旦; SpringMVC是基于Servlet實現(xiàn)Controller,Struts2是基于Filter實現(xiàn)测秸; SpringMVC性能和安全性高于Struts2疤估; SpringMVC更加組件化和流程化灾常,易于擴展,比如返回JSON通過設(shè)置@ResponseBody即可铃拇; Struts2更加無耦合钞瀑,比較純粹,但是需要更多的自行開發(fā)的代碼以支持更多功能慷荔。
Spring事務的管理
分類:聲明式事務雕什、編程式事務
聲明式事務:通過統(tǒng)一配置實現(xiàn)事務的統(tǒng)一管理,一般配置TransactionMananger以及相關(guān)屬性即可显晶。 編程式事務(注解方式):在需要事務的方法上配置相關(guān)的注解(包括事務類型贷岸、回滾策略等) 事務類型:
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完全實現(xiàn)對象關(guān)系映射(ORM),MyBatis實現(xiàn)的是SQL Mapping MyBatis可以進行更為細致的SQL優(yōu)化磷雇,可以減少查詢字段偿警。比Hibernate容易掌握,Hibernate門檻較高唯笙。 Hibernate的DAO層開發(fā)比MyBatis簡單螟蒸,Mybatis需要維護SQL和結(jié)果映射。 Hibernate對對象的維護和緩存要比MyBatis好崩掘,對增刪改查的對象的維護要方便七嫌。 Hibernate數(shù)據(jù)庫移植性很好,MyBatis的數(shù)據(jù)庫移植性不好苞慢,不同的數(shù)據(jù)庫需要寫不同SQL诵原。 Hibernate有更好的二級緩存機制,可以使用第三方緩存挽放。MyBatis本身提供的緩存機制不佳绍赛。
JVM虛擬機
GC算法有哪些
引用計數(shù) 復制 標記-清除 標記-壓縮 分代(新生代、老年代骂维、永久代) 垃圾回收器有哪些
串行回收器:新生代串行回收器惹资、老年代串行回收器 并行回收器:新生代ParNew回收器、新生代ParallelGC回收器航闺、老年代ParallelGC回收器 CMS回收器:(Concurrent Mark Sweep、并發(fā)標記清除) G1回收器(1.7以后代替CMS回收器) 如何調(diào)優(yōu)JVM
標準參數(shù):
-client -server模式 -Xmn侮措、-Xms分扎、-Xmx 監(jiān)控:jps、jstat胧洒、jinfo畏吓、jmap墨状、jhat、jstack… Java 中堆和棧有什么區(qū)別菲饼?
JVM 中堆和棧屬于不同的內(nèi)存區(qū)域肾砂,使用目的也不同。
棧常用于保存方法幀和局部變量宏悦,而對象總是在堆上分配镐确。 棧通常都比堆小饼煞,也不會在多個線程之間共享,而堆被整個 JVM 的所有線程共享砖瞧。 緩存和NoSQL
緩存命中率的計算
命中緩存次數(shù)/(命中緩存次數(shù)+未命中緩存次數(shù)) = 命中率
Memcache與Redis的區(qū)別
memcache把數(shù)據(jù)存在內(nèi)存之中息堂,斷電后會掛掉;Redis部分數(shù)據(jù)持久化在硬盤上块促,斷電不會丟失储矩。 memcache存的是key-value對即硼,redis支持更多的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型 memcache可以使用一致性hash做分布式逃片,redis可以做主從同步 redis單線程,只使用1個cpu 如何實現(xiàn)Redis的分片
使用一致性哈希對數(shù)據(jù)進行映射 實現(xiàn)方式:客戶端分片(每個客戶端對應一個分片)只酥、代理協(xié)助分片褥实、查詢路由分片; 使用redis集群裂允,如codis(豌豆莢损离,依賴zookeeper);
分布式
zookeeper的用途
zookeeper作為分布式應用協(xié)調(diào)系統(tǒng)绝编,已經(jīng)用到很多分布式項目中僻澎。
可以用來完成統(tǒng)一命名服務、狀態(tài)同步服務十饥、集群管理窟勃、分布式應用配置項等管理工作。
zookeeper的主要操作分一下幾種:
創(chuàng)建節(jié)點 讀取節(jié)點數(shù)據(jù) 更新節(jié)點數(shù)據(jù) 刪除節(jié)點 監(jiān)控節(jié)點變化 應用場景:
統(tǒng)一命名服務逗堵,使用create自動創(chuàng)建節(jié)點編號秉氧; 配置管理,多個節(jié)點的共享配置蜒秤,當配置發(fā)生變化時汁咏,可利用zookeeper讓使用這些配置的節(jié)點獲得通知亚斋,進行重新加載等操作。如dubbo服務攘滩。 集群管理:集群選舉主節(jié)點帅刊,資源定位。 共享鎖 負載均衡 應用項目:
dubbo服務集群轰驳、redis集群厚掷、Hadoop集群等
dubbo的用途以及優(yōu)點
Dubbo是一個分布式服務框架,致力于提供高性能和透明化的RPC遠程服務調(diào)用方案级解,以及SOA服務治理方案冒黑。
數(shù)據(jù)結(jié)構(gòu)和算法
將單項鏈表逆序排列
將單向鏈表逆序輸出,方法有三種:
遍歷鏈表勤哗,將每個節(jié)點的內(nèi)容存入一個數(shù)組中抡爹,然后逆序輸出數(shù)組(最簡單的做法) 使用棧來逆序輸出 直接將鏈表(指針)逆序然后輸出