原创 深入分析RecyclerView源碼——佈局流程(上)

開篇簡述 RecyclerView的源碼數量真的是太多啦,第一次解析打算按照分析view的標準方法,先從measure、layout和draw三大流程入手。本篇文章主要着眼於最核心的measure和layout過程。分析後會發現Recyc

原创 【LeetCode】65.Valid Number【有限狀態機&正則表達式】

任務只有一句話判斷輸入的數字是否合法。說真的,看了給的十幾個例子我又百度了一下才最終弄清規則。特別需要注意的是諸如+.5和90.這樣的數一開始以爲不合法,提交錯誤後才知道是可以的,小數點前或者後可以沒有數字。首先只想到了各種ifelse無

原创 深入分析RecyclerView源碼——佈局流程(下)

接着上篇繼續分析佈局流程。 onLayoutChildren 所取onLayoutChildren是LinearLayoutManager的方法,RecyclerView把具體的佈局交給了佈局管理器去做,精簡後的代碼主要做了三件事: 一、

原创 【LeetCode】30. Substring with Concatenation of All Words題解

       給定一個字符串s和很多相同長度的字符串words,這些字符串可以有相同的,任務是在s裏找到一部分正好是words的全部字符串按任意順序組合起來,輸出符合條件的部分在s的起始位置。題意依舊是so easy,幾句話搞定的事,初看

原创 排序函數qsort和sort用法與區別簡談

       qsort和sort是兩個編譯器自帶的快速排序方法,相比自己寫一個排序算法,不僅更簡單,效率也往往更高。qsort需要引入頭文件<stdlib.h>,sort則需要<algorithm>。       先說相對略微簡單的so

原创 簡單易懂ppi和dpi的本質和由來

       今天學習安卓的時候又遇到這個問題,第一次認真搜索了一下,看了很多博文說的不太全面或是沒有講到本質,我只是簡單說一下對於電子屏幕來說ppi和dpi的區別。 一、PPI和DPI的概念         先說普通用戶接觸較多的ppi

原创 URLEncoder.encode和getBytes的區別

在Web開發中遇到中文編碼問題總是令人頭疼,更可怕的是又遇到了似乎很相似似乎又不同,傻傻分不清的URLEncoder.encode和getbytes方法,我試圖去解釋清二者的區別。 舉慄,現在有一箇中文詞“中國”,我們分別用這兩種方法進行

原创 【LeetCode】85.Maximal Rectangle【單向棧&雙向掃描】

在一個0和1組成的矩陣中尋找面積最大的矩形,初看和上一題思路沒什麼區別,但其實在實現上可以有另一種思路。原題如下: Given a 2D binary matrix filled with 0's and 1's, find the l

原创 【LeetCode】42. Trapping Rain Water【雙指針&棧】

n個非負整數,數值代表高度,問這樣的形狀能收集多少雨水。原題的圖片有助於理解題意。 Given n non-negative integers representing an elevation map where the width

原创 爲什麼同時需要ip地址和mac地址

理論上說找一個東西需要且只需要一個唯一標識,所以說ip和mac的功能似乎重複了。但是出於便捷和歷史原因,他們卻共存到了今天。 一、有了mac爲什麼還需要ip 有唯一mac固然可以尋址,但是卻不方便。mac地址是出廠自帶的,至於後續設備到了

原创 【LeetCode】10. Regular Expression Matching【動態規劃&遞歸】

       對於p字符串有點、字母、點*、字母*四種元素,點匹配任意一個字母,字母匹配相同的一個字母,點*匹配任意字母(可以是任意不同字母,例如.*匹配abc),字母*匹配連續任意個相同字母,值得注意的是*的任意包括0個。由於*可以匹配

原创 【LeetCode】84. Largest Rectangle in Histogram【棧】

在直方圖中找到面積最大的矩形的面積,第一眼看到此題就覺得和LeetCode的42題接雨水好像,最後也的確如此。原題如下   Given n non-negative integers representing the histogram

原创 【LeetCode】87. Scramble String【分治法】

把一個字符串變成一顆二叉樹,如果一個新字符串能由任意交換子樹得到,則稱爲Scramble String。苦思冥想,自知不善於分治,故特別記錄下來。 如果兩個字符串是Scramble String,則必然有它們的兩個子串分別互爲Scramb

原创 安卓子線程更新UI不閃退的問題

子線程不能更新UI已經是一個常識了,如果兩個線程同時更新UI,可能對同一個控件操作造成混亂,而更新UI涉及到整棵View樹的遍歷,加鎖又影響效率,索性在ViewRootIlmpl類中設置一個checkThread()方法,檢測當前線程和創

原创 爲什麼安卓Parcelable接口會有一個內部類Creator

Parcelable接口是實現序列化的一種方式,與Serializable相比比較複雜,但勝在運行效率高,在安卓中得到了廣泛應用。主要需要實現寫入和讀出兩個功能,寫入比較易懂,使用 writeToParcel,讀出按說也應該是一個方法cr