使用Ctrl+C终止程序时是否可以做一些别的操作?

操作系统 ,
答案 可以。 当我们在键盘按下Ctrl+C组合键时,系统向当前终端运行的程序发送名为 SIGINT,值为2的中断信号。 默认情况下,程序收到 SIGINT 信号后会直接退出程序。 如果我们为 SIGINT 信号处理器自定义一个处理方法,那程序就会执行这个方法后再退出。 如下是Python示例代码: # coding: utf…

反转单向链表Python版

算法 ,
答案 链表节点定义: class Node(object): def __init__(self): self.value = None self.next = None 链表反转: def reverse_linked_list(head): if not head or not head.next: return head prev = None # 用于暂存前面的节点 next = None # 用于暂存前面的节点 while head: next = head.ne…

PHP 如何将数字转换成逗号分隔的形式?

PHP
答案 用内置number_format()方法即可实现。 echo number_format($number); 自己实现(不支持小数点): function number2thousands($number) { $number = (string)strrev($number); // 反转字符串 $number = chunk_split($number, 3, ','); // 以逗号,将字符串分隔成小段,每小段长度…

双向队列 PHP 版

PHP ,
答案 /** * 双向队列PHP版 */ class DoubleEndedQueue { private $queue = []; public function addHead($item) { return array_unshift($this->queue, $item); } public function addTail($item) { return array_push($this->queue, $item); } public function removeHead() { return …

PHP 如何根据指定键的值排序二维数组?

PHP ,
答案 使用PHP内置usort函数实现,这里实现正向的自然排序,其他排序方式略作修改即可。 function sort2DArray($arr, $column) { usort($arr, function($a, $b) use ($column) { return strnatcmp($a[$column], $b[$column]); }); return $arr; } 解析 测试代码: $arr = array( array('id…

PHP 实现多维数组值变成首字母大写

PHP ,
答案 使用内置函数array_walk_recursive()实现,注意,匿名函数参数$value我们使用引用传参方式,就地修改元素值。 function upperArrayFirstWord($arr) { array_walk_recursive($arr, function(&$value, $key) { $value = ucfirst($value); }); return $arr; }

网页/应用访问慢突然变慢,如何定位问题?

PHP
答案 top、iostat 查看 cpu、内存及 io 占用情况 内核、程序参数设置不合理,查看有没有报内核错误,连接数用户打开文件数这些有没有达到上限等等 链路本身慢,是否跨运营商、用户上下行带宽不够、dns解析慢、服务器内网广播风暴什么的 程序设计不合理,是否程序本身算法设计太差,数据库语句…

如何高效地根据 IP 获得城市?

PHP ,
答案 可以用 Redis 的有序集合(Sorted Set)实现,将 IP 保存为整形作为集合的score,再根据 score 范围查找。 /** * 时间复杂度: O(log(N)+M),N为有序集的基数,M为被结果集的基数。 */ class Ip { private $redis = null; private $key = 'ip'; public function __construct() { $t…