月度归档:2019年07月

C语言指针笔记

C语言指针是难点,是必须要攻克的堡垒。

看C语言的资料,指针是绕不过去的,这里记录自己对指针的理解。

一、感性认识指针。
0、有如下C代码,存为point.c文件

#include <stdio.h>

int main()
{
	int num = 1;
	int *point;

	point = &num;

	// %p表示输出地址
	printf("&num = %p | point = %p | *point = %d \n", &num, point, *point);
}

继续阅读

shell脚本中关联数组及其遍历

shell中(version >= 4.1.2)也存在关联数组(associated array),跟PHP的关联数据很像。

查看shell版本

bash -version

GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

继续阅读

编译器cc、CC、gcc、g++区别

看C语言经典教材《C程序设计语言》中,Linux下编译C代码用的是cc, 广为人知的C编译器的gcc, 还有CC、g++那么有啥差异呢

一、cc是Unix下C语言编译器,是c compiler的缩写。
cc是付费的。所以Unix的两个孩子Linux和Mac OS上的cc都是软连接。
0、Linux下(这里测试用的是Centos)

[root@izj6cfhaw27k49x8usszs3z ~]# which cc
/usr/bin/cc
[root@izj6cfhaw27k49x8usszs3z ~]# ls -l /usr/bin/cc
lrwxrwxrwx 1 root root 3 Jul 22  2018 /usr/bin/cc -> gcc
[root@izj6cfhaw27k49x8usszs3z ~]# which gcc
/usr/bin/gcc

可见,cc是gcc的软连接
继续阅读

PHP迭代器学习笔记

最近碰到了一个问题,PHP中如何遍历对象(迭代对象)。

第一部分 遍历对象

一、问题描述

我们知道foreach可以遍历数组,也可以遍历对象,但是默认情况下只能遍历对象public属性。

class User
{
    public  $name = 'salmonl';
    private $sex  = 'm';
    private $age  = 30;

    public static function getAge()
    {
        return $this->age;
    }
}

$user = new User();
var_dump($user);

foreach ($user as $key => $value) {
    echo $key, '==>', $value, PHP_EOL;
}

继续阅读

PHP后台上传图片

前台图片上传

比较普遍用这种方式,页面通过form表单来提交,服务端PHP通过$_FILES来接收

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title></title>
 </head>
 <body> 
  <form action="upload.php" method="post" enctype="multipart/form-data">
   图片:<input type="file" name="img"/>
   <input type="submit" value="点击上传"/>
  </form>
 </body>
</html>

我们知道form表单默认是通过application/x-www-urlencoded方式编码传递的。以上form表单指定了通过multipart/form-data的编码方式,支持二进制传输。

那么服务端如果想调用公司平台接口上传呢,下来将进行介绍
继续阅读

PHP生成二维码传到页面的坑

PHP生成二维码

最近做页面保存长图的功能,长图底部需要附带页面地址二维码,之前没搞过二维码相关的实现,在Google上搜索一番,发现了两个现有的轮子phpqrcode扩展和qr-code扩展。

对比发现phpqrcode很多年没有维护了,最终选择了qr-code。
注:如果使用phpqrcode可以参考PHP基于phpqrcode类生成二维码

使用qr-code生成二维码很容易,参考这篇文章PHP生成二维码
继续阅读

堆及堆排序PHP实现

一、什么是堆

堆是一种数据结构,特殊的树形数据结构。常见的堆有二叉堆、二项式堆、斐波拉契堆等。
堆这种数据结构主要用来实现两个功能:堆排序和优先队列。

PHP SPL中有堆这种数据结构(SplHeap),及优先队列(SplPriorityQueue)。

二、细说二叉堆

这里细说的堆排序使用的是二叉堆,那么二叉堆是什么样的呢
二叉堆是一颗完全二叉树(维基百科提到还有可能是近似完全二叉树,很不理解),节点和双亲节点维持着固定的关系,要么节点的值都大于双亲节点,要么节点的值都小于双亲节点,并且每个节点的左右子树都是二叉堆。【完全二叉树及堆的图,可参考知乎专栏,传送门
特点:
0、节点都大于双亲节点的二叉堆叫大顶堆。
1、节点都小于双亲节点的二叉堆叫小顶堆。
2、二叉堆一般用一维数组来存储。
3、二叉堆一个节点的左右孩子没有顺序。
4、有n个元素的二叉堆,最后一个非叶节点为n/2 -1
继续阅读

H5页面生成长图实践总结

最近这一两年,长图分享突然悄无声息的兴起了。刚在产品上增加了这一功能,发现确实是一种极好的分享传播方式。
生成的效果图太长,下拉在文末可以查看到

结合之前的调研,以及尝试走不通的路,以下整理了这个功能点相关的方案,希望提供你有用的参考。
继续阅读

浅谈Trie

提到敏感词过滤,经过简单思考,你没有想到Trie的话,那么你就不要思考了,这篇文章很适合你。如果你想到了,这篇文章也不失一篇很好的参考。

有经验的开发者都会说到用字典树来实现敏感词检测过滤等功能,字典树即本文所谈论的对象Trie。

他的别名除了字典树,还有很多:前缀树、单词查找树、键树。跟很多人一样,我也格外喜欢前缀树(Prefix Tree)这个昵称。
继续阅读

PHP基于Trie实现敏感词检索

算法:
* 0、构建Trie树
* 1、遍历目标字符串中的每一个字符,如果字符不存在,继续下一个。
* 2、如果字符存在,从该字符下一个字符开始遍历,匹配成功后直接返回匹配字符长度,然后跳过这个长度并不是+1, 算是优化了【匹配到一个词后直接返回,没有往下找最长】,否则回到第1步
* 3、重复1-2
继续阅读