作者归档:salmonl

关于salmonl

成长,长成自己的样子。微博@动机在北京,欢迎来玩~

leetcode 83删除排序链表中重复元素

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例 1:
输入: 1->1->2
输出: 1->2

思路:
一开始想到的用类似数组中删除重复元素的方法,用快慢指针。实际上链表一次遍历即可。
这题主要考查的是对链表节点的操作能力,有几点特别需要注意:

0、需要定义一个新的节点用来遍历,存储原链表的头节点,不然最终无法返回链表的头节点
1、如果出现重复元素,是给$node->next的赋值。
2、删除的节点如何回收内存呢
3、PHP对象是引用传值。参考<a href="https://segmentfault.com/q/1010000010641993" rel="noopener" target="_blank">这里</a>。

继续阅读

B+树学习笔记

不知道你有没有这样的困惑,B+树的资料看了很多,依旧对B+树没有一个具象的认识。我也是这么走过来的,所以希望这篇笔记能帮到你。

一、演化阶段
你或许知道,或许不知道。B+树是由二叉树不断演化过来的。
大致的演化路线如下:
二叉查找树 -> 平衡二叉树 -> B树 -> B+树。

为了说清楚B+说,我们很有必要搞清楚演化过程中每个阶段的特点。
继续阅读

常用shell命令二(ls)

ls大概是Linux下使用很频繁的命令了,你未必知道他的强大

0、列出当前目录下的文件,按修改时间排序

[root@izj6cfhaw27k49x8usszs3z niliu]# ls -alt
total 535128
-rw-rw---- 1 mysql mysql    507904 Nov 21 20:28 wp_postmeta.ibd
-rw-rw---- 1 mysql mysql    786432 Nov 21 20:28 wp_options.ibd
drwxr-xr-x 7 mysql mysql      4096 Nov 17 10:57 ..
-rw-rw---- 1 mysql mysql    131072 Aug 31 09:28 wp_commentmeta.ibd
-rw-rw---- 1 mysql mysql    114688 Nov 23  2018 midoks_weixin_robot_extends.ibd
-rw-rw---- 1 mysql mysql     98304 Nov 23  2018 midoks_weixin_robot.ibd
-rw-rw---- 1 mysql mysql     98304 Nov 23  2018 midoks_weixin_robot_menu.ibd

继续阅读

数组不连续取数问题(不连续取糖果)

回想最初遇到这个问题的时候,题面描述如下:

有连续编号的盒子内放着数量不等的糖果,有个强盗来打劫,不允许从两个相邻的盒子中取走糖果,问最多能获取到多少颗糖果。

起初还以为是leetcode上的分糖果问题,其实不一样。后来遇到了leetcode打家劫舍方知是这题,出题人很巧妙的包装了问题。

一、思路:
具象分析这个问题,可以如下表述:
给定一个维数组,长度为N。不允许取连续的两个数,求取到数字的最大和

例:输入:[1,3,5,2,1,9,4,3,7]
答案为:1+5+9+7=22
继续阅读

Git常用命令整理五(Git疑难杂症)

Git常见问题及疑难杂症本来整理在文章《Git常用命令整理二(Git托管项目)》中,今天遇到了git pull反复输入密码的问题,很清楚这个处理命令自己记录过,一时间并没有找到。

发现疑难杂症越来越多,索性单独成篇,方便各位查看。同时欢迎大家留言补充。

继续阅读

PHP7和PHP5区别

PHP7比PHP5.0 ~ 5.6快了近5倍,同时还降低了对系统资源的占用。主要是PHP7对Zend引擎进行了深度优化。

之前在书上看到过两者比较全面的区别,回头去翻了翻书【眼过千遍,不如手过一遍啊】,特记录如下。

分三个方面来比较:
0、底层优化
1、语法变化
2、性能变化

0、增加抽象语法树(AST)。
PHP5:PHP代码在语法解析阶段直接生成opline指令,执行器直接执行opline指令。
PHP7: PHP代码解析生成抽象语法树,然后将抽象语法树编译成opline指令。解耦编译器和执行器。
继续阅读

N盏灯问题

N盏灯问题是个很有意思的问题,是一个数学题,也是一个编程题。

这个问题,有很多不同的叫法
0、N个人开关N盏灯问题
1、开关灯问题

一、问题描述:
有N盏灯放在一排,从1到N依次顺序编号。有N个人,也从1到N顺序编号。1号将灯全部关闭,2号将凡是2的倍数的灯全部打开;3号将3的倍数的灯全部作相反操作(该灯如为打开,则将它关闭;如关闭,则将灯打开)。以后的人,都和3号操作一样,将凡是自己序号倍数的灯作相反操作。第N个人操作完之后,一共有几盏灯亮着?

二、问题分析
灯编号: 1->N
人编号: 1->N
开始灯都关着
灯 % 人 == 0 按一次开关
第N个人操作后,亮个的灯的个数
继续阅读

通过swoole观察僵尸进程和孤儿进程出现和消亡

声明:维基百科上没有僵死进程的词条,这里认为僵死进程同僵尸进程,即ZOMBIE。

一、定义
什么是僵尸进程
维基百科的定义:在类UNIX系统中,僵尸进程是指完成执行(通过exit系统调用,或运行时发生致命错误或收到终止信号所致)但在操作系统的进程表中仍然有一个表项(进程控制块PCB),处于”终止状态”的进程。

这个定义很准确,但并不好理解,通俗的说法是一个进程fork了一个子进程,子进程先于父进程退出,但父进程没有调用wait(通过wait系统调用读取退出进程的退出态,退出进程的在进程表中的表项就被删除),导致这个进程已经退出但是仍在进程表中占有一个位置,这种进程称为僵尸进程。

什么是孤儿进程
孤儿进程:一个进程fork了一个子进程, 父进程先于子进程退出,运行中的子进程称为孤儿进程。
孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
继续阅读

基于swoole实现多进程任务处理

一、swoole多进程实现简介

0、通过swoole实现多进程,主要借助swoole_process类

swoole_process::__construct(callable $function, bool $redirect_stdin_stdout = false,
    int $pipe_type = SOCK_DGRAM, bool $enable_coroutine = false);

1、简易实现demo[来自swoole官网]

$process = new swoole_process(function (swoole_process $worker) {
    $worker->write('Hello');
}, false);

$process->start();

sleep(1);

echo $process->read();

继续阅读