原创 Android Surface系統的概述(一)

一、 本系列文章將集中打通Surface系統的任督二脈 任脈:應用程序和Surface的關係 督脈:Surface和SurfaceFlinger之間的關係。 當這二脈打通後,我們就可以自行修煉更高層次的功夫了 1、先看左圖。

原创 常見的算法設計策略

1.分治 分治法的設計思想是,將一個難以直接解決的大問題,分割成k個規模較小的子問題,這些子問題相互獨立,且與原問題相同,然後各個擊破,分而治之。 分治法常常與遞歸結合使用:通過反覆應用分治,可以使子問題與原問題類型一致而規模不斷

原创 算法系列之--快速排序及圖解

快速排序是一種分區交換排序算法。 1.概述 2.實現 3.分析 快速排序(Quick Sort)算法描述:在數據序列中選擇一個元素作爲基準值,每趟從數據序列的兩端開始交替進行,將小於基準值的元素交換到序列前端,將大於基準值

原创 算法系列之--直接選擇排序排序及圖解

直接選擇排序(Straight Select Sort)算法思想:第一趟從n個元素的數據序列中選出關鍵字最小/大的元素並放到最前/後位置,下一趟再從n-1個元素中選出最小/大的元素並放到次前/後位置,以此類推,經過n-1趟完成排

原创 算法系列之--希爾排序及圖解

希爾排序(Shell Sort)是D.L.Shell在1959年提出的,又稱爲縮小增量排序(Diminishing Increment Sort),基本思想是分組的直接插入排序。 圖解 實現 public static voi

原创 算法系列之--直接插入排序及圖解

直接插入排序(Straight Insertion Sort)算法描述如下: ① 第 i(1≤i<n)趟,線性序列爲{a0,a1,…,ai-1,ai,…,an-1},設前 i 個元素構成的子序列{a0,a1,…,ai-1}是排

原创 數據結構之----循環鏈表

循環鏈表是另一種形式的鏈式存貯結構。它的特點是表中最後一個結點的指針域指向頭結點,整個鏈表形成一個環。 分類 (1)單循環鏈表——在單鏈表中,將終端結點的指針域NULL改爲指向表頭結點或開始結點即可。 (2)多重鏈的循環鏈表—

原创 性能優化工具-LeakCanary

一、簡介 使用MAT來分析內存問題,有一些門檻,會有一些難度,並且效率也不是很高,對於一個內存泄漏問題,可能要進行多次排查和對比才能找到問題原因。 爲了能夠簡單迅速的發現內存泄漏,Square公司基於MAT開源了LeakCanar

原创 算法系列簡單研究及圖解

算法是一個工程師最基礎的素養之一,就好比語言、框架一樣,你不會這些知識,可能並不影響你日常工作的解BUG過程,但是如果你不去了解這些"抽象"的知識,那麼可能整個職業生涯都只是解解BUG而已。 或者說,算法、框架、語言的研究,決定了

原创 Java位運算及案例使用

概述 前一篇文章寫了位運算的基本概念和使用方法,這次讓我來學習一下日常編程裏面所用到的位運算。 1 獲取int所能表示的最大整數 用 -1 無符號右移1位 :-1>>>1 ~(1 << 31) (1 << -1)-1 (~(1

原创 算法系列之--冒泡算法及圖解

介紹 冒泡算法基本上是IT從業人員接觸到的第一個算法,其原理就是依次對比相鄰元素,大的放在後面,當全部list遍歷之後,該list的最大值就會被置換到list的最後,詳細步驟如下: 1. 比較相鄰的元素。如果第一

原创 Android P 源代碼結構分析

摘錄筆記,記錄自學。 Google提供的Android包含了:Android源代碼,工具鏈,基礎C庫,仿真環境,開發環境等,完整的一套。 第一級別的目錄和文件如下所示: ├── Makefile 全局的Mak

原创 基於動態數組實現的棧

代碼實現 public class ArrayStack<E> implements Stack<E> { private Array<E> array; public ArrayStack(int c

原创 基於動態數組實現的循環隊列

循環隊列的添加和刪除操作都是O(1),比普通數組實現的隊列要快很多倍。 代碼實現 //接口類 public interface Queue<E> { int getSize(); boolean isEmpty(); v

原创 Java虛擬機之--Java內存區域與內存溢出異常

本文是在讀過周志明老師編寫的深入理解虛擬一書後,自己的要點總結。 Java與C++之間有一堵由內存動態分配和垃圾收集技術所圍成的高牆,牆外面的人想進去,牆裏面的人卻想出來 概述 運行時數據區域劃分 OOM異常 Ho