- 博客(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
154
原创 使用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
433
原创 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
193
原创 go语言函数
由于go语言是强类型语言,定义函数时需要指定参数类型,返回值类型,以下是定义函数的语法格式func 函数名(参数列表)(返回值列表){ 函数体}以下是定义函数的实例func plus(a, b) int{ return a + b}更多内容请查看 go语言函数...
2021-02-05 17:02:16
109
原创 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
501
原创 Docker完整教程
Docker 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器。Windows 版 Docker 需要运行在一个安装了 64 位 Windows 10 操作系统的计算机上,通过启动一个独立的引擎来提供 Docker 环境。需要确认在 Windows 10 操作系统中,Hyper-V 和 容器 特性已安装并且开启, 然后就可以安装 Windows 版 Doc...
2020-02-20 11:54:04
1043
原创 算法笔记
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
253
原创 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
398
原创 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
608
原创 PHP扩展开发完整教程(上)
第一章 PHP的生命周期php的运行方式有两种:以模块的方式加载到web-server里去,与web-server一块解析被请求的php脚本以fastcgi模式运行php的时候,一般需要手动启动php服务cgi是指通用网关接口,分别为每一个请求创建一个进程,fastcgi是使用持续的进程来处理请求php有多种sapi,一般最常用的是cli模式php程序的启动可以看作有两个...
2019-12-15 12:31:44
768
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
295
原创 [算法]给出一个数组,算出出现在一个固定大小的滑动窗口中的最大值的结果集
<?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
239
原创 [算法]在二叉树上查找任意两个节点的公共祖先
#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
610
原创 [算法]如何判断一棵二叉树是二叉搜索树
方法一:中序遍历#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
344
原创 [算法]堆排序
#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
142
原创 [算法面试]如何实现一个数组每个元素依次向右移动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
344
原创 Nginx红黑树分析
红黑树的五个特性如下:红黑树是一棵平衡二叉树 每个节点非红即黑 根节点是黑色 红节点的子节点必为黑色 任一节点到其各个叶子节点所经过的黑色节点是相等的nginx中的红黑树数据结构如下:struct ngx_rbtree_s{ ngx_rbtree_node_t *root;//根节点指针 ngx_rbtree_node_t *sentinel;//叶子节点 ...
2019-10-28 09:43:04
428
原创 RabbitMQ实战-笔记
第二章 理解消息通信2.1消费者与生产者的概念 信道是建立在tcp上的虚拟连接,可以减少tcp连接的开销2.2 amqp消息路由必须有三部分: 交换器,队列和绑定, 生产者把消息发布到交换器上,消息最终到达队列,绑定决定了消息如何从路由器路由到特定队列.2.2.1通过amqp的consume命令可以将信道设置为接收模式,直到取消对队列的订阅为止.消费者在消费了最近接收的那条消息后就可...
2019-10-26 11:11:43
490
原创 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
151
原创 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
653
原创 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
160
原创 redis源码分析[05]-字典结构及其算法-dict.c
redis的字典是由hash表实现的,一个字典有两个hash表,一个正式使用,另一个作扩容临时使用,一个hash表有多个节点,每个节点保存一个键值对。以下是字典相关的数据结构://节点结构,自带一个指向下一个节点的指针,用来防重typedef struct dictEntry { void *key; union { void *val; ...
2019-08-26 11:52:22
205
原创 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
261
原创 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
224
原创 redis源码分析[02]-事件处理-ae.c
1.redis所有事件都被保存在一个aeEventLoop的结构中,一类是文件事件,另一类是时间事件/* 文件事件 */typedef struct aeFileEvent { int mask; /* 事件的状态,读事件,写事件 */ aeFileProc *rfileProc;//读事件发生时要执行的读操作 aeFileProc *wfileProc;//写...
2019-08-22 17:06:57
199
原创 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
154
原创 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
144
原创 python学习笔记【04】
装饰器先定义一个函数,传入一个函数,返回一个函数,然后在需要装饰的函数声明前加上@装饰器名即可 装饰器可以是一层,也可以是多层面向对象 class abc(object): #继承object __name = 10 #私有属性 name = 1111 def __init__(self, name): object.__init__(s...
2019-04-13 23:38:28
128
原创 python学习笔记【03】
模块目录ddd下只要存在 __init__.py则这目录是一个模块,对于模块下的一个文件xxx.py ,在别的文件中可以用 from ddd import xxx导入 __name__假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是__main__ ,否则就是模块的真名 pass是空语句就是个占位语句 def aaa(): 定义一个方法 __doc...
2019-04-12 17:35:57
115
原创 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
342
原创 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
125
原创 SEO实战密码阅读笔记
第2章吸引蜘蛛 权重高的网站 页面更新快 导入链接 与首页点击距离,离首页点击距离越近,页面权重越高,被爬行的机会越大 站长可通过搜索引擎网页提交表格来提交网址 遇到权重很低的网站上大量转载内容时,很可能不再继续爬行 预处理的过程 提取文字部分 中文分词(基于词典或统计) 去停止词(的,地,得,呵,哈,呀,从而,以,却,the,a,an, to , of)...
2019-03-13 18:07:03
2347
原创 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
217
原创 [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
407
原创 [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
257
原创 简单的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
216
原创 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
960
原创 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
293
原创 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
842
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人