日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2023 亲自经历面试的初中级java面试题(持续更新)

發布時間:2024/1/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2023 亲自经历面试的初中级java面试题(持续更新) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面試題

  • 基礎題
    • 集合
      • 說一下list,set,map的區別。
      • hashMap key是自己定義的類,有沒復寫過hashcode或者equals這些方法 ?
      • 線程安全問題
      • List
        • ArrayList 和 LinkedList 的區別是什么?
      • Set
        • HashSet的原理(怎么保證不重復)?
      • Map
        • hashMap
          • hashMap的原理(怎么存儲鍵值對的 /怎么put進去的)
        • HashMap和HashTable區別
        • HashMap和HashSet的區別
        • HashMap和TreeMap的區別
        • TreeSet和HashSet區別
    • 反射
      • 什么是反射?
      • 哪里用到反射機制?
    • 線程
      • 線程和進程的區別?
      • 守護線程是什么?
      • 創建線程有哪幾種方式?
      • 線程有哪些狀態?
      • sleep() 和 wait() 有什么區別?
      • 在 Java 程序中怎么保證多線程的運行安全?
      • 線程池
        • 什么是線程池?
        • 為什么要使用線程池?
        • 線程池有什么作用?
        • 線程池都有哪幾種工作隊列
        • 悲觀鎖、樂觀鎖
          • 什么是悲觀鎖,樂觀鎖
          • 實現方式
        • 什么是死鎖?
        • synchronized 和 Lock 有什么區別?
    • java垃圾回收
      • GC的主要任務
      • 垃圾回收機制的主要解決問題
        • 1、哪些內存需要回收?如何判斷?
        • 2、什么時候回收?
        • 3、如何回收,這就牽扯到垃圾收集算法和垃圾收集器
      • 垃圾回收總結:
    • JAVA8的新特性
    • String類的常用方法有哪些?
    • String,StringBuffer,StringBuilder的區別。
    • GET 和POST 的區別?
    • session與cookie的差別
    • 說一下 session 的工作原理?
    • 如果客戶端禁止 cookie 能實現 session 還能用嗎?
    • 用戶登錄的功能服務器需要做什么,如何保持登錄狀態?
    • 泛型是什么?
    • 靜態屬性與普通屬性的區別是什么?
    • throw 和 throws 的區別?
    • final、finally、finalize 有什么區別?
      • final
      • finally
      • finalize
    • 說一下堆棧的區別?
    • 局部變量是存放在棧中,還是存放在堆棧中?
  • 框架
    • Spring
      • Spring是什么?
      • Spring有哪些優點?
      • AOP
      • IOC
      • 什么是 ORM 框架?
      • 注解是怎么生效的?
      • Spring事務的實現方式和實現原理
      • Spring事務管理的方式有幾種?
      • spring 中的 bean 是線程安全的嗎?
      • spring 事務實現方式有哪些?
      • 說出Spring 或者 Springmvc中常用的5個注解,并解釋含義
      • log4j日志級別
    • SpringBoot
      • SpringBoot是什么?
      • Spring Boot 的配置文件有哪幾種格式?它們有什么區別?
      • springboot事務是怎么去控制的 / 實現管理事務的?
      • Spring Boot 的核心注解是哪個?它主要由哪幾個注解組成的?
      • SpringBoot 常用注解
      • Spring Boot 注冊bean的方法
      • SpringBoot注入依賴及注解
      • Spring Boot 自動配置原理是什么?
      • Springboot里面哪些注解屬于單例模式?
      • @Controller和@RestController的區別
      • springboot常用的starter有哪些?
    • Mybatis
      • Mybatis模糊查詢用#和$什么區別
      • 簡述Mybatis提供的兩級緩存,以及緩存的查找順序
    • SpringCloud
      • springCloud是什么?
      • spring cloud 斷路器的作用是什么?
      • spring cloud 的核心組件有哪些?
    • 高并發
      • 高并發解決方案案例
  • 數據庫
    • 索引
      • 什么是索引?(為什么需要使用索引)
      • 索引具體采用的哪種數據結構
      • 既然你提到InnoDB使用的B+ 樹的索引模型,那么你知道為什么采用B+ 樹嗎?這和Hash索引比較起來有什么優缺點嗎?
    • 優化
      • SQL語句優化
      • 分庫分表
      • 讀寫分離
    • Mysql和Oracle有什么區別?
    • group by后面還可以加什么
    • MySQL
      • MySQL的事務
      • 事務的并發問題:
      • MySQL事務隔離級別:
      • 如何做 MySQL 的性能優化?
      • 怎么確定有沒有用到索引
    • Redis
      • Redis是什么及特點
      • Redis除了緩存還能做什么
      • Redis 有哪些功能?
      • 一個字符串類型的值能存儲最大容量是多少?
      • 最大能存多大?
      • 線程安全嗎?
      • redis 存儲結構
      • redis的基本數據類型
      • 怎么理解Redis事務?
      • 什么是Redis持久化?Redis有哪幾種持久化方式?優缺點是什么?
      • 什么情況下要用到緩存,什么數據適合緩存,使用緩存需要注意什么問題?
      • 什么是緩存擊穿?怎么解決?
      • 什么是緩存穿透?怎么解決?
      • 什么是緩存雪崩?怎么解決?
      • 怎么保證緩存和數據庫數據的一致性?
      • Redis悲觀鎖和樂觀鎖
      • Redis 怎么實現分布式鎖?
      • Redis 分布式鎖有什么缺陷?
      • Redis 如何做內存優化?
      • redis是單線程的,為什么那么快
      • Redis 一級緩存與二級緩存(不知道答案對不對)
  • Nginx
    • 請解釋一下什么是Nginx?
    • 請列舉Nginx和Apache 之間的不同點
    • 請解釋Nginx如何處理HTTP請求
    • 請列舉Nginx的一些特性
    • 簡述反向代理和正向代理
      • 正向代理:
      • 反向代理:
    • 使用“反向代理服務器”的優點是什么?
    • nginx負載均衡的幾種常用方式
    • 解決nginx負載均衡的session共享問題
    • 一些配置
  • 安全性
    • 攻擊
      • 注入攻擊
        • 如何避免 SQL 注入?
        • 什么是 XSS 攻擊,如何避免?
  • 設計模式
    • 說一下你熟悉的設計模式?
      • 單例模式
      • 工廠模式
      • 觀察者模式
      • 外觀模式
      • 模版方法模式
  • tomcat
    • 默認線程數
  • Shiro
    • 談談Shiro的工作流程
    • 權限的注解
  • Linux
    • 拷文件
    • 跳節點
  • 前端
    • 前端跨域怎么實現
    • vue2生命周期
    • vue3生命周期

基礎題

集合

說一下list,set,map的區別。

List:
1.可以允許重復的對象。
2.可以插入多個null元素。
3.是一個有序容器,保持了每個元素的插入順序,輸出的順序就是插入的順序。
4.常用的實現類有 ArrayList、LinkedList 和 Vector。ArrayList 最為流行,它提供了使用索引的隨意訪問,而 LinkedList 則對于經常需要從 List 中添加或刪除元素的場合更為合適。

Set:
1.不允許重復對象
2. 無序容器,你無法保證每個元素的存儲順序,TreeSet通過 Comparator 或者 Comparable 維護了一個排序順序。
3. 只允許一個 null 元素

4.Set 接口最流行的幾個實現類是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 實現的 HashSet;TreeSet 還實現了 SortedSet 接口,因此 TreeSet 是一個根據其
compare() 和 compareTo() 的定義進行排序的有序容器。

Map:
1.Map不是collection的子接口或者實現類。Map是一個接口。
2.Map 的 每個 Entry 都持有兩個對象,也就是一個鍵一個值,Map 可能會持有相同的值對象但鍵對象必須是唯一的。
3. TreeMap 也通過 Comparator 或者 Comparable 維護了一個排序順序。
4. Map 里你可以擁有隨意個 null 值但最多只能有一個 null 鍵。
5.Map 接口最流行的幾個實現類是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)

hashMap key是自己定義的類,有沒復寫過hashcode或者equals這些方法 ?

線程安全問題

ArrayList、LinkedList、HashSet、HashMap是非線程安全的
HashTable,Vector是線程安全的;
StringBuilder是非線程安全的,StringBuffer是線程安全的。

List

ArrayList
優點: 底層數據結構是數組,查詢快,增刪慢。
缺點: 線程不安全,效率高
LinkedList
優點: 底層數據結構是鏈表,查詢慢,增刪快。
缺點: 線程不安全,效率高
Vector
優點: 底層數據結構是數組,查詢快,增刪慢。
缺點: 線程安全,效率低

ArrayList 和 LinkedList 的區別是什么?

數據結構實現:ArrayList 是動態數組的數據結構實現,而 LinkedList 是雙向鏈表的數據結構實現。
隨機訪問效率:對于隨機訪問get和set,ArrayList覺得優于LinkedList,因為 LinkedList 是線性的數據存儲方式,所以需要移動指針從前往后依次查找。
增加和刪除效率:對于新增和刪除操作add和remove,LinkedList比較占優勢,因為ArrayList要移動數據。 這一點要看實際情況的。若只對單條數據插入或刪除,ArrayList的速度反而優于LinkedList。但若是批量隨機的插入刪除數據,LinkedList的速度大大優于ArrayList. 因為ArrayList每插入一條數據,要移動插入點及之后的所有數據。。
綜合來說,在需要頻繁讀取集合中的元素時,更推薦使用 ArrayList,而在插入和刪除操作較多時,更推薦使用 LinkedList。

Set

HashSet
底層數據結構是哈希表。(無序,唯一)
如何來保證元素唯一性?
1.依賴兩個方法:hashCode()和equals()
LinkedHashSet
底層數據結構是鏈表和哈希表。(FIFO插入有序,唯一)
1.由鏈表保證元素有序
2.由哈希表保證元素唯一
TreeSet
底層數據結構是紅黑樹。(唯一,有序)

HashSet的原理(怎么保證不重復)?

HashSet保證元素不重復是通過兩部分實現的,第一步通過比較兩個對象的哈希碼是否相同如果相同,只能懷疑是相同對象,那么進而就會調用equals就行二次確認,如果確認完畢之后相同,那么就會排除第二個,否則的話就會插入該元素。因此,如果要保證存入對象的內容不同的時候就需要同時重寫hash()和equals()方法自己定義比較的規則,一定要保證相同內容的對象的哈希碼是相同的,不同對象的哈希碼是不同的。

Map

Map接口有三個比較重要的實現類,分別是HashMap、TreeMap和HashTable。
TreeMap是有序的,HashMap和HashTable是無序的。
Hashtable是線程安全的,HashMap不是線程安全的。
HashMap效率較高,Hashtable效率較低。
如果對同步性或與遺留代碼的兼容性沒有任何要求,建議使用HashMap。 查看
Hashtable的源代碼 就可以發現,除構造函數外,Hashtable的所有 public 方
法聲明中都有 synchronized關鍵字,而HashMap的源碼中則沒有。
Hashtable不允許null值,HashMap允許null值(key和value都允許)
父類不同:Hashtable的父類是Dictionary,HashMap的父類是AbstractMap

hashMap

hashMap比較好的一些問題https://www.cnblogs.com/heqiyoujing/p/11143298.html

hashMap的原理(怎么存儲鍵值對的 /怎么put進去的)

第一種(簡單):
HashMap 基于 Hash 算法實現的,我們通過 put(key,value)存儲,get(key)來獲取。當傳入 key 時,HashMap 會根據 key. hashCode() 計算出 hash 值,根據 hash 值將 value 保存在 bucket 里。下一次key傳入時,同樣計算hash值,并用equals比較。當計算出的 hash 值相同時,我們稱之為 hash 沖突,HashMap 的做法是用鏈表和紅黑樹存儲相同 hash 值的 value。當 hash 沖突的個數比較少時使用鏈表,否則使用紅黑樹。

第二種(這種聽著比較牛):
調用哈希函數獲取Key對應的hash值,再計算其數組下標;
如果沒有出現哈希沖突,則直接放入數組;如果出現哈希沖突,則以鏈表的方式放在鏈表后面;
如果鏈表長度超過閥值( TREEIFY THRESHOLD==8),就把鏈表轉成紅黑樹,鏈表長度低于6,就把紅黑樹轉回鏈表;
如果結點的key已經存在,則替換其value即可;
如果集合中的鍵值對大于12,調用resize方法進行數組擴容。”

HashMap和HashTable區別

(1)線程安全性不同
HashMap是線程不安全的,HashTable是線程安全的,其中的方法是Synchronize的,在多線程并發的情況下,可以直接使用HashTable,但是使用HashMap時必須自己增加同步處理。
(2)是否提供contains方法
HashMap只有containsValue和containsKey方法;HashTable有contains、containsKey和containsValue三個方法,其中contains和containsValue方法功能相同。
(3)key和value是否允許null值
Hashtable中,key和value都不允許出現null值。HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。
(4)數組初始化和擴容機制
HashTable在不指定容量的情況下的默認容量為11,而HashMap為16,Hashtable不要求底層數組的容量一定要為2的整數次冪,而HashMap則要求一定為2的整數次冪。
Hashtable擴容時,將容量變為原來的2倍加1,而HashMap擴容時,將容量變為原來的2倍。

HashMap和HashSet的區別

HashMap和TreeMap的區別

HashMap:數組方式存儲key/value,線程非安全,允許null作為key和value,key不可以重復,value允許重復,不保證元素迭代順序是按照插入時的順序,key的hash值是先計算key的hashcode值,然后再進行計算,每次容量擴容會重新計算所以key的hash值,會消耗資源,要求key必須重寫equals和hashcode方法

TreeMap:基于紅黑二叉樹的NavigableMap的實現,線程非安全,不允許null,key不可以重復,value允許重復,存入TreeMap的元素應當實現Comparable接口或者實現Comparator接口,會按照排序后的順序迭代元素,兩個相比較的key不得拋出classCastException。主要用于存入元素的時候對元素進行自動排序,迭代輸出的時候就按排序順序輸出

TreeSet和HashSet區別

HashSet是采用hash表來實現的。其中的元素沒有按順序排列,add()、remove()以及contains()等方法都是復雜度為O(1)的方法。
TreeSet是采用樹結構實現(紅黑樹算法)。元素是按順序進行排列,但是add()、remove()以及contains()等方法都是復雜度為O(log (n))的方法。它還提供了一些方法來處理排序的set,如first(), last(), headSet(), tailSet()等等。

反射

什么是反射?

反射就是程序運行期間jvm會洞悉任意一個類的屬性和方法,對任意一個對象都能夠訪問它的屬性和方法。依靠此機制,可以動態的創建一個類的對象和調用對象的方法
優點:增加靈活性,可以在運行時動態獲取對象
缺點:效率低,破壞封裝,通過發射可以訪問類的私有方法,不安全

哪里用到反射機制?

1.JDBC中,利用反射動態加載了數據庫驅動程序。
2.Web服務器中利用反射調用了Sevlet的服務方法。
3.Eclispe等開發工具利用反射動態刨析對象的類型與結構,動態提示對象的屬性和方法。
4.很多框架都用到反射機制,注入屬性,調用方法,如Spring。

線程

線程和進程的區別?

一個程序下至少有一個進程,一個進程下至少有一個線程,一個進程下也可以有多個線程來增加程序的執行速度。

守護線程是什么?

守護線程是運行在后臺的一種特殊線程。它獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的事件。在 Java 中垃圾回收線程就是特殊的守護線程。

創建線程有哪幾種方式?

繼承 Thread 重新 run 方法;
實現 Runnable 接口;
實現 Callable 接口。

線程有哪些狀態?

NEW 尚未啟動
RUNNABLE 正在執行中
BLOCKED 阻塞的(被同步鎖或者IO鎖阻塞)
WAITING 永久等待狀態
TIMED_WAITING 等待指定的時間重新被喚醒的狀態
TERMINATED 執行完成

sleep() 和 wait() 有什么區別?

類的不同:sleep() 來自 Thread,wait() 來自 Object。
釋放鎖:sleep() 不釋放鎖;wait() 釋放鎖。
用法不同:sleep() 時間到會自動恢復;wait() 可以使用 notify()/notifyAll()直接喚醒。

在 Java 程序中怎么保證多線程的運行安全?

方法一:使用安全類,比如 Java. util. concurrent 下的類。比如:ConCurrentHashMap
方法二:使用自動鎖 synchronized。
方法三:使用手動鎖 Lock。

線程池

什么是線程池?

線程池就是事先將線程放到一個容器中,當使用線程的時候,不用再去new出一個線程,直接從線程池取出來就可以了

為什么要使用線程池?

創建線程和銷毀線程的花銷是比較大的,這些時間有可能比處理業務的時間還要長。這樣頻繁的創建線程和銷毀線程,再加上業務工作線程,消耗系統資源的時間,可能導致系統資源不足。(我們可以把創建和銷毀的線程的過程去掉)

線程池有什么作用?

1、提高效率 創建好一定數量的線程放在池中,等需要使用的時候就從池中拿一個,這要比需要的時候創建一個線程對象要快的多。
2、方便管理 可以編寫線程池管理代碼對池中的線程同一進行管理,比如說啟動時有該程序創建100個線程,每當有請求的時候,就分配一個線程去工作,如果剛好并發有101個請求,那多出的這一個請求可以排隊等候,避免因無休止的創建線程導致系統崩潰。

線程池都有哪幾種工作隊列

1、ArrayBlockingQueue
是一個基于數組結構的有界阻塞隊列,此隊列按 FIFO(先進先出)原則對元素進行排序。
2、LinkedBlockingQueue
一個基于鏈表結構的阻塞隊列,此隊列按FIFO (先進先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。靜態工廠方法Executors.newFixedThreadPool()使用了這個隊列
3、SynchronousQueue
一個不存儲元素的阻塞隊列。每個插入操作必須等到另一個線程調用移除操作,否則插入操作一直處于阻塞狀態,吞吐量通常要高于LinkedBlockingQueue,靜態工廠方法Executors.newCachedThreadPool使用了這個隊列。
4、PriorityBlockingQueue
一個具有優先級的無限阻塞隊列

悲觀鎖、樂觀鎖

什么是悲觀鎖,樂觀鎖

樂觀鎖和悲觀鎖是兩種思想,用于解決并發場景下的數據競爭問題。
樂觀鎖:樂觀鎖在操作數據時非常樂觀,認為別人不會同時修改數據。因此樂觀鎖不會上鎖,只是在執行更新的時候判斷一下在此期間別人是否修改了數據:如果別人修改了數據則放棄操作,否則執行操作。
悲觀鎖:悲觀鎖在操作數據時比較悲觀,認為別人會同時修改數據。因此操作數據時直接把數據鎖住,直到操作完成后才會釋放鎖;上鎖期間其他人不能修改數據。

實現方式

悲觀鎖的實現方式是加鎖,加鎖既可以是對代碼塊加鎖(如Java的synchronized關鍵字),也可以是對數據加鎖(如MySQL中的排它鎖)。
樂觀鎖的實現方式:
CAS(Compare and Swap)比較并交換,是一種樂觀鎖的實現,是用非阻塞算法來代替鎖定,其中 java.util.concurrent 包下的 AtomicInteger 就是借助 CAS 來實現的。
但 CAS 也不是沒有任何副作用,比如著名的 ABA 問題就是 CAS 引起的。

什么是死鎖?

當線程 A 持有獨占鎖a,并嘗試去獲取獨占鎖 b 的同時,線程 B 持有獨占鎖 b,并嘗試獲取獨占鎖 a 的情況下,就會發生 AB 兩個線程由于互相持有對方需要的鎖,而發生的阻塞現象,我們稱為死鎖。
避免死鎖最簡單的方法就是阻塞循環等待條件,將系統中所有資源設置標志位、排序,規定所有的進程申請資源必須以一定的順序(升序或者降序)做操作來避免死鎖

synchronized 和 Lock 有什么區別?

54.synchronized 可以給類、方法、代碼塊加鎖;而 lock 只能給代碼塊加鎖。
synchronized 不需要手動獲取鎖和釋放鎖,使用簡單,發生異常會自動釋放鎖,不會造成死鎖;而 lock 需要自己加鎖和釋放鎖,如果使用不當沒有 unLock()去釋放鎖就會造成死鎖。
通過 Lock 可以知道有沒有成功獲取鎖,而 synchronized 卻無法辦到。

java垃圾回收

GC的主要任務

1.分配內存
2.確保被引用對象的內存不被錯誤的回收
3.回收不再被引用的對象的內存空間

垃圾回收機制的主要解決問題

1、哪些內存需要回收?如何判斷?

垃圾收集器會對堆進行回收前,確定對象中哪些是“存活”,哪些是“死亡”(不可能再被任何途徑使用的對象)

判斷方法:
1、引用計數算法(不推薦)
每當一個地方引用它時,計數器+1;引用失效時,計數器-1;計數值=0——不可能再被引用。
查看運行結果,會發現并沒有因為兩個對象互相引用就沒有回收,因此引用計數算法很難解決對象之間相互矛盾循環引用的問題
2、可達性分析算法(推薦)
當一個對象到GC Roots沒有任何引用鏈相連,即不可達時,則證明此對象時不可用的。
舉例:一顆樹有很多丫枝,其中一個分支斷了,跟樹上沒有任何聯系,那就說明這個分支沒有用了,就可以當垃圾回收去燒了。

2、什么時候回收?

1、會在cpu空閑的時候自動進行回收
2、在堆內存存儲滿了之后
3、主動調用System.gc()后嘗試進行回收

3、如何回收,這就牽扯到垃圾收集算法和垃圾收集器

1)標記—清除算法

這是最基礎的一種算法,分為兩個步驟,第一個步驟就是標記,也就是標記處所有需要回收的對象,標記完成后就進行統一的回收掉哪些帶有標記的對象。這種算法優點是簡單,缺點是效率問題,還有一個最大的缺點是空間問題,標記清除之后會產生大量不連續的內存碎片,當程序在以后的運行過程中需要分配較大對象時無法找到足夠的連續內存而造成內存空間浪費。

兩個階段:標記清除
不足:效率問題;空間問題(會產生大量不連續的內存碎片)

2)復制算法

復制將可用內存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當這一塊的內存用完了,就將還存活著的對象復制到另外一塊上面,然后再把已使用過的內存空間一次清理掉。這樣使得每次都是對其中的一塊進行內存回收,內存分配時也就不用考慮內存碎片等復雜情況。只是這種算法的代價是將內存縮小為原來的一半。

不足:將內存縮小為了原來的一半

3)標記—整理算法

標記整理算法與標記清除算法很相似,但最顯著的區別是:標記清除算法僅對不存活的對象進行處理,剩余存活對象不做任何處理,造成內存碎片;而標記整理算法不僅對不存活對象進行處理清除,還對剩余的存活對象進行整理,重新整理,因此其不會產生內存碎片。

兩個階段:標記清除
(讓存活的對象都向一端移動

3)分代收集算法

分代收集算法是一種比較智能的算法,也是現在jvm使用最多的一種算法,他本身其實不是一個新的算法,而是他會在具體的場景自動選擇以上三種算法進行垃圾對象回收。
那么現在的重點就是分代收集算法中說的自動根據具體場景進行選擇。這個具體場景到底是什么場景。

場景其實指的是針對jvm的哪一個區域,1.7之前jvm把內存分為三個區域:新生代,老年代,永久代
JVM會將堆內存分為兩個區域,一個新生代,一個老年代。
新生代:就是創建和使用完之后立馬就要被回收的對象放在里面
老年代:把一些會長期存活的對象放在里面。
永久代:用于存放一些靜態文件,如Java類、方法等
了解過場景之后再結合分代收集算法得出結論:
1、在新生代中,每次垃圾收集時都發現有大批對象死去,只有少量存活,那就選用復制算法。只需要付出少量存活對象的復制成本就可以完成收集。
2、老年代中因為對象存活率高、沒有額外空間對他進行分配擔保,就必須用標記-清除或者標記-整理。

垃圾回收總結:

JAVA8的新特性

Lambda 表達式 ? Lambda 允許把函數作為一個方法的參數(函數作為參數傳遞到方法中)。

方法引用 ? 方法引用提供了非常有用的語法,可以直接引用已有Java類或對象(實例)的方法或構造器。與lambda聯合使用,方法引用可以使語言的構造更緊湊簡潔,減少冗余代碼。

默認方法 ? 默認方法就是一個在接口里面有了一個實現的方法。

新工具 ? 新的編譯工具,如:Nashorn引擎 jjs、 類依賴分析器jdeps。

Stream API ?新添加的Stream API(java.util.stream) 把真正的函數式編程風格引入到Java中。

Date Time API ? 加強對日期與時間的處理。

Optional 類 ? Optional 類已經成為 Java 8 類庫的一部分,用來解決空指針異常。

Nashorn, JavaScript 引擎 ? Java 8提供了一個新的Nashorn javascript引擎,它允許我們在JVM上運行特定的javascript應用。

String類的常用方法有哪些?

答:https://zhidao.baidu.com/question/232452768.html

String,StringBuffer,StringBuilder的區別。

第一種回答
答:1)如果操作少量的數據用String(查看源碼得知,String類的聲明是:public
final,改變它的值相當于創建一個新的字符串)

2)單線程下操作大量的數據用StringBuilder

3)多線程下操作大量的數據用StringBuffer

https://www.cnblogs.com/A_ming/archive/2010/04/13/1711395.html

第二種回答
(1)StringBuffer 與 StringBuilder 中的方法和功能完全是等價的,
(2)只是StringBuffer 中的方法大都采用了 synchronized 關鍵字進行修飾,因此是線程安全的,而 StringBuilder 沒有這個修飾,可以被認為是線程不安全的。
(3)在單線程程序下,StringBuilder效率更快,因為它不需要加鎖,不具備多線程安全而StringBuffer則每次都需要判斷鎖,效率相對更低

GET 和POST 的區別?

GET 請求的數據會附在URL 之后(就是把數據放置在 HTTP 協議頭中),以?分割URL 和傳輸數據,參數之間以&相連,如:login.action?name=zhagnsan&password=123456。POST 把提交的數據則放置在是 HTTP 包的包體中。

session與cookie的差別

Cookie實際上是一小段的文本信息。客戶端請求服務器,如果服務器需要記錄該用戶狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端瀏覽器會把Cookie保存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務器。服務器檢查該Cookie,以此來辨認用戶狀態。服務器還可以根據需要修改Cookie的內容。
Session 是存儲在 web 服務器端的一塊信息。session 對象存儲特定用戶會話所需的屬性及配置信息。當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。
Cookie 和session 的不同點:
(1)無論客戶端做怎樣的設置,session 都能夠正常工作。當客戶端禁用 cookie 時將無法使用 cookie。
(2)在存儲的數據量方面:session 能夠存儲任意的java 對象,cookie 只能存儲 String 類型的對象。
(3)cookie數據存放在客戶的瀏覽器上,session數據放在服務器上

說一下 session 的工作原理?

session 的工作原理是客戶端登錄完成之后,服務器會創建對應的 session,session 創建完之后,會把 session 的 id 發送給客戶端,客戶端再存儲到瀏覽器中。這樣客戶端每次訪問服務器時,都會帶著 sessionid,服務器拿到 sessionid 之后,在內存找到與之對應的 session 這樣就可以正常工作了。

如果客戶端禁止 cookie 能實現 session 還能用嗎?

可以用
一般默認情況下,在會話中,服務器存儲 session 的 sessionid 是通過 cookie 存到瀏覽器里。
如果瀏覽器禁用了 cookie,瀏覽器請求服務器無法攜帶 sessionid,服務器無法識別請求中的用戶身份,session失效。
但是可以通過其他方法在禁用 cookie 的情況下,可以繼續使用session。
1、通過url重寫,把 sessionid 作為參數追加的原 url 中,后續的瀏覽器與服務器交互中攜帶 sessionid 參數。
2、服務器的返回數據中包含 sessionid,瀏覽器發送請求時,攜帶 sessionid 參數。
3、通過 Http 協議其他 header 字段,服務器每次返回時設置該 header 字段信息,瀏覽器中 js 讀取該 header 字段,請求服務器時,js設置攜帶該 header 字段。

用戶登錄的功能服務器需要做什么,如何保持登錄狀態?

第一種,cookie和session的配合使用

實現原理:當用戶請求頁面,一般需要先登錄,用戶第一次輸入用戶名和密碼之后,前臺發送post請求,后臺獲取用戶信息,通過查詢數據庫來驗證用戶信息是否正確,如果驗證通過,則會開辟一塊session空間來儲存用戶數據,并且同時生成一個cookie字符串,由后臺返回給前臺,前臺接收后,會把這個cookie字符串儲存到瀏覽器的cookie空間中,這個cookie就相當于一把鑰匙,可以打開后臺存儲對應用戶信息的鎖,當用戶下一次請求的時候,客戶端便會自動攜帶這個cookie去請求服務器,服務器識別后,就會讀取session中的用戶信息,這樣用戶就可以直接訪問,就不需要再輸入用戶名密碼來驗證身份了。
優缺點:
優點是:提升了用戶體驗,cookie和session的結合使用,比直接在客戶端保存用戶信息要相對安全;缺點是:當服務器向瀏覽器傳送cookie的時候,很容易被劫持,并不是絕對的安全,還有一點就是,在大型的項目中,服務器往往不只一臺,如果第一次請求,用戶信息被保存在了服務器1的session空間中,但是第二次請求被分流到了服務器2,這樣就獲取不到用戶信息了,依然要重新登錄,所以又引出了另一種方法:token來實現。

第二種,使用token安全令牌

實現原理:當用戶請求頁面,輸入用戶信息,服務端經過驗證后,會生成一個token安全令牌(隨機字符串),并返回給客戶端,當客戶端發送下一次請求的時候,直接攜帶這個token,服務端識別后,就可以直接訪問頁面,不需要再次登錄了
優點:token只是以字符串的形式存在,不要服務器再開辟空間,并且相對更安全,即使在傳輸的過程中被劫持,別人也并不能破解內容,并且減少了服務器壓力,減少頻繁的查詢數據庫。

泛型是什么?

就是一種不確定的輸出類型,只有需要在使用這個類的時候才能夠確定出來
泛型的好處:

  • 省略了強轉的代碼。2. 可以把運行時的問題提前到編譯時期。
  • 靜態屬性與普通屬性的區別是什么?

    靜態屬性 程序一加載時 就初始化,只有一份
    實例屬性 需要實例化后 才加載

    throw 和 throws 的區別?

    throw:是真實拋出一個異常。
    throws:是聲明可能會拋出一個異常。

    final、finally、finalize 有什么區別?

    final

    final關鍵字主要用在三個地方:變量、方法、類;
    final修飾的變量是常量不能被修改;
    final修飾的方法是私有(private)不可被調用;
    final修飾的類不能被繼承,類中的所有成員方法都被指定為final方法;

    finally

    finally:是 try{} catch{} finally{} 最后一部分,表示不論發生任何情況都會執行,finally 部分可以省略,但如果 finally 部分存在,則一定會執行 finally 里面的代碼。

    finalize

    finalize: 是 Object 類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法。

    說一下堆棧的區別?

    功能方面:堆是用來存放對象的,棧是用來執行程序的。
    共享性:堆是線程共享的,棧是線程私有的。
    空間大小:堆大小遠遠大于棧。

    局部變量是存放在棧中,還是存放在堆棧中?

    局部變量存放在棧中。
    程序bai運行中有兩個存儲空間可用du,一個是棧,是zhi歸屬于進程本身的,另外一個是堆,所有dao進程共用的。
    局部變量在聲明周期為函數內部,其存儲空間位于棧中。當進入函數時,會對根據局部變量需求,在棧上申請一段內存空間,供局部變量使用。當局部變量生命周期結束后,在棧上釋放。
    由于進程的棧空間是有限的,所以要避免申請占用空間過大的局部變量,以及避免函數嵌套層數過多。這些都可能引起棧空間不夠導致程序崩潰。

    框架

    Spring

    spring的15個經典面試題:https://www.cnblogs.com/yanggb/p/11004887.html

    Spring是什么?

    Spring 是一個開源框架,為簡化企業級應用開發而生,目標是使得Java EE應用程序的開發更加簡捷,

    Spring有哪些優點?

    輕量級:Spring在大小和透明性方面絕對屬于輕量級的,基礎版本的Spring框架大約只有2MB。
    控制反轉(IOC):Spring使用控制反轉技術實現了松耦合。依賴被注入到對象,而不是創建或尋找依賴對象。
    面向切面編程(AOP): Spring支持面向切面編程,同時把應用的業務邏輯與系統的服務分離開來。
    容器:Spring包含并管理應用程序對象的配置及生命周期。
    MVC框架:Spring的web框架是一個設計優良的web MVC框架,很好的取代了一些web框架。
    事務管理:Spring對下至本地業務上至全局業務(JAT)提供了統一的事務管理接口。
    異常處理:Spring提供一個方便的API將特定技術的異常(由JDBC, Hibernate, 或JDO拋出)轉化為一致的、Unchecked異常。

    AOP

    AOP(面向切面編程)能夠將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任封裝起來,便于減少系統的重復代碼,降低模塊間的耦合度,并有利于未來的可擴展性和可維護性。
    用于:事務處理、日志管理、權限控制

    IOC

    IOC(控制反轉)是一種設計思想,就是將原本在程序中手動創建對象的控制權,交由給Spring框架來管理。IOC在其他語言中也有應用,并非Spring特有。IOC容器是Spring用來實現IOC的載體,IOC容器實際上就是一個Map(key,value),Map中存放的是各種對象。
    將對象之間的相互依賴關系交給IOC容器來管理,并由IOC容器完成對象的注入。這樣可以很大程度上簡化應用的開發,把應用從復雜的依賴關系中解放出來。IOC容器就像是一個工廠一樣,當我們需要創建一個對象的時候,只需要配置好配置文件/注解即可,完全不用考慮對象是如何被創建出來的。在實際項目中一個Service類可能由幾百甚至上千個類作為它的底層,假如我們需要實例化這個Service,可能要每次都搞清楚這個Service所有底層類的構造函數,這可能會把人逼瘋。如果利用IOC的話,你只需要配置好,然后在需要的地方引用就行了,大大增加了項目的可維護性且降低了開發難度。
    也可理解為工廠模式+反射,不過工廠模式的對象生成是提前在工廠類中定死的,IOC更加靈活

    什么是 ORM 框架?

    ORM(Object Relation Mapping)對象關系映射,是把數據庫中的關系數據映射成為程序中的對象。
    使用 ORM 的優點:提高了開發效率降低了開發成本、開發更簡單更對象化、可移植更強。

    注解是怎么生效的?

    Spring會掃描所有的類包,反射獲取到類里面的注解,對注解進行邏輯判斷,獲取到進行分析,不同的注解有不同的邏輯

    Spring事務的實現方式和實現原理

    Spring事務的本質其實就是數據庫對事務的支持,沒有數據庫的事務支持,spring是無法提供事務功能的。真正的數據庫層的事務提交和回滾是通過binlog或者redo log實現的。
    基于 @Transactional 的聲明式事務管理

    Spring事務管理的方式有幾種?

    1.編程式事務:在代碼中硬編碼(不推薦使用)。
    2.聲明式事務:在配置文件中配置(推薦使用),分為基于XML的聲明式事務和基于注解的聲明式事務。
    聲明式事務管理建立在AOP之上的。其本質是通過AOP功能,對方法前后進行攔截,將事務處理的功能編織到攔截的方法中,也就是在目標方法開始之前加入一個事務,在執行完目標方法之后根據執行情況提交或者回滾事務。

    spring 中的 bean 是線程安全的嗎?

    spring 中的 bean 默認是單例模式,Spring容器本身并沒有提供線程安全的策略,因此是否線程安全完全取決于Bean本身的特性

    spring 事務實現方式有哪些?

    1.基于 xml 配置文件的方式
    2.注解方式(在類上添加 @Transaction 注解)

    說出Spring 或者 Springmvc中常用的5個注解,并解釋含義

    log4j日志級別

    DEBUG:輸出調試信息;指出細粒度信息事件對調試應用程序是非常有幫助的。
    INFO: 輸出提示信息;消息在粗粒度級別上突出強調應用程序的運行過程。
    WARN: 輸出警告信息;表明會出現潛在錯誤的情形。
    ERROR:輸出錯誤信息;指出雖然發生錯誤事件,但仍然不影響系統的繼續運行。
    FATAL:輸出致命錯誤;指出每個嚴重的錯誤事件將會導致應用程序的退出。
    ALL level:打開所有日志記錄開關;是最低等級的,用于打開所有日志記錄。
    OFF level:關閉所有日志記錄開關;是最高等級的,用于關閉所有日志記錄。

    按照范圍從小到大排序:OFF level > FATAL > ERROR > WARN > INFO > DEBUG > ALL
    level;范圍大的會包含范圍小的,例如日志設置為INFO級別的話則FATAL、ERROR、WARN、INFO的日志開關都是打開的,而DEBUG的日志開關將是關閉的。

    Log4j建議只使用四個級別,優先級從高到低分別是 ERROR、WARN、INFO、DEBUG。

    SpringBoot

    SpringBoot是什么?

    簡單版:
    用來簡化spring應用的初始搭建以及開發過程
    使用特定的方式來進行配置(properties或yml文件)
    main方法運行
    嵌入的Tomcat 無需部署war文件
    簡化maven配置
    自動配置spring添加對應功能starter自動化配置
    spring boot來簡化spring應用開發,約定大于配置,去繁從簡,just run就能創建一個獨立的,產品級別的應用

    復雜版(改):
    Spring Boot 是 Spring 開源組織下的子項目,是 Spring 組件一站式解決方案,主要是簡化了使用 Spring 的難度,簡省了繁重的配置,提供了各種啟動器,開發者能快速上手。
    1、獨立運行
    Spring Boot而且內嵌了各種servlet容器,Tomcat、Jetty等,現在不再需要打成war包部署到容器中,Spring Boot只要打成一個可執行的jar包就能獨立運行,所有的依賴包都在一個jar包內。
    2、簡化配置
    spring-boot-starter-web啟動器自動依賴其他組件,簡少了maven的配置。除此之外,還提供了各種啟動器,開發者能快速上手。
    3、自動配置
    Spring Boot能根據當前類路徑下的類、jar包來自動配置bean,如添加一個spring-boot-starter-web啟動器就能擁有web的功能,無需其他配置。
    4、無代碼生成和XML配置
    Spring Boot配置過程中無代碼生成,也無需XML配置文件就能完成所有配置工作,這一切都是借助于條件注解完成的,這也是Spring4.x的核心功能之一。
    5、應用監控
    Spring Boot提供一系列端點可以監控服務及應用,做健康檢測。

    Spring Boot 的配置文件有哪幾種格式?它們有什么區別?

    .properties 和 .yml,它們的區別主要是書寫格式不同。

    springboot事務是怎么去控制的 / 實現管理事務的?

    我們以前沒有spring的時候,都是手動報錯就rollback的,現在有了spring,底層實現是用了aop 創建代理對象,就可以產生事務了

    Spring Boot 的核心注解是哪個?它主要由哪幾個注解組成的?

    啟動類上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要組合包含了以下 3 個注解:
    @SpringBootConfiguration:組合了 @Configuration 注解,實現配置文件的功能。
    @EnableAutoConfiguration:打開自動配置的功能,也可以關閉某個自動配置的選項,如關閉數據源自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
    @ComponentScan:Spring組件包名掃描。

    SpringBoot 常用注解

    1.@RestController 和 @RequestMapping 注解
    2.@SpringBootApplication
    3.@ResponseBody @RequestParam
    4.@AutoWired
    5.@PathVariable

    Spring Boot 注冊bean的方法

    @ComponentScan
    @Bean
    @Import

    SpringBoot注入依賴及注解

    常用注解
    @Service用于標注業務層組件
    @Controller用于標注控制層組件
    @Repository用于標注數據庫訪問Dao組件
    @Component泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注
    @Autowired,自動注入,自動從spring的上下文找到合適的bean來注入
    @RestController,Spring4之后新加入的注解,原來返回json需要@ResponseBody和@Controller配合,將調用的結果直接返回給調用者。
    @Value:注入Spring boot application.properties配置的屬性的值。
    @RequestMapping:提供路由信息,負責URL到Controller中的具體函數的映射。@RequestMapping(“/path”)表示該控制器處理所有“/path”的UR L請求。RequestMapping是一個用來處理請求地址映射的注解,可用于類或方法上。
    @GetMapping是一個組合注解,是@RequestMapping(method = RequestMethod.GET)的縮寫。該注解將HTTP Get 映射到 特定的處理方法上。
    同理PostMapping也是一個組合注解,是@RequestMapping(method = RequestMethod.POST)的縮寫。
    @PathVariable:獲取url中的數據。
    @ComponentScan 組件掃描,發現和組裝一些Bean。
    @EnableAutoConfiguration自動配置。
    @SpringBootApplication:申明讓spring boot自動給程序進行必要的配置,這個配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三個配置。
    @Data 自動生成setter、getter方法
    @Import:用來導入其他配置類。
    @ImportResource:用來加載xml配置文件。
    @Bean:放在方法的上面,而不是類,意思是產生一個bean,并交給spring管理。
    @Inject:等價于默認的@Autowired,只是沒有required屬性;

    Spring Boot 自動配置原理是什么?

    注解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自動配置的核心,首先它得是一個配置文件,其次根據類路徑下是否有這個類去自動配置。

    Springboot里面哪些注解屬于單例模式?

    @AutoWired

    @Controller和@RestController的區別

    springboot常用的starter有哪些?

    1.spring-boot-starter-web (嵌入tomcat和web開發需要servlet與jsp支持)
    2.spring-boot-starter-data-jpa (數據庫支持)
    3.spring-boot-starter-data-redis (redis數據庫支持)
    4.spring-boot-starter-data-solr (solr搜索應用框架支持)
    5.mybatis-spring-boot-starter (第三方的mybatis集成starter)

    Mybatis

    Mybatis模糊查詢用#和$什么區別

    簡述Mybatis提供的兩級緩存,以及緩存的查找順序

    參考:https://juejin.cn/post/6926161053743218695

    一級緩存是SqlSession級別的緩存。在操作數據庫時需要構造sqlSession對象,底層實際上是在對象中有一個數據結構(HashMap)用于存儲緩存數據。不同的sqlSession之間的緩存數據區域(HashMap)是互相不影響的。
    二級緩存是mapper級別的緩存,多個SqlSession去操作同一個Mapper的sql語句,多個SqlSession可以共用二級緩存,二級緩存是跨SqlSession的。

    緩存的查找順序:二級緩存 => 一級緩存 => 數據庫

    一級緩存是SqlSession級別的
    一級緩存默認開啟
    一級緩存在底層update方法也就是刪除 新增 更新 時候會清除一級緩存;
    一級緩存在查詢的時候會先從緩存中查詢,沒查到去查db,然后再放入本地一級緩存;
    一級緩存之前會先從二級緩存查,沒查到再去一級查,一級沒查到再去db查;

    SpringCloud

    springCloud是什么?

    SpringCloud是基于SpringBoot的一套實現微服務的框架。它提供了微服務開發所需的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態管理等組件。最重要的是,跟SpringBoot框架一起使用的話,會讓你開發微服務架構的云服務非常方便。

    SpringCloud五大核心組件:
    服務注冊發現-Netflix Eureka
    配置中心 - spring cloud config
    負載均衡-Netflix Ribbon
    斷路器 - Netflix Hystrix
    路由(網關) - Netflix Zuul

    spring cloud 斷路器的作用是什么?

    在分布式架構中,斷路器模式的作用也是類似的,當某個服務單元發生故障(類似用電器發生短路)之后,通過斷路器的故障監控(類似熔斷保險絲),向調用方返回一個錯誤響應,而不是長時間的等待。這樣就不會使得線程因調用故障服務被長時間占用不釋放,避免了故障在分布式系統中的蔓延。

    spring cloud 的核心組件有哪些?

    Eureka:服務注冊于發現。
    Feign:(負載均衡)一個輕量級Restful的HTTP服務客戶端,Feign內置了Ribbon,用來做客戶端負載均衡,去調用服務注冊中心的服務。Feign的使用方式是:使用Feign的注解定義接口,調用這個接口,就可以調用服務注冊中心的服務
    Hystrix:提供線程池,不同的服務走不同的線程池,實現了不同服務調用的隔離,避免了服務雪崩的問題。
    Zuul:網關管理,由 Zuul 網關轉發請求給對應的服務。

    高并發

    高并發解決方案案例

    常用的高并發處理的思路與手段

    從服務端視角看高并發

    服務端處理請求需要耗費服務端的資源,比如能同時開啟的進程數、能同時運行的線程數、網絡連接數、cpu、I/O、內存等等,由于服務端資源是有限的,那么服務端能同時處理的請求也是有限的。高并發問題的本質就是:資源的有限性

    高并發帶來的問題
    服務端的處理和響應會越來越慢,甚至會丟棄部分請求不予處理,更嚴重的會導致服務端崩潰。

    高并發處理的基本思路
    1)從客戶端看

    • 盡量減少請求數量,比如:依靠客戶端自身的緩存或處理能力
    • 盡量減少對服務端資源的不必要耗費,比如:重復使用某些資源,如連接池客戶端處理的基本原則就是:能不訪問服務端就不要訪問

    2)從服務端看

    • 增加資源供給,比如:更大的網絡帶寬,使用更高配置的服務器,使用高性能的Web服務器,使用高性能的數據庫
    • 請求分流,比如:使用集群,分布式的系統架構
    • 應用優化,比如:使用更高效的編程語言,優化處理業務邏輯的算法,優化訪問數據庫的SQL

    基本原則:分而治之,并提高單個請求的處理速度

    高并發處理的基本手段

    1)客戶端發出請求層面,常見的手段有:

    • 盡量利用瀏覽器的緩存功能,減少訪問服務端,比如:js、css、圖片等
    • 可以考慮使用壓縮傳輸的功能,減少網絡流量,也會提高傳輸速度
    • 考慮使用異步請求,分批獲取數據

    2)前端接收客戶端請求層面,常見的手段有:

    • 動靜分離,部分靜態資源可以直接從Nginx返回
    • 按請求的不同,分發到不同的后端進行處理,比如:負載均衡、業務拆分訪問等
    • 前面再加上一層來做多個Nginx的負載均衡,比如:LVS、F5等
    • 還可以在更前面使用CDN服務
    • 還可以對動態內容進行緩存,盡量減少訪問后端服務

    3)Web服務器層面,常見的手段有:

    • 使用最新的JVM,并進行配置優化
    • 對Web服務器進行配置優化,比如:調整內存數量、線程數量等
    • 提供多個能提供相同服務的Web服務器,以實現負載均衡
    • 仔細規劃Web服務器上部署的應用規模
    • 對Web服務器進行集群

    4)Web應用層面,常見的手段有:

    • 動態內容靜態化
    • Java開發優化
    • 優化處理業務邏輯的算法
    • 合理高效的利用緩存
    • 優化訪問數據庫的Sql,可以考慮利用存儲過程等數據庫的能力
    • 合理使用多線程,加快業務處理
    • 部分業務可以考慮內存數據庫,或者是進行純內存處理
    • 盡量避免遠程調用、大量I/O等耗時的操作
    • 合理規劃事務等較為耗資源的操作
    • 合理使用異步處理
    • 對部分業務考慮采用預處理或者預計算的方式,減少實時計算量
    • 內部系統間的業務盡量直接調用、直接處理,減少WebService、工作流等

    5)數據庫層面,常見的手段有:

    • 合理選擇數據庫的引擎,比如Mysql的InnoDB與MyISAM引擎
    • 進行配置優化
    • 可以考慮使用存儲過程來處理復雜的數據邏輯
    • 數據庫集群,進行讀寫分離
    • 合理設計數據庫的表結構、索引等
    • 分庫、分表,降低單庫、單表的數據量

    數據庫

    索引

    比較好的面試題 https://www.cnblogs.com/williamjie/p/11187470.html

    什么是索引?(為什么需要使用索引)

    【簡單】:
    索引其實是一種數據結構,能夠幫助我們快速的檢索數據庫中的數據

    【復雜】:
    MySQL官方對索引的定義為:索引(Index)是幫助 MySQL 高效獲取數據的數據結構。
    打個比方,如果合理的設計且使用索引的MySQL是一輛蘭博基尼的話,那么沒有設計和使用索引的MySQL就是一個人力三輪車。
    索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是組合索引。組合索引,即一個索引包含多個列。
    創建索引時,你需要確保該索引是應用在 SQL 查詢語句的條件(一般作為 WHERE 子句的條件)。
    實際上,索引也是一張表,該表保存了主鍵與索引字段,并指向實體表的記錄。
    上面都在說使用索引的好處,但過多的使用索引將會造成濫用。因此索引也會有它的缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件。
    建立索引會占用磁盤空間的索引文件。

    索引具體采用的哪種數據結構

    常見的MySQL主要有兩種結構:Hash索引和B+ Tree索引,我們使用的是InnoDB引擎,默認的是B+樹

    既然你提到InnoDB使用的B+ 樹的索引模型,那么你知道為什么采用B+ 樹嗎?這和Hash索引比較起來有什么優缺點嗎?

    因為Hash索引底層是哈希表,哈希表是一種以key-value存儲數據的結構,所以多個數據在存儲關系上是完全沒有任何順序關系的,所以,對于區間查詢是無法直接通過索引查詢的,就需要全表掃描。所以,哈希索引只適用于等值查詢的場景。而B+ 樹是一種多路平衡查詢樹,所以他的節點是天然有序的(左子節點小于父節點、父節點小于右子節點),所以對于范圍查詢的時候不需要做全表掃描

    優化

    SQL語句優化

  • 不要把 select 子句寫成 select *
  • 謹慎使用模糊查詢
  • 對 order by 排序的字段設置索引,可以大大加快數據庫執行的速度
  • 少用 is null 和 is not null
  • 盡量少用 != 運算符
  • 盡量少用 or 運算符,因為邏輯或運算符也會讓數據庫跳過索引
  • 盡量少用 in 和 not in 運算符,原因和 or 運算符一樣,都屬于邏輯或關系
  • 避免條件語句中的數據類型轉換
  • 在表達式左側使用運算符和函數都會讓索引失效
  • 分庫分表

    1)分庫分表,如何對數據庫如何進行垂直拆分或水平拆分的,用什么中間件?
    綜上,現在其實建議考量的,就是 Sharding-jdbc 和 Mycat,這兩個都可以去考慮使用。
    Sharding-jdbc 這種 client 層方案的優點在于不用部署,運維成本低,不需要代理層的二次轉發請求,性能很高,但是如果遇到升級啥的需要各個系統都重新升級版本再發布,各個系統都需要耦合 Sharding-jdbc 的依賴;
    Mycat 這種 proxy 層方案的缺點在于需要部署,自己運維一套中間件,運維成本高,但是好處在于對于各個項目是透明的,如果遇到升級之類的都是自己中間件那里搞就行了。

    2)分庫分表之后,id 主鍵如何處理?、、
    ----snowflake 雪花算法 (id work)

    3)從未分庫分表動態切換到分庫分表上?

    a、停機遷移,寫個公告凌晨升級(半夜) --> 寫個工具從0點開始讀寫數據,4點伸個懶腰下班,爽

    b、雙寫遷移方案

    讀寫分離

    前提:讀并發大
    就是寫一個主庫,但是主庫掛多個從庫,然后從多個從庫來讀,那不就可以支撐更高的讀并發壓力了嗎?
    ? 主庫將變更寫入 binlog 日志,然后從庫連接到主庫之后,從庫有一個 IO 線程,將主庫的 binlog 日志拷貝到自己本地,寫入一個 relay 中繼日志中。接著從庫中有一個 SQL 線程會從中繼日志讀取 binlog,然后執行 binlog 日志中的內容,也就是在自己本地再次執行一遍 SQL,這樣就可以保證自己跟主庫的數據是一樣的。

    Mysql和Oracle有什么區別?

    1.Oracle收費,Mysql免費

    2.單引號的處理
    Mysql里可以用雙引號包起字符串,Oracle里只可以用單引號包起字符串。在插入和修改字符串前必須做單引號的替換:把所有出現的一個單引號替換成兩個單引號。

    3.自動增長的數據類型處理
    Mysql是一個自動增長的數據類型,插入數據的時候,不需要管理,它自己會自動增長,Oracle不支持自動增長的數據類型,通過建立一個自動增長的序列號來完成自動增長。

    4.事物提交方式
    oracle默認不自動提交,需要用戶手動提交。
    Mysql默認是自動提交。不支持事物。
    Mysql默認自動提交,也就是你提交一個query,他就直接執行,我們可以通過
    set autocommit=0 禁止自動提交
    set autocommit=1 開啟自動提交

    group by后面還可以加什么

    group by 對應的列如果如果需要加條件,一般用having。

    MySQL

    MySQL的事務

    事務的基本要素(ACID):
    1、原子性(Atomicity):
    事務開始后所有操作,要么全部做完,要么全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是一個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位
    2、一致性(Consistency):
    事務開始前和結束后,數據庫的完整性約束沒有被破壞 。比如A向B轉賬,不可能A扣了錢,B卻沒收到。
    3、隔離性(Isolation):
    同一時間,只允許一個事務請求同一數據,不同的事務之間彼此沒有任何干擾。比如A正在從一張銀行卡中取錢,在A取錢的過程結束前,B不能向這張卡轉賬。
    4、持久性(Durability):
    事務完成后,事務對數據庫的所有更新將被保存到數據庫,不能回滾。

    事務的并發問題:

    臟讀:事務A讀取了事務B更新的數據,然后B回滾操作,那么A讀取到的數據是臟數據
    不可重復讀:事務 A 多次讀取同一數據,事務 B 在事務A多次讀取的過程中,對數據作了更新并提交,導致事務A多次讀取同一數據時,結果 不一致
    幻讀:系統管理員A將數據庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束后發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。
    小結:
    不可重復讀的和幻讀很容易混淆,不可重復讀側重于修改,幻讀側重于新增或刪除。解決不可重復讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

    MySQL事務隔離級別:

    四種:未提交讀、已提交讀、可重復讀、可串行化,
    默認是 可重復讀

    如何做 MySQL 的性能優化?

  • 不要把 select 子句寫成 select *
  • 謹慎使用模糊查詢
  • 對 order by 排序的字段設置索引,可以大大加快數據庫執行的速度
  • 少用 is null 和 is not null
  • 盡量少用 != 運算符
  • 盡量少用 or 運算符,因為邏輯或運算符也會讓數據庫跳過索引
  • 盡量少用 in 和 not in 運算符,原因和 or 運算符一樣,都屬于邏輯或關系
  • 避免條件語句中的數據類型轉換
  • 在表達式左側使用運算符和函數都會讓索引失效
  • 怎么確定有沒有用到索引

    使用方法,在select語句前加上explain就可以了:
    如:
    explain select surname,first_name from a,b where a.id=b.id
    細節:https://www.cnblogs.com/the-fool/p/11113996.html

    Redis

    Redis是什么及特點

    Redis是一個內存型緩存數據庫
    特點:
    key/value型數據庫
    支持豐富的數據類型(String,List,Set,ZSet,Hash)
    支持持久化,內存數據,持久化到硬盤中
    是單進程,單線程,所以是線程安全
    可實現分布式鎖

    Redis除了緩存還能做什么

    比如:用戶登錄session,網頁緩存,日志系統,搜索引擎,消息隊列、持久化、發布訂閱系統、計時器、計數器(瀏覽量!)

    Redis 有哪些功能?

    數據緩存功能
    分布式鎖的功能
    支持數據持久化
    支持事務
    支持消息隊列

    一個字符串類型的值能存儲最大容量是多少?

    512M

    最大能存多大?

    官方說單例能處理key:2.5億個

    線程安全嗎?

    Redis是個單線程程序,所以它是線程安全的。

    redis 存儲結構

    key-value

    redis的基本數據類型

    string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。”

    怎么理解Redis事務?

    事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,不會被其他客戶端發送來的命令請求所打斷。
    事務是一個原子操作:事務中的命令要么全部被執行,要么全部都不執行。

    什么是Redis持久化?Redis有哪幾種持久化方式?優缺點是什么?

    持久化就是把內存的數據寫到磁盤中去,防止服務宕機了內存數據丟失。
    RDB(Redis Database):指定的時間間隔能對你的數據進行快照存儲。
    AOF(Append Only File):每一個收到的寫命令都通過write函數追加到文件中。

    什么情況下要用到緩存,什么數據適合緩存,使用緩存需要注意什么問題?

    熱點數據,不變化的數據(如省市區,分類),登錄用戶的token也可以用緩存,需要注意緩存和數據庫的一致性,緩存擊穿,緩存穿透,雪崩問題

    什么是緩存擊穿?怎么解決?

    相較于緩存穿透,緩存擊穿的目的性更強,一個存在的key,在緩存過期的一刻,同時有大量的請求,這些請求都會擊穿到DB,造成瞬時DB請求量大、壓力驟增。這就是緩存被擊穿,只是針對其中某個key的緩存不可用而導致擊穿,但是其他的key依然可以使用緩存響應。
    比如熱搜排行上,一個熱點新聞被同時大量訪問就可能導致緩存擊穿。

  • 設置熱點數據永遠不過期
  • 加互斥鎖(分布式鎖)
    在訪問key之前,采用SETNX(set if not exists)來設置另一個短期key來鎖住當前key的訪問,訪問結束再刪除該短期key。保證同時刻只有一個線程訪問。這樣對鎖的要求就十分高。
  • 什么是緩存穿透?怎么解決?

    緩存穿透:
    緩存穿透的概念很簡單,用戶想要查詢一個數據,發現redis內存數據庫沒有,也就是緩存沒有命中,于是向持久層數據庫查詢。發現也沒有,于是本次查詢失敗。當用戶很多的時候,緩存都沒有命中(秒殺!),于是都去請求了持久層數據庫。這會給持久層數據庫造成很大的壓力,這時候就相當于出現了緩存穿透。洪水攻擊。數據庫也查不到就沒有緩存,就會一直與數據庫訪問。

    解決方案:

  • 布隆過濾器
    對所有可能查詢的參數以Hash的形式存儲,以便快速確定是否存在這個值,在控制層先進行攔截校驗,校驗不通過直接打回,減輕了存儲系統的壓力。
  • 緩存空對象
    一次請求若在緩存和數據庫中都沒找到,就在緩存中方一個空對象用于處理后續這個請求。
  • 什么是緩存雪崩?怎么解決?

    大量的key設置了相同的過期時間,導致在緩存在同一時刻全部失效,造成瞬時DB請求量大、壓力驟增,引起雪崩。

    解決方案:

  • redis高可用
    這個思想的含義是,既然redis有可能掛掉,那我多增設幾臺redis,這樣一臺掛掉之后其他的還可以繼續工作,其實就是搭建的集群
  • 限流降級
    這個解決方案的思想是,在緩存失效后,通過加鎖或者隊列來控制讀數據庫寫緩存的線程數量。比如對某個key只允許一個線程查詢數據和寫緩存,其他線程等待。
  • 數據預熱
    數據加熱的含義就是在正式部署之前,我先把可能的數據先預先訪問一遍,這樣部分可能大量訪問的數據就會加載到緩存中。在即將發生大并發訪問前手動觸發加載緩存不同的key,設置不同的過期時間,讓緩存失效的時間點盡量均勻。
  • 怎么保證緩存和數據庫數據的一致性?

    合理設置緩存的過期時間。
    新增、更改、刪除數據庫操作時同步更新 Redis,可以使用事物機制來保證數據的一致性。

    Redis悲觀鎖和樂觀鎖

    悲觀鎖:
    執行操作前假設當前的操作肯定(或有很大幾率)會被打斷(悲觀)。基于這個假設,我們在做操作前就會把相關資源鎖定,不允許自己執行期間有其他操作干擾。
    Redis不支持悲觀鎖。Redis作為緩存服務器使用時,以操作為主,很少寫操作,相應的操作被打斷的幾率較少。不采用悲觀鎖是為了防止降低性能。

    樂觀鎖:
    執行操作前假設當前操作不會被打斷(樂觀)。基于這個假設,我們在做操作前不會鎖定資源,萬一發生了其他操作的干擾,那么本次操作將被放棄。

    Redis 怎么實現分布式鎖?

    Redis 分布式鎖其實就是在系統里面占一個“坑”,其他程序也要占“坑”的時候,占用成功了就可以繼續執行,失敗了就只能放棄或稍后重試。
    占坑一般使用 setnx(set if not exists)指令,只允許被一個程序占有,使用完調用 del 釋放鎖。

    Redis 分布式鎖有什么缺陷?

    Redis 分布式鎖不能解決超時的問題,分布式鎖有一個超時時間,程序的執行如果超出了鎖的超時時間就會出現問題。

    Redis 如何做內存優化?

    盡量使用 Redis 的散列表,把相關的信息放到散列表里面存儲,而不是把每個字段單獨存儲,這樣可以有效的減少內存使用。比如將 Web 系統的用戶對象,應該放到散列表里面再整體存儲到 Redis,而不是把用戶的姓名、年齡、密碼、郵箱等字段分別設置 key 進行存儲。

    redis是單線程的,為什么那么快

    1)完全基于內存,絕大部分請求是純粹的內存操作,非常快速。數據存在內存中,類似于HashMap,HashMap的優勢就是查找和操作的時間復雜度都是O(1)
    2)數據結構簡單,對數據操作也簡單,Redis中的數據結構是專門進行設計的
    3)采用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進程或者多線程導致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的性能消耗
    4)使用多路I/O復用模型,非阻塞IO
    5)使用底層模型不同,它們之間底層實現方式以及與客戶端之間通信的應用協議不一樣,Redis直接自己構建了VM 機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求

    Redis 一級緩存與二級緩存(不知道答案對不對)

    緩存為了減輕數據庫訪問量;
    一級比二級多了一級
    一級緩存請求內存,沒有的話在請求數據庫;
    二級緩存請求內存,沒有在請求二級緩存區,沒有在請求數據庫;
    Hibernate 二級緩存需要添加配置文件
    redis 自帶二級緩存
    因為數據庫去進行IO操作(增刪更新)都需要像(唱片)的刻度一樣,動刻度,非常慢,
    所以需要緩存減輕數據庫訪問量達到什么減輕數據庫壓力等等作用;

    在看看別人的標準答案:
    hibernate一級緩存和二級緩存的區別: https://blog.csdn.net/defonds/article/details/2308972
    MyBatis緩存分為一級緩存和二級緩存:https://blog.csdn.net/u014756827/article/details/52754750

    Nginx

    比較好的文章(內含教程視頻):https://blog.csdn.net/m0_49558851/article/details/107786372

    請解釋一下什么是Nginx?

    Nginx—Ngine X,是一款免費的、自由的、開源的、高性能HTTP服務器和反向代理服務器;也是一個IMAP、POP3、SMTP代理服務器;Nginx以其高性能、穩定性、豐富的功能、簡單的配置和低資源消耗而聞名。
    也就是說Nginx本身就可以托管網站(類似于Tomcat一樣),進行Http服務處理,也可以作為反向代理服務器 、負載均衡器和HTTP緩存。
    Nginx 解決了服務器的C10K(就是在一秒之內連接客戶端的數目為10k即1萬)問題。它的設計不像傳統的服務器那樣使用線程處理請求,而是一個更加高級的機制—事件驅動機制,是一種異步事件驅動結構。

    請列舉Nginx和Apache 之間的不同點

    請解釋Nginx如何處理HTTP請求

    Nginx 是一個高性能的 Web 服務器,能夠同時處理大量的并發請求。它結合多進程機制和異步機制 ,異步機制使用的是異步非阻塞方式 ,接下來就給大家介紹一下 Nginx 的多線程機制和異步非阻塞機制 。

    1、多進程機制
    服務器每當收到一個客戶端時,就有 服務器主進程 ( master process )生成一個 子進程( worker process )出來和客戶端建立連接進行交互,直到連接斷開,該子進程就結束了。
    使用進程的好處是各個進程之間相互獨立,不需要加鎖,減少了使用鎖對性能造成影響,同時降低編程的復雜度,降低開發成本。其次,采用獨立的進程,可以讓進程互相之間不會影響 ,如果一個進程發生異常退出時,其它進程正常工作, master 進程則很快啟動新的 worker 進程,確保服務不會中斷,從而將風險降到最低。
    缺點是操作系統生成一個子進程需要進行 內存復制等操作,在資源和時間上會產生一定的開銷。當有大量請求時,會導致系統性能下降 。

    2、異步非阻塞機制

    每個工作進程 使用 異步非阻塞方式 ,可以處理 多個客戶端請求 。

    當某個 工作進程 接收到客戶端的請求以后,調用 IO 進行處理,如果不能立即得到結果,就去 處理其他請求 (即為 非阻塞 );而 客戶端
    在此期間也 無需等待響應 ,可以去處理其他事情(即為 異步 )。

    當 IO 返回時,就會通知此 工作進程 ;該進程得到通知,暫時 掛起 當前處理的事務去 響應客戶端請求 。

    請列舉Nginx的一些特性

    跨平臺:可以在大多數Unix like 系統編譯運行。而且也有Windows的移植版本。

    配置異常簡單:非常的簡單,易上手。

    非阻塞、高并發連接:數據復制時,磁盤I/O的第一階段是非阻塞的。官方測試能支持5萬并發連接,實際生產中能跑2~3萬并發連接數(得益于Nginx采用了最新的epoll事件處理模型(消息隊列)。

    Nginx代理和后端Web服務器間無需長連接;

    Nginx接收用戶請求是異步的,即先將用戶請求全部接收下來,再一次性發送到后端Web服務器,極大減輕后端Web服務器的壓力。

    發送響應報文時,是邊接收來自后端Web服務器的數據,邊發送給客戶端。

    網絡依賴性低,理論上只要能夠ping通就可以實施負載均衡,而且可以有效區分內網、外網流量。

    支持內置服務器檢測。Nginx能夠根據應用服務器處理頁面返回的狀態碼、超時信息等檢測服務器是否出現故障,并及時返回錯誤的請求重新提交到其它節點上。

    此外還有內存消耗小、成本低廉(比F5硬件負載均衡器廉價太多)、節省帶寬、穩定性高等特點。

    簡述反向代理和正向代理

    正向代理:

    對于目標服務器來講,感受不到真實的客戶端,與它通信的是代理客戶端,如kexueguge的軟件就是一個正向代理

    舉個正向代理的例子,我(客戶端)沒有綠碼出不了門,但是朋友(代理)有,我(客戶端)讓朋友(代理)去超市買瓶水,而對于超市(服務器)來講,他們感知不到我(客戶端)的存在,這就是正向代理。

    反向代理:

    我們將請求發送到服務器,然后服務器對我們的請求進行轉發,我們只需要和代理服務器進行通信就好

    舉個反向代理例子,我(客戶端)讓朋友(代理)去給我買瓶水,并沒有說去哪里買,反正朋友(代理)買回來了,對于我(客戶端)來講,我(客戶端)感知不到超市(服務器)的存在,這就是反向代理。

    使用“反向代理服務器”的優點是什么?

    反向代理服務器可以隱藏源服務器的存在和特征。它充當互聯網云和web服務器之間的中間層。這對于安全方面來說是很好的,特別是當您使用web托管服務時。

    nginx負載均衡的幾種常用方式

    1、輪詢(默認)
    2、weight 權重
    3、ip_hash指令

    解決nginx負載均衡的session共享問題

    1、不使用session,換用cookie
    2、session存在數據庫(MySQL等)中
    3、session存在memcache或者redis中
    4、nginx中的ip_hash技術

    一些配置

    # upstream 節點群 upstream backend {server backend1.example.com weight=5;server backend2.example.com:8080;server unix:/tmp/backend3;server backup1.example.com:8080 backup;server backup2.example.com:8080 backup; }server { #轉發location / {# 節點地址proxy_pass http://backend;} }

    安全性

    攻擊

    注入攻擊

    如何避免 SQL 注入?

    使用預處理 PreparedStatement。
    使用正則表達式過濾掉字符中的特殊字符。

    什么是 XSS 攻擊,如何避免?

    XSS 攻擊:即跨站腳本攻擊,它是 Web 程序中常見的漏洞。原理是攻擊者往 Web 頁面里插入惡意的腳本代碼(css 代碼、Javascript 代碼等),當用戶瀏覽該頁面時,嵌入其中的腳本代碼會被執行,從而達到惡意攻擊用戶的目的,如盜取用戶 cookie、破壞頁面結構、重定向到其他網站等。
    預防 XSS 的核心是必須對輸入的數據做過濾處理。

    設計模式

    說一下你熟悉的設計模式?

    單例模式

    構造參數私有化,外部不能調用,提供一個static的接口保證被創建一次

    簡單的懶漢式

    public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }

    比較完整的版本(雙重校驗鎖+不允許指令重排):
    關鍵詞:
    鎖:synchronized
    指令重排:volatile

    public class Lazy {private Lazy(){System.out.println(Thread.currentThread().getName() + "已被創建!");}//所以我們要加volatile關鍵字告訴jvm它是易變的 不要優化策略而進行指令重排private static volatile Lazy instance;public static Lazy getInstance(){if(instance == null) {synchronized (Lazy.class) {if (instance == null) {instance = new Lazy();//這不是一個原子型操作/*** 1.分配內存空間* 2.執行構造方法* 3.引用變量指向內存空間* 虛擬機jvm執行時,可能會產生指令重排的現象 類似 132 的順序* 這將導致并發場景下的另一線程想要獲取實例時,* 鎖之前的判空就會認為不為空了* 則會返回 指向未知內存的引用(因為實際上未執行構造方法)*/}}}return instance;} }

    詳細:https://www.runoob.com/design-pattern/singleton-pattern.html

    工廠模式

    工廠設計模式,顧名思義,就是用來生產對象的,在java中,萬物皆對象,這些對象都需要創建,如果創建的時候直接new該對象,就會對該對象耦合嚴重,假如我們要更換對象,所有new對象的地方都需要修改一遍,這顯然違背了軟件設計的開閉原則,如果我們使用工廠來生產對象,我們就只和工廠打交道就可以了,徹底和對象解耦,如果要更換對象,直接在工廠里更換該對象即可,達到了與對象解耦的目的;所以說,工廠模式最大的優點就是:解耦

    觀察者模式

    定義了對象之間的一對多的依賴,這樣一來,當一個對象改變時,它的所有的依賴者都會收到通知并自動更新。

    外觀模式

    提供一個統一的接口,用來訪問子系統中的一群接口,外觀定義了一個高層的接口,讓子系統更容易使用。

    模版方法模式

    定義了一個算法的骨架,而將一些步驟延遲到子類中,模版方法使得子類可以在不改變算法結構的情況下,重新定義算法的步驟。
    狀態模式:允許對象在內部狀態改變時改變它的行為,對象看起來好像修改了它的類。

    tomcat

    默認線程數

    150

    Shiro

    談談Shiro的工作流程

    別人的答案:

    首先shiro工作流程中又三個重要的組件,分別是Subject,SecurityManager,以及Realm。
    先來介紹Subject,即為主體也就相當于目前操作系統的用戶直觀來說就相當于目前登錄的用戶。這里Subject主要是用來檢測用戶的登錄,登錄完之后就主要將工作交給SecurityManager來完成
    其次就是SecurityManager主要來檢測目前的用戶Subject的一系列的安全操作,比如說當前用戶所具備的權限,以及該用戶的角色是哪一層級的,在用戶執行一系列操作的時候進行授權,避免越權的操作。
    之后就是Realm,他主要就是負責與數據庫交互,就比如說SecurityManager來檢測用戶的權限是,就需要Realm從數據庫中取出該用戶的權限以及角色信息,之后才能方便SecurityManager來進行授權的操作。

    我自己練習的項目是這樣的:

    啟動項目的時候,首先會 配置SecurityManager的生命周期處理器,然后注冊自己寫的授權和認證,配置shiro攔截器,并開啟注解功能
    登錄的時候,先判斷該用戶是否生成過token,來進行保存或者更新token。
    發送請求的時候,首先會攔截除option外所有的請求,進行token的非空驗證,如果token是空的,則返回錯誤信息,如果不是空的,則驗證token的有效性,如果無效,則返回錯誤信息,有效的話進行權限驗證。先給用戶添加角色和權限(授權)再進行驗證,無權限返回對應異常,有權限進入對應接口

    權限的注解

    @RequiresPermissions //例子: @RequiresPermissions({"save"})

    Linux

    拷文件

    跳節點

    前端

    前端跨域怎么實現

    1.通過jsonp跨域
    2.跨域資源共享(CORS)
    3.nodejs中間件代理跨域
    4.nginx反向代理中設置proxy_cookie_domain

    vue2生命周期

    實例創建前后

    dom元素掛載前后

    組件數據更新前后

    組件卸載前后

    vue3生命周期

    setup函數

    頁面掛載前后

    數據更新前后

    卸載前后

    頁面報錯函數

    新增兩個 廢棄兩個

    總結

    以上是生活随笔為你收集整理的2023 亲自经历面试的初中级java面试题(持续更新)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    一级a毛片高清视频 | wwwwwww色| 午夜精品久久久久久久99热影院 | 国产精品免费一区二区三区在线观看 | 国产视频精品视频 | 久久99精品热在线观看 | 在线成人小视频 | 99九九免费视频 | 综合久久精品 | 国产传媒中文字幕 | 中文字幕免费久久 | 欧美一级片在线观看视频 | 国内99视频 | 国产精品久久久久毛片大屁完整版 | 久久久久国产一区二区三区 | 九九久久成人 | 日本三级国产 | 九九视频免费 | 成人播放器 | 午夜精品福利一区二区三区蜜桃 | 成人a在线观看高清电影 | 香蕉久久久久久久 | 国产亚洲精品成人av久久ww | 日本精品va在线观看 | 亚洲综合欧美激情 | 天堂在线视频中文网 | 国产欧美日韩一区 | 少妇高潮冒白浆 | 亚洲成年人免费网站 | 黄污网站在线 | 免费在线观看成年人视频 | 91久久一区二区 | 超碰在线观看av.com | 久久精品美女视频网站 | 依人成人综合网 | 久久调教视频 | 亚洲日韩中文字幕 | 国产精品二区在线观看 | 亚洲尺码电影av久久 | 国内成人精品2018免费看 | 五月开心激情网 | 国产在线观看国语版免费 | 久久久久www | 久久在线免费视频 | 国产一级h | 免费在线观看av网站 | 亚洲欧美日韩一二三区 | 国产精品一区在线播放 | 国内精品免费 | 狠狠色噜噜狠狠 | 亚洲日b视频| 中文字幕一区二区三区在线观看 | 日韩女同一区二区三区在线观看 | 视频91在线| 久射网| 天天se天天cao天天干 | 97精品国产97久久久久久春色 | 欧美老女人xx | 国产精品久久一区二区三区不卡 | 久久午夜色播影院免费高清 | 国产视频精选 | 黄色小说免费观看 | 丁香在线观看完整电影视频 | 国产一级特黄电影 | 天天天天色综合 | 99色亚洲 | 精品日韩在线 | 人人要人人澡人人爽人人dvd | 久久艹影院 | 免费看污在线观看 | 在线看国产一区 | 色婷婷视频在线 | 香蕉97视频观看在线观看 | 国产又粗又猛又黄 | 久久av免费观看 | 国产涩涩在线观看 | 免费观看丰满少妇做爰 | 国产精品丝袜久久久久久久不卡 | 麻豆视频入口 | 一级久久精品 | 久久久久久久久免费 | 99久久99久久精品 | 麻豆视频在线观看免费 | 国产福利91精品一区 | www.天天综合 | 亚洲黄色免费观看 | 久久av一区二区三区亚洲 | 亚洲成人资源在线 | 国产精品国产三级国产aⅴ无密码 | 亚洲精品一区二区三区四区高清 | 成人在线视频你懂的 | 国内精品亚洲 | 激情视频在线观看网址 | 久久夜视频 | 五月婷影院 | 日韩小视频 | 成人免费一级 | 在线观看国产高清视频 | 五月天综合色激情 | 亚洲 中文字幕av | www.久久91| 毛片888 | 久久香蕉影视 | 成人禁用看黄a在线 | 国产精品久久久久久久久费观看 | 伊人国产视频 | 国产99区 | 久久国产精品久久国产精品 | 久久精品毛片 | 亚洲一级特黄 | 欧美特一级片 | 婷婷丁香av | 国产婷婷视频在线 | 看片网站黄色 | 成人av一区二区在线观看 | 欧美一二三专区 | 91精品在线免费视频 | 一区二区国产精品 | 国产91免费看 | 黄色成人免费电影 | 亚洲狠狠丁香婷婷综合久久久 | 免费一级片在线 | 欧美日性视频 | 亚洲精品欧美视频 | 日韩视频三区 | 久久精品国产一区二区三区 | 91av观看 | 在线看片中文字幕 | 久久精品亚洲一区二区三区观看模式 | 国产精品自产拍在线观看桃花 | 久久久久久国产一区二区三区 | 国产黄色大片免费看 | 婷婷五月色综合 | 成人a在线观看高清电影 | 色婷婷久久一区二区 | 亚洲免费不卡 | 午夜电影 电影 | 日韩三级免费 | 久久日韩精品 | 欧美不卡视频在线 | www.99热精品 | 欧美人体xx| 午夜资源站 | 日本动漫做毛片一区二区 | 91麻豆精品一区二区三区 | 中文字幕日韩有码 | 98精品国产自产在线观看 | 999成人网| 99精品在线看 | 亚洲一区二区三区91 | 成人亚洲精品国产www | 黄色网在线播放 | 黄色特级毛片 | 国产精品福利久久久 | 狠狠久久综合 | 国产一区电影在线观看 | 国产精品99久久久久久人免费 | 欧美aaa大片 | 江苏妇搡bbbb搡bbbb | 激情六月婷婷久久 | 亚洲精品动漫成人3d无尽在线 | 国产中文视 | 麻豆久久精品 | av日韩在线网站 | a级成人毛片 | 日韩在线观看一区二区三区 | 亚洲爽爽网 | 国产亚洲精品久久久久久久久久久久 | 欧美精品一区二区在线播放 | 在线观看免费中文字幕 | h网站免费在线观看 | 欧日韩在线视频 | 久久久久久久久久久高潮一区二区 | 国产91丝袜在线播放动漫 | 91精品久久久久久综合乱菊 | 九九热有精品 | 婷婷深爱| 久插视频 | 亚州中文av | 久一网站 | 青青色影院 | 精品国产自在精品国产精野外直播 | 91中文视频 | 国产一区二区三区免费在线观看 | 久久精品中文字幕免费mv | 久久成人国产精品免费软件 | 在线中文字幕视频 | 热久精品 | 激情五月开心 | 久久天天躁夜夜躁狠狠躁2022 | 超碰免费在线公开 | 丁香伊人网 | 在线黄色国产 | 黄色一级大片免费看 | 叶爱av在线 | 天堂av在线网 | 一区二区三区影院 | 精品福利片 | 国产精品嫩草影视久久久 | 国产麻豆视频免费观看 | 亚洲成色| 亚洲欧美乱综合图片区小说区 | 欧美影院久久 | 国产日韩精品欧美 | 国产999精品 | 最近日本字幕mv免费观看在线 | 又黄又爽又色无遮挡免费 | 黄污在线观看 | www在线观看国产 | 亚洲人成网站精品片在线观看 | 久久精品第一页 | 久久精品精品电影网 | 黄色电影网站在线观看 | 免费在线播放 | 日韩激情在线视频 | 久久综合九色欧美综合狠狠 | 操久| 成全免费观看视频 | 在线网站黄| 在线不卡a | 天天爽天天摸 | 国产欧美在线一区二区三区 | 激情伊人五月天久久综合 | 女人高潮特级毛片 | 日本99久久 | 一级黄色片在线免费观看 | 天天拍天天干 | 国产精品青青 | 99久久99久久精品国产片果冰 | 免费又黄又爽的视频 | 国产美女黄网站免费 | 日韩在线观看 | 亚洲精品高清视频在线观看 | 国产尤物一区二区三区 | 天天插夜夜操 | 日韩网站免费观看 | 国产剧情一区 | 色婷婷亚洲精品 | 亚州天堂 | 视频成人免费 | av线上看 | 日本久久影视 | 久久国产精品免费一区二区三区 | 有码中文字幕 | 国产午夜视频在线观看 | 天天操天天曰 | 国产黄色视 | 免费在线观看一级片 | 九九精品无码 | 中文在线字幕观看电影 | 九九视频热 | 国产麻豆剧传媒免费观看 | 美女黄视频免费看 | 色婷婷综合五月 | 亚洲少妇自拍 | 在线观看黄 | 国产亚洲精品久久久网站好莱 | 国产精品综合久久 | 日韩久久电影 | 精品国产理论片 | 久久久99精品免费观看乱色 | 久久久国际精品 | 少妇资源站 | 久草久 | 精品一区二区在线观看 | 亚洲午夜精品一区二区三区电影院 | 欧美成人精品欧美一级乱 | 精品在线播放视频 | 亚洲欧美视频 | 天天操福利视频 | 成人小视频在线免费观看 | 成人午夜免费剧场 | 亚洲 欧美 综合 在线 精品 | av丝袜美腿 | 国内精品久久久久久中文字幕 | 天天综合五月天 | 日韩电影一区二区三区在线观看 | 人人讲下载 | 日韩丝袜在线观看 | 日韩欧美国产精品 | 九九涩涩av台湾日本热热 | 免费观看一级成人毛片 | 久久99精品一区二区三区三区 | 国产日产欧美在线观看 | 亚洲精品免费在线 | 国产精品麻豆免费版 | 久久成熟 | 成人毛片一区 | 久久久久久久久久久电影 | 日日干日日色 | 91视频88av| 超级碰碰碰免费视频 | 啪啪精品 | 99久热在线精品 | 人人盈棋牌| 亚洲va欧美 | 99久久99久久精品国产片 | 日韩中文字幕免费看 | 99视频网址| 美女网站视频免费都是黄 | 在线激情网 | 天天精品视频 | 欧美视频一区二 | sm免费xx网站 | 在线亚洲激情 | 激情喷水 | 黄色av网站在线免费观看 | 亚洲精品永久免费视频 | 久久黄色精品视频 | 国产精品久久久久久久久毛片 | 手机成人av | 国产美女主播精品一区二区三区 | 日本精品视频免费观看 | 91漂亮少妇露脸在线播放 | 国产国产人免费人成免费视频 | 免费看片亚洲 | 中文字幕在线播放第一页 | 在线观看v片 | 免费在线激情视频 | 午夜黄网 | 99久久精品费精品 | 一本一本久久a久久精品综合 | 久久国产精品色婷婷 | 中文字幕免费国产精品 | 高清av影院| 国产91免费在线观看 | 黄色片免费在线 | 亚洲精品午夜久久久 | 中文字幕在线色 | 一级c片| 国产精品 国产精品 | 成人免费网站视频 | 免费在线91 | 高清中文字幕av | 在线观看aa | 毛片网站免费在线观看 | 国产午夜在线观看视频 | 国产成人精品女人久久久 | 欧美一级电影 | 97精品国自产拍在线观看 | a v在线视频 | 一区二区三区电影 | 美女网站黄免费 | 91精品久久久久久久久久入口 | 亚洲国产精品一区二区尤物区 | 亚洲欧美综合 | 天天操偷偷干 | 日韩在线观看第一页 | 日韩h在线观看 | av观看在线观看 | 99亚洲精品 | 美女免费视频一区 | 国产精品亚洲视频 | 久久久久久精 | 人人爽久久涩噜噜噜网站 | 免费av观看 | 午夜国产一区 | 伊人五月综合 | 久章操| 蜜臀av一区二区 | 日日干av | 国产91在线看 | 黄色网在线免费观看 | 五月开心网 | 五月天久久久久 | 久久精品99| 久草在线视频国产 | 久久久久久激情 | 五月婷影院 | 亚洲精品免费播放 | 在线国产一区二区 | 日韩免| 亚洲va欧美va人人爽 | 99精品免费久久久久久日本 | 蜜桃av人人夜夜澡人人爽 | 欧美精品v国产精品v日韩精品 | 狠狠干网址 | 欧美成a人片在线观看久 | 91中文字幕永久在线 | 久久久久这里只有精品 | 97国产情侣爱久久免费观看 | 国产手机视频 | 日韩av电影网站在线观看 | 精品一区二区在线免费观看 | 久久久国产精品免费 | 亚洲视频456 | 欧美精品一区二区三区四区在线 | 色偷偷88888欧美精品久久久 | 免费特级黄色片 | 成人va天堂 | 人人爽人人片 | 九九热只有精品 | 日韩av一区二区三区在线观看 | 探花视频在线观看免费 | 97色噜噜 | 亚洲精品乱码久久久久久按摩 | 国产精品理论片在线观看 | 在线亚洲小视频 | 欧美日本国产在线观看 | 最新日韩在线观看 | 91九色国产视频 | 成人精品久久久 | av线上看| 国产高清av在线播放 | 亚洲天堂首页 | 激情九九| 精品免费视频. | 午夜视频一区二区三区 | 麻花豆传媒一二三产区 | 麻豆国产精品一区二区三区 | 日韩av一区二区三区 | 国产伦理一区 | 狠狠五月天 | 97电影网站 | 91九色老| 国产精品一区二区视频 | 综合激情久久 | 成人欧美日韩国产 | 亚洲精品一区二区三区高潮 | 最近日本中文字幕a | 国内精品久久天天躁人人爽 | 久久午夜色播影院免费高清 | 成年人免费在线看 | 国产黄色片免费观看 | 91精品国自产在线偷拍蜜桃 | 黄色av三级在线 | 亚洲国产成人在线观看 | 久草视频2 | 国产黄色精品网站 | 久久婷婷开心 | 久久精品国产亚洲精品2020 | 九九在线国产视频 | 日日夜夜精品视频 | 日韩精品亚洲专区在线观看 | 最新av在线网站 | 亚洲国产中文在线 | 中文字幕在线看视频国产中文版 | 国产成人久 | 欧美激情一区不卡 | 网站你懂的 | 日日干夜夜操视频 | 手机在线中文字幕 | a级片在线播放 | 国产精品一区二区美女视频免费看 | a级国产乱理伦片在线播放 久久久久国产精品一区 | a久久久久 | 99精品视频在线观看视频 | 国产在线不卡视频 | 国产伦理一区 | av免费电影在线观看 | 久久久国产成人 | 99在线观看视频网站 | 色婷婷色 | 久草在线免费在线观看 | 公与妇乱理三级xxx 在线观看视频在线观看 | 国产午夜精品免费一区二区三区视频 | 精品成人免费 | 久久再线视频 | 日韩中文在线电影 | 国产成人一区三区 | 日韩高清www | 国内精品在线看 | 在线成人一区 | 中文网丁香综合网 | 永久免费观看视频 | 亚洲在线视频免费 | 久久国产区 | 国产91勾搭技师精品 | 五月婷在线播放 | 欧美精品v国产精品v日韩精品 | 亚洲 欧洲av | 波多野结衣亚洲一区二区 | 69久久99精品久久久久婷婷 | 久久国产经典 | 日本性生活免费看 | 亚洲综合成人在线 | 欧美另类调教 | 国产成人专区 | 六月丁香激情综合 | 日韩午夜电影 | 国产精品久久免费看 | www.av小说 | 夜夜骑天天操 | 天堂v中文 | wwwwww黄 | 欧美热久久 | 天堂在线视频中文网 | 69久久久 | 久久久国产精品一区二区三区 | 天天操天天添天天吹 | 亚洲国产片 | 色视频在线看 | 婷婷色六月天 | 日日夜夜精品 | 国产精品毛片久久久久久 | 欧美一区二区三区特黄 | 麻豆一二三精选视频 | 91免费在线视频 | 一级性视频 | 亚洲精品小视频 | 91av综合 | 日韩爱爱片 | 午夜久久福利 | 蜜桃av综合网| 97偷拍视频 | 天天综合精品 | 亚洲精品乱码久久久久久久久久 | 成人在线视频网 | 国产一级黄 | 美女网站视频一区 | 国产在线第三页 | 欧美国产不卡 | www色,com| 97热视频| 91免费看黄 | 成人黄色电影免费观看 | 久久久精品影视 | 一区二区三区国产精品 | 国产精品美女免费看 | av黄色大片 | 国产一级片免费视频 | 日韩欧美国产成人 | 久久a级片 | 在线视频 91| 国产精品二区在线 | 91欧美在线| 久久综合一本 | 高清在线一区 | 日日干 天天干 | 久久久久成人精品免费播放动漫 | 九九热在线精品视频 | 成人黄色电影在线播放 | 欧美一级免费 | 国产aaa大片 | 可以免费观看的av片 | 国产99精品在线观看 | 99九九99九九九视频精品 | 一区二区精品在线观看 | 久久久久久美女 | 色综合久久久久 | 97国产人人| 精品一区二区三区久久久 | 成人网色 | 夜夜操网 | 日本在线视频一区二区三区 | 久草视频在线新免费 | 在线观看成人毛片 | 欧美激情操 | 国产精品免费一区二区三区 | 久久精品日产第一区二区三区乱码 | 久久婷婷精品视频 | 久久天天躁夜夜躁狠狠85麻豆 | 国产一级片播放 | 欧美最猛性xxxx| 97免费在线观看 | 91av成人 | 日韩中字在线观看 | 国产亚洲日本 | 毛片888| 成人在线小视频 | 亚洲狠狠操 | 久久99九九99精品 | 亚洲视频第一页 | 日韩在线中文字幕视频 | 欧美日韩国产一二三区 | 91干干干| 亚洲 中文 在线 精品 | 久久成人国产精品入口 | 456免费视频| 一区二区三区视频网站 | 久久综合九色综合网站 | 日韩大片免费在线观看 | 久久精品在线免费观看 | bayu135国产精品视频 | 日韩伦理片一区二区三区 | 超碰97国产在线 | 99久久这里只有精品 | 久久精品网 | 国产一级精品绿帽视频 | av综合在线观看 | 久草剧场| 一区二区国产精品 | 亚洲一片黄 | 日韩电影一区二区三区在线观看 | 色综合久久五月天 | 青草视频在线 | 一性一交视频 | 九九九九九国产 | 中文字幕 91 | 在线观看黄网站 | 国产精品久久久久久久久费观看 | 亚洲精品乱码久久久久久蜜桃欧美 | 久久免费看毛片 | 久草在线免 | 亚洲一片黄 | 欧美午夜视频在线 | 国产又粗又猛又黄又爽 | 五月婷久久 | h动漫中文字幕 | 亚洲黄色免费电影 | 99久久婷婷国产 | 日批在线看 | 91视频网址入口 | 视频一区二区在线 | 中文字幕免费观看 | 一区二精品 | 日韩激情视频在线 | 免费精品视频在线观看 | 国产精品一区二区三区视频免费 | 国产亚洲欧美日韩高清 | 久久激情五月婷婷 | 成人在线视频你懂的 | 啪啪免费观看网站 | 精品国产网址 | 女人18片毛片90分钟 | 麻花豆传媒mv在线观看 | 久久国产精品免费视频 | 国产精品亚洲人在线观看 | 久久久国产一区二区三区四区小说 | 日韩动态视频 | 国产中文字幕大全 | 美女网站久久 | 日韩av电影网站在线观看 | 日韩中文字幕免费在线观看 | 91av原创| 97成人精品区在线播放 | 成人免费观看在线视频 | 欧美精品v国产精品v日韩精品 | 久久精品首页 | av高清不卡 | 国产精品一区二区三区在线看 | 久久99网 | 国产视频精选 | 免费h精品视频在线播放 | 色视频一区| 婷婷六月丁 | 久久久久久久久久免费 | 久久久久久久久久久久久久免费看 | 日韩中文字幕视频在线观看 | 99久免费精品视频在线观看 | 久久久久久久毛片 | 国产美女无遮挡永久免费 | 97视频在线观看成人 | 成人黄色毛片 | 久久精品99久久久久久2456 | 99九九99九九九视频精品 | 四虎欧美 | 成年人黄色免费网站 | 午夜av免费观看 | 91九色成人| 日本久久成人中文字幕电影 | 日韩综合一区二区 | 五月天.com | 成人av一区二区三区 | 男女免费av | 国产91影院| 国产成人在线看 | 国产日产精品一区二区三区四区的观看方式 | 国产免费观看久久黄 | 国产精品久久久一区二区三区网站 | 久久精品直播 | 激情五月婷婷综合 | 精品视频在线播放 | 四虎国产精品成人免费4hu | 麻豆成人精品 | 午夜美女福利 | 日韩网站在线观看 | 亚洲视频第一页 | 日韩一级理论片 | 国产精品第7页 | 午夜在线看片 | 在线观看免费视频你懂的 | 久久久综合精品 | 国产精品第72页 | 国产精品网址在线观看 | 亚洲精品影视 | 国产人在线成免费视频 | 西西444www大胆高清图片 | 日本在线观看一区二区三区 | 日韩欧美xxx| 亚洲欧美综合精品久久成人 | 黄色大片av | 精品国产美女 | 免费看的黄网站软件 | 天天伊人网 | 午夜久久久久 | 成人在线免费看视频 | www.色午夜| 91精品办公室少妇高潮对白 | 成年美女黄网站色大片免费看 | 日韩免费三区 | 天堂网一区二区 | 在线观看中文字幕亚洲 | 一区二区三区在线免费播放 | 69精品视频在线观看 | 亚洲天堂免费视频 | 高潮毛片无遮挡高清免费 | 国产男女无遮挡猛进猛出在线观看 | 日韩特黄一级欧美毛片特黄 | 国产毛片久久久 | av免费观看高清 | 在线观看网站你懂的 | 国产黄色a| 国产精品av久久久久久无 | 久久99精品国产 | 五月婷婷开心中文字幕 | 在线色资源 | 久久久激情网 | 日韩欧美视频在线免费观看 | 中文字幕九九 | 国产精品专区在线观看 | 久久黄页 | 一区二区三区四区五区在线 | 久久精视频 | 欧美少妇xxx | 色综合国产 | 欧美精品做受xxx性少妇 | 亚洲国产偷| av 一区二区三区 | 日韩精品中文字幕久久臀 | www.97色.com| 午夜av在线 | 久久久影院一区二区三区 | 免费精品视频在线 | 午夜在线资源 | 成人国产精品一区二区 | 香蕉视频国产在线观看 | 激情五月亚洲 | 免费男女羞羞的视频网站中文字幕 | 九九热在线播放 | 极品国产91在线网站 | 91精品国产91热久久久做人人 | 亚洲欧美日韩一二三区 | 精品国产综合区久久久久久 | 97成人精品视频在线播放 | 狠狠夜夜 | 一区二区三区播放 | 98涩涩国产露脸精品国产网 | 91精品久久久久久综合五月天 | 色中文字幕在线观看 | 特级西西444www大精品视频免费看 | 蜜桃视频在线观看一区 | 中文av网站| 伊甸园永久入口www 99热 精品在线 | 九九免费在线观看 | 婷婷色中文 | 国产九九热视频 | 99麻豆视频 | 99视频免费看 | 中文字幕久久亚洲 | 午夜视频在线观看网站 | 国产成人久| 欧美另类sm图片 | 免费成人黄色片 | 欧美日韩高清免费 | 九九视频在线播放 | 免费av一级电影 | 免费观看国产精品视频 | 四虎5151久久欧美毛片 | 久久丁香网 | 人人爽人人爽人人片av免 | 欧美在线视频一区二区三区 | 一本一道久久a久久综合蜜桃 | 欧美日韩视频一区二区 | 狠狠干夜夜操天天爽 | 午夜视频在线观看一区二区三区 | 久久福利剧场 | 久久免视频 | 亚洲乱码久久久 | 国产精品综合av一区二区国产馆 | 在线观看一区二区精品 | 国产三级av在线 | 日本韩国在线不卡 | 国产午夜麻豆影院在线观看 | 99久久精品电影 | 在线精品在线 | 色资源网在线观看 | 911免费视频 | 九九九在线 | 免费av电影网站 | 在线观看av不卡 | 天天射天天做 | 黄色三级免费观看 | 日韩久久一区二区 | 日本爱爱免费视频 | 99视频网站 | 久久免费在线视频 | 91激情在线视频 | 久久免费视频8 | 日韩免费电影 | 国产成人精品一区二区三区网站观看 | 欧美三级高清 | 黄色三级免费 | 精品亚洲在线 | 免费观看一级特黄欧美大片 | 国产一区二区在线观看免费 | 亚洲精品小视频 | 欧美日韩精品影院 | 欧美色888| 亚洲专区视频在线观看 | 国产精品自拍在线 | 天天干天天玩天天操 | 久久综合导航 | 国产又粗又猛又爽又黄的视频免费 | 久久久久久国产一区二区三区 | 黄色动态图xx | 日韩网站在线免费观看 | 亚洲国产欧美一区二区三区丁香婷 | 黄色www免费 | 欧美日韩免费在线视频 | 日韩欧美高清在线观看 | 久久久久黄| 成人av免费在线观看 | 丁香六月国产 | 99色99| 欧美美女视频在线观看 | 久久综合久久综合这里只有精品 | 91视视频在线直接观看在线看网页在线看 | 免费a级毛片在线看 | 四虎亚洲精品 | 国产精品视频999 | 国产在线精品一区二区三区 | 亚洲国产日韩精品 | 成人在线观看日韩 | 欧美成年性 | 日韩色视频在线观看 | 亚洲天天综合 | 麻豆视频一区二区 | 精品久久久久久久久久久院品网 | 免费在线观看av网址 | 午夜精品999 | 色婷婷88av视频一二三区 | 亚洲欧美日本国产 | 色偷偷av男人天堂 | www国产亚洲精品久久麻豆 | 日韩欧美电影在线 | 欧美日韩一区二区三区在线观看视频 | 五月天综合激情 | 91男人影院 | 免费人成在线观看 | 免费黄色一区 | 97视频免费 | 久久新| 中文字幕亚洲精品日韩 | 日韩在线播放欧美字幕 | 精品久久久久久久久中文字幕 | 91九色视频国产 | 一级a性色生活片久久毛片波多野 | 69久久夜色精品国产69 | 久久伊人精品一区二区三区 | www.夜夜操.com| 久久久国产精品久久久 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 91亚洲在线 | 国产成人一区二区啪在线观看 | 成人超碰97 | 日韩网站视频 | 91麻豆视频| 麻花传媒mv免费观看 | 欧美性生活久久 | 亚洲精品福利视频 | 色精品视频 | 欧美久久久影院 | 激情影音先锋 | av一级久久| 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲美女久久 | 久久久精品久久 | 激情丁香久久 | 久久综合之合合综合久久 | 国产日韩中文字幕 | 毛片久久久 | 激情av资源网 | 成人av教育| 久久久久国产成人免费精品免费 | 色天天久久| 婷婷亚洲五月色综合 | 手机在线看片日韩 | 伊人资源站 | 欧美日韩一区二区三区视频 | 91九色视频 | 国产精品video爽爽爽爽 | 国产精品久久精品国产 | 天天插日日操 | 又黄又刺激的视频 | 成人午夜电影久久影院 | 超碰99人人 | 国产一级免费观看视频 | 91黄色在线观看 | 日本公妇色中文字幕 | 欧美激情另类 | 欧美一级视频免费看 | 96亚洲精品久久 | 五月开心色 | 亚洲天天做 | 视频在线观看入口黄最新永久免费国产 | 亚洲一区二区三区精品在线观看 | 国产一级精品视频 | 欧美日韩视频网站 | 97免费| 日本一区二区不卡高清 | 99热这里是精品 | 九九免费观看全部免费视频 | 亚洲aⅴ一区二区三区 | 蜜臀av夜夜澡人人爽人人 | 久久伦理电影网 | 91少妇精拍在线播放 | ,久久福利影视 | 日韩专区一区二区 | 97精品国产91久久久久久 | 在线观看涩涩 | 久久久久久视频 | 国产美女精品人人做人人爽 | 毛片永久新网址首页 | 美女网站在线观看 | 天天操夜夜想 | av天天草| 亚洲天堂精品视频 | 亚洲视频精品 | 午夜日b视频 | 欧美大jb | 九九热在线精品视频 | 少妇超碰在线 | 中文字幕永久 | 国产xxxx做受性欧美88 | 不卡国产在线 | 综合久久久久久久久 | 天天操天天艹 | 久久伊人操 | 成人在线网站观看 | 91视频在线免费观看 | 日韩在线视 | 99久久婷婷国产综合精品 | 探花视频在线观看+在线播放 | 国产精品va在线观看入 | 国产日韩av在线 | 天天曰天天曰 | 国产精品亚 | 国产在线一区二区三区播放 | 日韩视频在线播放 | 国产亚洲视频中文字幕视频 | 九九九在线观看视频 | 久久久久久久久免费视频 | 亚洲人人网 | 日韩免费视频一区二区 | 国内99视频 | 香蕉视频国产在线观看 | 狠狠干夜夜操 | 精品一区二区三区电影 | 日韩欧美高清一区二区 | 国外调教视频网站 | 五月婷婷在线综合 | 九九久久精品 | 国产99亚洲 | 欧美成人999 | 69国产盗摄一区二区三区五区 | 日韩三区在线 | 麻豆成人网 | 免费黄色在线播放 | 欧美国产日韩在线观看 | 黄网站app在线观看免费视频 | 国产专区日韩专区 | 久久 精品一区 | 99色在线| 国产91学生| 国产在线精品区 | 91爱看片| 中文字幕激情 | 国产精品久久久亚洲 | 97色在线观看免费视频 | 美女国产在线 | 国产成人精品av在线观 | av电影在线免费观看 | 99 精品 在线 | 国产成人久久精品77777综合 | 97在线精品 | 久久久免费高清视频 | 毛片激情永久免费 | 东方av在线免费观看 | 亚洲精品在线观 | 九九色在线 | 国偷自产视频一区二区久 | 久久黄色影视 | 在线观看国产福利片 | 免费久久99精品国产婷婷六月 | 麻豆视频入口 | 国产伦精品一区二区三区高清 | 国产一级在线 | 91亚洲精品久久久蜜桃网站 | 27xxoo无遮挡动态视频 | 91av社区 | 久草在线中文888 | 日本久久视频 | 99精品视频免费看 | 人人舔人人爱 | 最近2019好看的中文字幕免费 | 不卡的av在线播放 | 国产高清成人 |