天天看點

面試題零碎知識點(一)

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,可以調用業務邏輯。