自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 收藏
  • 关注

原创 创建docker centos记录

docker run -it -d --name centos -p 80:80 -p 3306:3306 -p 8888:8888 -v /data:/data centos:centos7 bash 注:windows下向vm添加共享文件夹后需要重启才生效docker exec -it centos bashrpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm ;rpm -Uvh http.

2021-04-19 18:48:12 112

原创 使用laravel创建artisan命令

首先在Console/Commands目录下创建一个php类文件 ,该类要继承 Illuminate\Console\Command,需要实现handle方法,因为执行命令后会自动执行handle方法,所以hanler方法内就是要实现的具体业务代码.第二步,给protected name赋值,如:genkey等,本例以abc为名字第三步,找到Console/Kernel.php,在name赋值,如: genkey等,本例以 abc 为名字第三步,找到Console/Kernel.php, 在name赋

2021-02-06 17:16:09 391

原创 go语言指针与c指针的区别

c语言定义整型指针int *pgo语言定义整型指针var p *intgo语言指针学习

2021-02-05 22:06:08 489

原创 go for

go语言只支持for语句用go语言来输出从0 到100for i:=0; i<=100; i++ { fmt.Println(i)}第二种写法,类似其它语言的while语句i: = 0for{ if(i>100){ break; } fmt.Println(i)}第三种简写形式i := 0for i<101 { fmt.Println(i)}来源: Go语言 循环语句...

2021-02-05 17:28:07 147

原创 go语言函数

由于go语言是强类型语言,定义函数时需要指定参数类型,返回值类型,以下是定义函数的语法格式func 函数名(参数列表)(返回值列表){ 函数体}以下是定义函数的实例func plus(a, b) int{ return a + b}更多内容请查看 go语言函数...

2021-02-05 17:02:16 69

原创 docker搭建nginx+php环境

FROM centos:centos7RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && \rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm && \yum install -y gcc make psmisc net-tools bash-completion n

2020-06-21 17:26:42 458

原创 Docker完整教程

Docker 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器。Windows 版 Docker 需要运行在一个安装了 64 位 Windows 10 操作系统的计算机上,通过启动一个独立的引擎来提供 Docker 环境。需要确认在 Windows 10 操作系统中,Hyper-V 和 容器 特性已安装并且开启, 然后就可以安装 Windows 版 Doc...

2020-02-20 11:54:04 857

原创 算法笔记

1.如何判断一个链表是否有环经典解法是快慢指针typedef struct _Link{ Node *head; int data;} Link;typedef struct _Node{ struct _Node *next; int data;}Node;int checkCircle(Link *link){ Node *fast, *slow; if(link-&g...

2020-02-20 11:48:28 198

原创 PHP扩展开发完整教程(下)

第11章 PHP中的面向对象实例化一个对象并且调用它的方法php public function hello() { echo "hello world!\n"; }}function test_call() { $obj = new baby(); $obj->hello(); }下面我们在扩展中实现以上test_call函数。zend_class_ent...

2019-12-16 19:22:02 347

原创 PHP扩展开发完整教程(中)

第七章 函数的参数最简单的获取函数调用者传递过来的参数便是使用zend_parse_parameters()函数,第一个参数是ZEND_NUM_ARGS() TSRMLS_CC代表参数个数,下一个参数是一个用于格式化的字符串,就像printf的第一个参数一样Type SpecifiersSpec Type Localsa array zval*A array or object z...

2019-12-16 10:25:26 544

原创 PHP扩展开发完整教程(上)

第一章 PHP的生命周期php的运行方式有两种:以模块的方式加载到web-server里去,与web-server一块解析被请求的php脚本以fastcgi模式运行php的时候,一般需要手动启动php服务cgi是指通用网关接口,分别为每一个请求创建一个进程,fastcgi是使用持续的进程来处理请求php有多种sapi,一般最常用的是cli模式php程序的启动可以看作有两个...

2019-12-15 12:31:44 666 2

原创 GO语言学习笔记

第一章 Go语言简介协程是go最显著的特性最好读一读go语言源码 ,项目链接:https://github.com/golang/gogo语言只支持i++,别的写法会报错GOPATH 是一个路径,用来存放开发中需要用到的代码包。linux中需要设置 GOROOT(安装目录) 和 PATH,把安装目录追加到PATH中,export PATH=$ PATH:$ GOROOT/bin:$G...

2019-12-10 16:31:12 243

原创 [算法]给出一个数组,算出出现在一个固定大小的滑动窗口中的最大值的结果集

<?php$arr = [1,4,5,8, 100, 20, 30 , -1, 9, 6, 70, 35, 48, 90];function maxSlidingWindow($arr, $k){ if(!$arr) return []; $window = []; $res = []; foreach($arr as $index => $val){ ...

2019-11-28 19:20:54 195

原创 [算法]在二叉树上查找任意两个节点的公共祖先

#include <stdio.h>typedef struct _treeNode{ struct _treeNode *left, *right; int data;}treeNode;treeNode *findPorQ(treeNode *root, treeNode *p, treeNode *q){ if(root==NUll || r...

2019-11-28 11:51:21 563

原创 [算法]如何判断一棵二叉树是二叉搜索树

方法一:中序遍历#include <stdio.h>typedef struct _node{ struct _node *left, *right; int data;}node;int helper(node *left, node *root, node *right){ if(root == NULL) return 1...

2019-11-28 10:40:00 230

原创 [算法]堆排序

#include <stdio.h>void swap(int *arr, int i, int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;}void printArr(int arr[], int len){ printf("======================================...

2019-11-05 09:29:31 110

原创 [算法面试]如何实现一个数组每个元素依次向右移动k位

本着节省内存,减少时间复杂度的原则,用c实现如下:void swap(int *x, int *y){ int tmp = *x; *x = *y; *y = tmp;}void right_k(int arr[], int len, int k){ int i; for (i = 0; i < len; i++){ if (i + k < len - 1){...

2019-10-30 11:04:55 312

原创 Nginx红黑树分析

红黑树的五个特性如下:红黑树是一棵平衡二叉树 每个节点非红即黑 根节点是黑色 红节点的子节点必为黑色 任一节点到其各个叶子节点所经过的黑色节点是相等的nginx中的红黑树数据结构如下:struct ngx_rbtree_s{ ngx_rbtree_node_t *root;//根节点指针 ngx_rbtree_node_t *sentinel;//叶子节点 ...

2019-10-28 09:43:04 374

原创 RabbitMQ实战-笔记

第二章 理解消息通信2.1消费者与生产者的概念 信道是建立在tcp上的虚拟连接,可以减少tcp连接的开销2.2 amqp消息路由必须有三部分: 交换器,队列和绑定, 生产者把消息发布到交换器上,消息最终到达队列,绑定决定了消息如何从路由器路由到特定队列.2.2.1通过amqp的consume命令可以将信道设置为接收模式,直到取消对队列的订阅为止.消费者在消费了最近接收的那条消息后就可...

2019-10-26 11:11:43 434

原创 Elasticsearch学习笔记

安装:到官网下载www.elastic.co 运行需要jdk支持,运行 bin/elasticsearch ,然后访问http://127.0.0.1:9200 安装插件查看已安装插件elasticsearch-plugin.bat list ,安装elasticsearch-plugin.bat install analysis-icu,查看插件列表http://127...

2019-10-22 08:36:48 118

原创 redis源码分析[07]-AOF持久化机制-aof.c

#define AOF_RW_BUF_BLOCK_SIZE (1024*1024*10) /* 10 MB per block */typedef struct aofrwblock { unsigned long used, free; char buf[AOF_RW_BUF_BLOCK_SIZE];} aofrwblock;/* 释放旧的链表,初始化新的链表...

2019-09-04 11:55:29 334

原创 redis源码分析[06]-简单动态字符串-sds.c

redis并没有直接使用c语言的字符串类型,而是和申请内存一样,在每个字符串的前面做了标记.下面是结构说明typedef char *sds;struct __attribute__ ((__packed__)) sdshdr5 { unsigned char flags; /* 前3位表类型,后5位表长度 */ char buf[];};struct __attri...

2019-08-29 16:06:05 136

原创 redis源码分析[05]-字典结构及其算法-dict.c

redis的字典是由hash表实现的,一个字典有两个hash表,一个正式使用,另一个作扩容临时使用,一个hash表有多个节点,每个节点保存一个键值对。以下是字典相关的数据结构://节点结构,自带一个指向下一个节点的指针,用来防重typedef struct dictEntry { void *key; union { void *val; ...

2019-08-26 11:52:22 158

原创 redis源码分析[04]-网络通信-anet.c

//设置错误信息static void anetSetError(char *err, const char *fmt, ...){ va_list ap; if (!err) return; va_start(ap, fmt); vsnprintf(err, ANET_ERR_LEN, fmt, ap); va_end(ap);}//设置一个s...

2019-08-23 11:46:44 232

原创 redis源码分析[03]-内存管理-zmalloc.c

redis在每一块用到内存地址前面增加了一个字的内存,用来保存内存的大小//定义一个字的长度#if defined(__sun) || defined(__sparc) || defined(__sparc__)#define PREFIX_SIZE (sizeof(long long))#else#define PREFIX_SIZE (sizeof(size_t))#en...

2019-08-23 11:11:18 189

原创 redis源码分析[02]-事件处理-ae.c

1.redis所有事件都被保存在一个aeEventLoop的结构中,一类是文件事件,另一类是时间事件/* 文件事件 */typedef struct aeFileEvent { int mask; /* 事件的状态,读事件,写事件 */ aeFileProc *rfileProc;//读事件发生时要执行的读操作 aeFileProc *wfileProc;//写...

2019-08-22 17:06:57 165

原创 redis源码分析[01]-双向链表结构-队列的底层实现-adlist

1. redis的 list类型的底层实现就是用的双向链表-adlist,以下是数据结构typedef struct listNode {//链表的节点结构 struct listNode *prev;//指向上一个节点的指针 struct listNode *next;//指向下一个节点的指针 void *value;//实际存储的值} listNode;...

2019-08-22 15:47:48 128

原创 python学习笔记【05】

MySQLdb扩展https://pypi.python.org/pypi/pip#downloads 下载pip文件,然后解压,执行 python setup.py install这是安装pip命令 安装wheel 在python目录下的Scripts 找到pip,然后执行 pip install wheel http://www.lfd.uci.edu/~gohlke/p...

2019-04-14 13:15:02 114

原创 python学习笔记【04】

装饰器先定义一个函数,传入一个函数,返回一个函数,然后在需要装饰的函数声明前加上@装饰器名即可 装饰器可以是一层,也可以是多层面向对象 class abc(object): #继承object __name = 10 #私有属性 name = 1111 def __init__(self, name): object.__init__(s...

2019-04-13 23:38:28 103

原创 python学习笔记【03】

模块目录ddd下只要存在 __init__.py则这目录是一个模块,对于模块下的一个文件xxx.py ,在别的文件中可以用 from ddd import xxx导入 __name__假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是__main__ ,否则就是模块的真名 pass是空语句就是个占位语句 def aaa(): 定义一个方法 __doc...

2019-04-12 17:35:57 95

原创 python学习笔记【02】

文件处理f = file('m.txt', 'r')for line in f.readlines(): line = line.strip('\n').split(':') print line #print 可以打印字符串也可以打印listprint abc, 这样可以不换行 f.read方法可以处理一种特殊情况,当f.read读到文件结尾时,如果文...

2019-04-12 11:36:19 254

原创 python学习笔记【01】

安装2.7是phython2最后一个版本,python3是一个优化版本数据类型布尔型是True False 列表的定义:name_list = ['a', 'b', 'cccc'] 注释#开头是单行注释 '''三个单引号开头和三个单引号结尾是多行注释字符编码ord方法可以算出asc码 : ord('a') unicode是2字节,utf8是3字节 定义一个...

2019-04-11 21:26:26 105

原创 SEO实战密码阅读笔记

第2章吸引蜘蛛 权重高的网站 页面更新快 导入链接 与首页点击距离,离首页点击距离越近,页面权重越高,被爬行的机会越大 站长可通过搜索引擎网页提交表格来提交网址 遇到权重很低的网站上大量转载内容时,很可能不再继续爬行 预处理的过程 提取文字部分 中文分词(基于词典或统计) 去停止词(的,地,得,呵,哈,呀,从而,以,却,the,a,an, to , of)...

2019-03-13 18:07:03 2251

原创 thinkphp的nginx配置

我的项目的名字叫o2oshop本项目的配置为server { listen 80; server_name yzd.o2oshop.com.cn; access_log /data/logs/nginx/yzd.o2oshop.com.cn.access.log main; error_log /data/logs/nginx/yz...

2019-01-11 11:42:51 188

原创 [php内核分析]php_getopt函数

头文件:#include "php_getopt.h"源代码:PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **optarg, int *optind, int s...

2018-07-11 11:11:08 369

原创 [php内核分析]zend_memnstr函数

头文件#include "zend_operators.h"源代码:static inline const char * zend_memnstr(const char *haystack, const char *needle, int needle_len, char *end){ const char *p = haystack;//目标字符串首指针 const char n...

2018-07-11 08:48:33 233

原创 简单的makefile文件

ZEND=../../ZendMAIN=../../mainCUR=./SRC=$(CUR)fpm_main.cSRC_OBJECT=$(patsubst %.c,%.o,$(SRC) )php-fpm:  $(SRC_OBJECT) gcc $^   -o $@ -I$(ZEND) -I$(MAIN) -I$(CUR) rm -rf $(MAIN)/*.o rm -rf $(ZEND)/*.o ...

2018-07-10 08:52:41 188

原创 php扩展开发之面向对象(创建一个类)

1, zend_class_entry 是php内核中一个类的原型,如果我们想创建一个类,只要将它注册到minit中去即可2,类都有方法,方法要注册到 zend_function_entry这个结构中去ZEND_METHOD(myclass, __construct){ php_printf("初始化完成");}ZEND_METHOD(myclass, public_func

2018-01-03 10:24:41 923

原创 php扩展:输出无限变量并结束程序

ZEND_FUNCTION(dd) { int i, argc = ZEND_NUM_ARGS(); zval ***args; args = (zval ***)safe_emalloc(argc, sizeof(zval **), 0); if (ZEND_NUM_ARGS() == 0 || zend_get_parameters_array_ex(argc

2018-01-01 14:42:04 263

原创 php扩展开发:编写一个传递引用参数的函数

config.m4 ---------- 略PHP_FUNCTION(byref_calltime){ zval *a; if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &a) == FAILURE){//将接收的第一个参数直接赋给a RETURN_NULL(); } if(!a

2018-01-01 13:59:30 810

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除