lc2639_查询网格图中每一列的宽度 当你集中注意力的时候大脑会发生什么?【TED演讲】 DNSCache实现 反射获取 grpc Invoke any参数具体类型
Algorithm
lc2639_查询网格图中每一列的宽度
按照题意模拟就行了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class Solution {
public:
vector<int> findColumnWidth(vector<vector<int>>& grid) {
int m = grid.size();
int n = grid[0].size();
vector<int> ans(n, 1);
for (int j = 0; j < n; j++) {
for (int i = 0; i < m; i++) {
int item_len = std::to_string(grid[i][j]).length();
if (item_len > ans[j]) {
ans[j] = item_len;
}
}
}
return ans;
}
};
|
Review
当你集中注意力的时候大脑会发生什么?【TED演讲】
人类的专注分为眼前专注力和内隐专注力。
眼前专注力专注眼前的事物,内隐专注力则会感知周围事物,并且过滤掉不重要的信号,这样就能专注到关注的信号上。
可以通过模拟注意力时脑电波一一映射,从而确定人在想什么,从而可能实现一个脑机接口。
Tips
DNSCache实现
App层加 DNSCache 缓存,减少 DNS 服务器压力。
juiceFS 也使用了这个库。
Share
反射获取 grpc Invoke any参数具体类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
func (channel *KRpcChannel) Invoke(ctx context.Context, methodDescriptor string, args any, reply any, opts ...grpc.CallOption) error {
- // 将结构体数据编码为 JSON 格式
- reqData, err := json.Marshal(args)
+ // 通过反射获取args的类型,并将数据编码为protobuf的二进制码
+ reqType := reflect.TypeOf(args).Elem()
+ req := reflect.New(reqType).Interface().(pb.Message)
+ reflect.ValueOf(req).Elem().Set(reflect.ValueOf(args).Elem())
+ // fmt.Println("[Debug] reflect req: ", req)
+ reqData, err := pb.Marshal(req)
if err != nil {
- fmt.Println("Error encoding JSON:", err)
+ fmt.Println("Error encoding:", err)
}
// 创建一个 Buffer 来存储请求内容
body := bytes.NewReader(reqData)
// ...
headers := map[string]string{
- "Content-Type": "application/json",
+ "Content-Type": "application/binary",
"Content-Length": fmt.Sprintf("%d", body.Len()),
}
@@ -116,13 +121,20 @@ func (channel *KRpcChannel) Invoke(ctx context.Context, methodDescriptor string,
- err = json.Unmarshal(respStr, reply)
+ // fmt.Println("[Debug] RespStr: ", respStr)
+
+ // 反射解包reply,暂时装载到 replyMsg 中
+ replyType := reflect.TypeOf(reply).Elem()
+ respMsg := reflect.New(replyType).Interface().(pb.Message)
+ err = pb.Unmarshal(respStr, respMsg)
if err != nil {
- return fmt.Errorf("error decoding JSON: %w, str: %s", err, respStr)
+ return fmt.Errorf("error decoding : %w, str: %s", err, respStr)
}
+ // 把结果复制到 reply
+ reflect.ValueOf(reply).Elem().Set(reflect.ValueOf(respMsg).Elem())
|