面試核心精簡-java後端開發(臨時抱佛腳系列)

JAVA部分
1. JVM
JVM 整體組成可分爲以下四個部分:
類加載器(ClassLoader) 運行時數據區(Runtime Data Area)
執行引擎(Execution Engine) 本地庫接口(Native Interface)
程序在執行之前先要把java代碼轉換成字節碼(class文件),jvm首先需要把字節碼通過一定的方式 類加載器(ClassLoader) 把文件加載到內存中 運行時數據區(Runtime Data Area) ,而字節碼文件是jvm的一套指令集規範,並不能直接交個底層操作系統去執行,因此需要特定的命令解析器 執行引擎(Execution Engine) 將字節碼翻譯成底層系統指令再交由CPU去執行,而這個過程中需要調用其他語言的接口 本地庫接口(Native Interface)來實現整個程序的功能
歸納:程序計數器、虛擬機棧和本地方法爲私有內存,會隨着線程而生,隨着線程而滅,而Java堆作爲最大的內存區域將是開發人員重點關注的內存區域,還有方法區以及運行時常量區與永生代的關係
2. JMM
java內存模型(Java Memory Model,JMM)是java虛擬機規範定義的,用來屏蔽掉java程序在各種不同的硬件和操作系統對內存的訪問的差異,這樣就可以實現java程序在各種不同的平臺上都能達到內存訪問的一致性。
Java內存模型圍繞着併發過程中如何處理原子性、可見性和順序性這三個特徵來設計的。
3. GC
垃圾收集(Garbage Collection)通常被稱爲“GC”,由虛擬機“自動化”完成垃圾回收工作。
當需要排查各種內存溢出,內存泄露問題時,當垃圾成爲系統達到更高併發量的瓶頸時,我們就需要對GC的自動回收實施必要的監控和調節。
Java GC都用了哪些算法?分別應用在什麼地方?
答:複製算法、標記清除、標記整理
4. MVC
模型-視圖-控制器模式,也稱爲MVC模式(Model View Controller)
MVC重要特點就是兩種分離:
視圖和數據模型的分離:使用不同的視圖對相同的數據進行展示;分離可視和不可視的組件,能夠對模型進行獨立測試。因爲分離了可視組件減少了外部依賴利於測試。(數據庫也是一種外部組件)
視圖和表現邏輯(Controller)的分離:Controller是一個表現邏輯的組件,並非一個業務邏輯組件。MVC可以作爲表現模式也可以作爲建構模式,意味這Controller也可以是業務邏輯。分離邏輯和具體展示,能夠對邏輯進行獨立測試。
excel中的數據類比於模型,柱狀圖,折線圖類比於視圖,而將excel這樣的編輯數據的工具類比於控制器,即模型-視圖-控制器,模型是數據,視圖是數據的展現方式,控制器負責模型和視圖之間的交互。
5. spring
IoC叫控制反轉,是Inversion of Control的縮寫,DI(Dependency Injection)叫依賴注入,是對IoC更簡單的詮釋。控制反轉是把傳統上由程序代碼直接操控的對象的調用權交給容器,通過容器來實現對象組件的裝配和管理。
6. 依賴注入
1、 Set注入 2、構造器注入 3、接口注入
7. Struts
Struts 是採用Java Servlet/JavaServer Pages技術,開發Web應用程序的開放源碼的framework。採用Struts能開發出基於MVC(Model-View-Controller)設計模式的應用構架。
8. 爲什麼說Mybatis是半自動ORM映射工具?它與全自動的區別在哪裏?
Hibernate屬於全自動ORM映射工具,使用Hibernate查詢關聯對象或者關聯集合對象時,可以根據對象關係模型直接獲取,所以它是全自動的。而Mybatis在查詢關聯對象或關聯集合對象時,需要手動編寫sql來完成,所以,稱之爲半自動ORM映射工具。
9. 什麼是Spring MVC ?簡單介紹下你對springMVC的理解?
Spring MVC是一個基於Java的實現了MVC設計模式的請求驅動類型的輕量級Web框架,通過把Model,View,Controller分離,將web層進行職責解耦,把複雜的web應用分成邏輯清晰的幾部分,簡化開發,減少出錯,方便組內開發人員之間的配合。
計算機網絡部分
1. 七層和五層協議
在這裏插入圖片描述
2. TCP的3次握手
TCP的連接的拆除需要發送四個包,因此稱爲四次揮手(four-way handshake)。客戶端或服務器均可主動發起揮手動作,在socket編程中,任何一方執行close()操作即可產生揮手操作。
(1)客戶端A發送一個FIN,用來關閉客戶A到服務器B的數據傳送。
(2)服務器B收到這個FIN,它發回一個ACK,確認序號爲收到的序號加1。和SYN一樣,一個FIN將佔用一個序號。
(3)服務器B關閉與客戶端A的連接,發送一個FIN給客戶端A。
(4)客戶端A發回ACK報文確認,並將確認序號設置爲收到序號加1
計算機操作系統
1. 請談一談,什麼情況下會發生死鎖?解決死鎖的策略有哪些?
概念:多個併發進程因爭奪系統資源而產生相互等待的現象。
原理:當一組進程中的每個進程都在等待某個事件發生,而只有這組進程中的其他進程才能觸發該事件,這就稱這組進程發生了死鎖。
本質原因: 1)系統資源有限 2)進程推進順序不合理
1、互斥:某種資源一次只允許一個進程訪問,即該資源一旦分配給某個進程,其他進程就不能再訪問,直到該進程訪問結束。
  2、請求與保持:一個進程本身佔有資源(一種或多種),同時還有資源未得到滿足,正在等待其他進程釋放該資源。
  3、不可搶佔:別人已經佔有了某項資源,你不能因爲自己也需要該資源,就去把別人的資源搶過來。
4、循環等待:存在一個進程鏈,使得每個進程都佔有下一個進程所需的至少一種資源。
2. 鎖主要存在四種狀態
依次是:無鎖狀態、偏向鎖狀態、輕量級鎖狀態、重量級鎖狀態
3. 各種調度算法
在這裏插入圖片描述
數據庫
1. 數據庫索引爲什麼不用紅黑樹
由於 B+ 樹分支比二叉樹更多,所以相同數量的內容,B+ 樹的深度更淺,深度代表什麼?代表磁盤 io 次數啊!數據庫設計的時候 B+ 樹有多少個分支都是按照磁盤一個簇上最多能放多少節點設計的啊!
所以,涉及到磁盤上查詢的數據結構,一般都用 B+ 樹啦。
2. 最左匹配特性
比如當(張三,F)這樣的數據來檢索時,b+樹可以用name來指定搜索方向,但下一個字段age的缺失,所以只能把名字等於張三的數據都找到,然後再匹配性別是F的數據了, 這個是非常重要的性質,即索引的最左匹配特性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章