免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

Java大廠(chǎng)面試高頻考點(diǎn)解析:集合、JVM、并發(fā)、MySQL與分布式

Java大廠(chǎng)面試高頻考點(diǎn)解析:集合、JVM、并發(fā)、MySQL與分布式 每到二月底技術(shù)社群里問(wèn)得最多的就不再是什么框架原理了而是一句“金三銀四沖大廠(chǎng)Java面試題現(xiàn)在該看什么”。我在面試官的位置上坐過(guò)也在候選人那一側(cè)被面過(guò)幾十輪給一個(gè)比較實(shí)在的結(jié)論大廠(chǎng)面試再怎么換風(fēng)格Java基礎(chǔ)、并發(fā)、JVM、Spring、數(shù)據(jù)存儲(chǔ)、分布式這六個(gè)板塊始終是繞不開(kāi)的主線(xiàn)。這篇文章不搞那種幾百題的流水賬而是把我自己印象里出現(xiàn)頻率最高、也最容易翻車(chē)的幾類(lèi) Java 面試題連同面試官的追問(wèn)邏輯和參考回答一起拆開(kāi)講。按這條線(xiàn)往下過(guò)不敢說(shuō)穩(wěn)過(guò)但至少不會(huì)踩空。1. Java基礎(chǔ)題看似簡(jiǎn)單卻最容易翻車(chē)的考點(diǎn)1.1 從“”到equals再到hashCode一條線(xiàn)理清楚基礎(chǔ)題在大廠(chǎng)面試?yán)飶膩?lái)不缺席但很多人恰恰掛在最簡(jiǎn)單的題目上。先看這個(gè)經(jīng)典問(wèn)題“和equals有什么區(qū)別”如果作用于基本數(shù)據(jù)類(lèi)型比較的是值本身如果作用于引用類(lèi)型比較的是兩個(gè)引用是否指向同一個(gè)對(duì)象也就是內(nèi)存地址。而equals在沒(méi)有被重寫(xiě)的情況下行為等同于但通常我們會(huì)重寫(xiě)它來(lái)定義“邏輯相等”。比如兩個(gè)User對(duì)象只要身份證號(hào)相同就算同一個(gè)人這時(shí)候就應(yīng)該重寫(xiě)equals而不是直接比較地址。面試官問(wèn)完這一個(gè)十有八九會(huì)接一句“那equals和hashCode是什么關(guān)系”這里有個(gè)硬規(guī)矩重寫(xiě)equals就必須重寫(xiě)hashCode而且必須保證如果a.equals(b)為 true那么a.hashCode()必須等于b.hashCode()。原因其實(shí)很實(shí)際HashMap這類(lèi)集合是靠hashCode定位桶再用equals去比較桶內(nèi)元素。如果你只重寫(xiě)equals不重寫(xiě)hashCode兩個(gè)邏輯上相等的 key 會(huì)落在不同的桶里HashMap就會(huì)存進(jìn)去兩份這顯然就破壞了 Map 的語(yǔ)義。順著這條線(xiàn)面試官還會(huì)繼續(xù)加碼“String 的equals和hashCode是怎么實(shí)現(xiàn)的String 的不變性有什么好處”String 類(lèi)內(nèi)部用一個(gè)char數(shù)組或者byte數(shù)組存字符它的equals先比較引用、再比較長(zhǎng)度、最后逐個(gè)字符比較。hashCode則是s[0]*31^(n-1) s[1]*31^(n-2) ...這種散列公式用 31 是因?yàn)樗且粋€(gè)奇質(zhì)數(shù)在乘法運(yùn)算里沖突概率相對(duì)低而且 JVM 對(duì)31 * i有優(yōu)化編譯器會(huì)把它轉(zhuǎn)成(i 5) - i位運(yùn)算比乘法快。String 的不變性讓它可以安全地被字符串常量池復(fù)用也保證了作為 HashMap 的 key 時(shí)哈希值不會(huì)變。這個(gè)問(wèn)題的意義不在背答案而在考察你有沒(méi)有把“數(shù)據(jù)結(jié)構(gòu)”和“語(yǔ)言特性”聯(lián)系起來(lái)思考的習(xí)慣。1.2 HashMap 的底層結(jié)構(gòu)、擴(kuò)容機(jī)制與并發(fā)隱患HashMap 是 Java 面試?yán)锂?dāng)之無(wú)愧的“題王”。它的回答版本也在演進(jìn)JDK 7 及以前是數(shù)組加鏈表JDK 8 開(kāi)始變成數(shù)組加鏈表加紅黑樹(shù)。默認(rèn)初始容量是 16負(fù)載因子是 0.75。什么意思就是當(dāng)元素個(gè)數(shù)超過(guò)16 * 0.75 12時(shí)會(huì)觸發(fā)擴(kuò)容容量翻倍到 32。為什么負(fù)載因子取 0.75 而不是 1 或者 0.5這是空間和時(shí)間的折中。負(fù)載因子越高空間利用率越高但哈希沖突概率變大鏈表長(zhǎng)度增加查詢(xún)效率下降負(fù)載因子太低則空間浪費(fèi)太多。0.75 是官方在大量測(cè)試后給的經(jīng)驗(yàn)值。鏈表轉(zhuǎn)紅黑樹(shù)的閾值是 8樹(shù)轉(zhuǎn)回鏈表的閾值是 6之所以不是同一個(gè)數(shù)是為了避免元素在邊界來(lái)回浮動(dòng)時(shí)頻繁轉(zhuǎn)換。為什么閾值取 8本質(zhì)上是一個(gè)概率問(wèn)題在隨機(jī)哈希函數(shù)下鏈表節(jié)點(diǎn)數(shù)服從泊松分布負(fù)載因子 0.75 時(shí)桶中鏈表長(zhǎng)度達(dá)到 8 的概率已經(jīng)低于千萬(wàn)分之一所以 8 是一個(gè)“幾乎不會(huì)出現(xiàn)但出現(xiàn)了就說(shuō)明哈希分布極差”的信號(hào)。HashMap 的線(xiàn)程不安全是最常被追問(wèn)的。JDK 7 里并發(fā) put 可能導(dǎo)致擴(kuò)容時(shí)鏈表形成環(huán)一旦 get 那個(gè) key 就會(huì)死循環(huán)CPU 直接飆滿(mǎn)。JDK 8 把頭插法改成了尾插法在一定程度上避免了環(huán)的產(chǎn)生但并發(fā)場(chǎng)景下依然有數(shù)據(jù)覆蓋問(wèn)題兩個(gè)線(xiàn)程同時(shí)判斷某個(gè) key 不存在同時(shí)插入后寫(xiě)覆蓋先寫(xiě)還有一種情況是 put 過(guò)程中檢查到容量不夠多個(gè)線(xiàn)程同時(shí)擴(kuò)容導(dǎo)致數(shù)據(jù)丟失。所以并發(fā)場(chǎng)景不要用 HashMap要用ConcurrentHashMap。JDK 8 的 ConcurrentHashMap 放棄了 JDK 7 的分段鎖設(shè)計(jì)改為 CAS 加 synchronized 鎖住數(shù)組的單個(gè)槽位粒度更細(xì)并發(fā)度更高。我自己面試別人的時(shí)候通常會(huì)追問(wèn)一句“為什么 JDK 8 要把擴(kuò)容后重新散列的算法改成高低位拆分”。JDK 7 擴(kuò)容是對(duì)每個(gè)元素重新計(jì)算 hash 再確定新位置JDK 8 優(yōu)化成根據(jù) hash 值新增的那一位是 0 還是 1元素要么留在原索引要么移動(dòng)到“原索引加舊容量”的位置。這樣做既省去了重新計(jì)算 hash 的開(kāi)銷(xiāo)也減少了元素移動(dòng)次數(shù)。這個(gè)問(wèn)題能答上來(lái)說(shuō)明你確實(shí)讀過(guò)源碼而不是只看面經(jīng)。2. JVM 與內(nèi)存模型拉開(kāi)差距的核心區(qū)2.1 運(yùn)行時(shí)數(shù)據(jù)區(qū)域與對(duì)象創(chuàng)建機(jī)制JVM 這塊可以說(shuō)是大廠(chǎng)面試的分水嶺。背完“程序計(jì)數(shù)器、虛擬機(jī)棧、本地方法棧、堆、方法區(qū)”這五個(gè)名字只是入門(mén)關(guān)鍵是能講清楚每個(gè)區(qū)域里到底發(fā)生了什么。虛擬機(jī)棧管的是方法調(diào)用的過(guò)程。每次調(diào)用一個(gè)方法JVM 就會(huì)創(chuàng)建一個(gè)棧幀棧幀里有局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法出口。方法嵌套調(diào)用的深度是有上限的線(xiàn)程棧深度超過(guò)限制就會(huì)拋StackOverflowError。堆則是一切對(duì)象實(shí)例和數(shù)組的分配場(chǎng)所也是垃圾回收的主戰(zhàn)場(chǎng)。方法區(qū)在 JDK 8 里被移到了元空間不再使用虛擬機(jī)內(nèi)存而是用本地內(nèi)存這樣設(shè)計(jì)主要是為了避免永久代的OutOfMemoryError因?yàn)樵臻g默認(rèn)只受本機(jī)可用內(nèi)存限制并且字符串常量池在 JDK 7 時(shí)就已經(jīng)移到了堆里。對(duì)象的創(chuàng)建過(guò)程也經(jīng)常被連環(huán)追問(wèn)類(lèi)加載檢查、分配內(nèi)存、初始化零值、設(shè)置對(duì)象頭、執(zhí)行構(gòu)造方法。其中分配內(nèi)存那一步指針碰撞和空閑列表分別對(duì)應(yīng)“堆內(nèi)存規(guī)整”和“堆內(nèi)存不規(guī)整”兩種情況。如果是并發(fā)創(chuàng)建對(duì)象JVM 還需要解決線(xiàn)程安全問(wèn)題主流做法是 CAS 加失敗重試或者使用線(xiàn)程本地分配緩沖TLAB。能聊到 TLAB 的候選人一般基礎(chǔ)就不會(huì)太差。2.2 垃圾回收算法與主流收集器垃圾回收問(wèn)的是什么我認(rèn)為核心就兩個(gè)一是怎么判定對(duì)象已死二是怎么把垃圾高效清掉。判定對(duì)象已死主流答案是基于可達(dá)性分析。從 GC Roots 出發(fā)遍歷引用鏈不能被到達(dá)的對(duì)象就可以被回收。GC Roots 包括虛擬機(jī)棧中引用的對(duì)象、方法區(qū)中靜態(tài)屬性引用的對(duì)象、常量引用的對(duì)象、本地方法棧中 JNI 引用的對(duì)象等。這里有個(gè)經(jīng)典坑點(diǎn)兩個(gè)對(duì)象互相引用但都沒(méi)有被外部引用可達(dá)性分析依然能判定它們已死而引用計(jì)數(shù)法做不到所以現(xiàn)代主流的 JVM 都采用可達(dá)性分析。順帶一提面試官很可能繼續(xù)問(wèn)“強(qiáng)引用、軟引用、弱引用、虛引用的區(qū)別”軟引用在內(nèi)存不足時(shí)會(huì)被回收弱引用在下一次 GC 時(shí)必被回收虛引用完全不影響生命周期只用于對(duì)象回收后的通知?;厥账惴ɡ飿?biāo)記-清除會(huì)產(chǎn)生大量碎片標(biāo)記-復(fù)制要浪費(fèi)一半空間標(biāo)記-整理要移動(dòng)對(duì)象。現(xiàn)代的收集器基本都是分代設(shè)計(jì)新生代對(duì)象存活率低適合復(fù)制算法老年代對(duì)象存活率高適合標(biāo)記-整理或者標(biāo)記-清除。CMS 是第一款并發(fā)收集器它的初衷是減少停頓但犧牲了 CPU 資源并且會(huì)產(chǎn)生浮動(dòng)垃圾最后還因?yàn)闊o(wú)法處理碎片化問(wèn)題在 JDK 9 里被標(biāo)記為廢棄。G1 把堆劃分成一個(gè)個(gè) Region可以做到可預(yù)測(cè)的停頓時(shí)間它的核心思路是維護(hù)一個(gè)優(yōu)先級(jí)列表回收價(jià)值最大的 Region 優(yōu)先。再往后就是 ZGC停頓時(shí)間控制在 10 毫秒以?xún)?nèi)但越是新東西面試?yán)飭?wèn)到深度的概率就越低因?yàn)榇蠖鄶?shù)人沒(méi)有線(xiàn)上壓測(cè)經(jīng)驗(yàn)?zāi)艽鸪觥癎1 的 Region 結(jié)構(gòu)、Mixed GC、Remembered Set”已經(jīng)足夠過(guò)關(guān)。2.3 線(xiàn)上 OOM 排查的實(shí)戰(zhàn)套路大廠(chǎng)面試基本不滿(mǎn)足于讓你背概念經(jīng)常會(huì)把問(wèn)題包裝成場(chǎng)景“線(xiàn)上突然 OOM你怎么處理”這類(lèi)問(wèn)題沒(méi)有唯一答案但有一套標(biāo)準(zhǔn)動(dòng)作。先看報(bào)錯(cuò)信息是Java heap space還是Metaspace還是Unable to create new native thread定位是哪塊區(qū)域出了問(wèn)題。然后用jps找到進(jìn)程號(hào)jstat -gcutil看各代的使用率和 GC 頻率jmap -dump:formatb,fileheap.hprof導(dǎo)出堆快照再用 MAT 或者 JProfiler 分析。分析的時(shí)候先看支配樹(shù)找到占用內(nèi)存最大的那個(gè)對(duì)象再看引用鏈定位到業(yè)務(wù)代碼的哪一行。如果是內(nèi)存泄漏重點(diǎn)關(guān)注是否有全局緩存無(wú)限增長(zhǎng)、數(shù)據(jù)庫(kù)連接關(guān)閉失敗、IO 流未釋放、ThreadLocal 沒(méi)有 remove。如果是內(nèi)存溢出而非泄漏一般是大促流量打上來(lái)導(dǎo)致對(duì)象瞬間暴增這種時(shí)候更常用的手段是調(diào)整堆參數(shù)、增加機(jī)器、優(yōu)化批量查詢(xún)邏輯。我記得有一次真實(shí)排查一個(gè)定時(shí)任務(wù)每天凌晨跑批數(shù)據(jù)量增長(zhǎng)后頻繁 Full GC每次 Full GC 后老年代還是很快被打滿(mǎn)。用jmap看堆發(fā)現(xiàn)一個(gè)ArrayList里存了幾百萬(wàn)個(gè)LogRecord對(duì)象。根因是批量處理失敗后的重試邏輯里沒(méi)有分批重試時(shí)把失敗批次和積壓數(shù)據(jù)全部加載進(jìn)內(nèi)存再處理。最后改成游標(biāo)式分批加載同時(shí)限制最大重試批次大小問(wèn)題就消失了。這類(lèi)經(jīng)驗(yàn)在面試?yán)镏v出來(lái)遠(yuǎn)比背誦參數(shù)列表有說(shuō)服力。3. 并發(fā)編程不只是會(huì)用鎖而是理解鎖3.1 volatile 與 synchronized 的底層運(yùn)作機(jī)制并發(fā)這塊是三到五年經(jīng)驗(yàn)的 Java 工程師最常被深挖的地方。先來(lái)看最基礎(chǔ)也最關(guān)鍵的一道題“volatile 和 synchronized 有什么區(qū)別”volatile 有兩個(gè)語(yǔ)義保證可見(jiàn)性和禁止指令重排序但它不保證原子性??梢?jiàn)性靠的是內(nèi)存屏障加緩存一致性協(xié)議一個(gè)線(xiàn)程修改了 volatile 變量后會(huì)強(qiáng)制將修改寫(xiě)回主內(nèi)存并讓其他線(xiàn)程中該變量的緩存行失效。禁止指令重排序則是在讀寫(xiě) volatile 變量的地方插入內(nèi)存屏障防止編譯器和 CPU 對(duì)指令進(jìn)行亂序優(yōu)化。典型的應(yīng)用場(chǎng)景就是雙重檢查鎖單例模式中的instance字段沒(méi)有 volatile 的話(huà)可能出現(xiàn)一個(gè)線(xiàn)程拿到半初始化對(duì)象的問(wèn)題原因在于“分配內(nèi)存并設(shè)置引用”和“調(diào)用構(gòu)造方法初始化對(duì)象”這兩個(gè)步驟可能被重排序。synchronized 則是對(duì)一段代碼塊或者一個(gè)方法加鎖。它從 JDK 6 開(kāi)始做了大量?jī)?yōu)化鎖的狀態(tài)從無(wú)鎖到偏向鎖、輕量級(jí)鎖、重量級(jí)鎖是一個(gè)逐漸膨脹的過(guò)程。偏向鎖的意思是“這個(gè)鎖大概率只被一個(gè)線(xiàn)程訪(fǎng)問(wèn)”于是就在對(duì)象頭里記錄持有者的線(xiàn)程 ID省掉 CAS一旦有其他線(xiàn)程競(jìng)爭(zhēng)就升級(jí)成輕量級(jí)鎖通過(guò) CAS 在棧幀中記錄鎖記錄的地址去競(jìng)爭(zhēng)競(jìng)爭(zhēng)激烈時(shí)升級(jí)成重量級(jí)鎖未獲得鎖的線(xiàn)程進(jìn)入阻塞隊(duì)列涉及操作系統(tǒng)用戶(hù)態(tài)和內(nèi)核態(tài)切換代價(jià)最大?,F(xiàn)在的 JDK 版本已經(jīng)逐步廢棄了偏向鎖但理解這種演變過(guò)程仍然很重要因?yàn)樗w現(xiàn)了 JVM 的一個(gè)核心設(shè)計(jì)思路針對(duì)“鎖競(jìng)爭(zhēng)程度不同”的情況用不同代價(jià)的方案去適配。追問(wèn)的進(jìn)階題往往長(zhǎng)這樣“一個(gè)方法里現(xiàn)在既有讀操作又有寫(xiě)操作全加上 synchronized 會(huì)不會(huì)性能很差怎么優(yōu)化”這就引出了讀寫(xiě)鎖、樂(lè)觀(guān)鎖、CAS、ConcurrentHashMap 分段設(shè)計(jì)等一堆知識(shí)。我建議回答的時(shí)候主動(dòng)往“鎖的粒度”和“并發(fā)數(shù)據(jù)結(jié)構(gòu)”這兩個(gè)方向靠面試官會(huì)順著你的話(huà)繼續(xù)深入答到點(diǎn)上就是加分。3.2 CAS 的原理與 ABA 問(wèn)題CAS全稱(chēng) Compare And Swap可以說(shuō)是并發(fā)編程的基石之一。它的操作是比較內(nèi)存中的值和期望值如果相等就更新成新值整個(gè)比較加更新在硬件層面是不可分割的。CAS 避免了鎖帶來(lái)的線(xiàn)程掛起和恢復(fù)開(kāi)銷(xiāo)但它不是沒(méi)有問(wèn)題。第一CAS 如果一直失敗會(huì)一直自旋重試在高并發(fā)下會(huì)白白消耗 CPU。第二CAS 只能保證一個(gè)共享變量的原子操作操作多個(gè)共享變量時(shí)需要加鎖或者用 AtomicReference 把它們封裝成一個(gè)對(duì)象。第三就是著名的 ABA 問(wèn)題線(xiàn)程 1 讀到值 A線(xiàn)程 2 把 A 改成 B 又改回 A線(xiàn)程 1 再 CAS 時(shí)發(fā)現(xiàn)還是 A于是認(rèn)為沒(méi)有變化就繼續(xù)操作了。如果這個(gè)過(guò)程中其他線(xiàn)程對(duì)數(shù)據(jù)結(jié)構(gòu)產(chǎn)生了影響就可能出問(wèn)題。ABA 問(wèn)題怎么解決經(jīng)典方案是為變量加上版本號(hào)每次修改版本號(hào)加 1。Java 里的AtomicStampedReference就是干這個(gè)的它同時(shí)持有引用和版本戳。比如一個(gè)賬戶(hù)余額線(xiàn)程 A 看到余額是 100線(xiàn)程 B 轉(zhuǎn)進(jìn) 50 變成 150又轉(zhuǎn)出 50 變回 100如果沒(méi)有版本號(hào)線(xiàn)程 A 會(huì)以為中間沒(méi)人動(dòng)過(guò)這在某些計(jì)費(fèi)場(chǎng)景下會(huì)出大問(wèn)題。用AtomicStampedReference就能感知到版本的變更。不過(guò)實(shí)踐中大部分 ABA 場(chǎng)景其實(shí)影響不大比如店鋪庫(kù)存這種最終還是看當(dāng)前值的地方它更關(guān)心的是即時(shí)狀態(tài)。這點(diǎn)你主動(dòng)說(shuō)出來(lái)反而會(huì)顯得有真實(shí)項(xiàng)目判斷力。3.3 線(xiàn)程池的核心參數(shù)與真實(shí)調(diào)優(yōu)場(chǎng)景線(xiàn)程池面試題問(wèn)得極其高頻核心就是那七個(gè)參數(shù)corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、handler還有一個(gè) BlockingQueue 的實(shí)現(xiàn)選擇。很多人把參數(shù)背得很熟但一追問(wèn)“你這幾個(gè)參數(shù)在線(xiàn)上怎么定的”就卡住了。先理一遍流程提交任務(wù)后當(dāng)前線(xiàn)程數(shù)小于核心線(xiàn)程數(shù)就創(chuàng)建新線(xiàn)程執(zhí)行超過(guò)核心線(xiàn)程數(shù)任務(wù)先進(jìn)入隊(duì)列隊(duì)列也滿(mǎn)了繼續(xù)創(chuàng)建線(xiàn)程直到最大線(xiàn)程數(shù)再滿(mǎn)執(zhí)行拒絕策略。這里最容易被誤解的是“corePoolSize 滿(mǎn)了之后是擴(kuò)容線(xiàn)程而不是等隊(duì)列滿(mǎn)直接拒”。線(xiàn)程數(shù)從 core 擴(kuò)展到 max 的前提是隊(duì)列已滿(mǎn)。拒絕策略有四種AbortPolicy是直接拋異常CallerRunsPolicy是讓提交任務(wù)的線(xiàn)程自己跑DiscardPolicy是靜默丟棄DiscardOldestPolicy是丟棄隊(duì)列里最老的任務(wù)。實(shí)際項(xiàng)目里我一般推薦CallerRunsPolicy它不會(huì)丟任務(wù)同時(shí)也天然提供了一種背壓機(jī)制當(dāng)線(xiàn)程池飽和時(shí)調(diào)用方線(xiàn)程被迫執(zhí)行任務(wù)就自然放慢了提交速度。參數(shù)怎么定要看任務(wù)是 CPU 密集型還是 IO 密集型。CPU 密集型期望核心線(xiàn)程數(shù)接近 CPU 核數(shù)通常是N1IO 密集型因?yàn)榇蟛糠謺r(shí)間在等待網(wǎng)絡(luò)或磁盤(pán)線(xiàn)程數(shù)可以多一點(diǎn)常用公式是N * (1 等待時(shí)間 / 計(jì)算時(shí)間)。我曾經(jīng)調(diào)過(guò)一個(gè)報(bào)表導(dǎo)出服務(wù)壓測(cè)時(shí)線(xiàn)程數(shù)從 20 加到 50吞吐量不升反降因?yàn)榇罅烤€(xiàn)程同時(shí)爭(zhēng)搶數(shù)據(jù)庫(kù)連接連接池先成了瓶頸。后來(lái)把思路反過(guò)來(lái)先定數(shù)據(jù)庫(kù)連接池上限再反推線(xiàn)程池大小同時(shí)把導(dǎo)出任務(wù)拆成更細(xì)的批次放入隊(duì)列最終吞吐量反而翻倍。面試?yán)锬苤v清楚這類(lèi)權(quán)衡比單純背公式有價(jià)值得多。4. Spring 與 Spring Boot框架題背后的設(shè)計(jì)思想4.1 Bean 的生命周期與三級(jí)緩存解決循環(huán)依賴(lài)Spring 題目現(xiàn)在普遍向源碼靠攏。第一個(gè)高頻題“Spring 中 Bean 的生命周期是什么”簡(jiǎn)單概括就是實(shí)例化前階段BeanPostProcessor 的初始化前置處理、實(shí)例化、屬性填充、初始化InitializingBean、init-method、使用、銷(xiāo)毀。但最好把這個(gè)流程掛到具體接口上去理解。比如BeanPostProcessor的postProcessBeforeInitialization和postProcessAfterInitialization分別會(huì)在初始化前后被調(diào)用AOP 的代理對(duì)象就是在postProcessAfterInitialization這個(gè)階段生成的。Autowired依賴(lài)注入發(fā)生在屬性填充階段而PostConstruct注解是在屬性填充完成之后才執(zhí)行。理解了這個(gè)順序你就明白了為什么在構(gòu)造方法里直接使用Autowired屬性會(huì)拿到 null因?yàn)闃?gòu)造方法執(zhí)行時(shí)機(jī)早于屬性填充。循環(huán)依賴(lài)問(wèn)題也非常經(jīng)典“Spring 怎么解決循環(huán)依賴(lài)”注意Spring 解決的是單例 Bean 的 setter 注入循環(huán)依賴(lài)構(gòu)造器注入的循環(huán)依賴(lài)它解決不了會(huì)直接拋BeanCurrentlyInCreationException。Spring 的做法是三級(jí)緩存第一級(jí)是singletonObjects存放完整的單例 Bean第二級(jí)是earlySingletonObjects存放提前暴露的、還沒(méi)完成屬性填充的半成品對(duì)象第三級(jí)是singletonFactories存放 ObjectFactory。為什么需要第三級(jí)而不是直接提前創(chuàng)建完整對(duì)象因?yàn)榇蟛糠?Bean 在創(chuàng)建后期會(huì)被動(dòng)態(tài)代理如果二級(jí)緩存直接放原始對(duì)象后續(xù)代理對(duì)象就沒(méi)有機(jī)會(huì)替換了。三級(jí)緩存中存的是 ObjectFactory在真正暴露的時(shí)候才決定是返回原始對(duì)象還是代理對(duì)象這樣既保證了單例語(yǔ)義又給 AOP 留了口子。答出這一層面試官通常會(huì)比較滿(mǎn)意。4.2 AOP 的底層代理機(jī)制與失效場(chǎng)景AOP 在 Spring 家族里的實(shí)踐非常廣泛從聲明式事務(wù)到日志切面、權(quán)限控制再到Async底層都離不開(kāi)動(dòng)態(tài)代理。高頻問(wèn)題就是“JDK 動(dòng)態(tài)代理和 CGLIB 有什么區(qū)別Spring 里會(huì)怎么選”JDK 動(dòng)態(tài)代理基于接口通過(guò)Proxy.newProxyInstance生成一個(gè)實(shí)現(xiàn)同樣接口的代理類(lèi)調(diào)用方法時(shí)通過(guò)InvocationHandler轉(zhuǎn)發(fā)CGLIB 則通過(guò)繼承目標(biāo)類(lèi)生成子類(lèi)重寫(xiě)目標(biāo)方法。JDK 自帶的代理要求目標(biāo)類(lèi)必須有接口而 CGLIB 可以代理沒(méi)有接口的類(lèi)。Spring Boot 2.x 之后默認(rèn)使用的是 CGLIB也就是通過(guò)proxyTargetClasstrue因?yàn)楝F(xiàn)在很多業(yè)務(wù)類(lèi)根本不設(shè)計(jì)接口直接 CGLIB 更省心。但如果目標(biāo)方法是 final 的或者類(lèi)是 final 的CGLIB 也代理不了因?yàn)樽宇?lèi)無(wú)法重寫(xiě) final 方法。AOP 失效的經(jīng)典場(chǎng)景是什么最典型的就是同類(lèi)內(nèi)部方法調(diào)用。Spring 的代理只在從外部調(diào)用 Bean 的方法時(shí)生效如果 Bean 內(nèi)部一個(gè)方法調(diào)用另一個(gè)帶Transactional的方法走的是this引用沒(méi)有經(jīng)過(guò)代理對(duì)象事務(wù)就失效了。解決辦法有三個(gè)注入自身代理、拆到另一個(gè) Bean 里、使用AopContext.currentProxy()。這些細(xì)節(jié)在面試?yán)飳儆凇按鹜暝碇笾鲃?dòng)補(bǔ)充的提分點(diǎn)”。還有個(gè)容易混淆的點(diǎn)Spring 的事務(wù)和Async用的是同一個(gè)代理機(jī)制所以很多Async失效的問(wèn)題根因和事務(wù)失效是一模一樣的。4.3 Spring 事務(wù)失效的八大典型場(chǎng)景“Spring 事務(wù)在什么情況下會(huì)失效”這是大廠(chǎng)面試官比較愛(ài)出的“場(chǎng)景題”因?yàn)闃I(yè)務(wù)項(xiàng)目里事務(wù)踩坑太常見(jiàn)了。我總結(jié)下來(lái)有八個(gè)典型場(chǎng)景。第一方法不是 public 的Spring 默認(rèn)用 CGLIB 代理代理只能增強(qiáng) public 方法非 public 方法的事務(wù)注解不生效。第二同類(lèi)內(nèi)部調(diào)用也就是前面說(shuō)的不走代理。第三異常被 catch 住吞掉了事務(wù)感知不到異常自然無(wú)法回滾。第四拋出的異常類(lèi)型不是 RuntimeException而是 checked Exception比如IOExceptionSpring 默認(rèn)只對(duì) RuntimeException 回滾checked 異常不會(huì)觸發(fā)回滾除非在Transactional里顯式指定rollbackFor。第五數(shù)據(jù)庫(kù)引擎不支持事務(wù)比如 MySQL 用了 MyISAM 表。第六多線(xiàn)程調(diào)用一個(gè)方法內(nèi)開(kāi)啟子線(xiàn)程去執(zhí)行另一個(gè)事務(wù)方法因?yàn)槭聞?wù)和線(xiàn)程綁定子線(xiàn)程里的事務(wù)不會(huì)和主線(xiàn)程合并而且子線(xiàn)程拋異常也不會(huì)回滾主線(xiàn)程。第七事務(wù)方法里使用this調(diào)用切面相關(guān)的內(nèi)部方法。第八類(lèi)沒(méi)有被 Spring 管理也就是忘了加Service之類(lèi)的注解。每個(gè)場(chǎng)景背后其實(shí)都指向同一個(gè)核心理解Spring 事務(wù)的本質(zhì)是 AOP本質(zhì)是通過(guò)代理攔截目標(biāo)方法在方法執(zhí)行前開(kāi)啟事務(wù)、在方法返回或拋出異常時(shí)提交或回滾。把這個(gè)本質(zhì)講清楚八個(gè)場(chǎng)景根本不用背自己就能推導(dǎo)出來(lái)。5. MySQL 與 Redis數(shù)據(jù)層的進(jìn)階追問(wèn)5.1 索引為什么選 B 樹(shù)什么時(shí)候索引會(huì)失效MySQL 的索引是必考內(nèi)容而且角度越來(lái)越刁鉆。最基本的題目是“InnoDB 的索引為什么用 B 樹(shù)而不用 B 樹(shù)或者紅黑樹(shù)”B 樹(shù)相比 B 樹(shù)的優(yōu)勢(shì)是數(shù)據(jù)只存儲(chǔ)在葉子節(jié)點(diǎn)內(nèi)部節(jié)點(diǎn)只存鍵值所以單頁(yè)可以容納更多索引項(xiàng)樹(shù)的層級(jí)更矮。三層 B 樹(shù)大概可以存儲(chǔ)千萬(wàn)級(jí)別到億級(jí)別的數(shù)據(jù)量加上葉子節(jié)點(diǎn)之間有鏈表連接做范圍查詢(xún)非常高效。紅黑樹(shù)是二叉樹(shù)高度遠(yuǎn)高于 B 樹(shù)磁盤(pán) IO 次數(shù)多完全不適合數(shù)據(jù)庫(kù)這種以磁盤(pán)塊為單位的訪(fǎng)問(wèn)模式。哈希索引雖然能 O(1) 做等值查詢(xún)但沒(méi)法做范圍查詢(xún)也無(wú)法利用最左前綴。這是從數(shù)據(jù)結(jié)構(gòu)特性去理解 MySQL 選型的核心邏輯。接著就會(huì)被問(wèn)二級(jí)索引和回表。InnoDB 是聚簇索引主鍵索引的葉子節(jié)點(diǎn)直接存整行數(shù)據(jù)二級(jí)索引的葉子節(jié)點(diǎn)存的是主鍵值。用二級(jí)索引查詢(xún)時(shí)先找到主鍵再回聚簇索引查一次這個(gè)過(guò)程叫回表。如果查詢(xún)的列正好全部在二級(jí)索引里就形成了覆蓋索引不需要回表性能會(huì)好很多。這就是為什么查詢(xún)建議只 select 必要列而不是無(wú)腦 select *因?yàn)橐坏纤饕獾牧懈采w索引就用不上了。索引失效的場(chǎng)景也是必背清單對(duì)索引列使用函數(shù)或者運(yùn)算發(fā)生隱式類(lèi)型轉(zhuǎn)換比如索引列是字符串查詢(xún)條件卻用了數(shù)字使用模糊匹配且通配符在前面LIKE %abc無(wú)法走索引LIKE abc%可以使用OR連接非索引列聯(lián)合索引不滿(mǎn)足最左前綴規(guī)則。這些規(guī)則背下來(lái)是基礎(chǔ)但更關(guān)鍵的是能從“索引本身就是一種有序結(jié)構(gòu)”的角度去理解為什么失效。比如對(duì)索引列做運(yùn)算本質(zhì)上是改變了索引列的值原有排序無(wú)法再用自然就失效了。5.2 MySQL 的鎖機(jī)制與事務(wù)隔離級(jí)別MySQL 并發(fā)控制的相關(guān)問(wèn)題核心圍繞事務(wù)隔離級(jí)別和鎖。事務(wù)的四大特性 ACID 人人都能背關(guān)鍵是隔離級(jí)別。MySQL 默認(rèn)的隔離級(jí)別是REPEATABLE READ也就是可重復(fù)讀。它通過(guò)多版本并發(fā)控制MVCC實(shí)現(xiàn)快照讀同時(shí)用next-key lock解決幻讀問(wèn)題。這里的 next-key lock 是記錄鎖和間隙鎖的組合它鎖定的不只是某一行還包括這行之前的間隙這樣別的事務(wù)就無(wú)法在間隙里插入新數(shù)據(jù)。理解了這一點(diǎn)就能解釋為什么在可重復(fù)讀級(jí)別下某些范圍查詢(xún)會(huì)把不相干的記錄也鎖住從而可能引發(fā)死鎖。面試時(shí)一個(gè)更高頻的追問(wèn)是“READ COMMITTED和REPEATABLE READ的區(qū)別是什么”簡(jiǎn)單說(shuō)前者每次讀取都生成新的快照所以同一事務(wù)內(nèi)兩次查詢(xún)結(jié)果可能不同后者在事務(wù)開(kāi)始時(shí)就生成快照后續(xù)讀的是同一個(gè)快照所以能重復(fù)讀。但要注意可重復(fù)讀的快照讀并不能完全避免幻影讀下的寫(xiě)沖突需要結(jié)合 next-key lock 才能做完整防護(hù)。這也是為什么很多人說(shuō) MySQL 在默認(rèn)隔離級(jí)別下其實(shí)已經(jīng)基本做到了類(lèi)似串行化隔離級(jí)別下才有的防幻讀效果。關(guān)于死鎖面試官很喜歡讓候選人現(xiàn)場(chǎng)分析。比如兩條 update 語(yǔ)句以相反順序鎖定兩行數(shù)據(jù)就可能形成互相等待。排查死鎖的常規(guī)動(dòng)作是執(zhí)行SHOW ENGINE INNODB STATUS查看 LATEST DETECTED DEADLOCK 部分找到持鎖的事務(wù)和等待鎖的事務(wù)。業(yè)務(wù)上規(guī)避死鎖的一個(gè)重要思路是讓所有事務(wù)以固定的順序訪(fǎng)問(wèn)表和行。5.3 Redis 緩存穿透、擊穿、雪崩的應(yīng)對(duì)方案Redis 相關(guān)的場(chǎng)景題最經(jīng)典的就是緩存三大問(wèn)題。緩存穿透是查詢(xún)一個(gè)根本不存在的 key請(qǐng)求打到數(shù)據(jù)庫(kù)上如果這種請(qǐng)求量很大數(shù)據(jù)庫(kù)壓力就會(huì)異常。解決思路是緩存空值把不存在的 key 也緩存一下但要設(shè)置較短的過(guò)期時(shí)間更好的是用布隆過(guò)濾器在緩存前面加一道判斷把明顯不存在的 key 直接攔截掉。注意布隆過(guò)濾器有誤判率它會(huì)告訴你“一定不存在”和“可能存在”誤判不會(huì)漏掉真實(shí)存在的 key只會(huì)把極少數(shù)不存在的 key 放過(guò)去這在緩存場(chǎng)景下是可接受的。緩存擊穿是某個(gè)熱點(diǎn) key 在過(guò)期瞬間大量并發(fā)請(qǐng)求同時(shí)打到數(shù)據(jù)庫(kù)。處理辦法有三個(gè)互斥鎖也就是只讓一個(gè)請(qǐng)求去重建緩存其他請(qǐng)求等待邏輯過(guò)期把 value 里塞一個(gè)過(guò)期時(shí)間字段異步線(xiàn)程去更新緩存請(qǐng)求先拿舊值返回永不過(guò)期加后臺(tái)定時(shí)刷新?;コ怄i實(shí)現(xiàn)簡(jiǎn)單但存在串行化問(wèn)題邏輯過(guò)期能做到最終一致且不阻塞請(qǐng)求但對(duì)業(yè)務(wù)代碼有侵入。緩存雪崩是大量 key 同時(shí)過(guò)期或者 Redis 實(shí)例宕機(jī)導(dǎo)致請(qǐng)求全部落到數(shù)據(jù)庫(kù)。應(yīng)對(duì)策略包括過(guò)期時(shí)間加一個(gè)隨機(jī)值避免同一時(shí)刻集體過(guò)期用多級(jí)緩存本地緩存加分布式緩存Redis 高可用部署加上熔斷降級(jí)策略。面試官通常會(huì)追問(wèn)“如果 Redis 掛了你怎么辦”這時(shí)候不要只答“等它恢復(fù)”而要把兜底方案講出來(lái)本地緩存臨時(shí)頂上、對(duì)非核心接口做降級(jí)、數(shù)據(jù)庫(kù)提前做讀寫(xiě)分離擴(kuò)容。6. 分布式與場(chǎng)景題沒(méi)有標(biāo)準(zhǔn)答案的加分項(xiàng)6.1 分布式鎖Redis 鎖、ZooKeeper 鎖與 Redlock 之爭(zhēng)到了這個(gè)層面面試題逐漸變成“開(kāi)放題”。第一個(gè)典型的開(kāi)放問(wèn)題是“你在項(xiàng)目里怎么設(shè)計(jì)一個(gè)分布式鎖”如果用的是 Redis最簡(jiǎn)單的方案是SET key value EX seconds NX只有鍵不存在時(shí)才能設(shè)置成功過(guò)期時(shí)間保證鎖不會(huì)永久持有。但這里面有幾個(gè)坑。第一個(gè)坑是鎖的 value 必須帶上一個(gè)唯一標(biāo)識(shí)比如 UUID釋放鎖時(shí)要先比較 value 再刪除否則可能出現(xiàn)線(xiàn)程 A 的鎖到期自動(dòng)釋放線(xiàn)程 B 拿到了新鎖然后 A 又去把 B 的鎖刪掉的情況。第二個(gè)坑是主從切換時(shí)的丟鎖問(wèn)題Redis 主節(jié)點(diǎn)宕機(jī)后從節(jié)點(diǎn)頂上如果鎖還沒(méi)來(lái)得及同步到從節(jié)點(diǎn)鎖就丟了。Redlock 算法試圖通過(guò)向多個(gè)獨(dú)立 Redis 節(jié)點(diǎn)加鎖來(lái)解決這個(gè)問(wèn)題但它在極端情況下仍有爭(zhēng)議比如發(fā)生時(shí)鐘跳躍時(shí)。面試時(shí)主動(dòng)講出 Redlock 的適用場(chǎng)景和爭(zhēng)議點(diǎn)會(huì)讓面試官覺(jué)得你真的在生產(chǎn)環(huán)境里思考過(guò)。如果用 ZooKeeper 做分布式鎖常見(jiàn)做法是創(chuàng)建臨時(shí)順序節(jié)點(diǎn)每個(gè)客戶(hù)端注冊(cè)后得到一個(gè)序號(hào)只有序號(hào)最小的持有鎖其他客戶(hù)端監(jiān)聽(tīng)前一個(gè)節(jié)點(diǎn)。臨時(shí)節(jié)點(diǎn)的好處是客戶(hù)端宕機(jī)后節(jié)點(diǎn)自動(dòng)消失不會(huì)出現(xiàn) Redis 鎖那種“死鎖后只能等過(guò)期”的問(wèn)題。但 ZooKeeper 鎖的性能不如 Redis而且每次加鎖都要多次網(wǎng)絡(luò)交互。實(shí)際選型邏輯是要求高可靠性和自動(dòng)釋放就選 ZooKeeper追求性能和簡(jiǎn)單性就選 Redis。這個(gè)問(wèn)題沒(méi)有唯一答案你把自己項(xiàng)目的訪(fǎng)問(wèn)量、可用性要求、已有基礎(chǔ)設(shè)施說(shuō)清楚就是完整的回答。6.2 接口冪等性與重復(fù)提交的處理“怎么保證接口的冪等性”是分布式場(chǎng)景的??汀C嬖囶}包裝通常是“用戶(hù)快速點(diǎn)了兩次提交后端重復(fù)扣款了怎么避免”。冪等性設(shè)計(jì)的核心思想是讓一次和多次請(qǐng)求的效果相同。最簡(jiǎn)單也最可靠的方法是在數(shù)據(jù)庫(kù)層面加唯一約束比如訂單號(hào)唯一、支付流水號(hào)唯一。第一次插入成功第二次插入會(huì)因?yàn)槲ㄒ绘I沖突而失敗業(yè)務(wù)代碼里捕獲這個(gè)沖突返回“處理中”或者“已成功”即可。對(duì)于更新場(chǎng)景可以用樂(lè)觀(guān)鎖表里加一個(gè)版本號(hào)update 時(shí)帶上version ?條件更新成功后版本號(hào)加一更新行數(shù)為 0 就說(shuō)明版本不匹配直接丟棄該次請(qǐng)求。還有一種思路是使用狀態(tài)機(jī)。比如支付單的狀態(tài)從“待支付”到“支付中”再到“已支付”是一個(gè)不可逆的過(guò)程業(yè)務(wù)代碼里通過(guò)update ... where status 待支付這樣的條件更新來(lái)保證同一狀態(tài)只能被成功推進(jìn)一次。這種方案的優(yōu)點(diǎn)是語(yǔ)義清晰缺點(diǎn)是業(yè)務(wù)代碼里到處都要寫(xiě)狀態(tài)判斷侵入性強(qiáng)。面試?yán)锬阒灰v清楚場(chǎng)景匹配哪種方案比如“下單用唯一鍵扣庫(kù)存用樂(lè)觀(guān)鎖長(zhǎng)流程用狀態(tài)機(jī)”就比只背一個(gè)方案要出彩。6.3 消息隊(duì)列的可靠性不丟、不重、有序消息隊(duì)列一定是分布式簡(jiǎn)歷里的高頻組件。高頻題是“怎么保證消息不丟失”回答這個(gè)問(wèn)題要分三段來(lái)拆。生產(chǎn)端使用同步發(fā)送并等待 Broker 確認(rèn)或者開(kāi)啟事務(wù)消息、確認(rèn)回調(diào)保證消息真正到達(dá) BrokerBroker 端開(kāi)啟持久化把消息刷到磁盤(pán)并且對(duì)應(yīng)的隊(duì)列設(shè)置為持久化隊(duì)列消費(fèi)端關(guān)閉自動(dòng) ack改成手動(dòng) ack處理成功后再確認(rèn)。只要三段每一段都有確認(rèn)機(jī)制消息就能基本做到不丟。注意消息隊(duì)列的不丟是有條件的不丟不同中間件默認(rèn)配置不一樣比如 Kafka 的配置要關(guān)注acks、min.insync.replicas和enable.auto.commit三個(gè)參數(shù)?!霸趺幢WC不重復(fù)消費(fèi)”這才是更難的問(wèn)題。因?yàn)榫W(wǎng)絡(luò)重試、消費(fèi)者宕機(jī)再恢復(fù)都會(huì)導(dǎo)致同一消息被投遞多次。消息中間件只能保證至少一次語(yǔ)義無(wú)法保證剛好一次所以業(yè)務(wù)側(cè)必須做冪等這又繞回了上一個(gè)話(huà)題數(shù)據(jù)庫(kù)唯一鍵、Redis setnx、狀態(tài)機(jī)都天然可以用來(lái)做消費(fèi)冪等?!跋⒃趺幢WC順序性”Kafka 的答案是分區(qū)有序同一業(yè)務(wù) key 的消息發(fā)到同一個(gè)分區(qū)消費(fèi)者在分區(qū)內(nèi)順序處理。但一旦有多個(gè)消費(fèi)者并發(fā)消費(fèi)同一個(gè)分區(qū)順序就會(huì)亂。所以實(shí)踐中通常還要配合“單分區(qū)單消費(fèi)者”或者把并發(fā)度收斂再在業(yè)務(wù)側(cè)用狀態(tài)機(jī)做兜底。這三類(lèi)問(wèn)題串起來(lái)答能明顯增加面試的完整度。7. 面試現(xiàn)場(chǎng)加減分項(xiàng)聊幾個(gè)實(shí)操心得7.1 答題節(jié)奏與“主動(dòng)引導(dǎo)”最后再分享幾個(gè)我既作為面試官、也作為被面試者總結(jié)出來(lái)的實(shí)操體會(huì)。第一答題要學(xué)會(huì)分層。面試官問(wèn)一個(gè)概念先給一句話(huà)結(jié)論再展開(kāi)細(xì)節(jié)不要上來(lái)就倒一大堆。比如問(wèn)“HashMap 和 ConcurrentHashMap 有什么區(qū)別”先說(shuō)“線(xiàn)程安全的差異和底層實(shí)現(xiàn)不同”再分別展開(kāi)。提綱挈領(lǐng)的答法讓面試官可以隨時(shí)打斷你或者沿著你的話(huà)問(wèn)下去節(jié)奏更可控。第二主動(dòng)暴露“邊界”。說(shuō)完了常規(guī)實(shí)現(xiàn)補(bǔ)一句“但是這個(gè)方案在某某場(chǎng)景下有局限”面試官通常會(huì)被帶著往你準(zhǔn)備好的方向問(wèn)。比如聊 Redis 分布式鎖你主動(dòng)提主從切換丟鎖問(wèn)題話(huà)題就很自然滑向 Redlock 和 CAP這些都是你能提前準(zhǔn)備的。千萬(wàn)不要只等面試官出招那樣很容易被問(wèn)到知識(shí)盲區(qū)。第三不會(huì)的題要表現(xiàn)推導(dǎo)過(guò)程。大廠(chǎng)面試官其實(shí)不是非要你每道題都答對(duì)他們更關(guān)注你面對(duì)不確定問(wèn)題的反應(yīng)。遇到不會(huì)的題先把已知的部分拆解出來(lái)再?lài)L試類(lèi)比到熟悉的東西上。比如讓你說(shuō)一個(gè)沒(méi)接觸過(guò)的中間件的實(shí)現(xiàn)原理你可以從“它解決什么問(wèn)題、有什么類(lèi)似物、數(shù)據(jù)怎么流轉(zhuǎn)”三個(gè)角度推。哪怕推得不夠準(zhǔn)確也比沉默或瞎編強(qiáng)。7.2 簡(jiǎn)歷和項(xiàng)目經(jīng)驗(yàn)的技術(shù)錨點(diǎn)還有一個(gè)容易被低估的環(huán)節(jié)項(xiàng)目描述里提到的每個(gè)技術(shù)名詞都要準(zhǔn)備好被追問(wèn)。寫(xiě)“用了 Redis 緩存”就要準(zhǔn)備緩存穿透、擊穿、雪崩、緩存一致性這幾個(gè)問(wèn)題寫(xiě)“用消息隊(duì)列做了異步解耦”就要準(zhǔn)備可靠性、順序性、積壓處理這些問(wèn)題。項(xiàng)目里用到了什么技術(shù)面試官默認(rèn)你會(huì)往深了聊所以不要在簡(jiǎn)歷上堆不認(rèn)識(shí)的名詞。我建議把項(xiàng)目經(jīng)驗(yàn)按“背景、方案、難點(diǎn)、結(jié)果”四段式準(zhǔn)備其中“難點(diǎn)”是重中之重。難點(diǎn)最好是那種能在技術(shù)層面體現(xiàn)出取舍的問(wèn)題比如“訂單量上漲后數(shù)據(jù)庫(kù)查詢(xún)變慢你是怎么優(yōu)化的”。這種問(wèn)題既考察技術(shù)寬度也考察你是不是真的參與了這個(gè)項(xiàng)目。把優(yōu)化前后的數(shù)據(jù)對(duì)比也準(zhǔn)備好有數(shù)據(jù)支撐的回答說(shuō)服力完全不一樣。準(zhǔn)備面試本質(zhì)上就是在整理自己的知識(shí)體系。刷題只是引子真正重要的還是把每個(gè)問(wèn)題的“為什么”想清楚。我自己的體會(huì)是把上面這幾條線(xiàn)吃透不管面試題拿到的是哪套組合都能找到對(duì)應(yīng)的思考路徑。把心態(tài)放穩(wěn)把基礎(chǔ)夯實(shí)金三銀四的機(jī)會(huì)自然會(huì)落到有準(zhǔn)備的人手里。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
性爱七区| 操逼五月婷婷| 激情 婷婷 丁香五月天| 伊人五月婷婷国产视频| 91超级碰碰碰| 婷婷五月天AV| 人妻综合网| 影音先锋女人AA鲁色资源| 欧美婷婷五月天综合| 色婷婷网| www婷婷| 欧美天堂久久| 亚洲99一级无嗎特制在线| 国产午夜一区二区三区| 激情啪啪五月天| 天堂va久久久噜噜噜久久Va| 狠狠穞A片一區二區三區| 伊人五月人妻精品| 九九aV| 久久人妻精品| 色色色99| AV天堂婷婷五月天| 六月丁香婷婷拍拍| 99玖玖精品| www激情| 伊人午夜综合色啪| 婷婷五月18永久免费网站| 一级性爱视频| 激情婷婷五月| A网在线欧洲| 婷婷综合精品| 五月天婷婷久久| www五月天com| 五月天综合在线观看| 色人久久| 大香蕉婷婷色| 色婷婷久久综| 色婷婷色综合激情91| 99热思思| 色婷婷国产精品综合在线观看| 综合激情五月丁香9999久久精| 亚洲啪啪精品| 丁香五月婷婷欧美成人色图| 色青五月天| 亚洲精品无AMM毛片| 色欲天天综合| 婷婷97碰碰| 精品无码99| 国产五月丁香在线| 噜色精品| 色丁香五月综合网| 日日日日操| 色欲操| 超碰色色综合| 五月天堂色| 玖玖五月| 91chinese在线| av成人在线播放| www狠狠| 91操片| 激情婷婷色五月| 婷婷六月色丁香视频在线观看| 99人碰碰碰| 欧美成人AAA片一区国产精品| www.五月瑟| 人妻久久久久| 五月情综合| 国产成人网| 五月丁香综合成人社区| 97久久草草超级碰碰碰| 99久久久国产大片区| 超碰在线超碰| 99热91| 超碰九色| 久久只这里有精品| 26uuu精品一区二区| 99久久久国产精品免费蜜乳tv| 午夜 外网 精品 在线| 五月丁香六月婷婷精品| 综合xx网| 精品视频这里只有精品| 伍月婷婷六月丁香| 婷婷久久精品| 99色在线视频| 婷婷五月开心六月AV| 丁香狠狠色婷婷久久无码视频| 99在线国| 日本色久| www.五月天婷婷| 99re久久| 伊人大香蕉在线视频| 伊人91| 成人电影一区| 99在线视频操999| 91碰免费视频| 啪啪黄页网| 日本女色人人| 五月天久草| 亚洲AV免费国产电影| 天天透天天干| 再次出发二| 91色综合| 99这里都是精品6| 狠狠插日日干撸| 内射激情在线| 丁香六月婷婷激情| 国产激情综合五月久久| 人人操碰| 亚洲婷婷丁香五月天激情小说| 激情五月天之五月婷婷| 五月天久久www| 天天久综合| 五月婷综合| 99久久www| 99热这里是精品| 六月丁丁香| 激情五月丁香五月综合| 五月婷婷六月丁香综合| 丁香五月Av| 婷婷在线精品| 日韩五月婷婷| 色综合日日| 成人中文网| 综合网精品99| 欧美成人无码一区二区三区| 97碰| 日韩有码一区| 密乳视频| 性一交一乱一交A片久| 综合久| 一级性爱大片| 婷婷五月综合视频免费播放| 亚洲愉拍99热成人精品| 五月丁香色婷婷伊人| 噜噜网免费视频| 99热这里只有精品中文字幕| 草榴视频黄色网| 免费亚洲婷婷中文字幕| 蜜臀99精品| 超碰日韩人妻在线| 深爱五月天天| 无码 av电影| 欧美色色色色色| 丁香婷婷五月基地| 免费视频1区| 97干在线| 五月天桃色深爱网| 五月婷在线观看| 26UUU精品一区二区c〇m| 五月天伊人综合| 日本久久99| 色五月婷婷青娱乐| 操操自拍| 激情综合网五月丁香| 99色免费视频| 影音先锋五月天婷婷丁香在线观看| av 一区三区四区| 色哟哟www| 极品嫩草| 色婷婷六月精品| 久热免费视频| 五月丁香天天| 91久女| 开心激情站| 激情五月婷黄版| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 色婷婷亚洲婷婷在线观看| 亚洲精品国产熟女久久久| 91久久久久久久久久久| 亚洲这里只有精品| 丁香五月婷婷亚洲综合精品在线| 久久精品国产精品| 深爱五月最新网址| se99热久久一本| 狠狠五月天| 97在线天堂| 丁香五月六月婷婷殴美综合| 99久久精品国产色欲| 夜夜骑天天操| 99视频内射三四| 久久这里只精品| 思思久久99热| 六月婷婷毛片| 九九热最新视频| 美女伊人久久| 五月丁香啪啪网| 婷婷伊人激情婷婷| 亚洲综合在线网站| 99热这里只有精品99| 天天日天天添| 天天爱天天天射AV| 97碰| 五月丁香久久激情网| 五月天六月丁香| 色色网站在线| www,av好吊操| 欧美日朝成人| 中文字幕操比影片| 日本色色视频| 久操婷婷| 99五月香婷婷丁香在线视频| www99精品| 玖玖视频福利| 狠狠狠狠青草| 99精品视频在线观看| 激情五月综合色婷婷| 色吧网91| 六月婷婷五月天| 激情五月com| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 亚洲AV日韩无码| 五月色婷婷亚洲 | 婷婷丁香五月精品| 婷婷五月综合色拍| 亚洲情综合五月天| 大香蕉久| 婷婷播5月| 综合久久9| 国产精品涩涩涩视频网站| 五月婷在线色视频| 性爱先锋AV| 色婷婷很很十八禁| 人妻少妇色综合| 激情文学五月丁香六月婷婷| 天天操夜夜玩!| 色情五月天丁香社区| 日韩无码专区| 色综合久久88色综合天天看| 精品无码99| 韩国天天婷婷| 久久小视频免费| 4399欧美另类视频| 久草嫩草在线观看| 九九无毛| 深爱五月激情| 婷婷五月天激情网| 婷婷六月花| 婷婷五月69| 中文字幕av网站| 99久热这里只有精品| 久久婷婷成人视频| 99久热| 九九九九九九九九九九九九九国产精品| 可以直接看的av| 天天插天天爱| 夜夜操天天干| 开心五月深爱五月丁香五月激情五月 | 久久久99精品| 激情欧美婷五月| 国产白丝在线一区| 六月丁香六月婷婷欧美| 青青草婷婷久久| 无码成人AAAAA毛片AI换脸| 99在线资源| 国语精品探花| 丁香五月天的网址。| 丁香五月综合高清在线| 婷婷五月在线免费| 第四色婷婷日本| 精品99视频| 亚洲欧美成人在线观看| 六月婷欧美丁香综合| 色优久久| 国产XXXX搡XXXXX搡麻豆| 激情九月婷婷| 天天插天天日| 欧美成人AAA片一区国产精品| 五月天色图| 色婷婷免费视频| 五月激情综合网| 久久亚洲激情五码| 天天干,天天日| 激情五月天 婷婷| 色色色.COM| 亚洲性爱区无码区| 色婷婷激情| 久久美女五月天| 俺也去在线视频| 色婷婷九月| 五区毛片七区毛片| 天天综合色丁香| 99精品在线下载| 五月丁香综合伦理片| 欧美在线骚货| 久久精品亚洲一级牲爱综合 | 婷婷六月视频| 91亚洲免费片| 五月丁香激情婷婷| 欧日韩AV| 色五月丁香六月欧美综合| 九九九九九九九热| 亚洲美女网Va| 99热线观看9| 婷婷九九视频| 五月婷丁香| 伊人婷婷青青cao| 性韩日色婷婷五月天激情啪啪XXX| 五月天色色激情综合| 色婷婷色五月另类综合| 五月丁香六月综合基地| 成人在线视频网| 99热这里只有精品2| 丁香婷婷大香蕉| 欧美性生交XXXXX无码小说| 国产精品99久久久久久久女警| 99精品视频在线观看| 黄色国久久| 婷婷丁香六月天激情四射网| 91色综合网| 综合网色| 99热无码首页| 五月婷婷丁香五月| 久热天堂| 久久久网站| 色婷婷综合五月| 日日噜狠狠色综合久| 丁香五月天堂| 久久成人亚洲欧美电影| 色99网| 五月丁花色综合网| 色综合激情| 亚洲最大成人综合网720P| 亚洲人成网站999综合| 任你擦免费视频| 五月婷婷伦理| 9l视频自拍九色9l视频在线观看| 91性交在线播放| 六月大香蕉| 激情丁香婷婷六月天| 好吊操这里只有精品| 欧美性色A片免费免费观看的| 丁香五月天天久久综合小说| 日韩成人电影AV| 伊人五月天婷婷| 五月丁香色色网| 丁香五月婷婷总啪啪| 伊九九三级区| 五月婷激情影院| 国产XXXX搡XXXXX搡麻豆| 欧美日韩日韩成人| 丁香五月丁香伊人| 大地9中文在线观看免费高清| 五月花激情网| 丁香五月婷婷俺也要去| 色五月综合| 91婷婷丁香五月| 26uuu另类亚洲欧美日本一| 丁香五月婷婷激情网| 免费色婷婷| 午夜理论片最新午夜理论剧| 99re视频在线播放| 人妻激情视频| 五月天亚洲综合网| 久啪欧美| 青草五月天| 99原创自拍视频在线观看| 色婷婷久久| 狠狠色五月天| 香蕉网久久| 五月宗合激情网| 内射爽无广熟女亚洲| 五月天色色网站| 国产亚洲色婷婷久久99精品91| 欧亚成人A片一区二区| 日韩啪啪视频| 色五月婷婷五月| 久久一级AV| 国产伊人五月天| 丁香大香蕉| 熟女啪啪视频| 婷婷婷久久久| 亚洲精品永久久久久久| 久久WW| 丁香久久| 91色噜噜狠狠狠狠色综合| 99色色色色| 九九综合九| 丁香五月另类小说在线阅读| 久久综合久色欧美综合狠狠 | 久一网站| 国产免费AV在线| 91操在线视频| 丁香六月色婷婷| 亚洲综合网 665566| 婷婷综合一二三| 久久婷婷资源| 色激情五月| 五月综合激情网| 天天操夜夜肏| 六月丁香开心婷婷欧美| 五月婷婷激情综合av| 久久码久久无清| 婷婷六月天激情| 青青草原伊人网| 国产.亚洲.欧洲视频在线| 六月丁香色色色| 久久综合丁香| 婷婷色五月天第7色| 国产成人网| 色999亚洲人成色| 99综合| 色五月aV| 婷婷色影音天| 超碰97免费在线| 天天插天天狠| 婷婷五月综合色小姐小说| 天天婷婷色六月| 激情视频综合| 久久98| 久久婷婷六月综合| 天天激情综合| 黄色99热| 99激情视频| 五月天婷婷高清无码| 97电影99热| 亚洲激情综合| 日本理论久久| 婷婷综合偷拍| www.91操| 婷婷五月综合激情免费视频| 婷婷成人在线| 人妻熟女一区二区AV| 日日夜夜爽| 美女黄频aⅴ视频| 五月花婷婷| 色色COm| 色噜噜夜夜夜综合网| www.五月天| 天天精品视频在线观看视频| 色婷婷免费观看| 欧美性生交A片免费看| 色婷婷成人五月| 久久婷五月天| 熟美女麻豆| 99天堂网| 超碰人人超碰| 色停停五月天| 五月丁香啪啪激情| 成人 在线 日韩| 99精品偷自拍| 99九九在线视频| 国产激情久久久| 综合欧美五月婷婷| 99热综合在线| 久久日曰| 欧美97超碰| 九九热这里| 丁香五月天堂| 激情五月天色婷婷| 天天爽曰日爽| 99色这里| 久久狠狠欧美| 久久网日本| 综合久久综合综合| 日韩三十六页| 搡BBBB搡BBB搡18 | 99re6在线视频精品免费| 丁香五月激情网| 久久深爱激情网| 九九热这里只有精品556| 久久久久久久久久久44| 丁香六月综合| 91久久网站| 激情丁香六月| 久久综合婷婷五月| 婷婷六月色开 | 日本女人久久| 亚洲秘 无码一区二区三区妃光/1| 2w在线视频| 日韩黄黄| 婷婷中文字幕版| 夜夜人妻五月天| 丁香色色色| 婷婷激情视频| 超碰无码318604| 五月天另类图片区99| 激情碰碰碰| av一区二区电影免费在线观看| 国产AV一区二区三区最新精品 | 久操大| 开心婷婷中文字幕| 超碰国产AV| 婷婷 色 丁香 夜| 婷婷播5月| 九九热精品6| 婷婷丁香成人网址| 久久AAAA片一区二区| 91丁香五月| 五月丁香婷婷在线| 五月天精品| 粉嫩AV久久一区二区三区 | 国产性色蜜乳| 五月婷婷欧美激情| 最新va在线播放| 夜夜爽天天爽| 激情综合五月婷婷| 超碰激情网| 亚洲永久免费| 极品少妇XXXX精品少妇偷拍| ..真实国产乱子伦毛片| 日本97在线看片| 98毛片| 欧美色婷婷| 五月婷婷六月丁香| 婷婷桃色网| 久色88| 99精品久久久久久久婷婷| 99黄色在线视频精品熟女| 67194成I人在线观看线路1| 五月天社区| 在线,国产,色,热视频| 久久婷婷五月综合97色一本| 五月丁香六月婷婷中合网| 五月综合婷婷久久在线| 五月丁香综合激情| 桃色五月天| 激情综合色五月丁香| 99资源在线| 黄网免费看| 亚州欧美国产久精国产99综合视频| 这里只有精品视频看看| 五月婷婷六月情| 97色婷| 26uuu成人网| 男人先锋久久| 9久国产精品| 深爱激情四射| 狠狠色噜噜狠狠| 综合久| 亚洲啪啪精品| 91丨九色丨熟女| 天天 日综合| 天天做天天爽| 大地资源色婷婷视频在线| 91丨九色丨国产打屁股网站| 人妻久久久久| 成年人丁香五月| 亚洲操逼网| 五月丁香成年黄色| 包操45分钟网站| 色丁香五月| 国产精品久久久久久久久久| 国产精品视频| 五月天综合婷婷| 久久婷婷亚洲| 7超碰自拍| 狠狠色噜噜色狠狠狠综合久久成人波 | 婷婷激情五月吧| 色婷婷www| 国产又粗又大又爽又黄| 亚洲综合色色| 天天做天天爽| 久久ri精品视频| 婷婷免费精品视频| 日本狠狠色| 五月天丁香婷婷网| 婷婷丁香五月激情图片| 天天日日夜夜| 久操热| 色噜噜五月天| 伊人五月婷婷国产视频| 久久婷婷五月综合伊人| 色色色色色色综合网| 丁香婷婷激情综合五月激情| 亚洲欧美婷婷五月色综合| 乱岳熟女50岁| 成人五月天色天堂| 国产精品成人AV在线| 4399精品一区二区| 日本性激情色播| 99啪啪| 怡红院 久久| 日韩成人中文字幕| 日本精品99网站| 超碰男人色| 91无码高清| 成年人丁香五月| 午夜亚洲AV日韩无码| 天天色综合色色色色色。| 99精品视频免费观看| 做爱夜夜干天天操| 午夜丁香婷婷| 欧日美女Va| 99性爱| 一本色道久久综合狠狠躁小说| 五月婷婷丁香狠狠撸久久| 色欲五月丁香| 99热a片免| 人妻五月天激情开心网| 六月色婷婷| 91九色 熟| 99亚洲无码| 色9999综合久久| 五月婷精品| 综合色视频| 26UUU精品一区二区Com| 婷婷丁香五月在线观看91| 人妻久久久久久久久久| 99热欧美精品| 亚洲综合九九| 久久er+| 亚洲天堂热| 777久久精品| 色一色综合| 99性爱视频网站| 色婷婷五月综合激情中文字幕| 五月天另类小说久久小说网| 亚洲AV无码影院| 九月激情网| 亚洲国产色婷婷| 日日影院 | 手机免费福利视频| 99噜噜| 男女啪啪做爰高潮无遮挡| 九九热只有这里精品| 疯狂做受XXXX高潮A片动画| 色婷婷五月综合网| 国产av影片| 99综合免费视频| 337午夜福利| 欧美五月婷婷| 丁香六月在线综合| 婷婷五月天奸女| 久久99热这里只有| 成人无码中文| 亚洲网站999| 色五月琪琪| 91打屁股免费看| 99成人无码| 亚洲天堂啪啪| 综合久久五| 狠狠久久婷五月| 综合久久婷婷| 开心五月深爱五月丁香五月激情五月| 色婷婷免费视频| 亚洲成人AV高清字幕| 97五月天| 伊人色欲五月天| 人妻激情网| 亚洲色网络| 久 久9 9 热 视 频| 精品久久99码| 丁香五月天社区婷婷| 亚洲成人色五月天| 99热久草| 丁香花五月天社区| 白人荫道BBWBBB大荫道| 国产成人综合在线| 五月丁香六月婷婷综合在线| 久久一操| 成人久碰| 国产精品人成A片一区二区| 综合网亚洲| 天天做天天要天天爽| 超碰九九热| 97人人操人人拍| 高清无码网址| 欧美精品99| 丁香五月激情在线| 丁香五月综合图片在线观看| 色色无码日韩| 欧美人人操| 久久婷婷六月综合综合| 日本综合九九| 免费视频WWW在线观看网站| 色五月琪琪| 六月婷婷色宗合| 五月丁香啪啪啪免费看| 人妻AV在线| 野战J办公桌椅H| 九九热视频在线观看| 9l视频自拍9l九色9l成人| 综合久久人妻| 五月天 另类图片| WWW.99热| 久热A| 色丁香久久久| 台湾佬天天日丁香婷婷五月天| 五月丁香va| 99热这里只有在线播放| 激情的五月婷婷蜜桃| 九九99在线免费在线观看视频| 啪啪黄页网| 国产免费av在线| 日韩无码系列| 超碰高清在线| 91色在线| 日韩啪啪视频| 99精品视频免费在线播放| 五月丁香狠狠爱| 婷婷亚洲综合| 这里只有精品视频视频在线观看| 日本精品在线噜噜噜| 天天激情5月天亚洲| 可以免费观看的av网址| 色五月婷婷丁香国产在线| 草美女在线观看视频在线播放 | 综合99久久天天综合| 超碰高清在线| 成人片在线播放| 激情文学 综合 色| 丁香六月色情| 开心五月激情婷婷| 五月天婷婷丁香基地在线观看| 色五月五月天色婷婷色五月| www.精品99| 五月婷婷婷| 欧美日韩中文国产一区发布| 天堂在线观看视频| 国内久久久精品99| 26UUU一区二区| 亚洲五月天综合| 99视频只有这里精品| 丁香五月天啪啪激情综合网| 色爱五月天| 91狠狠色| 人妻第九页| 久操人| 色婷五月| 九色色| 91视频精品99| 性色做爰片在线观看WW| 超热久碰.com| 国产激情视频在线观看| 啪啪五月天啪啪| 五月丁香六月玩女人| 久久免片| 六月色 亚洲| 色婷丁香| 色五狠狠| 五月丁香六月欧美综合网站| 狠狠色噜噜狠狠狠狠狠色综合久久| 婷婷五月色影视先锋| 五月亭亭六月色| 天天摸天天日天天舔| 久久久999精品| 婷婷婷婷婷婷婷婷婷婷丁香| 久久久99久久| 婷婷五月天激情综合深爱激情| 色情久久久| 成人五月丁香花| 97人人看| 久久久久人妻精品| 无遮羞AV| 色婷婷丁香网| 五月色丁香| 九月停停| 色色色色av777| 亚洲成人免费电影| 色人久夂| 婷婷噜噜| 中文字幕在线免费看线人| 玖玖婷婷综合| 99免费热视频| EEUSS鲁片一区二区三区| 九九激情| 天天曰夜夜爽| 婷婷成人AV| 五月婷婷丁香91| 久久婷婷成人视频| 久操综合| 蜜桃婷婷狠狠久久综合| 婷婷五月色网| 最近中文字幕2019视频1| 九九色综合网| 五月天亚洲综合网| 万月丁香狠狠爱| 99久久黄色顶级视频| 97操视频| www,色婷婷| 噜噜噜噜综合在线| 综合欧美五月婷婷| 婷婷久久久久久久| 欧美色婷婷| 欧美久久久中文字幕| 很很操很很操| 午夜色婷婷| 伊人影音无码一区二区三区 | 99操视频| 超碰在线观看9| 激情伊人五月天| 天天干天天干天天干天天干天天干| 婷婷精品性性性性性性性| 五月婷婷,狠狠操| 玖玖玖婷婷婷| 色五月在线视频观看| 色五月综合激情网| 激情五月天免费视频| 伊人久久大香网| 99热丁香| 色碰碰视频| 色综合9| 拳交大逼| 91av色色乱视频| 久久免费婷婷视频| 色婷婷亚洲综合av| 狠狠人妻久久久久久综合丁香| 思思热在线免费视频| 欧美成人在线观看| www色婷婷com| 91 九色 入口| 91九九热| 五月天a婷婷伊人| 超碰在线caop| 五月丁香成人视频| 大香蕉久热| 99爱精品| 无码激情精品色婷婷久久久久| 大色鬼综合| 91久久婷婷人人澡草| 婷婷五月色惰| 草草视频91| 99久久99久久综合| 精品9197碰| 五月婷婷影| 99在线观看精品| 26uuu精品一区二区| 秋霞网在线观看理论91| 色吊丝99| 狠狠色噜噜狠狠狠狠综合| 99色啊| 激情av网| 五月丁香综合| 婷婷五月18永久免费视频| 丁香五月激情月| 亚洲热视频| 久久这里99| 97在线综合| 少妇被下春药玩弄A片| 亭亭玉月丁香| 综合欧美五月婷婷| 亚洲黄色av网站| 91超级碰碰| 日日艹思思热| 色情五月综合婷婷| WWW色色色COM| 欧美日韩99| 成人视频婷婷| 噜噜色天天开心| 九九操屄| 色色免费网站| www 五月天 com| 182TV大香蕉| 91色久| 亚洲狠狠干| 在线播放成人| 国产AV一区二区三区最新精品| 丁香五月天欧美| 激情婷婷在线中文字幕| 欧美三级巜人妻互换| 97碰碰在线看视频免费| 欧爱综合视频| 久久免费操| 狠狠干天天内射| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 9热在线观看| 色婷婷av在线观看| 99啪| 五月婷婷丁香社区| 天天艹天天色| 激情综合亚洲| 国产精品操| 精品99*| 蜜桃成语时李时珍 免费| 婷婷色综合| 丁香五月停停av| 久久机热这里只有精品免费视频| 伊人丁香在线| 日韩成人电影AV| 婷婷丁香色五月久久88| 九九这里只有精品在线视频| 婷婷五月天中文字幕| 五月天婷婷网站| 婷婷丁香五月综合| 狠狠干,狠狠操| 婷婷情色五月天| 99视频只有精品| 99爱免费视频| 看国产探花操逼三级片| 五月天a婷婷伊人| 欧美色骚婷婷五月天| 欧美精品999| 亚洲永久免费| 免费啪啪亚州视频| 婷婷丁香色情| 亚洲精品国产A久久久久久| www.狠狠| 色婷网| 激情五月婷| 九九AV在线| 99久超碰| 9 1超碰九色| 人妻激情在线| 亚洲激情视频在线观看| 五月丁香激| 色五月婷婷操逼| 婷婷久久综合| www.91.com黄| 任你爽精品免费视频6| 日本婷久久| 熟女激情网| 91精品综合久久久久久五月丁香| 五月婷婷久久大香蕉| 色综合久久88色综合天天99| 色哟哟www| 120分钟婬片免费看| 亚洲最大在线| 精品人妻伦一二三区久久| 久久久久这里只有精品| 久热这里| 无码人妻精品一区二区蜜桃色欲| 国产高清av黄色看片| 久久se 综合网 | 亚州色综合| 91激情五月开心| 97碰久久| 婷婷五月情色| 婷婷五月色网| 天天色噜| 综合大香蕉| 91九色网| 男人大jjc女人免费视频| 97色视频网| 婷婷射图五月天| 六月激情婷婷色| 人人色人人摸人人看| 色色色色色色综合| 婷婷的色色五月天| 色婷久久| 99婷婷狠狠成为人免费视频| 日韩五月婷婷久久| 久久狼人天堂| 久久人妻乱子伦| 激情五月婷婷丁香综合网| 狠狠搞狠狠操| 99色色网| 老司机视频lsj爱就色| 亚洲乱码w在线观看| 91超级碰| 婷婷五月视频| 色色色成人网| 亚洲狠狠色丁香婷婷综合久久| 光棍影院日韩精品| 亚洲综合网区| 四色99久久| 久久久18| Www.se.久久| 久久色天堂| 色婷婷五月网| 97色操| 尤物一区二区| 欧美情色一区| 九九九九国产| 久久久精品色| 999热这里只有精品| 色综合9| 无码se| 久久久精品人妻| 99ri在线视频| 99久精品视频| 天天干夜夜b| 日本91在线| 久久久天堂国产精品女人| 免费看成人747474九号视频在线观看| 激情综合五月色在线| 久久久久这里只有精品| 伊人在线视频| 色九月婷婷综合| 91狠狠色丁香婷婷综合久久精品| 六月丁香啪啪| 99超碰欧美| 久鲁鲁色网| 激情五月天小说网| 国产美女无遮挡裸体毛片A片| 996精品热视频| 国产资源91在线| 很很干天天干| 欧美日本黄色| 99热这里只有精品在线观看| 五月天综合| 五月天堂色| 丁香五月婷婷日本| av网站免费在线| 再綫Av免费視品| 色色丁香婷婷| 性欧美大战久久久久久久83| 啪啪色激情五月天| 色婷婷免费视频| 1769在线观看欧美国产| 五月丁香AV、伊人业余、性色熟妇| 五月天伊人综合| 久久天堂婷婷五月| 色色色欧美色色| 国产精品久久久久久久久久| 欧美成性色| 96精品久久久久久久久| 午夜福利8055| 天堂草在线观| 色婷丁香91| 丁香六月色情| 国自产拍偷拍精品啪啪一区二区| 99玖玖视频| 99性视频| 婷婷五月激情综合啪啪| 婷婷丁香五月天中文字幕| 韩日另类| 99这里只有免费的小视频在线观看| 能看的AV| 4399在线观看免费高清毛片| 九九爱激情| 在线播放成人| 99热99re6国产在线播放| 久久婷婷免费| 九九久久综合网站| 香蕉曰比| 五月天另类小说| 色亭亭九月| 人人爱人人摸人人澡| 草草色情综合网| www.av骚货| 久久丁香网| 夜夜爽天天干| www、丁香五月天| 欧美日韩成人在线网| 日本99在线视频| 超碰色色综合| 超碰av在线| www.婷婷五月天| 99热这里只有精品手机在线观看| 亚洲熟妇AV乱码在线观看| 婷婷在线操| 色婷婷中文| 五月五婷婷| 婷婷大乡焦噜噜| 大香蕉五月天| 天天狠天天狠| 色色婷婷综合| 色综合色综合色综合| 日本色色网站| 久热免费| 婷婷五月天亚洲天堂| 国产女18毛片多18精品| 亚洲狠狠干| 九九色婷婷| 丰满少妇猛烈A片免费看观看| 丁香六月毛片| 久久婷婷亚洲无码一起| 97资源碰碰| 国产va在线视频| 亚洲成人AV电影网| 久9免费视频| 99久热这里有精品| 99天堂在线观看免费视频| 久热这里| 久久在线大香蕉| 五月婷丁香| 丁香五月天在线| 婷婷五月天综合久久| 国外亚洲成AV人片在线观看| 日韩视频99| 中文字幕综合网| 五月天色小说| 婷婷色五天| 激情开心五月婷婷| 综合久久首页| 亚洲天天| 色婷婷久综合久久一本国产AV| AV无码免费| 欧美大片| 中文字幕,综合,91| 开心深爱五月天| 丁香六月婷婷开心婷婷网| 九九色综合九九色| 99在线亚洲| 婷婷五月天成人五月天| 大香焦A∨| 日本天天色| 开心五月激情五月丁香五月婷婷| 婷婷午夜综合| 国产黄大片在线观看画质优化 | 99久在线精品| 五五月五月| 婷婷天堂综合| 无码免费人妻A片AAA毛片西瓜 | 人人超碰99| 九九热精品视频在线观看| 深爱激情综合网| 五月丁香六月欧美综合| 99视频在线啪| 七月婷婷色香综合网| 五月婷婷综合久久| 五月花综合视频| 五月婷婷 六月丁香| 久久九九中文字幕| 97超喷视频在线观看| 九九婷婷综合| 激情五月婷婷丁香| 99久久综合精品五月天| 91天天操天天干天天射| 91丨九色熟女丨首页| 国产毛片操B| 天天插天天插| 婷婷色中文字幕| 丁香五月天在线观看| 涩涩网五月天| 国产精品噜噜在线视频| 久久99久久99精品免观看粉| 91在线观看www| 青青草原亚洲久| 97色婷| 色色网站在线| 97干免费视频| 五月婷婷av| 激情深爱五月| 天天cha成人综合网| 99热这里只有精品手机在线观看| 天天激情5月天亚洲| 99久久玖玖| 六月激情婷婷综合| 香蕉乱插| 激情碰碰碰| 大香蕉久久伊人网| 久操乱| 老师的粉嫩小又紧水又多A片视频| 激情小说五月天| 色综合天天| 丁香五月天视频| 免费看欧美成人A片无码| 婷婷五月天日本无码| 欧美激情综合色丁香婷婷五月天| 婷婷综合五月色播| 婷婷色系婷色| 九九色99| 丁香五月婷婷骚视屏| 九色视频这里只有精品| 婷婷成人五月天一区| 婷婷涩涩网| 五月婷婷色播网| 男人综合网| 亚洲五月丁香综合网| 美女天天艹人人爽| 5月色亭亭视频| 久鲁鲁色网 | 日韩啪啪网| 色五月丁香五月| 国产成人精品一区二三区熟女在线 | 9l久久久视频| 色婷婷色五月综合| 激情性爱网站| 伊人www22综合色| 色愛综合网| 五月天综合缴情网网站0| 五月亭亭激情综合| 色婷亚洲| 天天日本夜夜谢| 久久久久婷婷| 丁香五月天堂网| 午夜无码熟熟妇丰满人妻| 1024AV视频| 噜噜狠狠色综合久| 五月天丁香成人社| 色狠狠五月天| 五月丁香亚洲五月| 五月天婷婷激情春色小说| 婷婷五月天激情开心网| 色五月色五天色情网| 99亚洲视频| 色婷婷五月综合激情中文字幕| 久色| 在线看黄色| 色五月琪琪| 南京搡BBBB搡BBBB| 激情五月天www| 婷婷丁香五月网| 婷婷五月激情中文字幕| 九九综合久久| 免费观看日韩成人av| 91在线日| 九九色之九九色88| 五月婷婷就去色| 精品久久艹| 天天干天天干天天操| 成人综合网站| 91日韩美女被插视频| 欧美婷婷六月丁香综合色连续高潮抽搐| 开心久久爱五月天| 96丁香六月婷婷蜜桃综合久久| 99色网站| 久久婷婷艹| wwwss在线观看| 成人电影丁香六月天| 超碰97干| 一本大道伊人AV久久综合| 色蜜婷婷| 99热视| 日韩99视频| 日本二级毛片二级毛片| 亚洲另类av| 激情五月婷婷伊人| Av九九| 国产婷婷色综合AV蜜臀AV | 激情爱爱网站| 青青草视频福利| 欧美黄色韩日网| 日产精品久久久久久久蜜臀 | 精品久久人妻| 亚洲成av人影院| 日本三级日本三级三级人妇四虎| a69在线视频| 激情久久久久久| 操草草草| 五月丁香六月色婷婷综合五月天| 五月久视频| 五月天婷婷综合色| 亚洲有码在线视频| 黄页大全十八禁| www.色五月| 91无码视频| 色狠狠色综合| 国产精产国品一二三在观看| 狠狠人妻色综合| 婷婷综合色五月天| 少妇性BBB搡BBB爽爽爽电影| 99热9999| 天天插,天天射| 亚洲视频综合网| 五月综合视频在线| 91久久久久久久久18| 色婷婷无吗| 思思久日精品视频| 思思久久99热只有频精品66| 免费国产视频| 丁香婷婷激情五月天无毒不卡蜜桃| 婷婷99视频全集高清| 婷五月天天| 91性高潮久久久久久久久| 97久操视频| 丁香婷婷噜噜| 九九婷| 日韩按摩二区| 韩国真做片在线观看| 成人丁香五月| 三级三久久线久久99久目本WW| 日本色色网站| 五月激情站| 香蕉曰比| 99热99热| 黄色AAAA韩国guochansanji| 欧美va视频不用播放器的va视频网| 97人人干| 五月婷婷六月丁香| 小视频久久久aaa| 免费黄色AV| 玖玖综合网| 丁香六月婷婷| 五月天亭亭俺也| 成人免费网站免费看| 五月花免费视频| 99内射视频| 思思久久99| 丁香五月777| 99热亚洲| 亚洲操逼网| 五月综合无码| 激情综合网婷婷久久| 日本人妻伦在线中文字幕|