精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用了這么久的Mybatis,結果面試官問的問題,我竟然還猶豫了

開發 架構
Mybatis是一個半自動 ORM(對象關系映射)框架,它內部封裝了JDBC,加載驅動、創建連接、創建 statement 等繁雜的過程,我們開發的時候只需要關注如何編寫 SQL 語句,而不用關心其他的。

[[402089]]

本文轉載自微信公眾號「Java極客技術」,作者鴨血粉絲。轉載本文請聯系Java極客技術公眾號。

前段時間阿粉的一個朋友和阿粉吃飯,在吃飯的時候和阿粉瘋狂的吐槽面試官,說面試官問的問題都是些什么問題呀,我一個干了三四年的開發,也不說問點靠譜的,阿粉很好奇,問題問完基礎的,一般不都是根據你自己的簡歷進行提問么?而接下來他說的出來的問題,阿粉表示,阿粉需要繼續學習了。

Mybatis是什么?

說到這個,讀者大人們肯定心想,阿粉是在開玩笑么?你一個 Java 程序員,你不知道Mybatis是啥么?不就是個持久層的框架么,這東西有啥好說的呢?但是阿粉還是要給大家說。

Mybatis是一個半自動 ORM(對象關系映射)框架,它內部封裝了JDBC,加載驅動、創建連接、創建 statement 等繁雜的過程,我們開發的時候只需要關注如何編寫 SQL 語句,而不用關心其他的。

為什么說 Mybatis 是一個半自動 ORM 的框架呢?

ORM,是Object和Relation之間的映射,而Mybatis 在查詢關聯對象或關聯集合對象時,需要手動編寫 sql 來完成,所以,稱之為半自動 ORM 框架,而Hibernate 屬于全自動 ORM 映射工具,使用 Hibernate 查詢關聯對象或者關聯集合對象時,可以根據對象關系模型直接獲取,所以它是全自動的。

這也是為什么有些面試官在面試初級程序員的時候,很喜歡說,你覺得 Mybatis , 和 Hibernate 都有什么優缺點,為啥你們選擇使用的 Mybatis 而不選擇使用 Hibernate 呢?

我們都說了 Mybatis是什么了,接下來肯定需要說說面試官都問了什么問題,能讓阿粉的朋友變得非常猶豫。

Mybatis的一級、二級緩存是什么你了解么?

Mybatis 的一級緩存

我們先說 Mybatis 的一級緩存,因為這是如果不手動配置,他是自己默認開啟的一級緩存,一級緩存只是相對于同一個 SqlSession 而言,參數和SQL完全一樣的情況下,我們使用同一個SqlSession對象調用一個Mapper方法,往往只執行一次SQL,因為使用SelSession第一次查詢后,MyBatis會將其放在緩存中,以后再查詢的時候,如果沒有聲明需要刷新,并且緩存沒有超時的情況下,SqlSession都會取出當前緩存的數據,而不會再次發送SQL到數據庫。

當我們面試的時候,說完這個,一般情況下,面試官一定會追問下去,畢竟技術就是要問到你的知識盲區才會停止。

那我們就來畫個圖表示一下一級緩存:

那面試官肯定會說,直接從數據庫查不就行了,為啥要一級緩存呢?

當我們使用MyBatis開啟一次和數據庫的會話時, MyBatis 會創建出一個 SqlSession 對象表示一次與數據庫之間的信息傳遞,在我們執行 SQL 語句的過程中,們可能會反復執行完全相同的查詢語句,如果不采取一些措施,我們每一次查詢都會查詢一次數據庫,而如果在極短的時間內做了很多次相同的查詢操作,那么這些查詢返回的結果很可能相同。

也就是說,如果我們在短時間內,頻繁的去執行一條 SQL ,查詢返回的結果本來應該是改變了,但是我們查詢出來的時候,會出現結果一致的情況,正是為了解決這種問題,也為了減輕數據庫的開銷,所以 Mybatis 默認開啟了一級緩存。

Mybatis 的二級緩存

Mybatis 的二級緩存一般如果你不對他進行設置,他是不會開啟的,而二級緩存是什么呢?Mybatis 中的二級緩存實際上就是 mapper 級別的緩存,而這時候肯定會有人說,那么不同之間的 Mapper 是同一個緩存么?

答案是否定的,他不是一個,Mapper 級別的緩存實際上就是相同的 Mapper 使用的是一個二級緩存,但是在二級緩存中,又有多個不同的 SqlSession ,而不同的 Mapper 之間的二級緩存也就是互相不會影響的。

就類似下面的圖:

這二級緩存是不是就看起來有點意思了?

那怎么能夠開啟二級緩存呢?

1.MyBatis 配置文件

  1. <settings> 
  2.  <setting name = "cacheEnabled" value = "true" /> 
  3. </settings> 

2.MyBatis 要求返回的 POJO 必須是可序列化的

3.Mapper 的 xml 配置文件中加入 標簽

既然我們想要了解這個二級緩存,那么必然,我們還得知道它里面的配置都有哪些含義。

我們先從標簽看起,然后從源碼里面看都有哪些配置信息提供給我們使用:

blocking : 直譯就是調度,而在 Mybatis 中,如果緩存中找不到對應的 key ,是否會一直 blocking ,直到有對應的數據進入緩存。

eviction : 緩存回收策略

而緩存回收策略,在源碼中是有直接體現的,那么他們分別都對應了什么形式呢?

  1. typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class); 
  2. typeAliasRegistry.registerAlias("FIFO", FifoCache.class); 
  3. typeAliasRegistry.registerAlias("LRU", LruCache.class); 
  4. typeAliasRegistry.registerAlias("SOFT", SoftCache.class); 
  5. typeAliasRegistry.registerAlias("WEAK", WeakCache.class); 
  • PERPETUAL : 選擇 PERPETUAL 來命名緩存,暗示這是一個最底層的緩存,數據一旦存儲進來,永不清除.好像這種緩存不怎么受待見。
  • FIFO : 先進先出:按對象進入緩存的順序來移除它們
  • LRU : 最近最少使用的:移除最長時間不被使用的對象。
  • SOFT : 軟引用:移除基于垃圾回收器狀態和軟引用規則的對象。
  • WEAK : 弱引用:更積極地移除基于垃圾收集器狀態和弱引用規則的對象。

大家雖然看著 PERPETUAL 排在了第一位,但是它可不是默認的,在 Mybatis 的緩存策略里面,默認的是 LRU 。

PERPETUAL :

源代碼如下:

  1. public class PerpetualCache implements Cache { 
  2.   private final String id; 
  3.   private Map<Object, Object> cache = new HashMap<>(); 
  4.   public PerpetualCache(String id) { 
  5.     this.id = id; 
  6.   } 

恩?看著是不是有點眼熟,它怎么就只是包裝了 HashMap ? 你還別奇怪,他還真的就是使用的 HashMap ,不得不說,雖然人家是使用的 HashMap ,但是那可是比咱們寫的高端多了。

既然使用 HashMap ,那么必然就會有Key,那么他們的Key是怎么設計的?

CacheKey:

  1. public class CacheKey implements Cloneable, Serializable { 
  2.   private static final long serialVersionUID = 1146682552656046210L; 
  3.   public static final CacheKey NULL_CACHE_KEY = new NullCacheKey(); 
  4.   private static final int DEFAULT_MULTIPLYER = 37; 
  5.   private static final int DEFAULT_HASHCODE = 17; 
  6.   private final int multiplier; 
  7.   private int hashcode; //用于表示CacheKey的哈希碼 
  8.   private long checksum; //總和校驗,當出現復合key的時候,分布計算每個key的哈希碼,然后求總和 
  9.   private int count;//當出現復合key的時候,計算key的總個數 
  10.   // 8/21/2017 - Sonarlint flags this as needing to be marked transient.  While true if content is not serializable, this is not always true and thus should not be marked transient. 
  11.   private List<Object> updateList;//當出現復合key的時候,保存每個key 
  12.    

確實牛逼,至于內部如何初始化,如何進行操作,大家有興趣的可以去閱讀一下源碼,導入個源碼包,打開自己看一下。

FIFO: 先進先出緩沖淘汰策略

  1. public class FifoCache implements Cache { 
  2.  
  3.   private final Cache delegate; //被裝飾的Cache對象 
  4.   private final Deque<Object> keyList;//用于記錄key 進入緩存的先后順序 
  5.   private int size;//記錄了緩存頁的上限,超過該值需要清理緩存(FIFO) 
  6.  
  7.   public FifoCache(Cache delegate) { 
  8.     this.delegate = delegate; 
  9.     this.keyList = new LinkedList<>(); 
  10.     this.size = 1024; 
  11.   } 

在 FIFO 淘汰策略中使用了 Java 中的 Deque,而 Deque 一種常用的數據結構,可以將隊列看做是一種特殊的線性表,該結構遵循的先進先出原則。Java中,LinkedList實現了Queue接口,因為LinkedList進行插入、刪除操作效率較高。

當你看完這個源碼的時候,是不是就感覺源碼其實也沒有那么難看懂,里面都是我們已經掌握好的知識,只不過中間做了一些操作,進行了一些封裝。

LRU : 最近最少使用的緩存策略

而 LUR 算法,阿粉之前都說過,如果對這個算法感興趣的話,文章地址給大家送上,經典的 LRU 算法,你真的了解嗎?

而我們需要看的源碼則是在 Mybatis 中的源碼,

  1. public class LruCache implements Cache { 
  2.  
  3.   private final Cache delegate; 
  4.   private Map<Object, Object> keyMap; 
  5.   private Object eldestKey;//記錄最少被使用的緩存項key 
  6.  
  7.   public LruCache(Cache delegate) { 
  8.     this.delegate = delegate; 
  9.     setSize(1024);//重新設置緩存的大小,會重置KeyMap 字段 如果到達上限 則更新eldestKey 
  10.   } 
  11.     public void putObject(Object key, Object value) { 
  12.       delegate.putObject(key, value); 
  13.       // 刪除最近未使用的key 
  14.       cycleKeyList(key); 
  15.     } 

SOFT: 基于垃圾回收器狀態和軟引用規則的對象

在看到基于垃圾回收器的時候,阿粉就已經開始興奮了,竟然有GC的事情,那還不趕緊看看,這如此高大上(裝杯)的事情,來瞅瞅吧!

  1. public class SoftCache implements Cache { 
  2.   //在SoftCache 中,最近使用的一部分緩存項不會被GC回收,這就是通過將其value添加到 
  3.   private final Deque<Object> hardLinksToAvoidGarbageCollection; 
  4.   //引用隊列,用于記錄GC回收的緩存項所對應的SoftEntry對象 
  5.   private final ReferenceQueue<Object> queueOfGarbageCollectedEntries; 
  6.   //底層被修飾的Cache 對象 
  7.   private final Cache delegate; 
  8.   //連接的個數,默認是256 
  9.   private int numberOfHardLinks; 
  10.  
  11.   public SoftCache(Cache delegate) { 
  12.     this.delegate = delegate; 
  13.     this.numberOfHardLinks = 256; 
  14.     this.hardLinksToAvoidGarbageCollection = new LinkedList<>(); 
  15.     this.queueOfGarbageCollectedEntries = new ReferenceQueue<>(); 
  16.   } 
  17.    
  18.   public void putObject(Object key, Object value) { 
  19.       // 清除被GC回收的緩存項 
  20.       removeGarbageCollectedItems(); 
  21.       // 向緩存中添加緩存項 
  22.       delegate.putObject(key, new SoftEntry(key, value, queueOfGarbageCollectedEntries)); 
  23.     } 
  24.    public Object getObject(Object key) { 
  25.        Object result = null
  26.        // 查找對應的緩存項 
  27.        @SuppressWarnings("unchecked") // assumed delegate cache is totally managed by this cache 
  28.        SoftReference<Object> softReference = (SoftReference<Object>) delegate.getObject(key); 
  29.        if (softReference != null) { 
  30.          result = softReference.get(); 
  31.          // 已經被GC 回收 
  32.          if (result == null) { 
  33.            // 從緩存中清除對應的緩存項 
  34.            delegate.removeObject(key); 
  35.          } else { 
  36.            // See #586 (and #335) modifications need more than a read lock  
  37.            synchronized (hardLinksToAvoidGarbageCollection) { 
  38.              hardLinksToAvoidGarbageCollection.addFirst(result); 
  39.              if (hardLinksToAvoidGarbageCollection.size() > numberOfHardLinks) { 
  40.                hardLinksToAvoidGarbageCollection.removeLast(); 
  41.              } 
  42.            } 
  43.          } 
  44.        } 
  45.        return result; 
  46.      } 
  47.     public void clear() { 
  48.         synchronized (hardLinksToAvoidGarbageCollection) { 
  49.           // 清理強引用集合 
  50.           hardLinksToAvoidGarbageCollection.clear(); 
  51.         } 
  52.         // 清理被GC回收的緩存項 
  53.         removeGarbageCollectedItems(); 
  54.         delegate.clear(); 
  55.       } 
  56.     //其中指向key的引用是強引用,而指向value的引用是弱引用 
  57.     private static class SoftEntry extends SoftReference<Object> { 
  58.       private final Object key
  59.    
  60.       SoftEntry(Object key, Object value, ReferenceQueue<Object> garbageCollectionQueue) { 
  61.         super(value, garbageCollectionQueue); 
  62.         this.key = key
  63.       } 
  64.     } 

WEAK : 基于垃圾收集器狀態和弱引用規則的對象

  1. public class WeakCache implements Cache { 
  2.   private final Deque<Object> hardLinksToAvoidGarbageCollection; 
  3.   private final ReferenceQueue<Object> queueOfGarbageCollectedEntries; 
  4.   private final Cache delegate; 
  5.   private int numberOfHardLinks; 
  6.  
  7.   public WeakCache(Cache delegate) { 
  8.     this.delegate = delegate; 
  9.     this.numberOfHardLinks = 256; 
  10.     this.hardLinksToAvoidGarbageCollection = new LinkedList<>(); 
  11.     this.queueOfGarbageCollectedEntries = new ReferenceQueue<>(); 
  12.   } 

WeakCache在實現上與SoftCache幾乎相同,只是把引用對象由SoftReference軟引用換成了WeakReference弱引用。 

在這里阿粉也就不再多說了,關于 Mybatis 的二級緩存,你了解了么?下次遇到面試官問這個的時候,你應該知道怎么成功(裝杯)不被打了吧。

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2020-12-01 10:18:16

RabbitMQ

2022-02-08 13:39:35

LinuxUNIX系統

2022-11-04 08:47:52

底層算法數據

2021-05-28 06:16:28

藍牙Wi-FiNFC

2021-11-08 10:00:19

require前端模塊

2021-07-21 10:10:14

require前端代碼

2022-01-25 12:41:31

ChromeResponse接口

2025-03-07 02:00:00

webpackPlugin開發

2020-03-30 09:22:03

AI語音技術機器視覺

2021-05-27 21:18:56

谷歌Fuchsia OS操作系統

2018-01-31 10:24:45

熱插拔原理服務器

2020-12-07 11:05:21

HttpClient代碼Java

2019-10-21 09:56:37

MySQLCOUNTInnoDB

2022-08-28 20:35:52

三次握手四次揮手TCP

2021-04-28 11:35:06

Java框架日志

2020-09-17 17:53:12

面試ArrayList數組

2021-11-08 09:18:01

CAS面試場景

2021-12-25 22:31:10

MarkWord面試synchronize

2010-08-23 15:06:52

發問

2020-06-05 18:32:41

HBaseQAQHDFS
點贊
收藏

51CTO技術棧公眾號

亚洲色图一区二区三区| 国产福利不卡视频| 中文字幕精品www乱入免费视频| 中文字幕天天干| 91一区二区三区在线| 成人黄页在线观看| 国产精品久久久久久婷婷天堂| 免费高清在线观看电视| 日韩成人动漫在线观看| 欧美日韩色一区| 日韩 欧美 视频| 成人免费在线视频网| 国产ts人妖一区二区| 国产成人黄色av| 久久久久99精品成人片毛片| 啪啪亚洲精品| 亚洲成人激情图| 天天色天天综合网| 欧美性猛交xxx高清大费中文| 亚洲天堂a在线| 欧美黑人xxxxx| 亚洲第一精品网站| 麻豆精品视频在线观看视频| 午夜免费在线观看精品视频| 在线看的片片片免费| 国产成人调教视频在线观看 | 中文字幕免费不卡| 精品一区久久| 免费看国产片在线观看| 国产精品18久久久久久久久久久久 | 国产伦精品一区二区三区免费视频| 97人妻精品视频一区| av不卡在线| 久久久久久国产免费| 日韩福利小视频| 国产精品久久久久久久久久10秀| 亚洲精品日韩在线| yy6080午夜| 中文字幕亚洲在线观看| 日韩一区二区在线免费观看| 亚洲这里只有精品| 日韩精选视频| 欧美伊人久久久久久午夜久久久久| 久色视频在线播放| h片在线观看视频免费| 亚洲激情av在线| 国产精品久久久影院| 国产福利视频在线| 亚洲图片你懂的| 三年中国中文在线观看免费播放| √天堂资源地址在线官网| 国产亚洲欧美一区在线观看| 日韩国产欧美精品| av影片在线看| 国产精品三级久久久久三级| 香蕉久久夜色| 免费在线看黄网站| 亚洲视频免费观看| 日本免费成人网| 波多野结依一区| 激情亚洲一区二区三区四区| av网站在线观看不卡| 欧美黄色三级| 欧美妇女性影城| 国产av一区二区三区传媒| 91成人精品在线| 日韩高清有码在线| 91精彩刺激对白露脸偷拍| 精品日韩免费| 欧美成人精品一区二区| 久久久久免费看| 亚洲视频www| 国产精品久久久久久久久免费| 亚洲av无码乱码国产精品fc2| 久久国产精品一区二区| 亚洲自拍偷拍福利| 天天综合网在线观看| 久久这里只有精品视频网| 视频一区在线免费观看| 国产cdts系列另类在线观看| 亚洲自拍偷拍麻豆| 日韩视频免费在线播放| 国产精品色婷婷在线观看| 亚洲第一网站男人都懂| 东方伊人免费在线观看| 国内在线观看一区二区三区| 琪琪第一精品导航| 国产剧情精品在线| av一二三不卡影片| 在线观看国产一区| 日本蜜桃在线观看视频| 欧美三级视频在线播放| 老熟女高潮一区二区三区| 嫩草一区二区三区| 欧美另类交人妖| 波多野结衣黄色网址| 国产乱码一区二区三区| 日本最新一区二区三区视频观看| 直接在线观看的三级网址| 91国产视频在线观看| 一级黄色大片免费看| 成人在线电影在线观看视频| 欧美激情成人在线视频| 亚洲无码精品在线播放| 99精品欧美一区二区蜜桃免费 | 91.com视频| 中文字幕日韩三级片| 久久精品影视| 国产成人精品免费久久久久| 午夜精品小视频| 国产精品乱码久久久久久| 国产白丝袜美女久久久久| 动漫一区二区三区| 在线观看不卡av| 国产69精品久久久久久久久久| 九九**精品视频免费播放| 欧美一区二区三区四区在线观看地址| 精精国产xxxx视频在线中文版 | 国产精品一区二区三区免费视频 | 91极品身材尤物theporn| 久久天天做天天爱综合色| 日韩精品一区二区在线视频| 午夜不卡一区| 在线播放国产一区二区三区| 中文字幕亚洲高清| 顶级嫩模精品视频在线看| 中国黄色录像片| **欧美日韩在线| 日韩中文av在线| 波多野结衣电车痴汉| 91美女视频网站| 成人免费视频91| 成人福利一区| 欧美日本黄视频| 国产人妖一区二区| 亚洲欧美一区二区久久| 激情图片中文字幕| 2023国产精品久久久精品双| 国产精品夜间视频香蕉| av在线电影网| 欧美日韩一区二区三区视频| a级黄色免费视频| 毛片av一区二区| 亚洲乱码一区二区三区| jvid一区二区三区| 日韩中文综合网| 一级片视频播放| 自拍偷拍亚洲综合| 激情成人在线观看| 欧美日韩少妇| 国产在线欧美日韩| 竹内纱里奈兽皇系列在线观看| 日韩av在线免费观看| 中文字幕精品三级久久久| 91老司机福利 在线| 日韩av在线综合| heyzo久久| 91天堂在线观看| 欧美xxx黑人xxx水蜜桃| 精品国产伦一区二区三区观看方式 | 色综合久久综合| 欧美老女人性生活视频| 久久99热狠狠色一区二区| 天天干天天操天天干天天操| 亚洲成人偷拍| 97香蕉超级碰碰久久免费软件| 黄色在线观看网| 欧美精品 国产精品| 18岁成人毛片| 2017欧美狠狠色| 欧美日韩大尺度| 91精品国产91久久久久久黑人| 97人人模人人爽视频一区二区| 久草在线资源福利站| 国产午夜精品一区理论片飘花 | 中文字幕一区二区三区精品 | 久久久精品免费看| 欧美激情一区二区三区四区| 欧美视频国产视频| 18成人免费观看视频| 欧美二区三区| 爱情电影网av一区二区| 欧美一级大片视频| 大片免费在线看视频| 亚洲国产一区二区三区在线观看| 亚洲av无码乱码国产精品fc2| 亚洲精品自拍动漫在线| 一区二区不卡免费视频| 国产一区二区在线电影| 黄色一级片播放| 亚洲综合中文| 欧美系列一区| 日韩精品三级| 国产精品第一区| 91福利区在线观看| 丝袜亚洲另类欧美重口| 污污网站在线免费观看| 91.com在线观看| 免费无码国产精品| 亚洲成人精品影院| а天堂中文在线资源| 99视频精品全部免费在线| 日本不卡一区在线| 国产毛片久久| 国产片侵犯亲女视频播放| 国产一区二区三区四区大秀| 成人情视频高清免费观看电影| 国产精品久久久久av电视剧| 国自在线精品视频| 成人影院www在线观看| 伊人成人开心激情综合网| 天天操天天爱天天干| 欧美一级欧美三级| 久久精品国产亚洲av麻豆蜜芽| 精品日本高清在线播放 | 色哟哟在线观看一区二区三区| 久久久久久福利| 亚洲天天做日日做天天谢日日欢 | 性xxxx18| 欧美精品一区二区三区在线播放| 亚洲综合免费视频| 欧洲亚洲精品在线| 国产精品久免费的黄网站| 亚洲成a人在线观看| 欧美亚洲日本在线| 亚洲天堂福利av| 特一级黄色录像| 亚洲男同性恋视频| 黄色片子在线观看| 一区二区中文字幕在线| 多男操一女视频| 自拍偷拍欧美激情| 国精品无码一区二区三区| 国产精品久久久久久久第一福利 | 久久社区一区| 亚洲三区在线| 欧美疯狂party性派对| 亚洲一区二区三区免费看| 日韩成人精品一区| 一本色道久久99精品综合| 成人综合久久| 尤物一区二区三区| 91久久久精品国产| 99亚洲精品视频| 亚洲综合色站| 91.com在线| 亚洲东热激情| 欧美 国产 小说 另类| 久久一本综合频道| 别急慢慢来1978如如2| 视频一区二区不卡| 污片在线免费看| 久久国内精品自在自线400部| 在线视频观看一区二区| 国产美女精品一区二区三区| 韩国三级hd中文字幕有哪些| 成人性视频网站| 中国黄色a级片| 国产视频911| 婷婷在线精品视频| 亚洲午夜免费电影| 久久久久女人精品毛片九一| 欧美在线视频你懂得| 国产影视一区二区| 欧美精品一区二区三区蜜桃| 日夜干在线视频| 中文字幕国产日韩| 日本无删减在线| 欧美亚洲成人xxx| 欧美午夜三级| 国产精品三区四区| 九九热线有精品视频99| 在线视频不卡一区二区| 狠狠爱综合网| 一级黄色香蕉视频| 国产成人精品一区二| 成人影视免费观看| 国产精品久久久久aaaa| 国产主播在线播放| 欧美专区日韩专区| 亚洲欧美另类一区| 国产小视频国产精品| 成人日韩欧美| 日韩暖暖在线视频| 日本精品在线观看| 日产精品一线二线三线芒果 | aa在线免费观看| 精品一二线国产| 鲁大师私人影院在线观看| 中文字幕日本不卡| 国产精品自拍99| 制服视频三区第一页精品| 日韩精品123| 九九久久久久久久久激情| 日韩欧美另类一区二区| 成人看片视频| 久久一区二区三区电影| 久久久久免费看黄a片app| 精品一区二区av| 波多野在线播放| 亚洲国产精品久久久久秋霞影院| 中文字幕乱码中文字幕| 日韩成人高清在线| 在线看福利影| 国产在线观看不卡| 久操精品在线| 欧美,日韩,国产在线| 国产一区91精品张津瑜| 色婷婷国产精品免| 日韩欧美在线视频观看| 性生活三级视频| 久久精品亚洲一区| 免费污视频在线一区| 久久草.com| 欧美午夜不卡| 日本高清免费在线视频| 中文字幕第一区综合| 亚洲第一网站在线观看| 日韩成人在线视频| 91破解版在线观看| 国产91色在线|亚洲| 亚洲女同一区| 亚洲在线观看网站| 成人欧美一区二区三区| 高潮无码精品色欲av午夜福利| 亚洲热线99精品视频| 国产在线观看www| 国产乱码精品一区二区三区不卡| 68国产成人综合久久精品| 国产福利在线免费| 国产精品麻豆网站| 在线观看国产精品入口男同| 亚洲人成绝费网站色www| 成人欧美一区二区三区的电影| 精品在线视频一区二区三区| 黄色综合网站| 亚洲精品乱码久久久久久蜜桃图片| 亚洲精品成人精品456| 超碰在线人人干| 国内精品久久久久久中文字幕| 亚洲三区欧美一区国产二区| 欧妇女乱妇女乱视频| 成人av电影在线网| www..com国产| 亚洲欧美制服另类日韩| 成人日韩在线观看| 亚洲人成网站在线观看播放| 麻豆国产91在线播放| 亚洲人与黑人屁股眼交| 日韩午夜激情免费电影| 青草青在线视频| 久久久com| 日韩avvvv在线播放| 欧美美女性生活视频| 欧美一级搡bbbb搡bbbb| 欧美xxxx视频| 蜜桃狠狠色伊人亚洲综合网站| 丝袜诱惑亚洲看片| 在线免费看视频| 欧美成人猛片aaaaaaa| 是的av在线| 四虎影院一区二区三区| 精品一区中文字幕| 免费在线观看国产精品| 亚洲精品av在线| 韩国成人在线| 黄色一级片av| 99久久国产综合色|国产精品| 97人妻一区二区精品视频| 日韩一区在线视频| 999在线精品| 日韩a在线播放| 亚洲精品一二三| 亚洲aⅴ乱码精品成人区| 国产精品日韩电影| 欧美+日本+国产+在线a∨观看| 第四色在线视频| 欧美精品高清视频| 国产调教在线| 精品国产无码在线| av在线免费不卡| 国产又大又黄又爽| 2019亚洲男人天堂| 希岛爱理av一区二区三区| 好男人香蕉影院| 欧美日韩国产免费| 9765激情中文在线| 在线观看福利一区| 91亚洲男人天堂| 国产三级视频在线播放| 欧美中文在线视频| 亚洲午夜极品| 欧美xxxx精品| 日韩精品视频在线播放| 成人在线视频区| 国产视频手机在线播放| 亚洲aaa精品| 粗大黑人巨茎大战欧美成人| 日韩精品最新在线观看| 成人精品视频网站|