跳至主要內容
Blog Update Plan

博客更新计划

该文档主要阐明后续的博客重点更新方向:

主题 进度 备注
《二分》 规划中 二分查找、二分搜索,算法、理论与应用
《DFS、BFS》 编写中 总结DFS、BFS的通用思路,题解举例
《动态规划》 规划中 总结从递归到动态规划、题解

Someone小于 1 分钟Projectsblog
JVM Inst

Abstract

JAVA 字符串操作的优化。

Java 对象布局

Java Array 对象布局

Java Char Array
Head Mark Word 4 Bytes
Class Pointer 4 Bytes
Length of Array Offset = 8
Instance Data Data of Array
Padding

Someone大约 3 分钟JAVAjvmjava
Code Snappet

Binary Search Example

下述代码是为了将相邻的 PC 进行合并,并产生新的 PC 和计数,比如说:

image

有一系列的 PC 列表,此时我们需要将连续的 PC 合并到一起,它们后面的技术也增加到合并的结果中。

def merge_continuous_addresses(address_list, count_list):
    result = {}

    i = 0
    while i < len(address_list):
        address = address_list[i]
        count = count_list[i]

        j = i + 1
        current_sum = count

        while j < len(address_list) and int(address_list[j], 16) == int(address, 16) + 4 * (j - i):
            current_sum += count_list[j]
            j += 1

        result[address] = current_sum
        i = j

    return result

Someone小于 1 分钟Algorithmalgorithmother

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.


Someone大约 3 分钟
Binder Parcel

背景

Pacel 是 IPC 通信中的序列化和反序列化类;

从 IPC API 开始

官方给出了 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)

Someone大约 6 分钟AndroidOHOSAndroidBinder
Linux Command

本文主要记录常见的 Linux 命令,特别是那些经常遇到但是容易忘记的命令用法。


Someone大约 3 分钟LinuxKernel
Binder 内存管理

概览

Binder 内存管理指的是:管理 binder mmap 映射的这块缓冲区。其中有两个关键的数据结构:

binder_alloc:缓冲区分配器,对每个使用 binder 进行 IPC 通信的进程,事先建立一个缓冲区;

binder_buffer: 描述缓冲区的数据结构

本文先对这两个关键的数据结构进行研究,然后再逐一分析使用这些数据结构的相关函数和算法。

数据结构分析

binder_alloc


Someone大约 4 分钟AndroidKernelkernelAndroidBinder
Binder Phases

本文主要讲述 Binder 流程中的各个阶段,起到一个 Overview 的目的。


Someone大约 6 分钟AndroidkernelAndroidBinder
2
3
4
5
...
15