JAVA面試題(45)

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

java

  1. sleep與wait的區別git

    1. 做用對象github

      1. sleep是Thread類的靜態方法,做用於當前線程
      2. wait是Object類的成員方法,做用於對象自己
    2. 做用算法

      1. 調用sleep方法,線程進入休眠狀態
      2. 調用wait方法,線程進入阻塞狀態
    3. 鎖的釋放spring

      1. sleep不會釋放持有的鎖
      2. wait會釋放鎖
    4. 喚醒後端

      1. 天然喚醒或者顯式調用interrupt方法
      2. 調用notify或者notifyAll方法
    5. 調用api

      1. sleep不須要在同步代碼中調用
      2. wait須要在同步代碼中調用,不然拋出IllegalMonitorStateException
    6. 使用場景數組

      1. sleep做用於週期性任務的執行
      2. wait做用於互斥資源的使用
  2. hashMap的擴容機制瀏覽器

    1. 相關成員屬性安全

      1. HashMap是JAVA集合框架的一個存儲key-value對的實現類,有關於擴容機制的成員屬性主要有三個

        1. 默認值爲16的capicity
        2. 默認值爲0.75的loadFactory
        3. 默認值爲0的size
    2. 觸發時機

      1. 插入元素時
    3. 實現

      1. JDK 1.7

        1. 傳入newCapicity參數
        2. 新建newCapicity長度的Entry數組
        3. 將原數組元素從新hash放入新數組
        4. 將原有數組引用指向新數組
      2. JDK 1.8以後

        1. 若是節點的鏈表元素個數大於8時,原有的數組鏈表會轉換成數組紅黑樹的邏輯結構進行使用
        2. 若是當前size大於loadFactory*capicity的閾值,觸發擴容機制

          1. 新建一個newCap的int變量,大小爲2*oldCapicity
          2. 新建一個大小爲newCap的數組
          3. 原數組元素索引進行2次冪的計算放入新數組
          4. 將newCap賦值給原有的capicity
          5. 返回新數組
  3. ReentantLock的瞭解

    1. 存在位置

      1. ReentantLock是JDK的一個顯式鎖的API,具體經過AQS隊列實現功能
    2. 鎖的種類

      1. ReentantLock是可重入的鎖,內部經過判斷state當前佔有線程進行重入的判斷
      2. ReentantLock能夠實現公平鎖以及非公平鎖,在構造對象時顯式傳入fair
    3. 同步機制

      1. ReentantLock是同步非阻塞式的,採用樂觀併發策略
      2. ReentantLock須要顯式控制鎖的獲取與釋放,並且能夠響應中斷
  4. List實現類的比較

    1. 底層實現

      1. Arraylist爲數組
      2. LinkedList爲鏈表
    2. 線程安全

      1. ArrayList,LinkedList爲線程不安全
      2. Vector爲線程安全
    3. 實現時間

      1. ArrayList,LinkedList爲JDK1.2開始實現
      2. Vector爲JDK1.1開始實現
  5. NIO的瞭解

    1. NIO是java中用於實現數據的輸入/輸出的API,是同步非阻塞式的
    2. 核心對象

      1. selector,選擇器,用於對channel的選擇
      2. channel,通道,用於鏈接java程序與對象的通道
      3. buffer,緩衝區,用於數據的暫時存放
    3. 工做步驟

      1. java程序與操做對象創建channel
      2. 數據放入buffer中
      3. selector輪詢channel,監控IO情況,控制輸入輸出
  6. ConcurrentHashMap同步的實現(JDK1.7 1.8)

    1. JDK1.7實現

      1. ConcurrentHashMap中數據存放在Segment(默認爲16個)中
      2. ConcurrentHashMap爲區域鎖,鎖定對象是Segment
      3. 在寫數據時,會通過計算得出使用的Segment,並檢查是否持有Segment的鎖
    2. JDK1.8實現

      1. ConcurrentHashMap中數據存放在數組鏈表/紅黑樹中
      2. ConcurrentHashMap是行級鎖,鎖定對象是鏈表的頭結點或者紅黑樹的根結點
      3. 在寫數據,計算訪問的數據索引,檢查鎖,訪問鏈表或者紅黑樹

JVM

  1. G1的工做流程

    1. 初始標記
    2. 併發標記
    3. 最終標記
    4. 篩選回收
  2. CMS的工做流程

    1. 初始標記(stw現象)
    2. 併發標記
    3. 從新標記(stw現象)
    4. 併發清理
    5. 重置線程

Spring

  1. spring bean的生命週期

    1. 對象被實例化
    2. Spring進行IOC的注入
    3. 可選

      1. 傳入對象

        1. 實現BeanNameAware接口,傳入bean的ID
        2. 實現ApplicationFactoryAware接口,傳入Spring工廠
        3. 實現ApplicationContextAware接口,傳入Spring上下文
      2. 初始化

        1. 實現BeanPostProcessor接口,對bean內容進行修改
    4. 使用
    5. 清理

網絡

  1. 輸入域名到返回頁面的過程

    1. 瀏覽器部分

      1. 利用DNS進行域名解析
      2. 檢查本地host文件
      3. 組裝http報文
      4. http報文通過OSI底層包裝發送請求
      5. http請求在第三次tcp握手上發送
    2. 傳輸

      1. 路由器根據IP進行選擇轉發到目標主機
    3. 目標主機
    4. 後端進行報文的拆解獲取真實請求
    5. 根據請求返回相應頁面
    6. 傳輸
    7. 路由器根據IP進行選擇轉發到目標主機
    8. 源主機
    9. 拆解報文,獲取實部數據
    10. 交給瀏覽器渲染頁面

算法

  1. 兩數之和(leetcode 1)
相關文章
相關標籤/搜索