scala反編譯工具
Ⅰ Java IDE集成開發工具: IntelliJ IDEA CE 2019
IntelliJ IDEA CE 2019 是一款功能強大的 Java 集成開發環境。它將源代碼編入索引後,提供即時、智能的代碼完成,以及快速的代碼分析,確保編碼效率與代碼質量。IDE 強大的重構工具為開發者帶來便捷的代碼維護體驗。
IntelliJ IDEA CE 2019 內置了豐富且統一的版本控制系統界面,支持 Git、SVN、Mercurial、CVS、Perforce 和 TFS 等主流版本控制系統,幫助開發者高效管理代碼版本。
構建工具方面,IDE 支持 Maven、Gradle、Ant、Gant、SBT、NPM、Webpack、Grunt、Gulp 等多種構建工具。這些工具與 IDE 的無縫集成,使得自動編譯、打包、運行測試、部署等操作變得更加簡單高效。
在測試方面,IntelliJ IDEA CE 2019 提供了強大的單元測試支持,包括 JUnit、TestNG、Spock、Cucumber、ScalaTest、spec2 和 Karma 等主流測試框架的測試運行器和覆蓋工具。開發者可以輕松執行單元測試,提升代碼質量。
IDE 還內置了反編譯器,無需藉助第三方插件,即可查看沒有源代碼的庫。內置終端功能,讓開發者無需離開 IDE 即可執行命令,進行代碼調試。
資料庫工具方面,IntelliJ IDEA 提供了智能編碼輔助功能,支持 sql 編輯、實時資料庫連接、查詢執行、數據瀏覽和導出,以及可視化方案管理。
應用伺服器支持方面,IDE 支持 Tomcat、JBoss、WebSphere、WebLogic、Glassfish 等主流應用伺服器。開發者可以輕松部署工件到應用伺服器,並在 IDE 中直接調試已部署的應用程序。
通過 Docker 工具窗口,開發者可以連接到本地運行的 Docker 機器,管理圖像、容器和 Docker Compose 服務。多語言支持是 IntelliJ IDEA 的一大亮點,它不僅支持 Java,還支持 Groovy、Kotlin、Scala、JavaScript、TypeScript 和 SQL 等其他語言。IDE 提供了頂級框架的一流支持,包括 Spring、Java EE、Grails、Play、Android、GWT、Vaadin、Thymeleaf、React、AngularJS 等,幫助開發者高效完成多語言項目的開發。
IntelliJ IDEA 以其強大的功能、豐富的插件生態系統和多語言支持,成為一款功能全面、易於使用的集成開發環境,適合各類開發者在 Java 和多語言項目開發中使用。
Ⅱ Murmur哈希演算法
說到哈希演算法,可能大部分人都會不自覺得想到 md 和 sha 系列,在這之前,我就是這樣的,因為他們意味著流行安全和穩定。但是,最近我知道了一款另類的流行的哈希函數, 這款哈希函數廣泛應用於分布式系統-Hadoop/Lucence等等,原因就是因為它速度快而且散列效果好 ,這個哈希演算法就是 MurmurHash。
哈希系列比較流行的有三個系列,分別是 MD/SHA 和 MAC 系列,但是這些系列都是比較安全,雖然 MD5 和 SHA-1 已經被王小雲教授碰撞了,但是相對我們平時使用的直接簡單求模這種還是比較安全的,相對安全帶來的負面效果就是 計算量還是挺大的,而且不保證哈希結果的均勻 。而在分布式環境下,為了資源的合理利用,我們需要的更多是均勻,因為是內部散列的作用,所以哈希安全我們並不那麼在乎,所以在這種情境下,2008 才被發明的 MurmurHash 成為了分布式中的寵兒,深受 Google 系的喜愛。
MurmurHash 當前最新的版本是 MurmurHash3,它能夠產生出32-bit或128-bit哈希值。除了我們能夠猜到的不再使用的 mmh1 以及 還在使用的 mmh2 之外,還有好些變種,不過都是針對平台優化的。
Murmur哈希的演算法確實比較簡單,它的計算過程其實就是它的名字,MUltiply and Rotate,因為它在哈希的過程要經過多次MUltiply and Rotate,所以就叫 MurMur 了。
演算法原理可參考維基網路: https://zh.wikipedia.org/wiki/Murmur%E5%93%88%E5%B8%8C
Scala API自身是有MurmurHash演算法的實現的( scala.util.hashing.MurmurHash3 ),返回值是int,32位。
spark也廣泛採用了Murmur哈希演算法,可以看一個在sparksql中的例子,在TreeNode類中有:
之所以調用 proctHash 方法是因為TreeNode繼承自scala的 Proct 特質(有興趣的同學可以通過反編譯查看到,scala 的Case class類實現了scala.Proct和scala.Serializable介面(Proct和Serializable都是Traits)),而且有很多case class 類繼承TreeNode類。
參考:
https://liqiang.io/post/murmurhash-introction
https://leibnizhu.github.io/2017/01/19/Scala%E5%AE%9E%E7%8E%B064%E4%BD%8D%E7%9A%84MurmurHash%E5%87%BD%E6%95%B0/index.html