亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Java異常面試20題:從Throwable到try-with-resources的底層原理

Java異常面試20題:從Throwable到try-with-resources的底層原理 帶人面試這幾年Java異常幾乎是必問題而且問法一年比一年刁鉆。從最基礎(chǔ)的Throwable下面分哪兩類到finally里 return 會不會覆蓋 try 里的返回值再到為什么不要在 finally 里拋異常每一層都能篩掉一批人。坦白說異常處理在大多數(shù)人日常代碼里就是無腦 try-catch 的肌肉記憶但面試官想看的恰恰是你在異常機制上有沒有真正的底層理解。這篇就按我實際帶新人、做面試官時的經(jīng)驗把 Java 異常面試?yán)镒畛1粏柕降?0道經(jīng)典面試題拆開來講每一道都會說清楚考什么、坑在哪、怎么答才夠深。1. 先搞清楚Java異常體系這5道題別再送分了1.1 體系結(jié)構(gòu)Throwable、Exception、Error三者到底什么關(guān)系Java 里所有的異常和錯誤歸根到底都是 Throwable 的子類。Throwable 這一層下面分兩個大分支Exception 和 Error。Exception 里面又細(xì)分成 RuntimeException非受檢異常和除了 RuntimeException 之外的其他受檢異常。很多剛工作沒兩年的人能說出這個結(jié)論但一問到設(shè)計意圖就卡殼。Throwable 這個類名字本身就很直白可以被拋出它定義了所有異常對象的公共能力message描述信息、cause導(dǎo)致當(dāng)前異常的根本原因、stackTrace異常堆??煺铡2还苁强罩羔樳€是數(shù)據(jù)庫連接失敗最后都?xì)w一成同一個模型這保證了 JVM 在處理異常時能用統(tǒng)一邏輯。面試官問體系結(jié)構(gòu)通常背后還有一層意思你平時看代碼時有沒有關(guān)注過異常的類型歸屬。比如很多面試者會把 RuntimeException 和 Error 混為一談其實兩者在異常處理哲學(xué)上完全不同。RuntimeException 代表程序邏輯缺陷比如空指針、下標(biāo)越界理論上可以通過修復(fù)代碼避免Error 代表 JVM 或系統(tǒng)級的嚴(yán)重問題比如 OutOfMemoryError程序自己通常無法修復(fù)。你可以在代碼里 catch OOM但基本治標(biāo)不治本因為內(nèi)存已經(jīng)處于危險狀態(tài)。順帶提一個比較冷門但面試官很喜歡的點Throwable 不僅僅能用來封裝 Exception 和 Error你甚至可以把自定義的 Throwable 子類當(dāng)作業(yè)務(wù)異常使用只要調(diào)用方愿意。但實際工程里幾乎沒人這么干約定俗成是繼承 Exception 或 RuntimeException。如果你在回答體系結(jié)構(gòu)時能補充說異常不只是一種錯誤報告機制也是一種控制流裁定的手段整個回答的深度立刻不一樣。1.2 Checked與Unchecked面試官最愛的二分法受檢異常Checked Exception和非受檢異常Unchecked Exception的區(qū)別是 Java 異常面試的必考題。受檢異常必須顯式處理要么用 try-catch 包裹要么在方法簽名里用 throws 聲明非受檢異常則沒有這個限制編譯器不會強制你去處理。為什么 Java 要專門設(shè)計這種強制性的區(qū)分我的理解是受檢異常表達的是調(diào)用方需要為這種可預(yù)期的失敗負(fù)責(zé)的場景。比如你打開一個文件文件不存在是常見業(yè)務(wù)風(fēng)險編譯器有義務(wù)提醒你處理。而 RuntimeException 表達的更多是程序內(nèi)部邏輯有問題或狀態(tài)根本不可用出了錯不是調(diào)用方靠 try-catch 就能兜底的得靠修代碼。面試時如果只答到這里只能拿及格分更高一檔的回答要說到工程實踐的變化趨勢。我?guī)У捻椖坷镄碌臉I(yè)務(wù)代碼幾乎不再主動聲明受檢異常了而是統(tǒng)一拋 RuntimeException 的子類靠全局異常處理器統(tǒng)一捕獲。原因很簡單受檢異常把處理異常的壓力傳遞給了每一個調(diào)用方在多層調(diào)用鏈上導(dǎo)致大量被迫的 try-catch 或者 throws 污染代碼可讀性直線下降。但要注意這不代表受檢異常沒有存在價值像讀寫文件、網(wǎng)絡(luò)通訊這類底層 IO 場景強制處理依然有它的合理性。我用一個表格幫人記憶兩類異常的核心差異面試前過一遍很有用。對比維度Checked ExceptionUnchecked Exception父類位置Exception 下除 RuntimeException 之外RuntimeException 子類編譯期強制處理必須 try-catch 或 throws不強制典型場景IO、網(wǎng)絡(luò)、配置加載空指針、非法參數(shù)、下標(biāo)越界設(shè)計意圖可預(yù)期的業(yè)務(wù)/環(huán)境風(fēng)險程序邏輯缺陷或不可恢復(fù)狀態(tài)工程建議底層 IO 或強約束時使用業(yè)務(wù)系統(tǒng)推薦使用1.3 Error能catch嗎能但踩過的坑比想象多很多人一聽到 Error 就先入為主認(rèn)為不能 catch這其實是錯的。從語法層面catch (Error e) 完全合法JVM 也不會阻止你。但從工程角度我強烈不建議你去接 Error原因不是接不住而是接了也處理不了。拿 OutOfMemoryError 來說當(dāng)它出現(xiàn)時堆內(nèi)存可能已經(jīng)耗盡你即使 catch 住想通過清理緩存釋放內(nèi)存大概率也來不及甚至 catch 之后 JVM 再觸發(fā) GC 也沒有足夠空間。StackOverflowError 更典型無限遞歸導(dǎo)致棧溢出之后線程的調(diào)用棧已經(jīng)極深你再做什么都很難讓程序恢復(fù)到安全狀態(tài)。有一個實際教訓(xùn)可以分享某個后臺任務(wù)為了避免崩潰在頂層用了 catch (Throwable e) 做兜底結(jié)果某次 OOM 被吞掉之后系統(tǒng)對外看起來還活著但內(nèi)部內(nèi)存已經(jīng)瀕臨崩潰后續(xù)每一個請求都在失敗邊緣掙扎排查了很久才定位到是 OOM 被吞導(dǎo)致的可悲狀態(tài)。所以我的建議是除非是熱備切換、資源清理這類極端兜底場景否則頂層也別輕易 catch Throwable寧可讓進程快速失敗也不要帶病運行。1.4 常見運行時異常背全清單就是送分運行時異常RuntimeException是面試題里最常被拿來舉例的一類。下面這些是高頻出現(xiàn)的我按觸發(fā)場景整理了一下NullPointerException空引用訪問成員變量、方法或數(shù)組元素時觸發(fā)。最經(jīng)典也最常見。IndexOutOfBoundsException訪問數(shù)組或集合時下標(biāo)越界注意區(qū)分 ArrayIndexOutOfBoundsException 和 StringIndexOutOfBoundsException。ClassCastException強制類型轉(zhuǎn)換失敗比如把 Object 轉(zhuǎn)成不兼容的類型。ArithmeticException算術(shù)異常最常見的就是整數(shù)除零。IllegalArgumentException方法接收到了非法的參數(shù)比如數(shù)值范圍不合法。IllegalStateException對象狀態(tài)不滿足操作前提比如已經(jīng)關(guān)閉的連接再調(diào)用方法。NumberFormatException字符串轉(zhuǎn)數(shù)字失敗。UnsupportedOperationException調(diào)用了未實現(xiàn)的操作一般出現(xiàn)在只讀集合上。記這個清單不能只背名字面試官往往會給出一個小場景讓你判斷會拋什么異常。比如HashMap 的 key 是自定義對象對象沒有重寫 hashCode 會怎樣答案是可能正常工作但 hashCode 相等的對象會被放到同一個槽位性能變差。想靠背清單應(yīng)付不了這種場景題平時寫代碼遇到異常時多看一眼類型和堆棧比死記硬背更有用。1.5 throw與throws一拋一聲明的區(qū)別常常被問倒throw 和 throws 看起來只差一個字母但語義完全不同。throw 用在方法體內(nèi)部表示實際拋出一個異常實例后面必須跟一個 Throwable 對象throws 用在方法簽名上表示這個方法可能拋出哪些異常類型是把異常責(zé)任向上傳遞的聲明。舉個簡單的對比public class ThrowVsThrows { public static void main(String[] args) { try { doSomething(); } catch (BusinessException e) { System.out.println(捕獲到了業(yè)務(wù)異常); } } // 用 throws 聲明可能拋出的受檢異常 public static void doSomething() throws BusinessException { // 滿足條件時實際拋出異常實例 throw new BusinessException(參數(shù)不合法); } }這里可以看出一個設(shè)計邏輯throws 解決的是夠不到異常的問題——當(dāng)前方法把異常拋給上層由上層決定怎么處理。而 throw 解決的是這里確實發(fā)生了異常情況的問題。面試時如果被問到能不能只 throw 不 throws答案是可以只要拋的是 RuntimeException 或它的子類。反過來能不能只 throws 不 throw也行因為 throws 只是一種聲明不代表方法內(nèi)一定要拋。很多面試者死記硬背throw 是動作、throws 是聲明這沒錯但我會希望聽到你把異常責(zé)任傳遞鏈這個概念講出來throws 本質(zhì)是在協(xié)議層面告訴調(diào)用方調(diào)用這里需要做什么心理準(zhǔn)備。2. try-catch-finally執(zhí)行機制最容易踩坑的5道題2.1 執(zhí)行順序finally一定執(zhí)行嗎別急著回答是這個問題的經(jīng)典程度不用多說。標(biāo)準(zhǔn)流程是try 塊正常執(zhí)行完畢接著執(zhí)行 finallytry 塊拋異常先匹配 catchcatch 執(zhí)行完再 finally沒有匹配的 catchfinally 執(zhí)行完后異常繼續(xù)向上拋。很多人只知道finally 最后執(zhí)行但被問到finally 一定執(zhí)行嗎就開始猶豫了。實際情況是只要 JVM 沒有被強制終止finally 都會執(zhí)行。觸發(fā)強制終止的典型情況包括 System.exit() 調(diào)用、JVM 崩潰、機器斷電。此外如果 try 塊所在線程被中斷或 killfinally 的執(zhí)行也不可靠。還有一個容易忽略的點如果 try 塊里出現(xiàn)無限循環(huán)finally 自然永遠執(zhí)行不到——這不是它不執(zhí)行而是沒有執(zhí)行的機會。這里的原理是 finally 的設(shè)計目標(biāo)保證資源釋放、狀態(tài)清理等收尾工作不因 try 塊正常或異常而改變。所以寫 finally 時要假設(shè)它一定會執(zhí)行不要在里面寫可能失敗的操作也不要寫耗時操作保持 finally 足夠輕量。面試時對方還可能追問finally 里能不能修改返回值這句要小心。修改的行為要區(qū)分基本類型和引用類型?;绢愋驮?finally 里改返回值變量不會影響已經(jīng)計算好的返回值引用類型則要看修改的是變量指向還是對象內(nèi)部狀態(tài)。對象內(nèi)部狀態(tài)變了外部拿到的引用自然感知到變化。這個點放到下一題細(xì)化。2.2 return和finally到底誰先誰后return 和 finally 的執(zhí)行順序光靠return 先計算值finally 后執(zhí)行最后返回這句話不夠得結(jié)合字節(jié)碼層面理解。我在實操中發(fā)現(xiàn)很多人聽到finally 在 return 之前執(zhí)行后反而誤解成finally 先執(zhí)行、return 語句后執(zhí)行這是錯的。準(zhǔn)確說法是return 表達式求值發(fā)生在 finally 執(zhí)行之前但方法真正把值返回給調(diào)用方發(fā)生在 finally 執(zhí)行完成后??磦€例子public class ReturnFinallyOrder { public static void main(String[] args) { System.out.println(compute()); } static int compute() { int result 1; try { result 2; return result; // 先把返回值 2 存到臨時位置 } finally { result 3; // 修改 result不影響已暫存的返回值 System.out.println(finally 執(zhí)行result result); } } }這里輸出會是finally 先打印 finally 執(zhí)行result3然后方法返回 2。很多人以為返回 3實際是 2。原因就是 return 的求值動作在 finally 之前完成返回值已經(jīng)被復(fù)制到臨時槽位后續(xù)對局部變量的修改不影響它。但如果 return 的是一個引用類型比如 HashMapfinally 里往這個 map 里 put 數(shù)據(jù)調(diào)用方拿到的是同一對象會看到 put 后的內(nèi)容。這個細(xì)節(jié)在面試?yán)锖苡袇^(qū)分度能體現(xiàn)你對值傳遞和引用傳遞的理解。2.3 finally里寫return一個能幫你加分也能踩坑的操作finally 里寫 return 是絕對要被 interviewer 重點盤問的因為它會覆蓋 try 或 catch 里的返回值。舉例public static int overrideDemo() { try { throw new RuntimeException(業(yè)務(wù)出錯); } catch (RuntimeException e) { return 100; } finally { return 200; } }這段代碼運行時不會把異常傳出去最終返回值是 200。也就是 catch 里 return 100 已經(jīng)執(zhí)行了但 finally 里的 return 200 把返回路徑搶過去覆蓋掉了。更嚴(yán)重的是try 拋出的異常也被吞掉了調(diào)用方完全不知道業(yè)務(wù)出錯。這種代碼在很多老項目里見過通常是為了在異常情況下給一個默認(rèn)返回值看似穩(wěn)妥實則后患無窮。一旦異常被吞掉線上故障排查時日志里什么都看不到問題定位成本劇增。我的建議是 finally 里只做清理和狀態(tài)復(fù)位永遠不要寫 return也不要寫會拋異常的業(yè)務(wù)邏輯。這不是理論潔癖是真金白銀踩坑換來的教訓(xùn)。2.4 try-with-resources編譯器幫你把close的正確姿勢寫好try-with-resources 是 Java 7 引入的語法糖它的核心價值不只是簡潔而是解決了傳統(tǒng) finally close 的異常掩蓋問題。先看傳統(tǒng)寫法的問題// 不推薦的傳統(tǒng)寫法 InputStream in null; try { in new FileInputStream(test.txt); // 讀文件 } finally { if (in ! null) { in.close(); // 如果close拋異常會覆蓋try塊里的原始異常 } }如果 try 塊里讀文件時拋了 IOExceptionfinally 里 close 又拋了 IOException傳統(tǒng)寫法下小概率會把 close 的異常覆蓋掉原始異常導(dǎo)致你看到的異常根本不是根因。而 try-with-resources 會自動處理抑制異常底層 IOException 和 close 的 IOException 都會記錄close 的異常會被標(biāo)記為 suppressed可以通過 Throwable.getSuppressed() 查出來。語法很簡單try (FileInputStream in new FileInputStream(test.txt); BufferedInputStream bin new BufferedInputStream(in)) { // 使用資源 } catch (IOException e) { // 處理 }兩個實現(xiàn)細(xì)節(jié)值得記住第一資源聲明要放在 try 后的括號里并且資源必須實現(xiàn) AutoCloseable第二多個資源的關(guān)閉順序與聲明順序相反類似棧的后進先出。比如先聲明 in 再聲明 bin關(guān)閉時先關(guān) bin再關(guān) in。這個順序的目的是保證依賴方向正確避免外層資源關(guān)閉后內(nèi)層資源還被引用。2.5 多重catch的匹配順序子類在前父類在后多個 catch 塊并存時異常匹配是從上到下的順序。Java 不會為你選最合適的 catch它只按書寫順序找第一個能接住這個異常類型的塊。所以如果父類 Exception 寫在子類 IOException 前面IOException 的 catch 塊永遠到不了編譯器會直接報錯該異常已經(jīng)被父類 catch 捕獲。Java 7 引入的多異常捕獲語法也常被追問try { // 讀寫文件、解析格式 } catch (IOException | ParseException e) { // 統(tǒng)一處理e日志輸出 }注意這里 catch 參數(shù) e 的隱式類型是這些異常的公共父類而且 e 被隱式聲明為 final不能在 catch 塊里重新賦值。這個細(xì)節(jié)很多人答不上來。為什么要多個 catch一個復(fù)雜方法可能面臨網(wǎng)絡(luò)異常、解析異常、業(yè)務(wù)校驗異常同時存在拆分 catch 塊能讓你針對不同情況進行差異化處理而用多異常捕獲則是讓處理邏輯相同時避免重復(fù)代碼。3. 異常設(shè)計原則從懂語法到會設(shè)計的5道題3.1 什么時候該捕獲什么時候該拋出一條判據(jù)走天下我面試時經(jīng)常給出一道場景題你在 service 層調(diào)用 dao 層dao 層拋了個 SQLException你該怎么辦很多候選人第一反應(yīng)是 try-catch 包起來然后打印日志這恰恰是最需要糾正的習(xí)慣。判斷該捕獲還是該拋出的關(guān)鍵是看當(dāng)前層能不能對異常做出有意義的補償。如果當(dāng)前層有降級方案、可以重試、能返回兜底數(shù)據(jù)那就捕獲如果當(dāng)前層什么都做不了就應(yīng)該向上拋把選擇權(quán)交給更上層。service 層面對 SQLException 時常見的正確處理是轉(zhuǎn)化為自己的業(yè)務(wù)異常再拋出去或者回滾事務(wù)后拋給 controller而不是默默吞掉然后返回 null 告訴上面我沒出錯??梢詮姆謱右暯遣痖_說DAO 層一般不適合直接處理異常向上拋或轉(zhuǎn)成數(shù)據(jù)訪問異常讓 service 層決定是否重試或回滾。Service 層可以處理與業(yè)務(wù)狀態(tài)相關(guān)的異常做補償、重試、回滾等。Controller/API 層捕獲通用異常轉(zhuǎn)換成統(tǒng)一的響應(yīng)結(jié)構(gòu)返回給客戶端。答案里如果能強調(diào)異常處理的原則不是消除異常而是把異常放在最合適的一層去應(yīng)對面試官會覺得你有工程判斷力。3.2 自定義異常命名、繼承、構(gòu)造函數(shù)、錯誤碼自定義異常是設(shè)計題的重災(zāi)區(qū)。很多人知道要繼承 RuntimeException但構(gòu)造函數(shù)不完整導(dǎo)致后續(xù)排錯缺信息。一個合格的自定義異常至少要考慮四件事。第一繼承誰。業(yè)務(wù)系統(tǒng)中我強烈建議繼承 RuntimeException因為受檢異常會污染調(diào)用鏈但如果你的異常需要強制調(diào)用方感知處理比如參數(shù)校驗異??梢岳^承 Exception。第二命名規(guī)范。以 Exception 結(jié)尾比如 OrderException、PayException千萬不要叫 OrderError 之類。第三構(gòu)造函數(shù)完整。最好覆蓋無參、帶 message、帶 message 和 cause 三個構(gòu)造。有時還要提供帶 errorCode 的版本。第四是否攜帶更多上下文。業(yè)務(wù)異常最好帶 errorCode方便前端展示對應(yīng)文案和產(chǎn)品側(cè)定位。下面是一個我常用的模板public class OrderException extends RuntimeException { private final int errorCode; public OrderException(int errorCode, String message) { super(message); this.errorCode errorCode; } public OrderException(int errorCode, String message, Throwable cause) { super(message, cause); this.errorCode errorCode; } public int getErrorCode() { return errorCode; } }這樣做的好處是全局異常處理器捕獲到 OrderException 后可以直接取出 errorCode 返回給前端不需要再通過字符串解析業(yè)務(wù)錯誤。平時寫業(yè)務(wù)代碼時自定義異常別亂造一個模塊里有三五個穩(wěn)定的異常類型就夠了不要每個方法都 new 一個異常類。3.3 異常日志把堆棧和上下文一起打出來才叫有效異常日志是我在實際項目中復(fù)查最多的點。很多線上問題排查困難不是因為難而是日志里只有 e.getMessage()連堆棧都沒有。你說一個 NullPointerException 出現(xiàn)在哪一行都不知道排查只能靠猜。正確做法是把整個異常對象傳給日志框架而不是只傳 message。用日志框架的寫法是// 不推薦只打印message丟失堆棧 log.error(處理失敗 e.getMessage()); // 推薦傳入異常對象自動記錄堆棧 log.error(訂單{}處理失敗訂單狀態(tài){}, orderId, status, e);第二個寫法的好處有兩個一是堆棧完整能定位到具體拋出點二是上下文參數(shù)能幫你理解這個異常發(fā)生在什么業(yè)務(wù)背景下。日志里最忌諱的就是只有報錯文案沒有訂單號、沒有用戶標(biāo)識、沒有調(diào)用來源這種日志在排查時基本報廢。還有一個重復(fù)記錄的問題。很多團隊在 DAO 層記一次service 層又記一次controller 層再記一次一個異常出現(xiàn)三份日志看起來信息很全實際上分散了排查注意力而且不同層記錄時間可能有細(xì)微差異反而干擾判斷。我的做法是在最終處理異常的那一層記一次完整日志中間層做異常包裝時可以簡記或不記保持日志鏈路干凈。3.4 避免空指針從防御式寫法到Optional的正確姿勢NullPointerException 一出現(xiàn)Java 面試的氣氛瞬間就活了。面試官想看的不是你背了多少判空方法而是你有沒有形成系統(tǒng)的空值防護意識。日常代碼里最常用的防護手段是提前判斷比如方法入口校驗參數(shù)public void process(Order order) { if (order null) { throw new IllegalArgumentException(order不能為空); } if (order.getId() null) { throw new IllegalArgumentException(order.id不能為空); } // 業(yè)務(wù)處理 }Java 8 之后 Optional 也很流行但用錯的人很多。Optional 適合用作返回值表達可能沒有值它不適合用來做字段類型也不適合作為方法參數(shù)傳進來——把 Optional 傳進方法意味著你又得判斷一次外層 Optional 是否為空反而復(fù)雜化了。有一個比較新的點也可以提JDK 14 之后 JVM 對空指針有更友好的診斷信息出現(xiàn) NPE 時能直接提示是哪個字段為 null而不是籠統(tǒng)地拋一個堆棧。面試時提到Helpful NullPointerException能顯得你持續(xù)在跟進版本演進很加分。另外Objects.requireNonNull 是一個被低估的利器它可以在方法入?yún)⑿r灂r快速拋出 NPE比手寫 if throw 簡潔而且語義清晰。3.5 濫用異常做業(yè)務(wù)分支為什么會成為面試反面教材有一類代碼很能暴露程序員水平就是拿異常當(dāng)正常的業(yè)務(wù)判斷用。典型情況是把整個方法用 try-catch 包住通過 catch 某個特定異常來推出循環(huán)或者設(shè)置默認(rèn)值。這樣做的大問題有三個。第一是性能。異常創(chuàng)建需要填充堆棧這是一次棧幀遍歷成本遠高于普通 if 判斷如果循環(huán)每輪都走異常分支性能影響可能非常顯著。第二是可讀性。異常名本質(zhì)上代表非常規(guī)狀態(tài)它混入正常流程會讓閱讀者無法判斷哪些情況是預(yù)期哪些是真錯誤。第三是安全。一旦 catch 塊寫得不嚴(yán)謹(jǐn)真正的錯誤可能被當(dāng)作正常業(yè)務(wù)吞掉。正確的業(yè)務(wù)分支做法是預(yù)期內(nèi)的狀態(tài)用 if 判斷或 switch 分支預(yù)期外的錯誤用異常表達。比如根據(jù)訂單狀態(tài)決定下一步是分支邏輯應(yīng)該用枚舉加 switch外部接口響應(yīng)異常才是異常邏輯應(yīng)該拋出去或按降級策略處理。舉一個反例// 反例把數(shù)組邊界當(dāng)成循環(huán)結(jié)束信號 try { while (true) { System.out.println(list.get(i)); } } catch (IndexOutOfBoundsException e) { // 用異常結(jié)束循環(huán) }這種寫法如果在面試題里出現(xiàn)基本就是考察你對異常只用于非常規(guī)狀態(tài)的理解。能一眼看出問題并且解釋清原因的人才算是真正理解異常設(shè)計的本質(zhì)。4. 異常高級場景拉開面試差距的5道題4.1 異常的性能代價別用異??刂屏鞒谈丛诙褩L畛溥@道題往往藏在一個更寬泛的問題里為什么說不要用異常處理正常流程性能是最核心的技術(shù)原因。異常對象創(chuàng)建時JVM 會調(diào)用 fillInStackTrace()這個方法會遍歷當(dāng)前線程的調(diào)用棧把每一層棧幀記錄下來。調(diào)用棧越深遍歷成本越高而且這個過程是 JVM 原生的異常拋出頻率一旦高起來對系統(tǒng)吞吐的影響非常明顯。我用一個簡單測試驗證過普通的 for 循環(huán)加 if 判斷和同樣循環(huán)里故意拋異常再捕獲吞吐差距能到幾十倍以上異常方式甚至可能把機器打滿。這個數(shù)據(jù)背后的原理就是 fillInStackTrace 的棧遍歷和對象分配開銷。不過在特定場景下如果你確實需要一個異常對象但又完全不需要堆棧信息比如某些自定義的輕量級業(yè)務(wù)狀態(tài)信號可以覆蓋 fillInStackTrace 讓異常創(chuàng)建成本大幅下降public class LightweightStatusException extends RuntimeException { Override public synchronized Throwable fillInStackTrace() { return this; // 不填充堆棧加快異常創(chuàng)建 } }這個技巧面試時能講出來會非常亮眼。但它也帶來一個代價異常對象沒有堆棧排錯完全靠 message 和上下文日志除非你對場景非常有把握否則不建議在生產(chǎn)大量使用。4.2 線程里的異常run方法簽名上沒有throws怎么辦Runnable 的 run() 方法沒有聲明 throws所以受檢異常根本拋不出去只能在 run 內(nèi)部 try-catch。很多人在這里的認(rèn)知是線程出異常會直接掛掉對但不夠準(zhǔn)確。如果線程沒有被自定義的 UncaughtExceptionHandler 接管默認(rèn)處理邏輯是把異常堆棧打印到 System.err然后線程結(jié)束。對于線程池里的工作線程來說是線程結(jié)束而不是整個線程池掛掉。面試常給的一道進階題是把任務(wù)提交給 ThreadPoolExecutor任務(wù)內(nèi)部拋出 RuntimeException調(diào)用方怎么感知這要區(qū)分提交方式。如果用 execute() 提交異常默認(rèn)會被線程池內(nèi)部吞掉外部拿不到如果用 submit() 返回 Future異常會被封裝成 ExecutionException在調(diào)用 future.get() 時拋出。ExecutorService pool Executors.newFixedThreadPool(2); Future? future pool.submit(() - { throw new RuntimeException(任務(wù)內(nèi)部失敗); }); try { future.get(); } catch (ExecutionException e) { Throwable cause e.getCause(); // 真正的任務(wù)異常 System.out.println(捕獲任務(wù)異常 cause.getMessage()); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }這個寫法里通過 ExecutionException 拿到 cause 才能看到真正異常直接捕獲到的是包裝后的異常。能講清楚 execute、submit、Future.get 這三種異常感知路徑的人說明對線程池有實操經(jīng)驗不是只看過文檔。4.3 異常丟失為什么日志里明明該有異常卻什么都沒有異常丟失是生產(chǎn)事故里最隱蔽的坑。最典型的三條路線第一條是空 catch 塊catch 住了然后什么都不寫。這個不用多解釋屬于嚴(yán)重違規(guī)。第二條是 finally 里拋異常覆蓋原始異常前面提過。第三條是 try-with-resources 出現(xiàn)之前的古老寫法try 塊拋異常 Afinally 里 close 拋異常 BB 直接把 A 覆蓋導(dǎo)致你看到的異常是關(guān)文件失敗而真正問題可能是文件解析失敗。Java 7 之后這個問題被治本了try-with-resources 會把 close 時發(fā)生的異常作為 suppressed 附加到主異常上StackTrace 里會顯示 Suppressed: 。如果你接手的老項目還在用 finally close建議逐步改成 try-with-resources。排查異常丟失時我有一個習(xí)慣先看日志里有沒有空 catch再看 finally 里有沒有可能拋異常的代碼最后查有沒有 catch 里 return 不打印日志。按這個順序排查絕大多數(shù)異常神秘消失都能找到根源。這條經(jīng)驗在面試?yán)镏v出來比單純背誦知識點更有說服力。4.4 反射、Stream、Lambda里的異常三個高頻陷阱反射調(diào)用是異常處理的隱藏雷區(qū)。Method.invoke() 如果被調(diào)方法拋異常反射框架會把真實異常包裝成 InvocationTargetException 拋出來。你直接 catch 反射相關(guān)異常時拿到的可能是包裝殼真正原因藏在 cause 下面。我見過不止一個人 catch 到 InvocationTargetException 后打印了一下以為看到了原因其實只看到了殼。try { Method method obj.getClass().getMethod(doSomething); Object result method.invoke(obj); } catch (InvocationTargetException e) { Throwable realCause e.getCause(); // 這才是真正異常 log.error(業(yè)務(wù)方法調(diào)用失敗, realCause); }Stream API 和 Lambda 里的受檢異常處理是另一個常見問題。函數(shù)式接口的方法簽名都沒有 throws 聲明所以你在 Lambda 里直接拋受檢異常會編譯不過。常見做法有三種一是包成 RuntimeException二是自己定義一個允許受檢異常的函數(shù)式接口三是把流操作拆成傳統(tǒng) for 循環(huán)。我推薦第二種在項目公共工具類里定義這樣的接口并不復(fù)雜FunctionalInterface public interface ThrowingConsumerT { void accept(T t) throws Exception; } public static T ConsumerT unchecked(ThrowingConsumerT throwingConsumer) { return t - { try { throwingConsumer.accept(t); } catch (Exception e) { throw new RuntimeException(e); } }; }有了這個工具Stream 里的代碼就可以保持簡潔同時異常又不會靜默丟失。面試時能順勢講出這種封裝思路說明你不是第一次被 Lambda 異常坑過的人。4.5 異常鏈與initCause業(yè)務(wù)異常也要保留根因異常鏈?zhǔn)前b異常場景的技術(shù)底座。簡單說當(dāng)你在 catch 到一個底層異常后準(zhǔn)備向上拋一個業(yè)務(wù)異常這個時候一定要把底層異常作為 cause 傳進去。這樣排錯時可以通過內(nèi)層的 Caused by一步不差地追到最原始的故障點。有兩種寫法// 方式一構(gòu)造方法傳cause throw new OrderException(1001, 訂單創(chuàng)建失敗, e); // 方式二創(chuàng)建后調(diào)用initCause OrderException oe new OrderException(1001, 訂單創(chuàng)建失敗); oe.initCause(e); throw oe;需要注意的是 initCause 只能被調(diào)用一次而且如果構(gòu)造時已經(jīng)傳過 cause再調(diào) initCause 會拋 IllegalStateException。為什么要有 initCause 而不是完全靠構(gòu)造方法因為是給那些構(gòu)造方法無法預(yù)知 cause 的場景留的口子比如某些代理生成、反序列化的場景。如果你能把這個為什么有 initCause講明白面試官基本能確認(rèn)你研究過異常源碼的細(xì)節(jié)。關(guān)于異常鏈還有一個??键cprintStackTrace 打印出的形式是 Caused by說明 JVM 在遞歸遍歷 cause 鏈。當(dāng)你做異常包裝時一定要把 getCause 鏈走完不要只看最外層異常。很多線上問題定位慢就是只看第一行堆棧沒往下翻 Caused by。5. 面試現(xiàn)場的實際體感最后再說幾句帶人這些年我面試過的候選人少說也上百了。我最直觀的感受是異常題能不能答出層次基本能判斷一個人平時寫代碼有沒有思考的習(xí)慣。背下這20道經(jīng)典面試題只是第一步更重要的是每道題背后的設(shè)計理由和工程選擇。真正讓人印象深刻的候選人往往會在回答里加一句這個坑我在生產(chǎn)環(huán)境踩過……哪怕講的是個很小的例子也比干巴巴背課本強得多。最后分享一個小建議準(zhǔn)備 Java 異常面試時別只坐在椅子上看面經(jīng)。花一個下午把這20道題涉及的代碼挨個寫一遍用 debugger 看執(zhí)行流程親手驗證 finally 覆蓋返回值、異常鏈的 Caused by、try-with-resources 的 suppressed。眼見為實之后你對異常機制的理解會進入到另一個層次面試時也能講得更從容。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91碰超| 加勒比海成人视频网| 人妻精品4K4K4K4K4| 天天综合91入口| 免费a在线播放v| 色乱二区| 精品一区二区三区麻豆| 国产乱伦搜索结果91P| 美国aaaaa一级黄片| 久久免费中文字幕在线观看| 国产偷人妻精品一区二区在线| 精国久久一区二区三区98| 蜜臀99久久精品| 一区二区娱乐网站| 69一区二区| 国产精品一区av在线| 操操操操操操| 日韩无码专区| 东北女人操逼| 大香蕉九九| 97极品无码| 偷窥自拍亚洲天堂网爆| 国产日韩精品suv| 婷婷五月天av| 久草老司机| 欧美一级专区免费大片 | 亚洲欧美日韩制服另类| 精品国产乱码久久久兰草影视| 久久久久国产| 欧美国产精品| 亚洲第91页| 67914亚洲精品| 91精品国产长腿丝袜美女| 日本黄色精品专区网站| 亚av顶级裸体一区二区三区四区五区| 囯戸精品高潮呻吟旡码| 91天天c| 射 色综合| 人人操人人摸人人看人人干| 国产欧美日韩女同性恋ww喷水精品 | 国产 热久久久久国产精品| 亚洲人精品午夜不卡| AV一区观看| 国产自偷| 人人操超碰在线| 超碰人人妻| 亚洲色电影在线| 亚洲色图殴美色图激情乱伦| 蜜乳AV免费观看| 大香久久| 午夜男女爽爽爽影院视频| 婷婷国产精品九区| 婷婷五月天福利| 亚欧操逼片在线观看 | 超碰美女97| 偷拍欧美激情| 超碰在线97国产| 国产午夜激片Av毛片不卡| 操逼日批| 精品亚洲国产成人av网站| 国产成人精品一区| 美女性91| 99e久久国产精品| 思思热免费在线视频| 尤物视频网 刘玥| 亚欧性爱在线无码| 狠狠躁AV| 无卡一区=区| 99久热| 国产一区二区三区白丝| 免费久久一级毛片大黄| 亚洲自拍青操视频| 色婷婷久久综合超碰| 亚洲黄色网址视频| 深夜国产一区二区三区在线看| 深夜国产一区二区三区在线看| 亚洲电影中字一区二区| 国产JDAV无码视频在线观看| 国产高清自拍| 日韩三级伊人| 激情小说亚洲色图| 丰满熟女一区二区三区在线播放| 丝袜AV一区二区三区| 啊啊啊啊啊啊在线| 高清视频一区| 五月亭亭六月丁香| 中文字幕在线免费观看2| 欧美日产国产在线成人第一区| 久久久久久99AV无码免费网站| 亚洲综合一区二区| 女人被男人桶爽视频网站| site:sinbotex.com| 女上位精品在线| 翔田千里爆乳巨臀无码| 5278欧美一区二区三区| 欧洲综合视频| 亚洲国产丝袜在线观看| 精品二区三四区五电影| 美女91色黄18| 九九九九精品九九九九| 特级特黄一级毛片免费| 一二三啪啪专区| 屁股久久久久久| 日韩欧美午夜视频在线| 五月丁香| 性色国产东北露脸精品视频| 亚洲国内精品成人不卡| 综合网少妇| 尤物网址| 大香交| 天天天天操| 99自拍视频在线观看| 国产精品伦理| 91久久婷婷| 欧美日本天堂| 亚洲人妻av| 大香蕉中文网| 精品国产一区二区三区av在线资源| 一区二区久久天天干狠狠| 色哟哟av| 无码高清国产AV| 国产成人天堂| 日韩人妻播放| 1240青青草一区二区三区视频天爱| 亚洲日韩肥臀视频在线观看| 99re热有精品视频国产| 男人的天堂.com| 美女爽爽爽刺痛洞洞| 色色综合网站| 国产久久一区二区午夜| 欧美美女在线高潮999| 97在线观看免费| 91日韩网站| 久久人妻视频网| 日韩9区| 无码动漫av中文字幕| 男人久久精品| 另类图片五月| 日本色婷婷| 中文字幕美女91| 91麻豆天美国产欧美| 蜜桃臀一区二区三区久久| 在线观看十八禁| 后入福利| 国产精品熟女丝袜一区二区| 亚洲视频一二区| 大香蕉99999| 人妻-91porn| 天天干夜夜| 可以在线观看的黄色网址| 欧美体内射精| 韩国黄片aaaa| 熟妇的味道HD中文字幕| 大香蕉伊人亚洲| 麻豆国产97在线| 竹菊一区二区三区AV线| 国产热RE99久久6国产精品首 | 欧美人妻一区二区| 日本日日色视频| 爱射综合| 一区二区三区视频国产免费| 欧美最大综合网| 人妻人人操| 深田咏美亚洲精品福利社| 午夜亚洲| 欧美色图亚洲特色| 成人AV在线电影| 久久久一区二区三区四区五区| 国产女主播视频在线观看| 欧美成人一区二区三区在线播放| 亚洲欧美日韩偷拍色图| 久久东京热久久| 五月天日日操夜夜操| 亚洲欧美爆| 亚洲 欧美 制服 另类 自拍| 久热99999| 骚日日av| 欧美人体性爱互联网第一页婷婷日本| 亚洲色图A| 婷婷香网站| 素人美腿视频网站| 第四色色综合91| 热热热热日日漂亮永久永久国产日| 99热精品在线| 涩涩久久精品| 国产三级中文字幕粉嫩| 日韩欧美天天爽爽爽天天爽爽| 日韩情色视频| 亚洲综合113页| 男人的天堂日韩| 97香蕉网| 少妇久久久久| 午夜精品久久久| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 午夜视频好爽啊| 精品超碰色| 欧美熟妇人体| 欧美日韩免费专区在线| 偷窥自拍亚洲色图| 韩国毛片一区二区三区| 亚洲AV无码翔田千里网站| 91网站18禁| 91熟女在线| 夜夜夜爽www精品视频| 青青草国产一区二区三区| 天美传媒精品一区二区| 国产三级日产三级韩国三级| 伊人少妇久久久| 一区二区视频在看| 欧美成熟性爱精品| 亚洲制服欧美另类内射| 五月婷婷丁香| 超碰97网址| 超碰是碰在线观看| 黄色一区三区| 中文字幕精品一区欧美| 嗯嗯啊啊好疼| 屁股久久久久久| 伊人激情五月天一区二区| 九草在线大香蕉| 国产精品午夜精品| 99久久精品无码一区二区毛片免费| 熟妇乱伦一区二区| 日韩三级在线观看mp4| 亚洲欧洲第二视频在线观看色图| n1038 一二三区| 极品出轨视频网站| 91在线无码精品秘 软件| 亚洲欧美日韩中文播放| 国模一区二区三区| 丁香婷婷啪啪| 亚洲天堂无码| 毛片99-全集电影手机免费观看完整-B029AV| 97超碰磁| 97欧美色综合| 国产在线视频午夜精华在| 丁香六月婷婷综合| 国产91丝袜在线播放蜜月| 五月天丁香婷婷综合网站| 精品网站9999| 日韩午夜精品一区二区三区电影| 天天干18禁| 九九九九九九成人| 精品欧美老熟女一二区| 99re在线视频国产| 一区二区三区 丝袜 高跟 美腿| 伊人网青青| 韩国女主播青草福利视频| 高潮的A片激情扒开一区| 久9久9久9久9久9久9 | 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 欧亚 另类 久| 久久久久久国产无码精品| 97视频在线免费播放| 欧美日韩亚洲一区二区在线观看| 中文字幕91综合| 久久久久久国产无码精品| 超碰在线1234区| 国产高清无码一区三区二区| 亚洲素人综合| 久久久久久久久久久久黄色 | 好属操| 亚精品无码毛片一区二区三区| 日产操逼| 蜜臀va69| 国产农村一一级特黄毛片| 亚洲精品三区在线观看| 永久免费av无码网站国产app| 亚洲色婷婷久久久综合日本| 亚洲最大黄网| AV乱伦专区| 久久最新视频免费观看| 国产精品第一区第一页| AV色五月天| 操比国产| 丰满岳乱妇一区二区三区| 青草香蕉网| 国产肏屁眼视频| 美女丝袜激情小说| 精品一区96| 99re9这里只有精品| 日人妻视频91| 一区二区三区免费岛国片| 亚洲一卡二卡在线免费| 日本一区二区亚洲综合| 日本淫穴在线| 久久五月婷| 日韩av无码网站| 亚欧成人综合影院| 免费人成?大片在线播放| 日韩在线国产字幕| 欧美日韩不卡a片| 伊人黄色视频免费观看| 亚洲精品亚洲人成人网| 5252色欧美在线| 黑人精品成人一区二区三区| 中文字幕99999| 亚洲永久AV无码精品秋霞| 四虎视频在线观看| 日韩人妻无码不卡网站| 久久精品国产亚洲AV清纯| 日本黄色精品专区网站| 亚洲日韩97| 欧美色图亚洲激情| 天堂综合| 嗯嗯啊啊啊好爽| 日韩综合无码一区久久92| 亚洲国产成人福利在线观看| 天天操天天舔| 爱丝福利| 国产二区三区免费视频| 天美国产三级传媒| 殴美色网| 亚州精品人妻一二三区| 欧美不卡二区| 99久久无色码| 亚洲色婷婷久久91| 最新精品久久蜜桃 | 日本孕妇一区二区视频操逼免费看| 天天色综合影视网| 久久久久久加勒比| 99热99在线| julia高潮后不停追击中出| a网站免费观看| 99色在线观看| 草蕉影视亚洲无码| 澳门特级毛片免费观看| 国精综合一二三区影视| 日本久久久久久久久| 一区二区三区美女超清| 欧在线一二区| 99AV| 欧洲综合色图| 日韩在线一区二区| 日韩在线观看中文字幕视频| 国产精品网站免费| 日本 欧美 国产一区| 日韩性爱播放| 亚洲一区二区三区婷婷| 大香蕉乱级| 欧美日日网| 99精品网站| 97超碰欧美中文字幕| 欧美日韩丝袜| 天美传媒精品一区二区三区| 亚洲男人久久综合天堂| 国产少妇内射| 国产精品婬乱一级毛片彝族| 亚洲欧美综合网| 人人手机欧洲亚洲国产人妻| 久久精品一区二区| 超碰在线成人| 精品综合久久久久久97| 久久 国产精品 一区| 天天综合网1| 日韩不卡毛片Av免费高清| 日韩无码服务区| 日本 成 人 小说 电影 一区二区| 1204av韩国| 中文字幕精品免费一区二区| 深夜激情| 色 亚洲 91| 日韩中文字幕视频| 91色黑人少妇| 一区二区三区高清天码| 久极品在线观看| 久久熟女嫩草成人片免费| 园内精品自拍视频在线播放| 亚洲色狠| 欧美日韩狠狠爱| 91l欧美在线| 国产日韩精品一区二区三区| 99精品在线观看| 男男H黄动漫啪啪无遮挡网站| 啊啊啊啊啊好舒服视频| 日韩三四五区| 国产黄a三级三级三级av在线看| 国产乱伦视频污| 夜色91| 超碰欧美COM| 香蕉在线一区二区三区| 婷婷三区| 久久性生大片免费观看性| 小草av不卡亚洲二区| 色婷婷九月天天综合| 久久久成人免费av电影| 91四海无码日韩欧美| 超碰精品在线| www.亚洲成人一区| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 成人免费福利网站国产| 欧美日韩婷婷中文| 国产亚洲日本| 男人的天堂VA| 清纯唯美亚洲另类| 天天享受天天看| 二级久久网| 亚洲精品国产精品成人| 99在线精品观看视频中文 | 亚洲91射| 欧美天天弄| 欧美A√综合网| 试看60秒| 亚洲精品自拍| 人人操人人摸人| 殴美牲| 日本性爱少妇| 欧美人妻精品| 中文字幕AV片| 漂亮人妻被强中文字幕hd| 另类图片五月天| 中文字幕人妻资源在线| 清纯唯美亚洲综合| 亚洲欧美国产va在线播放频| 操婢日韩| 色综合加勒比四四季| 婷婷五月天无码 | 久久蜜色情在线视频xxx免费观看| 亚洲成a人在线观看久| 99热色这里只有精品| 久久色情| 亚州高清av| 久久精9| 久久本道| 国产视频一区二区在线| 国产成人五月天丁香花| 成人国产精品三级A片| 亚洲天堂 视频你懂的| 欧美三级免费伊人| 99re热| 欧美女同在线| 超碰97 线线 在现| 国产精品无码av| 国产白嫩精品久久| 十八禁视频一区二区| 欧美在线干| 天天影视网色欲色香| 久久久一区二区三区三州| 大香蕉操久久| 久久啊啊| 91福利网在线观看| 成人免费不卡在线视频| 久久九操在线观看| 性性欧美| 亚洲天堂 视频你懂的| 亚洲乱码精品一区二区| 婷婷综合网站| 青青草亚洲一区 | av九九| yazhououmeizongya| 亚欧性爱ab| 91青青在线| 影音先锋少妇| 欧美成人一区二区| 99热99色| 1204金沙人妻懂旧版免费| 日韩欧美蜜桃精品久久中文字幕久久| 日韩欧美女求操每天更新| www久久国产精品| 嫩草影院永久在线制服丝袜| 国产动漫操逼视频| 91超碰碰在线| 99热精品在线观看| 97在线无精品| 中文字幕一区二区视频在线观看| 在线综合 亚洲 欧美中文字幕| 亚洲成人一二三区| www.国产高潮精品| 亚洲熟妇A V黑人| 日韩99神马视频片| AA丁香综合激情| 大香蕉日亚洲日本亚大 | 97天天做| 日韩AC| 九九九九免费高| 亚洲综合20p| chaopen97久久| 日韩无码一区二区三区| 精品一区二区三区蜜桃臀赵总 | 欧美综合狠| 日韩av影片在线观看| 91精品少妇搡搡搡| 91九色首页| 国精综合一二三区影视| www.91理论| 天天干天天日天天射黄色大片 | 色色婷| 丰满人妻一区二区三区四区| 亚洲制服欧美另类内射| 黄色交缠性感爆操91国产精品免费一区二区三区| 夜草网站| 乱老熟女一区二区三区| 国产内射爽爽大片| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 久久九九97| 欧美操逼熟女| 欧美se综合| 精品国产嫩穴视频| 狠狠色狠狠色狠狠五月| 人人超碰在线观看黄| 日韩国产不卡在线视频| 熟妇无码视频三区| 九九九午夜| 操逼操逼逼操操逼91| 亚洲欧洲久久天堂| 另类小说综合网| 欧美综合色综合| 久久久亚洲精品电影免费看| 91人妻做a观看视频| 人人澡人人弄| 国产大学生口爆吞精合集| 91无码人妻精品一区二区三区蜜桃| 亚洲中文国际强奸字幕| 午夜精品久久久| 日本 成 人 小说 电影 一区二区| 青草一区二区| 美女丝袜激情小说| 嗯阿好爽好紧| 日韩啪啪网| 国产精品久久久久久久久久久久久久| 玖玖爱一区在线| 国产一区在线观看无码AV | 2024人人操人人摸| 免费观看国产小粉嫩喷水精品午| 日本一二区不卡| 丝袜AV一二三区| 中文字幕亚韩| 麻豆AV一区二区天美传媒| 长长久久免费视频| 成年人黄色视频免费| 夜夜嗨一区| 啊啊啊要高潮了| 极品白嫩美女白浆成人福利在线看| 97综合久第一页| 久热免费视频| 强奸xx国产| 中文字幕丰满子伦无码专区在线视频最新| 97玖玖超碰| 午夜福利免费福利视频| 亚洲国产91精品一区二区久久| 青青伊人加勒比海| 丁香婷婷激情五月天无毒不卡| 欧美综合自拍成人自拍第二十页| 日日操免费视频| 亚洲色婷婷久久久综合日本| 99黄页网站| av大香蕉网站| www色婷婷| 熟女人妻一区二区三区| 日逼国产| 亚洲五码一区二区三区| 天天日天天操天天射河南省| 东京热毛片177b2viP| 激情综合av| 97免费视频网| 久久麻豆一区二区| 可以免费观看的日韩av毛片| 高清无码在线播放网站| 手机在线大香蕉| 中文字幕诱惑制服人妻丝袜美丝袜美| 亚av顶级裸体一区二区三区四区五区 | 欧美视频在线视频免费va| 国产黄色av大片网站| 大香蕉免费乱伦视频| 国产日本久久免费精品| 国产精品秘 福利姬在线观看| 一区二区三区激情在线观看| 日韩九区| 超碰成人公开| 五月天我淫我色av| 狠日操| 日韩精品资源专区二区| 欧美aa一级片| 日韩性爱啪啪视频| 老熟女乱子伦中文字幕一区二区| 国产粉嫩蜜臀av一区二区三区| 亚洲性网| 我想要 啊 啊 啊| 九九九九一级| 青青草在线视频美女| 一区二区三区麻豆| 欧美九九九| 国产热av| 天天插网| 美女国产一区二区久久| 免费看黄视频亚洲网站| 中文字幕 国产区| 亚洲情色五月天 | 99在线无码精品秘 入口黑人 | 啊啊啊慢点| 2024年最新色情网站在线观看| 久久久91| 一区二区三| 18禁精品网站在线看| 九九色婷婷| 精品视频97| 91欧| 久久青青草原免费视频| 成人性爱av| 九色PORNY9l原创自拍| 91九色精品熟女内射| 国产精品久久发布| 欧美日韩淫加| 9美女超碰在线免费观看| 日韩av在线精品观看| 激情视屏国产乱伦强奸| 国产精品自拍欧美在线| 亚洲第一在线视频| 日han少妇无码| 国产亚洲日本| 日韩电影在线观看网址| 日本黄 R色 成 人网站| 天天日天天操VV| 亚洲综合 欧美| 久久AV无码AV| 婷婷九月| 大香蕉中文aV在线| 91天堂| 日韩精品资源专区二区| 开心五月激情网| 啊啊啊啊好大好硬啊啊啊啊啊| 蜜臀一二三区| 操碰97| 久久久久免费看少妇A片特黄| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 成人三级片无码| 国产精品网站www| 丰满人妻一区二区中文| 欧色网址| 激情看片网站| 欧美淫乱视频| 免费无码婬片AAAA片直播色戒| ..日韩av毛片精品久久久| 亚洲国产一区二区三区在线| 久久精品店| 天天插天天射| 欧美91网站| 久久久亚洲Av| 欧美少妇高潮久久91| 久久久精精精| 超碰免费在线| 2020中文字幕在线观看| 婷婷尹人大香蕉免费| 992视频一区| 亚洲性爱高潮影院| 99在线啪| 久久精品 六十路 熟女 欧美| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 亚洲欧美天| 黄色高清无码无码破解免费暗网| 无码人妻丰满熟妇区毛片| 色网色网色网色网色网色| 你想操日本小逼吗| 亚洲男人天堂视频| 伊人五月天婷婷| SS久久| 东北丰满熟女国产一区| 久久久久国产亚洲一区欧美色图日韩| 久久久久亚洲| 国产激情久久久| 久久综合av| 手机看av网站在线看| 0755午夜福利视频| 天美国产精品| 九九精品99| 日韩紧密久久| www.99中文字幕| 桑老女人九区| 美日韩一卡二卡三卡免费人妻精品| 中文字幕在线免费观看2| 成人五月天色网| 日韩性爱小视频在线观看 | 精品无码一区二区| 94色色电影网| 久久亚洲不卡一区二区三区| 国产91 丝袜在线播放00-百度| 香蕉99秘 精品一区丁香| 国语精品av| 91人妻Pr| 欧美一级黄色免费专区| 午夜AV污污污| 一级A片女人高潮叫床| 久久久久久久久久久999| 欧日a| 欧美性爱第1 页| 久久精品欧美一区蜜桃| 97免费在线观看| 97超级欧美| 婷婷色导航| 99re视频在线播放青草| 裸模AV女优| 久久天天艹| 91情色在线| 亚洲第一页色| 一区二区影院| 人人人干干人人干| 激情文学 国产一二三aV| 亚欧Av| 免费看黄片现成| 亚洲一区二区av| 精品人妻一区二区三区视频| 操逼视频亚洲| 久久婷婷电影网| 精品少妇一区二区| 久久五月份| 国产精品精品系列在线观看| 九九热只有精品| 欧美亚洲高清不卡| 91国产丝袜足交精品视频| 国产高清成人传媒影视| 一区二区三区高清天码| 91色图| 亚洲高清欧美总合| 久久精品成人一区二区三区蜜臀| 欧美天天谢综合网| 很很干很很操| 欧美一级色| 久久鲁干| 国产精品无码在线| 亚洲国产成人福利在线观看| 天天看精品动漫视频一区| 操一对老熟妇爽上天视频| 97色在线观看| 黄色AAAAAAAAAAA大片| 精品无人区麻豆乱码1区2区图片 | 国产精品盗摄 偷窥盗摄| 欧美高清色| 蜜臀AV成人精品蜜臀| 精精夜夜| 99精品丰满人妻无| 国产熟女少妇一区| 一区二区日韩欧美久久| 九九99久久| 亚洲日本激情| 加勒比海人人操超碰在线| 影音资源男人日韩| 九九久久久九九| 色欲日韩欧美在线一区| 日韩中文字墓| 美女上床网站| 91欧| 超清中文乱码字幕| 日本高清一本二本免费不卡| 欧美在线|亚洲| 亚洲日韩97| www男人天堂| 欧洲小说色图视频另类| 情侣开房子拍 日韩无码 女的很漂亮| 红杏大香蕉| 天天日日舔舔| 国产久久日韩网站导航| 五月天激情国产综合婷婷婷| 狼狼色丁香久久婷婷综合五月| 久久综合国产精品国产| 91性色| 九久久九九久视频| 网友自拍第1页| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 免看60秒涩涩视频| 国产精品视频在线播放| 亚洲最大的黄色电影网站。 | 国产黄色剧情影片麻豆免费播放| 强奸乱伦免费网站| 国产精品激情久久久久久久| 亚洲熟女av日韩熟女| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 91丨九色丨国产丨人妻在线| 人妻三级在线中文字幕| 深夜国产福利| 久操国产在线| 午夜福利1区2区3区| 老熟女91| 可以在线观看的黄色网址| 午夜福利视频在线一区| 国产欧美伊人| 午夜综合在线| 天天操天天日天天干| 欧美综合在线91| 久久久无码精品人妻二区| 中文字幕三四区| 国产人伦a片信息免费片| 91色婷婷综合久久中文字幕二区| 91精品无码人妻系列| 五月丁香在线| 国产情色第一第二页在线观看| 久久久久久久| 精品人妻av在线播放| 逼逼逼逼操操操操操操操操操午夜剧场| 人人操人人操人人人操| 婷婷大香蕉| 狼天天狼天天大香蕉| 国产第二页| 成人小说另类在线| 99ri在线视频| 欧美色色人| 老鸭窝在线视频播放| 亚洲黄片免费在线播放| 国产激情综合五月久久| 91狠| 亚州色图欧美色图| 日韩97P| 欧美一区二区三区互相| 99热综合| 天天在线91| 97手机日韩| 中国探花熟女| 国产精品久久久久久久久久久久久久久久| 欧美第一页| 韩国手机不卡无码三级视频| 日日插夜夜| 欧美一区二区三区日韩| 精久久久91| 99re在线视频这里只有精品 | 日韩少妇在线视频| 亚洲日韩精品久久久久一区壹牛| 日韩在线一区高清在线| 97摸视频| 久久婷婷国产一区二区色| 久久久久久91香蕉国产| 色臀av| yellow网站免费观看日韩高清无码| 久久精品国产亚洲AV成人直播| 26uuu国产| 骚熟女AV网| 一区三区啪啪| 麻豆乱码久久精| 日夜尻逼网| 久操网无码在线| 免费久久9999| 久久国产精品m码| 中文字幕一区二区三区四区在线视频| 日韩女优中文字幕| 欧美男人天堂| 韩国一级做A片免费的| 亚洲九九爱| 一区二区乱码福利| 久久发布国产伦子伦精品| 国产精品扒开腿做爽爽爽视频| 国产一级内射无挡观看| 亚洲五月天激情| 91爱看| 在线视频免费播放一区| 天天综合网~91入口| 欧美性爱一区二区| 国产无套粉嫩白浆在| 熟女中出视频| 日本免费人成视频播放120秒| 啊啊啊啊啊啊啊啊啊啊在线观看| 无码丰满熟妇一区二区浪潮AV| 欧美日不卡| WWW.操逼.COM| 99只有精品| 精品九九九| www.婷婷六月天| 97超碰久久| 九九拍拍精品视频在线播放| 9久久久久| 超碰 另类 欧美 | 97综合激情| 国产亚洲精品第一最新| 熟人人妻少妇精品久久| 91国产精品熟女| 麻豆视频一区二区| 久久综合精品一区二区三区| AAAAAAAAA黄片| 午夜福利合集| 99999精品视频| 国产成人手机视频激情| 久久久性爱视频| 日本性感人妻91| 精品网站9999| 国产亚洲精品玖玖玖在线观看| 综合天天网| 岛国福利在线精品播放| 欧美亚男人的天堂| 99久久久er直播网址| 亚洲交性| 蜜臀av一区二区三区免费观看| 欧美人妖内射| 欧中日成人免费影视| 日本羞羞的视频在线播放| www四虎| 翔田千里A片一区二区| 超碰午夜| 久久色激情一区二区三区| 99在线无码精品秘 入口黑人| 精品国产国产AV| 欧美在线视频99| 久久老女人| 九一综合精品视品av| 美国一区二区免费视频| 操国产逼| 欧美欧美少妇| 91久久精品国产| 18禁超污无遮挡无码免费网| 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 日韩钢筋无码高清啾啾啾| 欧美性爱18观看| 密臀视频一区二区三区| 亚洲古典另类欧美在线| 亚州五月| 国产原创精品| 婷婷99| 亚洲精品一二牛牛| 一区二区三区成人| 天堂av2019| 中文色综合| 中文字幕丰满子伦无码专区在线视频最新| 亚州再线| 天天操天天舔| 精品中文字幕第一页| 日日夜夜精品视频| 91综合国产精品| 国产精品小视频一区二区三区| 成人av影院在线观看| 精品人妻一区二区三区在| 大香蕉一人在线| 久操不卡视频| 日韩一性一交一A片俄罗斯| 成人av性爱电影在线观看| 免费超碰97久久| 啊啊啊啊操死我了| 亚洲大色堂| 五月天婷婷综合| 性videos欧美熟妇hdx| 国产日本一区二区三区蜜臀在线观看| 狠狠亚洲| 欧美色图成人网一区二区| 九九热AV| 97久久视频| 欧美亚洲一级在线观看| 无码操逼视频一下| 理论久久婷婷网8| 麻豆影音天美视频| 久久婷婷五月综合| 九九色逼| 小视频玖玖| 成人精品一区二区91毛片不卡| 偷拍三区| 91春色| 操一操摸一摸| 黑人精品XXX一区一二区| 青娱乐999| 日韩操逼性鲍| 久久成人国产| 影音先锋日本一区二区| 超碰97伊人| 狠色婷婷久久一区二区三区_| 中文字幕人乱码中文字的预防方法 | 国产熟女乱论| 国模精品一区二区三区苹果色戒| 操逼日韩无码| 欧美少妇性爱网站| 日韩欧美大片免费高清啪啪| 亚洲熟女乱色一区二区三区 | 91天天综合网,天天综合网| 91久久18禁| 啊嗯嗯啊好大好爽| 亚洲精品欧洲精品| 国产亚洲精品美女| 亚洲操操操无码| 啊啊啊啊啊啊啊啊啊在线观看| 中文字幕少妇色 | 欧美天天弄| 欧美色图20P| 欧美综合自拍亚洲综合图| 五月天久久人妻| 亚洲av性爱电影| 国产不卡免费在线视频| 亚洲精品尤物yw在线影院| 国产黄色剧情影片麻豆免费播放| 黄色激情电影在线观看| 日本熟妇人妻中出视频| 免费观看欧美日韩操逼视频| 亚洲精品久久久久久久蜜桃臀| 夜夜影视四色| 激激五月| 亚洲人码13| 外站AV在线| 激情小说亚洲| 国产91福利小视频在线观看| 草草网站影院白丝内射| 国产11页| 久久免费老司机精品| 啊啊啊啊二区好大| 大香蕉2017| 大香蕉草草| 亚洲激情综合另类男同| 99热精品在线观看| 亚洲少妇激情视频| 欧美亚州色的图| 国产精品片| 98人妻精品一区二区色欲| 国产一区二区啪啪视频| 97香蕉人人乳| 久热热| 国产午夜精品理论片a大结局| 日韩欧美亚洲自拍偷拍| 久久精品国产免费观看99| 欧美黄色大香蕉一区二区| 国产性刺激| 粉嫩小泬久久久一区二区| 欧洲亚洲天堂精品| 伊人影院日本| 女同女同恋久久级三级| 射 色综合| 久久爱97| 亚洲男人综合| 爽爽淫人网| 日韩传媒在线| 97天天插| 91午夜无码| 久久综合日韩亚洲欧美| 久久熟女久| 超清福利精品视频在线| 亚洲综合色男人网| 91热热色| 亚洲第一在线视频| 国产精品久久久久999| 久久精品国产亚洲AV高清演员表| 伊人综合色网| 国产97免费视频| 啪啪啪东京| 久久伊人大香蕉| 亚洲免费日韩在线一区二区| 青青草日韩免费观看高清在线| 无码粉嫩白虎一线天b区| 日韩免费簧片| 大香蕉黄色一区| 中文字幕天天天天天| 久久9999| 精品国产Av无码久久久亚洲| 久操综合在线| 日韩 女同 综合| 中文字幕亚洲永久精品| 丁香五月综合| 99中文字幕| 亚洲精品一区二区三区在线播放| 91蜜臀熟女| 日本不卡五区| 国产在线不卡导航| 九九九九九九综合| 八戒无码国产午夜福利| 日韩国产十八禁| 曰韩操B| 999久久久久久久精| 久久精品成人| 一区二区三区黄色片a| 亚洲天堂人人妻| 亚洲精品影视老司机| 97欧美色综合| 免费一级毛片在线视频观看| 天堂精品小草| 91美女网站| 欧美日韩999| 日韩精品国模| 久久精品性| 国产97在线 | 亚洲| 天天射网| 国产精品 久久久精品一牛| 久偷拍欧美日韩三区| 日韩激情电影中文字幕| 久久超碰大香蕉| 黄色片A级一区二区三区| 国产五码丝袜屁眼| 色牛牛AV| 蜜桃臀久久| 顶级丝袜熟女一区二区三区 | 国产精品久久伊人| 99re6国产精品99re| 69少妇一区二区| 搡老熟女国产1000部| 精品亚洲国产成人精品| 日本亚欧爱爱| www四虎| 欧美顶级黄色大片免费| 中文字幕乱妇免费视频| 国产视频一区二区三区久久亚洲天堂| 日韩人妻一二三区视频| 日韩精品操少妇| 成人国产精品三级A片| 亚洲精品97| 日产123区精品免费观看| 伊人久久大香线蕉无码| 東南亚性呦成人伦理资源在线视频| 精品国产网站| 欧美性爱在线无码| 色偷偷2020免费视频播放| 少妇 综合| A级片一区| 9 7超碰在线免费观看| 欧美一级做a爰片免费视频| 天天看天天日| 成人网欧美风情| 欧美日日操| 美女久久久久久久久久久| 天天干人妻| 欧美系列在线一区二区| 日韩欧美日韩| 精品一啪| 精品人妻1区| 亚洲精品色| 日韩国产乱子伦App| 欧美写真视频一区| 日本天天人人狠狠在线日美女| 大香蕉综合网| av操操不卡| 五月丁香啪啪网| 女性91网站| chaopen97久久| 成人精品视频| 久久色情| 国产第25页在线观看| 免费久久一级毛片大黄| 免费视频一二三区| 精品成人久久久人人亚洲| 日日干夜夜干| 日韩av影片在线观看| 搞中出久久| 99热在线只有精品| 欧美视频激情久久久久久| 欧亚乱色熟一区二区三四区| 18禁美女裸体无遮挡啪啪| a片自拍直播视频| 综合久久9| 亚洲性少妇| 日本一天色道久久久精品视频| 亚州操操穴网| 无码操逼网| 92久久| 日日做夜狠狠爱欧美黑人| 婷婷综合网| 久综合国内精品自在自线| 欧美乱伦专区| 啊啊在线| 黑人精品欧美一区二区蜜桃| 丝袜色综合| 韩国嫰模上门援交视频| 亚洲黄色网址| 精品国产国产AV| 东北女人操比视频| 久9久精品视频| 色av中文字| 中文字幕二区日韩天堂| 999日韩中文精品观看视频。| 精品精品精品| 中文啪啪视频| 成人免费福利网站国产| 亚洲人妻中文高清| 秋霞蝌科网日本一区| 日韩av一级黄片| 欧美A片中文字幕| 中文字幕日韩人妻视频| 一区二区不卡视| 亚洲久草AV色图| 人妻爽爽啪视频| 亚洲 欧美 中文 日韩超碰 | 91男人综合| 青青草大香蕉在线视频| 91成人社区|