原创 Android framework lock的使用總結(wait/notify/notifyAll,lock的不同情景使用)

Android framework 有大量使用synchronized/lock(wait/notify/notifyAll),最近有看到一些文件的lock機制,Google有改進,方法很巧妙,另外自己理解的也不是很透徹,希望能得

原创 Java:volatile變量,synchronized和AtomicInteger的性能比較

對於Java中volatle型變量的介紹,《深入理解Java虛擬機-JVM高級特性與最佳實踐(周志明 著)》介紹的比較全面和易懂,當一個變量定義爲volatile之後,將具備一種特性是保證此變量對所有線程的可見性,這裏的“可見性”

原创 C/C++ goto傷了我的心

C/C++程序員或者初學C/C++都會遇到goto的問題,是否該使用goto,一派是堅決抵制,堅決不用,goto使程序難以分析,並且用code證明任何goto都是不必要的,都可以進行合理替換;另一派堅持goto使程序更簡潔,能夠很

原创 C/C++ asprintf正確使用方法,以及和sprintf的比較

最近公司開發的code defect工具,掃出很多asprintf的問題,下面是sample code int testAsprintf(int num) { char *testStr = NULL; aspri

原创 內存碎片的生活比喻

內存碎片的產生原因以及解決的方法網絡上關於這方面的文章有很多,我就不班門弄斧了。在實際生活中,有很多場景和內存碎片非常類似,作爲程序員,總是聯繫到內存碎片以及用解決內存碎片的方法能否解決實際生活。 第一種情形:食堂吃飯 公司吃飯的

原创 CDMA (3GPP2)SMS PDU全解析

首先感謝下面各位博主的文章,CDMA短信的解析我就是從下面開始的,下面這些文章對CDMA短信的解析已經有了比較詳細的介紹。我這裏只是介紹一些自己的經驗和所得,有自己認爲比較重要的地方做了一些補充,希望對大家有所幫助。 https:

原创 Android打印日誌:Rlog和敏感信息的處理

軟件工程師每天最主要的工作應該就是開發和解BUG了,而解BUG的時間應該遠遠高於開發的時間,無論你開發的質量有多高。可能不是你的模塊引起的問題,但是需要你來幫忙分析,才能推動問題的解決。Android平臺framework層打印l

原创 alloca的坑,不需要free

最近有公司在用tool掃code defect,例如malloc後,有沒有判斷分配的內存指針是否是NULL這些問題,如果沒有判斷,需要加一些error handling,例如assert。本人負責的一段歷史遺留code有被掃到這個

原创 Java 不同包(package)protected的作用

假設有兩個package,一個是parent,一個是son,parent裏面有一個類ParentTest,son裏面有一個SonTest,SonTest繼承了ParentTest,是ParentTest的子類。如果ParentTest裏面

原创 SIM Phone book

最近在學習SIM Phonebook,有一些心得,也有一些思考,分享出來,希望對大家有些幫助。 瞭解SIM卡存儲contact的一些限制,對於瞭解SIM phone book spec有很大的幫助。SIM卡的特點:小,慢,通用。存儲內

原创 Lambda表達式,匿名函數,高階函數——Kotlin

原文出處:https://kotlinlang.org/docs/reference/lambdas.html#higher-order-functions 挑選了原文中的高階函數,Lambda表達式和匿名函數兩個小章節。 高階函數

原创 函數式編程-Kotlin

什麼是函數式編程?網上答案五花八門,有從歷史開始闡述,有從Lambda演算開始,有從函數式編程和麪向過程和麪向對象的比較出發,有從函數式編程的特點閉包,高階函數,柯里化(currying)開始,有從特定語言出發(JS,python,k

原创 《CODE COMPLETE 2(代碼大全2)》警句

閱讀《代碼大全2》,記錄了一些經典標語,直抵內心,頗有感觸。望與大家共勉,有些路走過了,才知道路不好走,但希望後來者能夠避免,不重蹈覆轍。這些努力就是沒有白費,希望您能夠打印一份,放在案頭,百無聊賴之時或遇到困難,望能一讀,給您一些小

原创 函數式編程——閉包

原文鏈接:https://stackoverflow.com/questions/36636/what-is-a-closure 原文中的sample code是JavaScript寫的,本文已經替換爲Kotlin。 Question