JAVA面試題(46)

    本文首發於cartoon的博客
    轉載請註明出處:https://cartoonyu.github.io/c...java

JAVA

  1. 抽象類與接口的區別git

    1. github

      1. 抽象類只能繼承一個直接父類,能夠實現多個接口
      2. 接口能夠繼承多個接口
    2. 變量redis

      1. 抽象類容許全部做用域或者關鍵字進行變量的修飾,與普通類沒有區別
      2. 接口只容許靜態不可變的public變量
    3. 方法算法

      1. 接口中在jdk1.8以前全部方法都是抽象的public方法,在1.8獲得加強,能夠有靜態方法或者默認的普通方法
      2. 抽象類中能夠有抽象方法,普通方法,靜態方法,能夠被多種關鍵字修飾,普通方法中能夠有自身的邏輯
    4. 做用sql

      1. 接口主要用於模塊間行爲的約束
      2. 抽象類主要用於模板類的實現
  2. 線程不一樣步集合轉換成線程同步集合以及區別數據庫

    1. 繼承原有集合經過java的線程同步機制實現
    2. 使用Collections的synchronizedXxx方法進行集合的轉換數組

      1. 簡單
      2. 鎖的對象爲對象,粒度過大
    3. 使用java.util包中的ConCurrent方法進行包裝緩存

      1. 簡單
      2. 鎖的粒度爲行級,且鎖的種類比較豐富
  3. java常見異常以及發生場景(最少5個exception)數據結構

    1. OutOfMemoryError

      1. 建立大對象超過java老年代內存拋出
      2. 循環調用過多,甚至出現無限循環拋出
    2. ClassCastException

      1. 對象向下轉型時發生
    3. NullPointerException

      1. 對象引用未指定對象實例直接使用
    4. SQLException

      1. sql語句執行錯誤
    5. InterruptedException

      1. 線程意外終止
    6. IndexOutOfBoundException

      1. 數組越界
  4. 爲何要用線程池,線程池有什麼參數能夠對線程池進行配置

    1. 使用線程池緣由

      1. 異步操做頻繁形成的線程切換
      2. 線程頻繁建立銷燬形成的資源的消耗
    2. 參數

      1. ThreadFactory
      2. corePoolSize

        1. CPU密集,n+1
        2. IO密集,多線程
      3. keepAliveTime
      4. maximumPoolSize
      5. BlockingQueue

        1. 6種實現隊列
      6. TimeUnit
  5. List,Set,Map的區別

    1. 存儲元素

      1. List與Set是存儲單一元素的集合
      2. Map是存儲key-value對元素的集合
    2. 元素有序性

      1. Set與Map內的元素在方法調用層面是無序的
      2. List元素是有序的
    3. 元素可重複性

      1. List元素是可重複的
      2. Set不容許重複,Map不容許key重複
    4. 繼承接口

      1. Set與List繼承了Collection
      2. Map是與Collection層次一致的接口
  6. Iterator與ListIterator的區別

    1. 繼承性

      1. ListIterator繼承於Iterator
    2. 遍歷集合

      1. Iterator能夠遍歷Collection內的全部實現類
      2. ListIterator只能遍歷List接口下的ArrayList以及LinkedList
    3. 遍歷方向

      1. Iterator只能向下遍歷
      2. ListIterator能夠向上向下遍歷
    4. 迭代時修改元素

      1. Iterator不支持迭代時修改或插入集合元素
      2. ListIterator支持迭代時修改或刪除元素
    5. 迭代時移除元素

      1. 兩個迭代器均可以在迭代時移除元素

JVM

  1. 垃圾回收算法

    1. 標記-清理

      1. 標記存活對象
      2. 清除未標記對象
      3. 效率高,可是會形成內存碎片
    2. 複製

      1. 將內存區域劃分紅清理區與存活區
      2. 將存活對象複製到存活區
      3. 清理清理區的全部對象
      4. 不會形成內存碎片,可是下降內存的使用率
    3. 標記-整理

      1. 標記待清理對象
      2. 將標記對象移到另一側
      3. 清理邊界外內存區域
      4. 有效解決了內存碎片的產生以及內存使用率降低的問題

數據庫

  1. char與varchar的區別

    1. 數據插入方面

      1. 當插入數據等於定義長度,二者處理沒有區別
      2. 當插入元素小於定義長度

        1. char會填充空格到定義長度
        2. varchar不會填充空格
    2. 空格問題

      1. 數據最後出現空格

        1. char會將空格刪除
        2. varchar不會
    3. 檢索速度

      1. char比varchar的檢索速度快
  2. 數據庫的事務特性

    1. 原子性(Atomic),事務內操做結果時一致的
    2. 一致性(Consitency),事務執行先後數據庫的狀態時一致的
    3. 隔離性(Isolation),併發事務的執行是互不干擾的
    4. 持久性(Durability),事務執行結果是永久存儲的
  3. 數據庫中select語句執行流程(客戶端到存儲引擎)

    1. 客戶端經過TCP三次握手與服務端進行鏈接
    2. 鏈接器判斷帳號信息是否有效
    3. 有效,則進入第三步
    4. 無效,鏈接器返回Access denied的錯誤
    5. 查詢緩存中是否有執行的記錄

      1. 不建議使用,能夠經過query_cache_type關閉,MySQL 8.0去除了查詢緩存的功能
      2. 有執行記錄,則返回上次執行結果
      3. 沒有執行記錄,進入第四步
    6. 分析器進行詞法分析,語法分析

      1. 詞法分析

        1. 判斷輸入的SQL語句中的關鍵詞的含義
      2. 語法分析

        1. 判斷SQL是否合法
        2. 若合法,進入第五步
        3. 若不合法,返回 You have an error in your SQL syntax錯誤到客戶端
    7. sql語句通過優化器選擇最佳執行策略

      1. 多索引狀況下的最佳索引的選擇
      2. 多表關聯時決定表的鏈接順序
    8. sql語句交由執行器進行存儲引擎的操做並返回結果

      1. 根據from找到須要查詢的表,根據where造成有效的結果集合
      2. (若是有order by,對數據進行排序)select返回結果
  4. 數據庫中數據更新語句執行流程(客戶端到存儲引擎)

    1. 客戶端經過TCP三次握手與服務端進行鏈接
    2. 鏈接器判斷帳號信息是否有效
            1. 有效,則進入第三步
            2. 無效,鏈接器返回Access denied的錯誤
    3. 查詢緩存中是否有執行的記錄
            1. 不建議使用,能夠經過query_cache_type關閉,MySQL 8.0去除了查詢緩存的功能
            2. 有執行記錄,則返回上次執行結果
            3. 沒有執行記錄,進入第四步
    4. 分析器進行詞法分析,語法分析
            1. 詞法分析
                   1. 判斷輸入的SQL語句中的關鍵詞的含義
            2. 語法分析
                   1. 判斷SQL是否合法
                   2. 若合法,進入第五步
                   3. 若不合法,返回 You have an error in your SQL syntax錯誤到客戶端
    5. sql語句通過優化器選擇最佳執行策略
    6. sql語句交由執行器進行存儲引擎的操做並返回結果
    7. 兩段式提交
           1. 檢查並讀入相關數據頁到內存
           2. 將更新語句的操做行寫入內存
                  1. 寫入操做記錄到readlog中,處於prepare狀態
                  2. 寫入操做記錄到binlog中
                  3. 事務提交,處於commit狀態
  5. redis的數據類型以及底層實現數據結構

    1. string
            1. 動態字符串
    2. hash
            1. 數據量小,壓縮鏈表
            2. 數據量大,哈希表
    3. list
            1. 數據量小,壓縮列表
            2. 數據量大,雙循環鏈表
    4. 有序集合
            1. 數據量小,壓縮鏈表
            2. 數據量大,跳錶
    5. set
            1. 數據量小,有序數組
            2. 數據量大,哈希表

算法

  1. 將有序數組轉換爲二叉搜索樹
相關文章
相關標籤/搜索