Java基礎-3

來源:互聯網
上載者:User

標籤:禁止訪問   頁面   獲得   排序   查看   允許   syn   握手   迴圈   

一些Java基本功的記錄。

Java基礎系列:

Java基礎-1

Java基礎-2

ArrayList與LinkedList的底層實現

ArrayList是List介面的一個實作類別,特點是查詢效率高,增刪效率低,線程不安全

原因是ArrayList底層封裝了一個數組,他是用數組實現的。

地址 數組空間
2000 -------------> a[0]
2004 -------------> a[1]
2008 -------------> a[2]
--- -------------> ...
2000+(n-1)*4 -------------> a[n]

定義一個int[]數組,首地址是2000,int類型佔4個位元組,所以a[0]的首地址2000,a[1]就是2004

每次查詢只要一個位移量就可以了,所以查詢效率高

增刪效率低的原因:

地址 數組空間
2000 -------------> a[0]
2004 -------------> (新增元素)
2008 -------------> a[1]
--- -------------> ...
2000+(n-1)*4 -------------> a[n]

新增元素會引起後面的元素的移動,所以增刪效率低。

  • LinkedList

增刪效率高,查詢效率低

LinkedList底層採用雙向迴圈鏈表實現的List,鏈表的儲存特點是不挨著,它儲存每個元素分為三段:上一項的地址,下一項的地址,元素的內容。

每個元素在記憶體中的排列像是隨機的,得根據地址來找元素,所以很慢

增刪很快是因為,刪除一個元素,前後元素會自動連上,而且刪除一個元素隻影響前後元素,所以增刪效率高。

TCP三向交握,以及為什麼不是兩次或四次
  • 三向交握過程:

第一次握手:用戶端發送TCP包,置SYN標誌位為1,將初始序號X,儲存在包頭的序號(Seq)裡。

第二次握手:服務端回應確認包,置SYN標誌位為1,置ACK為X+1,將初始序號Y,儲存在包頭的序號裡。

第三向交握:用戶端對服務端的確認包進行確認,置SYN標誌位為0,置ACK為Y+1,置序號為Z。

  • 如果只有2次

第二次握手後,服務端發送請求給用戶端,服務端以為串連成功了,但是如果實際上用戶端沒收到的話,用戶端會認為串連沒有建立,服務端會對已建立的串連儲存必要的資源,如果出現大量這種情況,服務端會崩潰。

  • 如果是4次

無謂的第四次

二叉樹深度、結點

?二叉樹的第 i 層至多有 2^(i-1) 個結點;

深度為 k 的二叉樹至多有 2^k - 1 ?個結點;

對任何一棵二叉樹 T,如果其終端結點數為 n0,度為 2 的結點數為 n2,則n0 = n2 + 1。

排序演算法的穩定性是指
  • 經過排序之後,能使值相同的資料保持原順序中的相對位置不變
HTTP方法
  • GET

擷取介面資訊

  • PUT

支援等冪性的POST

  • HEAD

緊急查看介面的HTTP的頭

  • POST

提交資料到伺服器

  • DELETE

刪除伺服器上的資源

  • OPTIONS

查看支援的方法

常見的HTTP相應狀態代碼
1xx:指示資訊--表示請求已接收,繼續處理2xx:成功--表示請求已被成功接收、理解、接受3xx:重新導向--要完成請求必須進行更進一步的操作4xx:用戶端錯誤--請求有語法錯誤或請求無法實現5xx:伺服器端錯誤--伺服器未能實現合法的請求
101 – 切換協議201 – 已建立。202 – 已接受。203 – 非權威性資訊。204 – 無內容。205 – 重設內容。206 – 部分內容。302 – 對象已移動。304 – 未修改。307 – 臨時重新導向。401 – 訪問被拒絕403 – 禁止訪問404 – 未找到405 – 用來訪問本頁面的 HTTP 謂詞不被允許(方法不被允許)406 – 用戶端瀏覽器不接受所請求頁面的 MIME 類型。407 – 要求進行Proxy 驗證。412 – 前提條件失敗。413 – 請求實體太大。414 – 請求 URI 太長。415 – 不支援的媒體類型。416 – 所請求的範圍無法滿足。417 – 執行失敗。423 – 鎖定的錯誤。500 – 內部伺服器錯誤。200:請求被正常處理204:請求被受理但沒有資源可以返回206:用戶端只是請求資源的一部分,伺服器只對請求的部分資源執行GET方法,相應報文中通過Content-Range指定範圍 的資源。301:永久性重新導向302:臨時重新導向303:與302狀態代碼有相似功能,只是它希望用戶端在請求一個URI的時候,能通過GET方法重新導向到另一個URI上304:發送附帶條件的請求時,條件不滿足時返回,與重新導向無關307:臨時重新導向,與302類似,只是強制要求使用POST方法400:請求報文文法有誤,伺服器無法識別401:請求需要認證403:請求的對應資源禁止被訪問404:伺服器無法找到對應資源500:伺服器內部錯誤503:伺服器正忙
反射機制功能
  • 獲得一個對象所屬的類
  • 獲得一個類所有的成員變數和方法
  • 運行時建立對象
  • 運行時調用對象的方法
Java建立對象的方式
  • new一個
  • 反射機制
  • clone()方法
  • 還原序列化的方式
Java程式初始化順序
  • 父類靜態變數
  • 父類靜態代碼塊

  • 子類靜態變數
  • 子類靜態代碼塊

  • 父類非靜態變數
  • 父類非靜態代碼塊
  • 父類建構函式

  • 子類非靜態變數
  • 子類非靜態代碼塊
  • 子類建構函式

volatile

用來修飾被不同線程訪問和修改的變數

被volatile類型定義的變數,系統每次用它都是直接從記憶體中取,而不會利用緩衝。

Java堆溢出
public class HeapOOM1 {    static class OOMObject{}    public static void main(String [] args){        List<OOMObject> list = new ArrayList<OOMObject>();        while (true){            list.add(new OOMObject());        }    }}
單例模式

單例模式就是在應用程式中只建立一個該類的對象。又分為餓漢模式和懶漢模式。*實現套路也就是只提供私人建構函式,然後提供公有的 getInstance 方法。*

  • 餓漢模式:也就是一開始就建立該對象
  • 懶漢模式:等到需要用到的時候才建立該對象
餓漢模式
public class Singleton {      private static Singleton singleton = new Singleton();      private Singleton(){};      public static Singleton getInstance(){          return singleton;      }  }  
懶漢模式
public class Singleton {      private static Singleton singleton;          private Singleton(){};      public static Singleton getInstance(){          if(singleton == null)              singleton = new Singleton();          return singleton;      }  }  
多線程 synchronized
public static synchronized Singleton getInstance(){      if(singleton == null)          singleton = new Singleton();       return singleton;  }  
雙重檢驗鎖
public class Singleton {    private static volatile Singleton singleton;    public static Singleton getInstance() {        if (singleton == null) {                           //Single Checked            synchronized (Singleton.class) {                if (singleton == null) {                   //Double Checked                    singleton = new Singleton();                }            }        }        return singleton;    }}

Java基礎-3

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.