沾衣欲湿杏花雨,吹面不寒杨柳风。

自我介绍

ROJ

  1. 这个 OJ 代码练习平台是你们学校的什么 OJ 吗?

  2. 什么叫用 process 流啊?

    自己解释了一遍,正确解释:

    Process 类用于启动和管理外部进程。Process 流则是指与这些外部进程进行输入输出交互的流

    使用场景

    • 执行系统命令并获取输出
    • 与外部程序交互,发送输入并读取输出

    示例代码

    1
    2
    // 启动外部进程(例如:列出目录内容)
    Process process = Runtime.getRuntime().exec("ls -l");
  3. 你项目中提到的docker代码沙箱,docker底层是怎么做到隔离环境的?利用了linux底层的什么机制?

    没有了解过

    Docker 通过以下 Linux 内核机制实现环境隔离:

    • Namespaces(命名空间):隔离进程、网络、文件系统等。
    • cgroups(控制组):限制资源使用。
    • Union File Systems(联合文件系统):管理镜像和容器文件系统。
    • chroot(改变根目录):隔离文件系统视图。
    • Capabilities(能力机制)Seccomp(安全计算模式):增强安全性。

    这些机制共同作用,使 Docker 能够高效、安全地运行隔离的容器环境。

后面问到的问题都是挂载本地目录的问题,比如安全性,当时脑子抽了,明明没有挂在目录的,是通过一个回调函数获取docker里的执行结果最后再和answer一一对比的,不涉及docker挂在目录的问题

算法

区间求交集(区间做闭右开)

leetcode986. 区间列表的交集的变式题

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class Main {
static class Interval {
int l, r; //左闭右开
Interval(int l, int r) {
this.l = l;
this.r = r;
}
}

static List<Interval> intersect(List<Interval> a, List<Interval> b) {
int n = a.size(), m = b.size();
Interval[] c = new Interval[n + m];
for(int i = 0; i < n; i ++) c[i] = a.get(i);
for(int j = n; j < n + m; j ++) c[j] = b.get(j - n);
Arrays.sort(c, (x, y) -> x.l - y.l);
int st = c[0].l, ed = c[0].r;
List<Interval> res = new ArrayList<>();
for(int i = 1; i < n + m; i ++){
int l = c[i].l, r = c[i].r;
if(l < ed){
int minr = Math.min(ed, r);
Interval ans = new Interval(l, minr);
res.add(ans);
if(r >= ed){
st = l;
ed = r;
}
} else {
st = l;
ed = r;
}
// [1, 3] [2,100] [4,5] ==> [2,3] [4,5]
// [1, 100] [2,3] [4,5] ==> [2,3] [4,5]

}
return res;
}
}

/*
Case 1:
a = {[1, 3), [4, 6), [8, 10)}
b = {[1, 2), [5, 8)}
ans = {[1, 2), [5, 6)}

Case 2:
a = {[1, 3), [4, 6), [8, 10)}
b = {[1, 2), [4, 9)}
ans = {[1, 2), [4, 6), [8, 9)}

Case 3:
a = {[1, 3), [4, 6), [8, 10)}
b = {[1, 2), [3, 9)}
ans = {[1, 2), [4, 6), [8, 9)}
*/

Ztimer

  1. 为什么要设计mysql+redis这样的两级存储结构?

  2. 二维分片什么意思?

  3. http调用时间很长或者也无妨的服务挂了怎么办?

  4. 按照你说的这个key value score的设置并没有达到秒级的精度啊,同一分钟五秒之后再触发岂不是把之前的覆盖了

    这个问题当时脑子抽了,value其实是timerID + 时间戳,肯定是能唯一确定的,太不应该了

反问:

  1. 啥时候出结果

  2. 哪些方面需要提升?

    对啊,就是说你,我刚才这一问我就发现了你这个地方有漏,你说这个秒级,对吧?那你说明那个其实没有达到秒级,所有的 case 你都覆盖到了,对吧?一开始设计会漏掉是很正常的,但是如果测试没有覆盖的话,其实就不太应该,因为想就想一个测试 case 应该还是比较比,就最开始要设计要一个完备性,要更简单一点。嗯嗯,OK,对,所以就是说有实际的需求很好,但是做完之后不仅要停留在这个代码,实现上面测试也很重要,就是它是可以帮你去发现你设计当中的缺点和不足的。嗯,如果没有这个的话,相当于你缺少一个自我复盘的构成。(os:脑子抽了,这是个很低级的问题)
    对,在做个人项目的时候特别容易遇到这个case,但如果你这个项目如果真的会上线的话,你有别的使用方,那别人自然了会给你吐槽,因为现实世界当中的需求还是真正的需求,他们会真正的去跟你说这个地方哪里不对,会发现你的bug,你都不用测试他们就发现你bug,对吧?只不过说在一些关键性项目里面,你肯定需要通过测试来提,来避免上线之后产生的一些很恶劣的影响。