写点什么

2023 年第 33 周 ARTS 打卡

作者:Bryan
  • 2023-08-20
    上海
  • 本文字数:1111 字

    阅读完需:约 4 分钟

#ARTS #2023 #Week-33


Algorithm - 算法

题目

https://leetcode.com/problems/number-of-black-blocks/

m*n = 10^10 -> 不可能枚举 coordinates = 10^5 -> 最高遍历 nlogn (可枚举黑格子)Block 代表:使用左上角的格子代表这个 block 每个 Cell 归属于上下左右四个 block(注意 block 可能不存在)


    func countBlackBlocks(m int, n int, coordinates [][]int) []int64 {        key := func(i, j int) int64 {            return int64(i) * int64(n) + int64(j)        }                M := make(map[int64]int64, 1024)                for _, cell := range coordinates {            i, j := cell[0], cell[1]                        for x := i-1; x <= i; x++ {                for y := j-1; y <= j; y++ {                    if (x >= 0 && x < m-1 && y >= 0 && y < n-1) {                        M[key(x, y)]++                    }                }            }        }                result := []int64{0, 0, 0, 0, 0}                for _, v := range M {            result[v]++        }                result[0] = int64(m-1)*int64(n-1) - result[1] - result[2] - result[3] - result[4]                return result    }
复制代码

Review - 英文技术文章阅读与点评

[How NAT traversal works](https://tailscale.com/blog/how-nat-traversal-works/)


- 基础

- 首先,协议应基于 UDP —— 如果想在 NAT 穿越完成后使用 TCP 可考虑使用 QUIC

- 其次,你需要直接控制发送和接收网络数据包的 socket(无法使用现有的网络库,因为需要发送额外包)

- 防火墙

- 有状态防火墙仅在连接建立时进行阻止

- 防火墙限制了直接流入,因此数据包必须先流出再流回

- 双向防火墙的特殊情况

- 都需要突破

- 让每个防火墙都认为对方侧的请求是自己侧请求的响应

- 为了效率:两个端点必须在大致相同的时间尝试通信,这样所有的中间防火墙都会在两个对等点都还在的时候打开

- 有状态防火墙的内存有限,这意味着我们需要定期通信来保持连接存活

-

Tip - 本周学到的技术技巧

- [chroot](https://linux.die.net/man/1/chroot) 除了可以修改跟目录地址外,还可以修改当前用户和用户组(相当于 su/sudo 了)

- **命令行中修改用户有三种方式**

- su

- 切换当前的用户,也可以只使用特定用户执行程序

- 非 root 用户需要输入对应用户的密码

- sudo

- 切换当前的用户,也可以只使用特定用户执行程序

- 依赖 /etc/sudoers 配置切换权限

- chroot

- 切换当前的用户

- 仅 root 用户可用

-

Share - 写一篇技术文章

谈谈时区

发布于: 刚刚阅读数: 3
用户头像

Bryan

关注

还未添加个人签名 2017-12-21 加入

还未添加个人简介

评论

发布
暂无评论
2023 年第 33 周 ARTS 打卡_Bryan_InfoQ写作社区