JAVA面試——常見問題

  • Java關鍵字
    • transient
      • Java的serialization持久化對象實例時,用來表示一個域不是對象串行化的一部分
    • native
      • 應用於方法,表示用Java之外的語言實現
    • volatile
      • 表示能夠被多個線程異步修改的成員變量
      • 確保全部線程看到的指定變量值相同
      • 禁止指令重排序
      • 實現機制:
        • lock前綴指令,造成內存屏障,以前操做必須所有完成
        • 對緩存的修改當即寫入主存
        • 寫操做後,其餘CPU中的緩存無效
  • Java多線程
    • 線程狀態:建立、就緒、運行、阻塞、終止
  • Lock與synchronized區別:
    • Lock是一個接口,synchronized是java關鍵字
    • synchronized發生異常時會自動釋放線程佔有的鎖,Lock須要手動釋放
    • Lock能夠響應中斷
    • 提升讀操做的效率
  • 序列化與反序列化:
    • 序列化:對象轉換爲字節序列
    • 序列化用途:對象持久化,保存在磁盤;網絡傳輸對象
  • Java NIO:
    • Channel(通道)
      • IO中的Steam是單向的,Channel雙向,可進行讀寫
    • Buffer(緩衝區)
      • 讀寫數據是都放到Buffer中
    • Selector(選擇器)
      • 輪詢每一個註冊的通道,有註冊事件發生,進行處理
      • 同步非阻塞IO,對IO的讀寫是同步阻塞的,經過線程複用,將IO準備事件分離
      • 單線程管理多個通道,沒必要建立並維護多個線程,減小線程上下文切換致使的開銷
      • SelectorKey表示一個到達的事件
  • 同步&非同步、阻塞&非阻塞
    • 同步:對象是多個進程或多個線程,可否併發執行,能則兩個線程是同步的
    • 阻塞:單進程或線程,等待(阻塞)仍是返回標誌信息(非阻塞)
    • 同步IO&異步IO:
      • 同步IO:IO操做完成以前,線程阻塞
      • 異步IO:IO操做不會致使請求線程阻塞,IO操做兩個階段都是由內核完成,不會阻塞用戶線程
      • IO:1)查看是否就緒 2)數據拷貝
      • 區別:數據拷貝是由用戶仍是內核完成
      • 阻塞IO是反映在IO操做的第一個階段(查看是否就緒)
  • JAVA設計模式:
    • 代理模式:
      • 爲其餘對象提供代理,控制對此對象的訪問(Thread實現Runnable接口)
    • 策略模式:
      • 定義一系列算法,將每一個算法封裝,能夠相互替換
    • 單例模式:
      • 系統中只有一個實例,用在資源共享
      • 數據庫鏈接池、線程池
      • 構造函數設置爲private,定義static變量儲存實例
    • 裝飾模式:
      • 在不改變原類和使用繼承的狀況下,動態擴展一個對象的功能。
      • 經過建立一個包裝對象,包裹真實對象
    • 工廠模式:
      • 解耦合
    • 原型模式
    • 模板方法模式
  • 內存泄露:
    • 無用對象持續佔有內存空間而得不到釋放
    • 緣由:長生命週期對象持有短生命週期對象
  • Servlet、Tomcat、Spring MVC關係
    • Servlet:小型JAV程序,運行在Web服務器中處理用戶請求
    • Tomcat:做爲Web應用服務器,是一個Servlet容器,對Servlet進行管理
    • 一個基本的流程:
      • tomcat接收請求,找到合適的Servlet來處理請求,若是該Servlet沒加載,就順便編譯加載到JVM,若是加載了,就調init方法初始化,調Service方法處理request並返回responser,觀測Servlet狀態變化,在結束時調用destory方法
    • Spring MVC:Spring 提供的一個MVC框架,把保存數據Map的Model、頁面顯示的View、控制器Controller三者分析,簡化web項目開發難度
    • Spring Boot 將Tomcat設爲默認容器,Spring MVC的入口是一個Servlet(前置控制器DispatcherServlet),前置控制器攔截請求,分發給Controller處理
  • String StringBuffer StringBuilder
    • String用final修飾, 不可變
    • 都用字符數組保存字符串char[] value
    • StringBuffer加同步鎖,線程安全;StringBuilder沒加
  • 接口與抽象類區別
    • 一個類能夠實現多個接口,可是隻能實現一個抽象類
    • 接口中的實例變量是final類型的
    • 一個類須要實現接口中的全部方法,抽象類不必定
    • 接口中的方法不能實現,抽象類能夠有非抽象的方法
    • 接口不能經過new實例化,但能夠聲明
  • Servlet
    • 負責接收用戶HttpServletRequest,並將HttpServletResponse反饋給用戶
    • 不是線程安全的
相關文章
相關標籤/搜索