ARTS-week37

Algorithms

Move Zeroes
思路: 双指针,一个向后遍历找到非0的位置,和前面的指针进行交换。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int i = 0, j = 0;
int n = nums.size();
while (j < n) {
if (nums[j]) {
swap(nums[i++], nums[j]);
}
j++;
}
}
};

Review

本周阅读英文文章 The Mathematics of (Hacking) Passwords

Technique

守护进程是在后台运行并独立于所有终端控制的进程。守护进程产生的所有输出通常通过调用syslog函数发给syslogd守护进程。

守护进程的启动有多种方法:
1)在系统启动阶段,许多守护进程由系统初始化脚本启动。通过位于/etc目录或以/etc/rc开头的某个目录中,这些脚本启动的守护进程一开始时拥有超级用户特权。
2)许多网络服务器由inetd超级服务器启动。inetd自身由1)中的某个脚本启动。
3)cron守护进程按照规则定期执行一些程序,而由它启动执行的程序同样作为守护进程运行。
4)at命令用于指定将来某个时刻的程序执行,这些程序执行时刻到来时,通常由cron守护进程启动执行他们,因为这些程序同样作为守护进程执行。
5)守护进程还可以从用户终端或在前台或在后台启动。这么做往往是为了测试守护程序或重启因某种原因而终止的守护进程。

启动任意一个程序并让它作为守护进程运行需要以下步骤: 调用fork以转到后台运行,调用setsid建立一个新的POSIX会话并成为会话头进程,再次fork以避免无意中获得的新控制终端,改变工作目录和文件创建模式掩码,最后关闭所有非必要的描述符。

Share

  • 关于Pycharm Professional中matplotlib显示的问题:

Pycharm Professional版本,利用matplotlib生成图片,调用plt.show()后,图片会显示在SciView区域中显示。

如果想使用matplotlib的默认显示,那么有两种方法:
1)可以在代码中添加如下两行:

1
2
import matplotlib
matplotlib.use('TkAgg')

2)File->Settings->Tools->Python Scientific,取消Show Plots in tool windows的勾选即可。