1. 程式人生 > >java 理論知識隨記

java 理論知識隨記

理論知識整理(比較雜)

1、Linux命令: pwd:用於顯示當前工作目錄 ls:用於檢視當前工作目錄內容 cd:用於改變當前工作目錄 ps -ef|grep java/tomcat :檢視tomcat是否啟動或關閉 tail -f -n 1000 catalina.out :檢視日誌

2、Java虛擬機器:平臺無關的程式語言 Java虛擬機器是一個可以執行Java位元組碼的虛擬機器程序。 Java原始檔被編譯成能被Java虛擬機器執行的位元組碼檔案。 Java被設計成允許應用程式可以執行在任意的平臺。

3、JDK、JRE、JVM關係 JDK:Java開發工具包,包含編寫Java程式所必須的編譯執行等開發工具以及JRE。 (工具如:javac命令、Java命令、JAVAdoc、打包jar命令) JRE:Java執行環境,包含Java虛擬機器、類庫等。 JVM:Java虛擬機器,提供了位元組碼檔案(.class)的執行環境支援。

4、Java支援的資料型別 基本資料型別: 整數值型:byte、short、int、long 字元型:char 浮點型別:float、double 布林型:boolean

5、引用型別 引用型別宣告的變數是指該變數在記憶體中實現儲存的是一個引用地址,實體在堆中 包括String、類、介面、陣列、包裝類等

6、自動拆裝箱 自動裝箱和拆箱就是基本型別和引用型別之間的轉換。

7、面向物件四大特性 抽象:屬性(資料)和操作(行為) 封裝:封裝可以使類具有獨立性和隔離性,保證類的高內聚 繼承:類的繼承和介面的實現 多型:三要素:繼承、重寫、父類引用指向子類物件

8、&和&&的區別 &:按位與、邏輯與 &&:短路與(左邊false,右邊直接短路不進行運算)

9、值傳遞和引用傳遞 值傳遞:對形參修改不影響實參 引用傳遞:會影響實參 String、Integer、Double等可理解為值傳遞

10、是否可以在static環境中訪問非static變數 不能。 static變數在Java中屬於類,在類的例項中,它的值都是一樣的。 在類被jvm載入時,靜態變數的值就確定了。 非static變數屬於例項,要在new一個例項之後,值才存在。 在static環境中訪問非static變數,可能這個變數還不存在,會報錯。

11、方法覆蓋(重寫)Overriding和方法過載Overloading 重寫:子類重新定義父類方法(重寫方法必須與被重寫方法具有相同的方法名稱、引數、返回型別等) 過載:同一個類中多個方法名相同但是引數(個數、型別)不同,返回型別可相同可不同。

12、Java支援多繼承嗎? Java中,類不支援多繼承,只支援單繼承。 Java中,介面支援多繼承。

13、抽象類和介面的區別 抽象是對類的抽象是一種模板設計,介面是行為的抽象是一種行為的規範。 不同點: 1)一個類實現多個介面,只能繼承一個抽象類 2)抽象類可以包含具體的方法,介面的所有方法都是抽象的 3)介面的方法都是public,抽象類的方法public、protected、、 4)抽象類可以定義建構函式,介面不能 5)抽象類可以宣告和使用欄位,介面不能,但介面可以建立靜態的fanal常量

13、記憶體中的棧、堆、方法區 棧:一個基本資料型別的變數,一個物件的引用,使用棧空間 堆:new的物件則放在堆空間 方法區:

14、手寫單例模式(餓漢和飽漢模式)和工廠模式

(1)單例餓漢模式://餓漢式單例類.在類初始化時,已經自行例項化

public class Singleton1 { 
        //私有的預設構造子 
        private Singleton1() {} 
        //已經自行例項化 
        private static final Singleton1 single = new Singleton1(); 
        //靜態工廠方法 
        public static Singleton1 getInstance() { 
            return single; 
        } 
    }

(2)懶漢模式://懶漢式單例類.在第一次呼叫的時候例項化

public class Singleton2 { 
        //私有的預設構造子 
        private Singleton2() {} 
        //注意,這裡沒有final 
        private static Singleton2 single=null; 
        //靜態工廠方法 
        public synchronized static Singleton2 getInstance() { 
            if (single == null) { 
                single = new Singleton2(); 
            } 
            return single; 
        } 
    }

(3)工廠模式:

interface IFactory{ 
        public IProduct createProduct();
    } 
    Class Factory implements IFactory{ 
        public IProduct createProduct(){
            return new Product();
        }
    } 
    Public class client{ 
        Public Static void main (String [] args){
            IFactory factory=new Factory(); 
            IProduct product=factory.createProduct(); 
            product.ProductMethod();
        }
    }   

15、String、StringBuilder、StringBuffer 執行速度:StringBuilder > StringBuffer > String String:字串常量,適用於少量的字串操作的情況 StringBuilder:變數,執行緒不安全,適用於單執行緒下在字元緩衝區進行大量操作的情況 StringBuffer:變數,執行緒安全,適用多執行緒下在字元緩衝區進行大量操作的情況

一、JVM知識

1、JVM是什麼?其執行程式過程? Java虛擬機器(Java virtual machine),java程式執行的容器; 執行程式過程:A、載入.class檔案 B、管理和分配記憶體 C、執行垃圾收集 2、JRE是什麼? Java執行環境,包含JVM的Java程式執行環境 3、jvm四個常用暫存器 Pc程式計數器; optop運算元棧頂指標; frame當前執行環境指標; vars指向當前執行環境第一個區域性變數的指標; 4、Jvm兩類儲存區 常量緩衝區、方法池 5、Jvm機制 類裝載子系統:裝載合適的類或介面 執行引擎:執行已裝載的類或介面的指令 執行時資料區:主要包括:方法區,堆,Java棧,PC暫存器,本地方法棧 6、簡述垃圾回收機制 虛擬機器空閒或者當前記憶體不足時,掃描沒有被引用的物件,新增到回收集合,進行回收 7、垃圾收集方法 標記-清除;複製演算法;標記-整理;分代收集 8、Java類載入機制 從class檔案載入到記憶體,並對資料進行校驗、解析和初始化,最終形成Java型別 9、jdk和jre的區別 a)Jdk:Java開發工具包,包括jre、編譯器、JavaDoc、Java偵錯程式等工具 b)Jre:Java執行環境,包括jvm和Java程式所需的核心類庫 10、拆裝箱 裝箱:原始型別轉換為物件;拆箱:物件轉換為基本型別 11、重寫和過載 重寫:子類重寫父類方法,Java面向物件多型性的體現 過載:一個類中,方法名相同但是引數型別或者個數不同,根據引數型別呼叫對應引數列表的方法

12、值傳遞和引用傳遞 a)值傳遞:實參拷貝給形參,修改形引數值時,不影響原來實參 b)引用傳遞:實參是把地址傳遞給形參,修改數值,就是修改實參 13、String、StringBuffer、StringBuild a)String:長度不可變,速度最慢 b)StringBuffer:長度可變,執行緒安全 c)StringBuild:長度可變,執行緒非安全,速度最快 14、Hash Map和Hash Table區別 a)HashMap基於AbstractMap,key和value允許為null,非同步 b)HashTable基於Dictionary,key和value不允許為null,同步 15、Array和ArrayList、LinkedList a)Array容納基本資料型別和物件,指定大小 b)ArrayList容納物件,大小固定,基於陣列實現,查詢速度快 c)LinkedList基於連結串列實現,插入和刪除時佔優勢 16、Java面向物件的四大特性 a)封裝 b)抽象 c)繼承 d)多型

二、Gradle、Spring boot 、Mybatis、Junit、Spock

1、Gradle Groovy是一種基於Java平臺的面嚮物件語言 Apache Ivy是一個管理專案依賴的工具 Gradle是一個基於Apache Ant和Apache Maven概念的專案自動化建構工具。 它使用一種基於Groovy的特定領域語言來宣告專案設定,而不是傳統的XML。 當前其支援的語言限於Java、Groovy和Scala,計劃未來將支援更多的語言。

軟體開發工程管理:依賴,打包,部署,釋出,各種渠道的差異管理
Gradle是一種構建工具,它可以幫你管理專案中的差異,依賴,編譯,打包,部署
DSL的全稱是Domain Specific Language,即領域特定語言,或者直接翻譯成“特定領域的語言”
Ant和Maven都是基於XML的構建工具,Gradle是用Groovy編寫的構建工具,
Groovy是JVM衍生的與JAVA語法高度相容的動態強型別語言。

2、Spring boot Spring 是一個“引擎” Spring MVC 是基於 Spring 的一個 MVC 框架 Spring Boot 是基於 Spring4 的條件註冊的一套快速開發整合包

3、Mybatis 4、Junit 5、Spock

三、問題整合 1、面向物件特徵 抽象、封裝、多型、繼承 2、Java基本資料型別 byte、short、int、float、long、double、boolean、char 3、執行時異常 算術異常(ArithmeticException)、 類轉換異常(ClassCastException)、 非法引數異常(IllegalArgumentException)、 下標越界異常(IndexOutOfBoundException)、 空指標異常

四、專案中問題 1、@Value(staticConstructor = “of”)是什麼意思? 如果變數不加@NonFinal ,@Value會給所有的弄成final的。 當然如果是final的話,就沒有set方法了。

2、前端跨域問題 瀏覽器從一個域名的網頁去請求另一個域名的資源時,域名、埠、協議任一不同,都是跨域。 前端解決跨域問題:將http請求變成一個簡單的請求:只能使用get、post或者head; 後端可以設定Access-Control-XXX請求頭來允許某個源對其跨域請求。

3、http(超文字傳輸協議)和https(安全套接字層超文字傳輸協議)區別 http協議以明文的方式傳送內容,不提供任何方式的資料加密。 https協議加入SSL協議(Secure Sockets Layer),SSL協議依靠證書驗證伺服器的身份,併為瀏覽器和伺服器之間的通訊加密。 HTTPS和HTTP的區別主要如下:   a、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。   b、http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。   c、http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。   d、http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。

4、TCP與UDP區別 TCP(傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。 UDP(使用者資料報協議)是一種無連線、不可靠的傳輸層協議。 a、TCP提供的是面向連線的、可靠的資料流傳輸; UDP提供的是非面向連線的、不可靠的資料流傳輸; b、TCP提供可靠的服務,通過TCP連線傳送的資料,無差錯、不丟失、不重複、按序到達; UDP盡最大努力交付,即不保證可靠交付; c、TCP面向位元組流; UDP面向報文; d、TCP連線只能是點到點的; UDP支援一對一、一對多、多對一和多對多的互動通訊; e、TCP的邏輯通訊通道是全雙工的可靠通道; UDP的邏輯通訊通道是不可靠通道; 5、資料庫:drop、truncate、delete三者刪除的區別 一:用法和區別 drop:drop table 表名 刪除內容和定義,並釋放空間。執行drop語句,將使此表的結構一起刪除。 truncate (清空表中的資料):truncate table 表名 刪除內容、釋放空間但不刪除定義(也就是保留表的資料結構)。與drop不同的是,只是清空表資料而已。 truncate不能刪除行資料,雖然只刪除資料,但是比delete徹底,它只刪除表資料。 delete:delete from 表名 (where 列名 = 值) 與truncate類似,delete也只刪除內容、釋放空間但不刪除定義;但是delete即可以對行資料進行刪除,也可以對整表資料進行刪除。 二:注意 1.delete語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日誌中儲存,以便進行進行回滾操作。 2.執行速度一般來說:drop>truncate>delete 3.delete語句是資料庫操作語言(dml),這個操作會放到 rollback segement 中,事務提交之後才生效;如果有相應的 trigger,執行的時候將被觸發。 4.truncate、drop 是資料庫定義語言(ddl),操作立即生效,原資料不放到 rollback segment 中,不能回滾,操作不觸發trigger。 5.truncate語句執行以後,id標識列還是按順序排列,保持連續;而delete語句執行後,ID標識列不連續