原创 C++ shared_mutex

C++14提供了shared_mutex來解決讀者-寫者問題,也就是讀寫鎖,和普通鎖不一樣,讀寫鎖同時只能有一個寫者或多個讀者,但不能同時既有讀者又有寫者,讀寫鎖的性能一般比普通鎖要好。 shared_mutex通過lock_sh

原创 Golang學習筆記-zerolog

zerolog是一個高性能,支持日誌等級,鉤子的結構化日誌庫。log的Print()和Printf()方法默認輸出到os.Stderr,默認日誌等級爲debug,用法和官方log庫相同。 package main import

原创 Golang學習筆記-flag

使用flag包可以用來解析命令行參數,flag.TypeVar()用於定義參數並綁定到指定變量,flag.Type()用於定義參數並綁定到返回的指針,定義時可以指定參數名稱,默認值,使用說明。定義完參數後調用flag.Parse(

原创 Java中RSAPublicKey在不同平臺的差異性

最近在逆向某Android App的時候複製了裏面一段Java寫的RSA解密代碼,把它放在Windows上執行,結果發現解密失敗,剛開始以爲是密文數據或者公鑰數據弄錯了,調試了下發現密文數據或者公鑰數據都沒問題,問題發生在通過公鑰數據生成公

原创 使用compileOnly依賴jar包,卻仍然參與打包的問題

原因很簡單,因爲沒刪除implementation fileTree(dir: 'libs', include: ['*.jar'])

原创 使用JEB調試Android App

1. 開發App 我們首先開發一個簡單的App,輸入123456就提示成功,否則提示失敗。 public class MainActivity extends AppCompatActivity { @Override p

原创 在Linux上部署程序

nohup & 程序在Linux上運行時,如果關閉session,程序會因爲收到SIGHUP信號結束,使用nohup可以免疫該信號。如果使用Ctrl+C,程序會因爲收到SIGINT信號結束,使用&可以免疫該信號。 nohup和&常常一起使用

原创 Golang學習筆記-Context

有時候一個功能可能涉及多個goroutine的調用,當該功能中途需要取消時,需要通知其它goroutine,這個時候Context就可以派上用場了,Context主要用來處理退出通知以及上下文數據傳遞問題。 Context之間被設計爲父子關

原创 Golang學習筆記-定時器

Timer 使用time.NewTimer()創建Timer後,經過其指定的時間後,它會向其管道發送當前時間。time.After()也是創建Timer,不過返回值不是Timer而是其管道。 package main import (

原创 Golang學習筆記-測試

Go的標準庫提供了幾個與測試有關的庫,其中最主要的是testing包,testing包需要與go test命令以及源代碼中所有以_test.go後綴結尾的測試文件一同使用,一般測試文件的名字都會與被測試源碼文件的名字相對應,例如main.g

原创 解決Unity導入aar或jar出現的Program type already present: com.xx.BuildConfig問題

原因:當Unity導入的aar或jar包名和項目包名一樣的話,BuildConfig會出現衝突。 解決方法:在aar/jar的build.gradle中添加下面的代碼禁止生成BuildConfig即可。 afterEvaluate {

原创 Android下使用WebRTC傳輸高品質立體聲音樂

WebRTC一般用於語音通信,但有時候也要傳輸音樂,這個時候對音質要求就比較高了,可以進行如下設置: 設置JavaAudioDeviceModule爲立體聲,設置回聲消除和噪音消除爲false,設置採樣率爲48000。

原创 解決使用Instrumentation發送事件慢的問題

使用Instrumentation發送事件時發現每次都要幾十毫秒,原因是它使用的模式是InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH(2),而不是INJECT_INPUT_

原创 錄製Android內部聲音卡頓的問題

最近在使用REMOTE_SUBMIX錄製內部聲音時發現聲音時有時無,還有雜音,百思不得其解 最後發現如果同時有兩個App在錄製內部聲音時就會這樣

原创 簡單封裝UnityWebRequest

WebProvider using System; using System.Collections; using UnityEngine; using UnityEngine.Networking; using Newtonso