<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Android逆向(教程更新)|Java基礎語法-容器

    VSole2021-08-04 07:40:00

    0x01 基本概念


    在我們開發程序中經常會與數據打交道,而我們一般是通過”容器”來容納和管理數據。那什么是“容器”呢?生活中的容器不難理解,是用來容納物體的,如鍋碗瓢盆、書包和快遞箱等。程序中的“容器”也有類似的功能,就是用來容納和管理數據。

          實際上,我們之前學習的數組就是一種容器,可以在其中放置對象和相同類型的一組數據。而數組的容量是事先定義好,不能隨著需求的變化而擴容。基于數組并不能滿足我們對于“管理和組織數據的需求”,所以我們需要一種更強大、更靈活、容量隨時可擴的容器來裝載我們的對象。這就是我們要學習的容器,也叫集合。容器的接口層次結構圖如圖所示:

    Java容器類類庫的用途是保存對象,可以將其分為2個概念:

    • Collection:獨立元素的序列,這些元素都服從一條或多條規則。List、Set都是Collection的一種,List必須按照順序保存元素,而Set不能有重復元素。
    • Map:Map是鍵值對類型,允許用戶通過鍵來查找對象。Hash表允許我們使用另一個對象來查找某個對象。

    0x02 Collection接口

    1)List的特點及實現類

    List是有序、可重復的容器。List中每個元素都有索引標記。可以根據元素的索引標記訪問元素,從而精確控制這些元素。List允許加入重復的元素。更準確的來說,List通常允許滿足 e1.equals(e2) 的元素重復加入容器。List接口常用的實現類有3個:ArrayList、LinkedList和Vector。

    2)ArrayList

    ArrayList底層是用數組實現的存儲。ArrayList是長度可變數組,元素以線性方式連續存儲,內部允許存放重復元素。允許對元素進行隨機的快速訪問,但是向ArrayList中插入和刪除元素的速度較慢。ArrayList是非線程安全的。數組進行擴容時,會將老數組中的元素重新拷貝一份到新的數組中,每次數組容量的增長大約是其原容量的1.5倍。

    特點:查詢效率高,增刪效率低,線程不安全。

    3)LinkedList

    LinkedLis底層用雙向鏈表實現的存儲,內部采用雙向循環鏈表實現,插入和刪除元素的速度較快,隨機訪問的速度較慢,LinkedList也是非線程安全的。

    特點:查詢效率低,增刪效率高,線程不安全

    4)Vector

    Vector底層是用數組實現的List,相關的方法都加了同步檢查,所以Vector線程安全,效率低。

           特點:線程安全,效率低。

    0x03 Set接口

    Set接口繼承Collection接口,Set容器的特點上面也提及過,無序不可重復。Set的常見實現類有HashSet、TreeSet等,我們一般使用HashSet。舉例如下:


    0x04 Map接口

    Map就是用來存儲“鍵(key)-值(value) 對”的。Map類中存儲的“鍵值對”通過鍵來標識,所以“鍵對象”不能重復。Map在實際開發中使用非常廣,特別是HashMap。put進行添加值鍵對,containsKey驗證主要是否存在、containsValue驗證值是否存在、keySet獲取所有的鍵集合、values獲取所有值集合、entrySet獲取鍵值對。舉例如下:

    執行結果如下:

    0x05總結


    在后續協議分析實戰中,我們會經常見到關于HashMap的用法,學會HashMap的使用對于后續的逆向分析是非常有幫助的。

    在這里關于java的課程講解就這么多了,很多細節以及實際操作在文章中并未講出,如果想要更深入細致的學習可以去網上尋找相關java視頻教程,不過我個人建議仍然是先了解個大概,需要用到時再去學習也不遲,希望大家能對之前講解的文章耐心的閱讀下來。

    arraylistlist
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Listener 三個域對象ServletContextListenerHttpSessionListenerServletRequestListener很明顯,ServletRequestListener 是最適合用來作為內存馬的。因為 ServletRequestListener 是用來監聽 ServletRequest對 象的,當我們訪問任意資源時,都會觸發ServletRequestListener#requestInitialized()方法。下面我們來實現一個惡意的 Listener。這里我找到了ServletRequestListener,因為根據名字以及其中的requestInitialized()方法感覺我們的發送的每個請求都會觸發這個監控器。這里我們嘗試自己寫一個 Listener,并進行測試。因為前面猜想requestInitialized()方法可以觸發 Listener 監控器,所以我們在requestInitialized()方法里面加上一些代碼,來證明它何時被執行。
    前兩天做了一個導入的功能,導入開始的時候非常慢,導入2w條數據要1分多鐘,后來一點一點的優化,從直接把list懟進Mysql中,到分配把list導入Mysql中,到多線程把list導入Mysql中。 時間是一點一點的變少了。非常的爽,最后變成了10s以內。 下面就展示一下過程。
    多線程是Java的一個難點,但是它也很有趣,聽說玩得溜得起飛的人,人生都開啟多線程模式了…
    ArrayList是線程不安全的,于是JDK新增加了一個線程并發安全的List——CopyOnWriteList,中心思想就是copy-on-write,簡單來說是讀寫分離:讀時共享、寫時復制(原本的array)更新(且為獨占式的加鎖),而我們下面分析的源碼具體實現也是這個思想的體現。 繼承體系:
    for 與 foreach 的區別
    2022-04-16 15:01:11
    之前有一個同事突然我問了我一個問題,說在foreach當中能不能刪除list里面的元素,我當時大概說了一下是否能刪除,以及原因;接下來我們來探討一下是否能夠如此;
    FastJson結合二次反序列化繞過黑名單
    0x01 前言在上一篇文章中深入淺出內存馬(一),我介紹了基于Tomcat的Filter內存馬,不光是Fil
    1 背景之前在專欄中講過“不推薦使用屬性拷貝工具”,推薦直接定義轉換類和方法使用 IDEA 插件自動填充 get / set 函數。使用屬性拷貝工具容易存在一些隱患2 示例首先公司內部就遇到過 commons 包的 BeanUtils 進行屬性拷貝性能較差的真實案例,然后該同事換成了 Spring 的 BeanUtils 性能好了很多,感興趣大家可以使用性能測試框架或者基準測試框架去對比,這里就不對比了。接下來我們看 Spring 的 BeanUtils 的屬性拷貝會存在啥問題:import?大家運行上述示例時,會發生類型轉換異常。
    1 背之前講過“不推薦使用屬性拷貝工具”,薦直接定義轉換類和方法使用 IDEA 插件自動填充 get / set 函數。接下來我們看 Spring 的 BeanUtils 的屬性拷貝會存在啥問題:import?大家運行上述示例時,會發生類型轉換異常。打斷點可以看到,屬性拷貝之后 B 類型的 second 對象中 ids 仍然為 Integer 類型:如果不轉換為字符串,直接進行打印,并不會報錯。使用CGlib 在不定義Converter 的情況下也會遇到類似問題:import?可以成功的將 A 中 List 轉為 B 中的 List 類型。
    //把Map的購物車轉換為Item列表??//應付總價=商品總價+運費總價-總優惠??然后實現針對 VIP 用戶的購物車邏輯。所以,這部分代碼只需要額外處理多買折扣部分:public?
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类