201809-13 Java序列化的狀態 關鍵要點Java序列化在很多庫中引入了安全漏洞。對序列化進行模塊化處于開放討論狀態。如果序列化能夠成為模塊,開發人員將能夠將其從攻擊表面上移除。移除其他模塊可以消除它們所帶來的風險。插樁提供了一種編織安全控制的方法,提供現代化的防御機制。多年來,Java的序列化功能飽受安全漏洞和zero-day攻擊,為此贏得了“持續奉獻的禮物”和“第四個不可饒恕的詛咒”的綽號。作... 繼續閱讀 >
201807-10 Java并發編程-volatile 上一篇文章,學習了并發編程中的synchronized,這個比較好理解,也是我最初學習多線程編程中的一個簡單的實現的,大學的時候就會了,然后就一直以為多線程環境的同步只能通過這個來實現的,事實上Java還提供了另外一個更加輕量級的實現-volatile,如果說synchronized實現了數據在同一時刻只能有一個線程對數據訪問的話,那么volatile實現的就是同時可以多個線程在訪問數據,但是只要數據發生了變化,便確保其他線程及時“感知”... 繼續閱讀 >
201803-23 Java 堆內存溢出梗概分析 任何使用過基于Java的企業級后端應用的軟件開發者都會遇到過這種低劣、奇怪的報錯,這些報錯來自于用戶或是測試工程師: java.lang.OutOfMemoryError:Javaheapspace。為了弄清楚問題,我們必須返回到算法復雜性的計算機科學基礎,尤其是“空間”復雜性。如果我們回憶,每一個應用都有一個最壞情況特征。具體來說,在存儲維度方面,超過推薦的存儲將會被分配到應用程序上,這是不可預測但尖銳的問題。這導致了堆內... 繼續閱讀 >
201801-29 面試必問的 volatile,你了解多少? 前言Java中volatile這個熱門的關鍵字,在面試中經常會被提及,在各種技術交流群中也經常被討論,但似乎討論不出一個完美的結果,帶著種種疑惑,準備從JVM、C++、匯編的角度重新梳理一遍。volatile的兩大特性:禁止重排序、內存可見性,這兩個概念,不太清楚的同學可以看這篇文章->javavolatile關鍵字解惑概念是知道了,但還是很迷糊,它們到底是如何實現的?本文會涉及到一些匯編方面的內容,如果多看幾遍... 繼續閱讀 >
201801-16 每日一博 | 記一次 JVM 堆外內存泄露 Bug 的查找 解Bug之路-記一次JVM堆外內存泄露Bug的查找前言JVM的堆外內存泄露的定位一直是個比較棘手的問題。此次的Bug查找從堆內內存的泄露反推出堆外內存,同時對物理內存的使用做了定量的分析,從而實錘了Bug的源頭。筆者將此Bug分析的過程寫成博客,以饗讀者。由于物理內存定量分析部分用到了linuxkernel虛擬內存管理的知識,讀者如果有興趣了解請看ulk3(《深入理解linux內核第三版》)內存泄露Bug現場一個線上穩... 繼續閱讀 >
201712-11 你所不知道的Java之HashCode 之所以寫HashCode,是因為平時我們總聽到它。但你真的了解hashcode嗎?它會在哪里使用?它應該怎樣寫?相信閱讀完本文,能讓你看到不一樣的hashcode。使用hashcode的目的在于:使用一個對象查找另一個對象。對于使用散列的數據結構,如 HashSet、HashMap、LinkedHashSet、LinkedHashMap ,如果沒有很好的覆寫鍵的hashcode()和equals()方法,那么將無法正確的處理鍵。 請對以下代碼中 Person&nb... 繼續閱讀 >
201710-13 Java在線問題排查利器之Btrace&Greys 1.前言前段時間升級了urs新的遠程cookie校驗模式。功能上線后,發現涉及用戶cookie校驗的接口,有時會報接口超時。通過日志埋點方式,確認了與urs提供的jar包內的新驗證方法有關。通過反編譯,看到相關方法執行過程中涉及參數校驗、參數組裝、遠程訪問校驗、本地校驗等步驟,究竟哪個步驟出了問題?一種方式是讓urs幫忙提供一個新的jar包,在關鍵步驟處加日志,記錄執行時間,另一種方法,就是使用一些在線分析工具... 繼續閱讀 >
201710-03 寫出優質Java代碼的4個技巧 譯者注:如果現在要求對你寫的Java代碼進行優化,那你會怎么做呢?作者在本文介紹了可以提高系統性能以及代碼可讀性的四種方法,如果你對此感興趣,就讓我們一起來看看吧。以下為譯文。我們平時的編程任務不外乎就是將相同的技術套件應用到不同的項目中去,對于大多數情況來說,這些技術都是可以滿足目標的。然而,有的項目可能需要用到一些特別的技術,因此工程師們得深入研究,去尋找那些最簡單但最有效的方法。在前一篇... 繼續閱讀 >
201710-03 Java數據結構與算法解析——伸展樹 伸展樹簡介伸展樹(SplayTree)是特殊的二叉查找樹。它的特殊是指,它除了本身是棵二叉查找樹之外,它還具備一個特點:當某個節點被訪問時,伸展樹會通過旋轉使該節點成為樹根。這樣做的好處是,下次要訪問該節點時,能夠迅速的訪問到該節點。特性1.和普通的二叉查找樹相比,具有任何情況下、任何操作的平攤O(log2n)的復雜度,時間性能上更好2.和一般的平衡二叉樹比如紅黑樹、AVL樹相比,維護更少的節點額... 繼續閱讀 >
201708-29 Java中處理異常的9個最佳實踐 Java中的異常處理不是一個簡單的話題。初學者很難理解,甚至有經驗的開發人員也會花幾個小時來討論應該如何拋出或處理這些異常。這就是為什么大多數開發團隊都有自己的異常處理的規則和方法。如果你是一個團隊的新手,你可能會驚訝于這些方法與你之前使用過的那些方法有多么不同。然而,有幾種異常處理的最佳方法被大多數開發團隊所使用。下面是幫助改進異常處理的9個最重要的方法。1.在Finally中清理資源或者使用... 繼續閱讀 >
201708-16 進階必備 - Java 反射由淺入深 本博文主要記錄我學習Java反射(reflect)的一點心得,在了解反射之前,你應該先了解Java中的Class類,如果你不是很了解,可以先簡單了解下。一、Java反射機制參考了許多博文,總結了以下個人觀點,若有不妥還望指正:Java反射機制在程序運行時,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性。這種動態的獲取信息以及動態調用對象的方法... 繼續閱讀 >
201707-28 Java的21個技術點,你知道嗎? 關于Java的編程知識,有人會問哪幾個是重要的知識點,不知道大家是否知道呢?給大家分享一下。1.JVM相關(包括了各個版本的特性) 對于剛剛接觸Java的人來說,JVM相關的知識不一定需要理解很深,對此里面的概念有一些簡單的了解即可。不過對于一個有著3年以上Java經驗的資深開發者來說,不會JVM幾乎是不可接受的。JVM作為java運行的基礎,很難相信對于JVM一點都不了解的人可以把java語言吃得很透。我在面試有... 繼續閱讀 >
201707-26 PHP 程序員如何快速進行 Java 開發 入門不要拿著放大鏡去學就像盲人摸象一樣,他要想弄清楚大象的真實面貌可能要摸很久,就好比我們拿著放大鏡在學習java一樣,java經過這么多年的發展,可以說非常龐大。如果我們要知道大象長什么樣,就應該放下手中的放大鏡,向后退遠點,反而能夠非常清晰的看到它的全貌。學習一門新的語言也一樣,有很多很多網上的教程,非常的大而全,一般得系統的學習30~60小時之后才能正式的接觸項目開發?;A很重要,但是學習了太... 繼續閱讀 >
201705-09 Java多線程基礎 線程的等待與喚醒 題圖:花啡,豆是買咖啡機送的,花是上周陽朔旅游買的桂花,給它起了個名字,叫Sunday??Х任兜艘稽c點,多了一份桂花的清香。本篇我們來研究一下wait()notify()notifyAll()。DEMO1:wait()與notify()publicclassTest{staticclassThreadOneextendsThread{privateCallbackmCallback;@Overridepublicvoidrun(){work();if(mCallback... 繼續閱讀 >
201704-13 Java程序員應當知道的10個面向對象設計原則 面向對象設計原則是OOPS編程的核心,但我見過的大多數Java程序員熱心于像Singleton(單例)、Decorator(裝飾器)、Observer(觀察者)等設計模式,而沒有把足夠多的注意力放在學習面向對象的分析和設計上面。學習面向對象編程像“抽象”、“封裝”、“多態”、“繼承”等基礎知識是重要的,但同時為了創建簡潔、模塊化的設計,了解這些設計原則也同等重要。我經??吹讲煌涷炈降膉ava程序員,他們有的不知道這些OOPS和SOLI... 繼續閱讀 >
201704-07 Android性能優化系列之Bitmap圖片優化 在Android開發過程中,Bitmap往往會給開發者帶來一些困擾,因為對Bitmap操作不慎,就容易造成OOM(Java.lang.OutofMemoryError-內存溢出),本篇博客,我們將一起探討Bitmap的性能優化。為什么Bitmap會導致OOM?1.每個機型在編譯ROM時都設置了一個應用堆內存VM值上限dalvik.vm.heapgrowthlimit,用來限定每個應用可用的最大內存,超出這個最大值將會報OOM。這個閥值,一般根據手機屏幕dpi大小遞增,dpi越小的手機,每個... 繼續閱讀 >