JAVA基礎
基礎運算
數值型變量在預設情況下為Int型,byte和short型在計算時會自動轉換為int型計算,結果也是int 型。
jdk1.8新特性 : 接口中可以有普通方法(非靜态方法)和靜态方法
private,public,protect這些規定修飾符隻能用來修飾類,類成員變量,類方法。不能用于局部方法裡面。
JAVA程式類型
Application,Applet,Serverlets。
1、Application,即”Java應用程式“,是可以獨立運作的Java程式,由Java解釋器控制執行,也是最常見的類型。
2、Applet,即“Java小程式“,不能獨立運作(嵌入到Web頁中)。由Java相容浏覽器控制執行。
3、Serverlets,是Java技術對CGI 程式設計的解決方案。是運作于Web server上的、作為來自于Web browser 或其他HTTP client端的請求和在server上的資料庫及其他應用程式之間的中間層程式。
Java程式初始化順序:
父類的靜态代碼塊
子類的靜态代碼塊
父類的普通代碼塊
父類的構造方法
子類的普通代碼塊
子類的構造方法
重寫
普通方法,運用的是動态單配置設定,是根據new的類型确定對象,進而确定調用的方法;
靜态方法,運用的是靜态多分派,即根據靜态類型确定對象,是以不是根據new的類型确定調用的方法
抽象類
特點:
1.抽象類中可以構造方法
2.抽象類中可以存在普通屬性,方法,靜态屬性和方法。
3.抽象類中可以存在抽象方法。
4.如果一個類中有一個抽象方法,那麼目前類一定是抽象類;抽象類中不一定有抽象方法。
5.抽象類中的抽象方法,需要有子類實作,如果子類不實作,則子類也需要定義為抽象的。
接口
1.在接口中隻有方法的聲明,沒有方法體。
2.在接口中隻有常量,因為定義的變量,在編譯的時候都會預設加上
public static final
3.在接口中的方法,永遠都被public來修飾。
4.接口中沒有構造方法,也不能執行個體化接口的對象。
5.接口可以實作多繼承
6.接口中定義的方法都需要有實作類來實作,如果實作類不能實作接口中的所有方法
7.則實作類定義為抽象類。
接口是用來給别人實作的是以不能是 static ,也不能是final 修飾interface
對于其聲明的方法,也不能用static 或final來修飾,隻能public
因為static 和 final 修飾的 不能被繼承
對于其成員變量,卻隻能是public static final 類型,并且需要指派
泛型:
泛型的出現可以把運作時出現的問題提前到編譯時期發現。
泛型的主要目标是提高 Java 程式的類型安全
泛型的一個附帶好處是,消除源代碼中的許多強制類型轉換
list的remove方法
倒序循環,因為list删除隻會導緻目前元素之後的元素位置發生改變,是以采用倒序可以保證前面的元素沒有變化;
順序循環時,删除目前位置的值,下一個值就會補到目前位置,是以需要執行i–操作;
從清單中删除項目的第一次出現。
棧:
一種特殊的線性表,隻能固定在棧頂插入,棧頂删除,遵循後進先出(Last in First Out)的原則
集合&數組
JAVA集合隻能存放引用類型的的資料,不能存放基本資料類型。
數組可以存放引用類型的的資料,和基本資料類型。
String的intern方法
可以使用intern方法從常量池中擷取,如果常量池中不存在該字元串,那麼就建立一個這樣的字元串放到常量池中。
public class Test {
private static String a="ab";
public static void main(String[] args) {
String s1="a";
String s2="b";
String s=s1+s2;
System.out.println(s.intern()==a);
}
}
以下代碼運作結果:
String a=“ab”;
final String bb=“b”;
String b=“a”+bb;
System.out.println(a==b);
True
線程

方法一:
線程安全的,雖然StringBuilder是線程不安全,但是在method1裡面隻有目前線程可以調用而且沒有傳回值。符合隻有一個線程可以操作此資料,是以線程是安全的。
方法二:
線程不安全,因為StringBuilder本來就不安全,這個對象可以被多個線程調用方法執行。是以可能存在多個線程操作同一個對象。
方法三:
線程不安全,在方法内可能是安全的,但是在方法外,傳回的StringBuilder類型就是不安全的,可能會被多個線程搶占這個傳回值。是以線程不安全。
方法四:
線程是安全的,雖然StringBuilder是不安全的,但是因為在方法内,沒有人可以調用。符合隻有一個線程調用,是以是安全的,傳回值傳回的是String類型,也是線程安全的。
SQL
外鍵的作用:
保持資料一緻性,完整性,主要目的是控制存儲在外鍵表中的資料。 使兩張表形成關聯,外鍵隻能引用外表中的列的值或使用空值。
myisam&innodb
1、MyISAM:預設表類型,它是基于傳統的ISAM類型,ISAM是Indexed Sequential Access Method (有索引的順序通路方法) 的縮寫,它是存儲記錄和檔案的标準方法。不是事務安全的,而且不支援外鍵,如果執行大量的select,insert MyISAM比較适合。
2、InnoDB:支援事務安全的引擎,支援外鍵、行鎖、事務是他的最大特點。如果有大量的update和insert,建議使用InnoDB,特别是針對多個并發和QPS較高的情況。
SQL語句優化
https://www.cnblogs.com/Little-Li/p/8031295.html
https://www.cnblogs.com/wangzhengyu/p/10412499.html
SQL語句中删除視圖的指令是
DROP VIEW
網絡
Http&Https
http是一種超文本傳輸協定,傳輸的資料都是未加密的,也就是顯示在明面上的,是現在網際網路上應用最為廣泛的一種網絡協定,相對來說不太安全,但是所需成本很小。http一般的端口号為80.
https則是具有安全性的ssl加密傳輸協定。簡單來說,https是一種安全版的http,傳輸的資料是通過SSL加密的,比起http來說很安全,https協定的主要作用就是:建立一個資訊安全通道,來確定數組的傳輸,確定網站的真實性。但是相對來說,成本所需較高,尤其是所需ca證書等級越高,費用越高(ca證書功能越強大,所需費用越高)。https一般的端口号為443。
http和https各有各自的優缺點,http花費少,安全性不高;https花費稍高,但是你“買”來了安全;
TCP&UDP
差別:
1、tcp是基于連接配接的,可靠性高;udp是基于無連接配接的,可靠性較低;
2、由于tcp需要有三次握手、重新确認等連接配接過程,實時性差;同時過程複雜,也使其易于被攻擊;而udp無連接配接,因而實時性較強,也稍安全;
3、在傳輸相同大小的資料時,tcp報頭20位元組;udp首部開銷隻有8個位元組,tcp報頭比udp複雜,故實際包含的使用者資料較少。tcp無丢包,而udp有丢包,故tcp開銷大,udp開銷較小;
4、每條tcp連接配接隻能是點到點的;udp支援一對一、一對多、多對一、多對多的互動通信。
https://blog.csdn.net/j18874964028sss/article/details/78299844
**
JVM
**
JVM的記憶體可分為哪個區
棧區
1.每個線程包含一個棧區,棧中隻儲存方法中(不包括對象的成員變量)的基礎資料類型和自定義對象的引用(不是對象),對象都存放在堆區中
2.每個棧中的資料(原始類型和對象引用)都是私有的,其他棧不能通路。
3.棧分為3個部分:基本類型變量區、執行環境上下文、操作指令區(存放操作指令)。
堆區
1.存儲的全部是對象執行個體,每個對象都包含一個與之對應的class的資訊(class資訊存放在方法區)。
2.jvm隻有一個堆區(heap)被所有線程共享,堆中不存放基本類型和對象引用,隻存放對象本身,幾乎所有的對象執行個體和數組都在堆中配置設定。
方法區
又叫靜态區,跟堆一樣,被所有的線程共享。它用于存儲已經被虛拟機加載的類資訊、常量、靜态變量、即時編譯器編譯後的代碼等資料。
Spring MVC
action的生命周期是在每次請求時建立一個新的action。一次請求隻能調用一次filter,也就是說在一個action的生命周期中隻能調用一次filter。攔截器可以被多次調用。
攔截器&過濾器
攔截器不依賴servlet容器,過濾器依賴于servlet容器。
原因:攔截器是spring的各容器自己實作的,過濾器是servlet實作的
Servlet過濾器和SpringMVC的攔截器是有差別的,差別如下:
①攔截器是基于Java的反射機制的,而過濾器是基于函數回調。
②攔截器不依賴于servlet容器,過濾器依賴于servlet容器。
③攔截器隻能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
④攔截器可以通路action上下文、值棧裡的對象,而過濾器不能通路。
⑤在action的生命周期中,攔截器可以多次被調用,而過濾器隻能在容器初始化時被調用一次。
⑥攔截器可以擷取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器裡注入一個service,可以調用業務邏輯。