- 博客(153)
- 资源 (11)
- 收藏
- 关注
原创 nginx 核心100讲学习笔记第一部分
nginx 模块组成: nginx 源码安装:不采用yum安装,因为很多第三方模块都以源码安装。 auto: 存放用于编译的C函数库,以及辅助configure脚本判断有哪些系统资源可以供nginx使用。conf:示例配置目录,方便安装后的配置。configure: 环境侦测脚本;环境检查、依赖文件检...
2021-04-06 22:57:19
894
原创 php对接java服务端TCP接口总结
前阵子接触了php对接java服务端TCP接口,这是工作一年以来第一次对接,还是php对接java。使用的是socket。技术点概括:
2021-03-25 12:15:03
551
原创 thinkphp5.1 config类和env类源码剖析
此章节带领读者来一起阅读config类和env类,这两个类是tp5.1加载配置的核心类,看懂了这两个类以后,再结合app类初始化部分,tp5.1的配置加载规则将一目了然。 此博客专门介绍这两个类,后续有专门的博客专门介绍tp5.1配置的加载,不过为了更好理解代码,这里也会插入。 config类代码刨析:(一)主要成员属性以及构造方法 config类是由app容器类加载的,app继承了container类,因此读过容器部分的代码就知道,当config实例化的时候,调用__mak...
2021-03-22 23:17:20
1183
原创 TP5.1源码容器代码详解
开头语:TP5.1容器是整个框架的核心之一,理解容器代码,会对阅读tp5.1代码有很大帮助,如果容器这一关没有学好,下面的代码会越看越懵逼。要看懂容器这块,首先要有4个知识点储备: ArrayAccess, IteratorAggregate, Countable以及反射。这4块地方可以看手册,这里进行简要说明ArrayAccess:提供将对象当成数组一样使用的能力。继承ArrayAccess需要实现其4个方法,下面将结合代码分析。IteratorAggregate:提供像循环数组一样循环.
2021-03-17 23:32:53
1067
原创 thinkphp5.1和thinkphp6容器的缺陷
容器实现类的实例自动绑定依靠了反射,但是5.1和6的代码,我认为还是有缺陷。话不多说直接上代码,以下是我单独做测试,将容器源码单独弄出来删除某些分支后的代码,保留了容器最基本的功能: class Container{ private static $instance; //容器实例 public $instances = []; //注册池 //单例模式,以静态的方式调用对象以及其方法 public static function getInst
2021-03-15 13:14:59
699
2
原创 thinkphp 5.1 自动加载总结
主要的执行工作的属性和函数参考上图带说明的部分针对自动加载可以简要分成4个场景:1.加载vendor下面的topthink组件库2.加载自身核心类库3.加载字典类库,这种类库大全保存了所使用到的全部类库,这样加载的时候不用再寻找映射的文件提升性能。4.加载项目根目录的类库,例如extend目录下的类库,你也可以自行再创建自定义目录存放自己的库PS:autoload中别名属性的使用场景是在自身类库加载完成后使用的,这样自动加载不会对别名属性进行加载,节省性能,还有一个好处就是...
2021-03-13 20:16:04
399
原创 ant 软件相关博文
ant 相关配置的博文 :https://www.cnblogs.com/crft/articles/5132042.html
2021-01-25 15:39:07
116
原创 phpunit 无法mock静态方法的解决方案
参考:http://miljar.github.io/blog/2014/01/29/phpunit-testing-static-calls/采用Di设计,将静态方法包裹以后,mock掉封装的容器即可。或者采用mockery.但是大量使用静态方法,其实是设计上的偷懒,说严重点写代码水平不够。好好看看框架源码,这才是设计王道。...
2021-01-22 15:07:40
440
原创 phpunit 生命周期图
有了这个生命周期图,可以方便我们对phpunit进行编码操作。这里阐述一个概念,就是phpunit 中的 一个概念,即setUp、tearDown、setUpBeforeClass 、tearDownAfterClasssetUp 是每个测试实例运行时都会执行一次,用于对测试方法依赖的数据、数据库等资源的建立,也就是说当你有个叫 test_actionIndex 的方法被phpunit运行时,这个setUp就会执行,多少个测试方法就执行多少次,这样能保证每个测试方法运行时的资源总是新的。te..
2020-12-03 17:40:41
221
原创 yii2.0 批量更新的封装(觉得解决了问题不妨点个赞关注下)
/** * note: 原生sql批量更新封装 * @param $primaryKeyField 主键字段名 * @param $data 更新的数据,二维数组 * @param string $updateFieldValue 更新的字段,一维数组 * @param string $table 表名 * @return mixed *.
2020-10-10 00:52:07
235
原创 TP框架学习笔记(第一章)
框架基本思想是相通的,会一门就可以轻松另一门,精通一门即可。学习框架的好处:写优雅的代码,深入理解php。还需要总结一个学习框架源码方法论,不只是学习框架,还要举一反三,学习其它组件比如nginx源码或者别的源码。要掌握如何学习源码的方法论。学习框架需要一些基础概念的学习,设计模式,容器,Facede ,依赖注入,AOP。tp5.1安装命令:composer create-project topthink/think (安装的目录)tp5.1 (指定的版本号)v5.1.3...
2020-10-06 18:07:27
446
原创 curl 调试工具 curl_getinfo
curl 正常情况下文件是能够传输成功的,但是也有情况传输不成功,比如nginx的大小设置问题,但是curl 不会报错,只会返回一个false,这时候会显得莫名其妙。其实正常调试只要根据http状态就知道错误原因,但curl是屏蔽了,必须要通过这个工具curl_getinfo,来查看传输的状态。具体查看php 官方手册即可。...
2020-09-10 11:25:32
456
原创 mysql 学习笔记(一) mysql架构总览与存储引擎
mysql演变:3.0架构:mysql 架构图:可以更改慢查询标准,set long_query_time = xxx 这样,执行时间超过该值的sql语句都会记录到慢查询日志。重点:日志、数据、配置文件,需要重点关注。...
2020-08-30 15:03:30
149
原创 队列、多进/线程、共享内存、文件锁 使用原理和场景
队列:使用队列是充分利用它异步的特性,即业务代码中有可以延迟响应的模块,当前代码不需要立即使用这个模块得到的结果,迟一些也没关系,代码还要继续执行主要的事情并返回给用户。像邮件、订单等,这些场景,使用队列,延迟响应,使得系统性能提高(比如:不用在大量邮件发送代码上阻塞),同时又不用像web系统一样要及时响应,用户延迟收到消息是可以接受的。而实质上,邮件发送一般还结合多进程/线程来做。因为仅靠异步还是不够的,处理大量邮件的业务代码如果也只是单一作业,无疑还是很慢,所以就要多个劳动力一起发,每个人发
2020-08-24 01:00:39
299
原创 mysql 学习 之 分表分库
前瞻:为保证服务通畅不会时常发生崩溃,原来的单机升级为主从结构,保证高可用(其实高可用往往和高并发支撑紧密联系)。而用户量级进一步提升,会使得主库写入性能急剧消耗,这时也可以考虑通过加主库机器和从库机器缓解,但分库分表是比较好的方案,因为主库多的话,数据一致性是一个重要难题。因此升级为分库分表,这样就没有数据一致性问题,每个数据库实例只维护自己存储的数据即可。垂直拆分:、垂直拆分的特点:拆分后,各个库表都有原来完整的数据,只不过原来的数据由一份被垂直切割成两份或以上的数据,并且这
2020-08-22 21:09:03
290
原创 php yaf 命令行
在yaf中用到命令行大多是为了跑Crontab或者Daemon。 其实yaf doc已经很的很明白了。这篇只是为大家详解一下。 首先,为了更好的与web区分(配置文件,argc、argv判断等等).重新创建一个入口文件是比较好的做法。 $app = new \Yaf\Application(APP_PATH . "/conf/application.ini"); $app->getDispatcher()->dispatch(new \Yaf\Request\Simple.
2020-08-10 18:06:58
532
原创 phpstudy 版本bug 2020.05.11
这次安装的phpstudy有点bug,如果在这段时间安装这个软件的小伙伴可能会发现,php命令可能会运行不起来,这是因为php.ini文件中配置出了个小错误,opcache拓展添加错误,找到这项zend_extension=opcache,改成zend_extension=php_opcache.dll即可。...
2020-05-11 13:17:25
272
原创 go入门(二)
go编程语法(关键字):1.const 声明常量,类比C++,php2.var 定义全局变量,不能定义函数变量,和js相反3.type , 声明变量的数据类型,接口接口,结构体声明(这点类比C语言)4.func ,定义一个函数。如 func test(){}别名 类比php 的 as关键字const,type , var 也可以进行一组声明,非常方便的写法: ...
2020-03-06 02:07:59
272
3
原创 二叉树的创建以及中序遍历方法
#include <stdio.h>#include <malloc.h>typedef struct pNode{ int data; struct pNode *lchild; struct pNode *rchild;}pNode,*treeNode;//二叉链表,以线性链表表示二叉树 void init_BiTree(treeNode node...
2020-01-02 00:43:30
584
原创 mysql timestamp报错问题
timestamp 默认值这样设置:然后mysql.ini配置加上这一句:sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,即可。createtime可以设置成:CURRENT_TIMESTAMP
2019-11-11 20:03:33
1561
原创 每天20分钟探索之docker入门(二)
Docker三大核心概念:1. Docker 镜像 Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板 例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或 用户需要的其他软件) 可以把它称为一个 Apache 镜像 镜像是创建 Docker 容器的基础 通过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来创建和更新现有的...
2019-10-17 10:50:48
160
原创 每天20分钟探索之docker入门(一)
1.什么是docker?Docker 是基于 Go 语言实现的开源容器项目 它诞生于 2013 年年初,最初发起者是 dotCloud 公司 Docker 自开源后受到业界广泛的关注和参与,目前已有 80 多个相关开源组 件项目(包括 Containerd Moby Swarm 等),逐渐形成了围 Docker 容器的完整的生态体系。Docker 项目已加 Linux 基金会,并遵循 Ap...
2019-10-16 13:21:19
194
原创 树双亲表示法,孩子表示代码实现
//双亲表示法#include <stdio.h>#include <malloc.h>#define MAX 12//巧妙使用顺序和链式存储可以实现树的存储结构 //双亲表示法是使用顺序存储来实现的 typedef struct pNode{ char data; int parent; //存放双亲在数组中的下标 } pNode;//使用顺序...
2019-10-02 12:15:33
1048
1
原创 nginx 入门学习
nginx 高性能,可靠,开源的http中间件,代理服务。 Nginx高性能的原因:底层采用IO多路复用技术,poll(系统调用select 不够高效)。...
2019-08-08 16:38:02
418
原创 linux 脚本的学习
vim的配置文件可以方便以后的编辑:在家目录下手动建立并配置隐藏文件.vimrc,按照下图写入即可,不要直接修改/etc/vimrc,这种系统配置还是不要碰脚本的错误:脚本中,如果是写了不存在的命令,那么该行脚本报错(找不到),但后续的语句继续执行,如果写了语法错误,那么后面的脚本将都不执行。所以要进行排错: ...
2019-08-02 18:06:35
162
原创 linux 防火墙与端口学习(一)(私房菜服务器篇)
TCP/IP数据包进入主机的流程: (协议层拆解肯定就不细说了,这个在计算机网络就有,现在学的是操作系统) linux有两层防火墙: 1. 封包过滤防火墙:IP Filtering或Net Filter要进入Linux本机的封包都会先通过Linux核心的预设防火墙,就是称为netfilter的咚咚...
2019-07-30 16:29:01
577
原创 linux httpd mysql php 配置php后端服务
现在要进军linux php服务端,并且我准备抄一个shopxo的开源商城系统,那么linux底下的服务就要先配起来,没有开发环境啥都白搭。 1.首先我用我的VM虚拟机装了Centos 7 ,Centos 7 一般都会带yum,rpm工具的。 2.然后咱们聊聊rpm和yum源,这两个东西。 ...
2019-07-28 21:11:02
159
转载 (转)一篇 repodate的东西,对这个东西有问题的慢慢体会就可以明白
YUM介绍YUM主要用于自动升级、安装\移除rpm软件包,它能自动查找并解决rpm包之间的依赖关系,要成功的使用YUM工具更新系统和软件,需要有一个包含各种rpm软件包的repository(软件仓库),提供软件仓库的服务器习惯上成为“源”服务器。网络上有大量的源服务器,但是,由于受到网络连接速度、带宽的限制,导致软件安装耗时过长甚至失败。特别是当有大量服务器大量软件包需要升级时,更新的缓慢程...
2019-07-27 23:20:14
1333
原创 linux 操作系统实验(六)
掌握进程间通信之信号的用法 掌握进程间通信之共享内存的使用方法 掌握进程间通信之消息队列使用。信号实验;参考下以关于信号注册和信号捕捉的函数代码/*signal.c*/#include <stdio.h>#include <unistd.h>#include<signal.h>void f(int sig){printf("catc...
2019-07-16 15:07:04
1773
原创 linux 操作系统博客推荐
https://www.cnblogs.com/f-ck-need-u/p/7058920.htmlhttps://www.cnblogs.com/sztom/p/10660459.html#218
2019-07-15 21:19:18
195
转载 (转) select 以及 fd_set等函数的关系
select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型: #include <sys/time.h> #include <unistd.h> int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_...
2019-07-08 20:50:07
170
原创 linux 操作系统实验(五)
理解进程的概念 掌握进程复制函数fork的用法 掌握替换进程映像exec函数族 掌握进程间通信的管道的使用。编写程序5_1.c通过无名管道实现父子进程间的通信,父进程通过键盘获取数据,写入管道,子进程通过管道读出数据,并打印输出到屏幕。2.无名管道实验5_2.c:用命令行敲入命令:farsight@ubuntu-desktop:~$ ls -l | wc ...
2019-06-23 20:11:46
3121
原创 linux 系统编程实验(四)
实验目的:理解进程的概念 掌握进程复制函数fork的用法 掌握替换进程映像exec函数族 掌握守护进程的创建步骤和使用。1.用进程相关API 函数编程一个程序,使之产生一个进程扇:父进程产生一系列子进程,每个子进程打印自己的PID 然后退出。要求父进程最后打印PID。这个实验让我深刻了解操作系统创建进程的模样,操作系统创建进程是以树的形式创建的 。以某个存在的进程作为树根开始,一级一...
2019-06-20 21:55:51
1690
原创 linux 系统 IO编程 实验(三)
内容概要 1、掌握文件或目录属性信息的函数stat()函数的使用 2、掌握目录操作的函数opendir 函数和readdir函数的使用 ...
2019-06-11 21:13:50
1638
原创 linux 底层标准IO(二)
前面说标准IO和IO系统接口是稍微有点区别,就是标准IO带有用户缓存。这也是标准IO效率高的原因。实验内容用标准IO,编写程序2_1.c,以读写方式打开文件file_3,如果该文件不存在,则创建。如果该文件已经存在,则长度截短为0。 编写程序2_2.c,实现将文件1.txt中的ip地址“192.168.1.100”解析出来,并打印到屏幕上。尝试用行读写函数,fputs()和fgets()...
2019-06-02 10:51:58
415
原创 linux 底层操作之 IO操作(一)
内容概要掌握open,read,write,close,lseek,dup,dup2等底层IO函数的使用实验内容编写程序2_1.c,在一个程序中连续两次打开同一个文件,并输出文件描述符,察看输出结果是否相同. 编写程序2_2.c,实现功能,打开一个文件,打印出此文件的文件描述符,让程序不退出,开另一个终端,再运行它,看两个终端的输出结构是否相同。思考原因. 用系统IO创建一文件,接...
2019-06-01 00:23:04
1735
转载 标准C 和系统调用C的IO操作 (转)
标准c库函数与Linux下系统函数库 区别 (即带不带缓冲区的学习)我们都知道,C语言在UNIX/Linux系统下有一套系统调用(系统函数),比如文件操作open()、close()、write()、read()等,而标准C语言的库函数中也有一套对文件的操作函数fopen()、fclose()、fwrite()、fread()等.。那么同样是对文件的操作函数,标C与UC有什么区别呢?是标C效率...
2019-05-30 19:15:06
234
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人