原创 深入淺出 PLT/GOT Hook與原理實踐

動態鏈接 計算機程序鏈接時分兩種形式:靜態鏈接和動態鏈接。 靜態鏈接在鏈接時將所有目標文件中的代碼、數據等Section都組裝到可執行文件當中,並將代碼中使用到的外部符號(函數、變量)都進行了重定位。因此在執行時不需要依賴其他外部模塊即可執

原创 MMKV源碼解讀與理解

概述 通過 mmap 技術實現的高性能通用 key-value 組件。同時選用 protobuf 協議,進一步壓縮數據存儲。 標準 protobuf 不提供增量更新的能力,每次寫入都必須全量寫入。考慮到主要使用場景是頻繁地進行寫入更新,我們

原创 詳解RecyclerView的預佈局

概述 RecyclerView 的預佈局用於 Item 動畫中,也叫做預測動畫。其用於當 Item 項進行變化時執行的一次佈局過程(如添加或刪除 Item 項),使 ItemAnimator 體驗更加友好。 考慮以下 Item 項刪除場景,

原创 Drawable複用及問題

概述 每個 Drawable 都有一個對應的ConstantState,這個 state 保存了 Drawable 所有的關鍵信息。由於 Drawable 的廣泛使用,系統爲了優化性能(節省內存佔用),相同資源的 Drawable 都共享同

原创 Protobuf編碼規則

支持類型 該表顯示了在 .proto 文件中指定的類型,以及自動生成的類中的相應類型: .proto Type Notes C++ Type Java/Kotlin Type[1] Java/Kotlin 類型 [1] Python

原创 SQLite3編譯

官方編譯方式 SQLite3 源碼提供了非常便捷的編譯腳本,通過執行以下命令可以編譯得到sqlite3.c 、sqlite3.h、sqlite3ext.h、shell.c 以及一個可執行程序 sqlite3。所有的代碼都被合併到了sqlit

原创 SQLite數據庫損壞及其修復探究

數據庫如何發生損壞   SQLite 數據庫具有很強的抗損壞能力。在執行事務時如果發生應用程序崩潰、操作系統崩潰甚至電源故障,那麼在下次訪問數據庫文件時,會自動回滾部分寫入的事務。恢復過程是全自動的,不需要用戶或應用程序的任何操作。儘管 S

原创 如何在Room框架下注冊onUpgrade回調及自定義DatabaseErrorHandler

  在 Android 中,Room 爲 SQLite 提供了高效穩定的抽象層,簡化開發流程。RoomDatabase.java 是初始化數據庫的重要構建組件,通過它我們可以添加RoomDatabase#Callback監聽,RoomDat

原创 Android 應用框架層 SQLite 源碼分析

概述   Android 在應用框架層爲開發者提供了 SQLite 相關操作接口,其歸屬於android.database.sqlite包底下,主要包含SQLiteProgram, SQLiteDatabase, SQLiteSession

原创 Android Bitmap的使用及優化

Bitmap內存模型 在 Android 2.2(API 8)及更低版本上,當發生垃圾回收時,應用的線程會停止(stop the world)。這會導致延遲,從而降低性能。Android 2.3 添加了併發GC功能,這意味着系統不再引用位

原创 爬取LeetCode題目——如何發送GraphQL Query獲取數據

前言   GraphQL 是一種用於 API 的查詢語言,是由 Facebook 開源的一種用於提供數據查詢服務的抽象框架。在服務端 API 開發中,很多時候定義一個接口返回的數據相對固定,因此要獲得更多信息或者只想得到某部分信息時,基於

原创 Kotlin-Note

數字在需要一個可空的引用時,會進行裝箱操作,數字裝箱不一定保留同一性。 val a = 1000 println(a === a) // 輸出 "true" val boxedA : Int? = a val anotherBox

原创 Java-Note

Manifest Manifest file Use of the MANIFEST.MF file in Java Working with Manifest Files: The Basics

原创 Android-Note

android:installLocation App install location AndroidManifest App Manifest Overview Merge multiple manifest files Androi

原创 [LeetCode] 1089. Duplicate Zeros

LeetCode刷題記錄 傳送門 Description Given a fixed length array arr of integers, duplicate each occurrence of zero, shifting th