ARST打卡第221周[221/521]

Algorithm

lc141_环形链表

思路:
快慢指针,快指针每次走两步,慢指针每次走一步,如果快指针没有结束,走到了慢指针的原来的走过的地方了,就是有环

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
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode* f = head;
ListNode* s = head;
while (true) {
// [] 空输入 RE (runtime error) 了一波,所以要判断 head
if (f && f->next && f->next->next) {
f = f->next->next;
} else {
return false;
}
if (s->next) {
s = s->next;
if (f == s || f->next == s) {
return true;
}
}
// else 慢节点不会先到 NULL
}
}
};

Review

【TED演讲】如何掌控人生中的艰难转变?

当你想要讲述自己的人生故事的时候,你就会想撑过人生的艰难时刻,让自己的人生有一个 happy ending.

你面对”人生地震”,可以采取如下措施:

  1. 接纳现实和自己的悲伤情绪
  2. 尝试新事物
  3. 从你的超能力开始,然后再走下去(超能力就是你擅长的,有的人擅长列to do-list,有人擅长告别)
  4. 向他人寻求帮助
  5. 改写你的人生故事(讲新故事)

Tips

VSCode VIM插件高效使用

Share-linux下生成core_dump配置和用法

启用 Core dump,系统默认关闭

Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。

用到的命令是: ulimit

1
2
3
# 输入目录查看状态, 0 说明是禁止生成 core 文件。
[root@ ~]# ulimit -c
0

我们可以直接在 ulimit -c 后面加上参数,当为数字时表示限制 core 文件大小不超过 1024KB[ulimit -c 1024]:

如果每次登录都变成 0 的话,可以持久化到自己的 .bashrc 或者 .zshrc 中

1
2
3
4
5
# unlimited: 字面意思,没有限制 core 文件大小。
[root@ ~]# ulimit -c unlimited
# 不是 root 用户可能会失败,如 Ubuntu 启用了 root,但不能用 sudo 去执行,而要 su root 切换过去才能成功执行
[非root用户@ ~]$ ulimit -c unlimited
bash: ulimit: core file size: 无法修改 limit 值: 不允许的操作

设置 core 文件的存储目录和命名格式

设置 core 的存储目录和命名格式,主要是修改配置文件 /proc/sys/kernel/core_pattern:

1
2
3
4
# 1. 默认在当前程序执行目录下生成,core-程序名-程序pid-时间 [core-test-3451-1516257740]
[root@ ~]# echo "core-%e-%p-%t" > /proc/sys/kernel/core_pattern
# 2. 添加路径,可以把所有的 core 集中到一个文件夹里 [把所有的core文件放到 /root/core-file 目录下]
[root@ ~]# echo "/root/core-file/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

core dump 用法

  1. 编写自己的代码,然后 gcc/g++ 编译,加 -g 调试选项
  2. 运行代码如果 core,会生成 core 文件
  3. gdb your_proc_exec core-test-19317-151xxxx
    1. wherebt 调试

参考

linux 下生成 core dump 配置和用法