博客更新计划
该文档主要阐明后续的博客重点更新方向:
主题 | 进度 | 备注 |
---|---|---|
《二分》 | 规划中 | 二分查找、二分搜索,算法、理论与应用 |
《DFS、BFS》 | 编写中 | 总结DFS、BFS的通用思路,题解举例 |
《动态规划》 | 规划中 | 总结从递归到动态规划、题解 |
该文档主要阐明后续的博客重点更新方向:
主题 | 进度 | 备注 |
---|---|---|
《二分》 | 规划中 | 二分查找、二分搜索,算法、理论与应用 |
《DFS、BFS》 | 编写中 | 总结DFS、BFS的通用思路,题解举例 |
《动态规划》 | 规划中 | 总结从递归到动态规划、题解 |
Reference
This site is built by Vuepress, Vuepress GitHub
A basic tutorial: zero-to-deploy-build-a-documentation-system-with-vue-and-vuepress
Zon of Python By Tim Peters
translated by weigao chen
JAVA 内存布局如下图所示:
下面章节对这些区域进行逐一说明。
JVM 在运行时的数据区大致如下图所示:
准确来说,栈区包括虚拟机栈、本地方法栈;PC 寄存器是很小的一块内存空间,指向当前线程所执行的字节码的行号,如果线程执行的是 Java 方法,则指向虚拟机字节码指令的地址;如果执行的是 native 方法,这个计数器通常为空。 VM Stack 是线程私有,生命周期与线程相同。如章节 1.1 中的图片所示,VM Stack 中有若干的栈帧 (Stack Frame),每一个 Stack Frame 都对应一个方法。通常大家说的虚拟机中的栈都会特指 VM Stack. 栈区包含若干栈帧,每个栈帧中包括以下信息:
JAVA 字符串操作的优化。
Java Char Array | ||
---|---|---|
Head | Mark Word | 4 Bytes |
Class Pointer | 4 Bytes | |
Length of Array | Offset = 8 | |
Instance Data | Data of Array | |
Padding |
On the Advantages and Disadvantages of Marketing Strategy from the Perspective of Enterprise Development
With the rapid development of Internet economy, the marketing amount of enterprises has changed greatly. Over the past decade or so, we have witnessed many micro-enterprises achieve business success through excellent marketing strategies, and many enterprises have been abandoned by the times because of improper marketing. This paper selects several typical enterprises and their landmark marketing strategies to explain how marketing strategies become the key to enterprise success.
Pacel 是 IPC 通信中的序列化和反序列化类;
官方给出了 IPC 接口的使用方式,其中规定了 Parcel 相关的操作。
JS 侧的客户端在发送消息的时候需要按照如下的方式使用:
import rpc from "@ohos.rpc"
// 使用期约
let option = new rpc.MessageOption()
let data = rpc.MessageParcel.create()
let reply = rpc.MessageParcel.create()
// 往data里写入参数
proxy.sendRequest(1, data, reply, option)
.then(function(result) {
if (result.errCode != 0) {
console.error("send request failed, errCode: " + result.errCode)
return
}
// 从result.reply里读取结果
})
.catch(function(e) {
console.error("send request got exception: " + e)
}
.finally(() => {
data.reclaim()
reply.reclaim()
})
// 使用回调函数
function sendRequestCallback(result) {
try {
if (result.errCode != 0) {
console.error("send request failed, errCode: " + result.errCode)
return
}
// 从result.reply里读取结果
} finally {
result.data.reclaim()
result.reply.reclaim()
}
}
let option = new rpc.MessageOption()
let data = rpc.MessageParcel.create()
let reply = rpc.MessageParcel.create()
// 往data里写入参数
proxy.sendRequest(1, data, reply, option, sendRequestCallback)
本文主要记录常见的 Linux 命令,特别是那些经常遇到但是容易忘记的命令用法。
Binder 内存管理指的是:管理 binder mmap 映射的这块缓冲区。其中有两个关键的数据结构:
binder_alloc:缓冲区分配器,对每个使用 binder 进行 IPC 通信的进程,事先建立一个缓冲区;
binder_buffer: 描述缓冲区的数据结构
本文先对这两个关键的数据结构进行研究,然后再逐一分析使用这些数据结构的相关函数和算法。