自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (10)
  • 收藏
  • 关注

原创 Yii2权限系统

模块下面增加行为类'class' =>\app\common\AuthToken::class, extend ActionFilterbeforeAction里面添加 action的类是yii\base\InlineAction$id = $action->getUniqueId();获取请求路由allowActions里面可以加* yii\web\user can函数 yii migrate --migrationPath=@yii/rbac/migration.

2021-03-13 22:00:22 161 2

原创 5 mysql常见性能优化方案

5.1 mysq服务器运行状态值show status; 查看关键参数Queries 查询次数Threads_connected 线程连接数Threads_running 线程运行数5.2 获取需要优化的 SQL 语句5.2.1 查看运行的线程show processlist;±—±-----±----------±-----±--------±-----±------±-----------------+| Id | User | Host | db | Command |

2021-03-08 17:03:14 224 2

原创 4 mysql日志机制

通过日志可以知道mysql内部发生了什么 异常监控、性能优化、数据恢复、主从同步mysql日志通常包括:二进制日志、通用查询日志、慢查询日志、错误日志、事务日志4.1 二进制日志复制,slave端会利用这个二进制日志的信息在本地重做,实现主从同步。恢复,因为二进制日志包含了备份以后的所有更新,因此可以用于最大限度地恢复数据库。show variables like ‘log_bin’;//查看二进制日志是否打开show binary logs;mysqlbinlog /var/lib/mysq

2021-03-08 12:41:00 154

原创 3 mysql锁机制

3.1 锁的定义锁是计算机协调多个进程或线程并发访问某一资源的机制表级锁、页面锁、行级锁;开销、加锁速度、死锁、粒度、并发性能衡量锁的性能 。除了表级锁都会出现死锁情况。表级锁 锁定粒度最大 发生锁冲突的概率最高3.2 常见锁InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。3.2.1 获取InnoDB行锁争用情况mysql> show status like ‘InnoDB_row_lock%’;±-----------

2021-03-04 16:28:47 95 1

原创 2 mysql索引机制

2.1 索引定义索引的出现就是为了加快数据库的查询效率,就好比书的目录一样。2.2 InnoDB索引模型2.2.1 索引使用的数据结构是B+树1 分支是多叉的2 每个节点可以有多个key3 非叶子结点只存key4 叶子节点指针相连高度一般为1~3层在计算机中,磁盘存储数据最小单元是扇区,一个扇区的大小是512字节。文件系统中,最小单位是块,一个块大小就是4k;InnoDB存储引擎最小储存单元是页,一页大小就是16k如果一行记录的数据大小为1k,那么单个叶子节点可以存的记录数 =16k

2021-03-03 20:06:37 101 1

原创 1 mysql事务机制

1.1 事务定义一次执行多个sql,且其中有写操作,会对原始数据进行修改。 1.2 事务特性 1.2.1 原子性(A)所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复到事务开始前的状态,就像这个事务从来没有执行过一样。 1.2.2 一致性(C)在事务开始和完成时,数据必须保持一致。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性 1.2.3 隔离性(I)并发访问数据库时,事务与事务之间不会被互相干扰。..

2021-03-02 16:32:03 55

原创 1 yii2 validate验证参数工作步骤:

通常为了节省服务器资源,需要在客户端提交参数时做相应的验证工作。比如必填参数、参数范围等。1 设置场景:类继承自model来设置const常量:const SCENARIO_ADD = 'add';2 设置场景对应的验证规则:public function rules(){ ['store_no', 'check_store_no', 'on' => [ self::SCENARIO_ADD, Stor.

2020-08-04 14:37:33 811

转载 软件开发1-IOC控制反转

设计准则中的开闭原则,即无需修改任何一行程序代码,将功能加入至原先的应用程序中,也可以在不修改任何程序的情况下移除。某地区有各种不同的商店,每家商店都卖四种水果:苹果十元一个、香蕉二十元一个、橘子三十元一个、西瓜四十元一个,顾客可以在任意商店进行购买,每家商店需要可以随时向税务局提供总销售额。 class Shop { // 商店的名字 private $name; // 商店的总销售额 private $turnov

2020-06-10 14:09:44 114

原创 PHP1-php垃圾回收机制

为了避免内存泄露,需要探究php垃圾回收机制。一 写时复制function cow(){ $a='仙士可'.time(); $b=$a; $c=$a;//这个时候内存占用相同,$b,$c都将指向$a的内存,无需额外占用 $b='仙士可1号';//这个时候$b的数据已经改变了,无法再引用$a的内存,所以需要额外给$b开拓内存空间 $a='仙士可2号';//$a的数据发生了变化,同样的,$c也无法引用$a了,需要给$a额外开拓内存空间 xde

2020-06-09 22:03:08 125

原创 进程1-进程相关知识点

一 概念:进程是运行中的程序,是操作系统分配资源的最基本的单位。二 进程标识符pid: 类型pid_t 命令ps 进程标识符是顺序依次向下使用 getpid(); getppid();三 进程的产生:fork() fork意味着拷贝,一模一样的命令 cow。未决信号与文件锁不继承,返回值不相同。资源利用量归0 init进程:1号进程是所有进程的祖先进程四 进程的消亡与释放资源 wait(); waitpid();...

2020-06-07 21:22:56 184

原创 线程3-线程池思想

通常多线程编程任务分发包括:分块法、交叉分配法、池类分配法。池类分配法能够最有效地避免计算任务分配不均匀的情况。线程池思想包括:1 main线程负责分发任务2 全局变量num:num>0时有待计算任务,num=0时无算任务需要上游分发,num=-1时无计算任务所有线程退出3 互斥量:获取资源前一定先上锁,临界区内的跳转语句,跳转到临界区外一定要及时释放锁资源筛质数代码如下:#include<stdio.h>#include<stdlib.h>#inc

2020-06-07 11:13:08 152

原创 线程2-线程同步

概念线程是可以共享资源变量的,当多个线程同时写一个资源变量时就会出现线程同步问题造成读写不一致。通常采用锁机制来实现线程同步。互斥量:锁机制,确保同一时刻只有一个线程访问共享资源。常用API包括:int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);int pthread_mutex_destroy(pthread_mutex_t *mutex);int pthread_mutex

2020-06-06 22:24:19 85

原创 线程1-线程基本操作

一 基本概念:线程是进程执行的最基本单位,是一个正在运行的函数,通常包括:main线程与兄弟线程。线程间通信共享进程虚拟内存空间。常用的线程标识:pthread_t常用api:比较线程pid:int pthread_equal(pthread_t t1, pthread_t t2);返回线程标识:pthread_t pthread_self(void);二 线程常见状态与操作:1 线程创建int pthread_create(pthread_t *thread

2020-06-06 10:37:39 191

原创 kafka1 -kafka简单介绍

Kafka是一种分布式消息队列,为何要使用消息队列?是基于异步通信的诉求,为了服务之间相互解耦,同时避免在高并发时完成流量削峰的作用。一 基础概念:producer:消息生产者、consumer:消息消费者、topic:一个队列、consumer group:消费者组broker:一台kafka机器,一个broker可以容纳多个topicpartition:每个topic包含多个partition二 环境搭建:1 首先需要java环境,下载安装jdk2 下载kafka安装包,

2020-06-03 21:39:41 130

原创 算法2-生成窗口最大值数组

* 数组arr与整数w,w从左往右划,求每次窗口内的最大值,并返回结果数组* 思路:* 1 一个双端队列辅助,存储数组下标* 2 右边界滑动,弹出所有小于、等于新入元素的数* 3 左边界滑动,对头过期* 4 队列首元素一定是最大元素<?phpfunction getWindowMaxArray($array, $w){ $array_size = count($array); // 边界条件 if ($array_size < $w || !$arr.

2020-05-30 20:35:00 106

原创 算法1-实现一个特殊栈,在实现栈的基本功能基础上,O(1)时间复杂度获取最小元素。

思路:1 两个栈 data、min2 往data中入数时同时往min中入数3 当新入元素小于、等于栈顶元素时,元素既入data又入min;当新入元素大于栈顶时新元素入data不入min4 弹栈时当data栈顶与min栈顶相同时都弹;当data栈顶大于min栈顶时只弹data代码<?phpclass Stack{ private $data; private $min; public function __construct() { .

2020-05-30 10:02:57 199

原创 文件系统之标准IO与系统调用IO

IO操作是我们程序运行的基础,数据在程序运行结束时需要保存就必须使用IO操作。IO主要包括两类:标准IO与系统IO一 标准IO标准IO是为了避免跨平台移植引起的不必要异常,指定的一系列标准函数,无论linux、windows都可以使用。标准IO常用API包括:fopen、fwrite、fread、fclose、prinf、fprintf、fget、fput等均是以f开头。其中:fopen的moder/r+ 是不创建文件,前者只读,后者可读写、w/w+ 能创建文件,并且把文

2020-05-29 19:23:00 428

原创 C语言容易晕的问题

C语言三座大山:数组、指针、函数。单个概念并不复杂,但是概念互相套在一起就容易迷糊。基于此,整理如下:1 数组:一批内存位置相邻的变量。指针与数组:因为指针可以用来做运算,所以通常可以用指针来指向数组。int a[3] = {1,2,3};int *p = a;如上:p是变量, a是数组常量, 数组名本身就是个指针,但a是常量。2 指针数组与数组指针:指针数组:见名知意,是一个数组,其每个元素是指针。例:int *p[4] 其中p是个长度为4的数组,每个元素类型是整型指

2020-05-28 21:21:37 416

原创 HTTP协议常见知识点

1 Http与Https的区别:http与https都是应用层协议,通常http默认端口是80,https默认端口是443。https有加密证书。2 URI和URL的区别:URL是协议的统一资源定位符,通常的格式是:协议+主机ip+目录文件名URI统一资源标识符,用来唯一的标识一个资源。访问资源的命名机制,存放资源的主机名,资源自身的名称,由路径表示,着重强调于资源。3 http通用方法包括:GETPOSTPUT 传输文件,保存到对应UTI位置HEAD 只获取首部,不返回主体DEL

2020-05-25 08:37:30 182

原创 php多进程ipc

php多进程ipc由于php没有多线程机制,在一些cpu密集型任务时,只能起多进程操作,于是要考虑进程间通信等场景。php已有方式包括:管道、消息队列、共享内存、socket,如下重点探究文件与共享内存<?phpconst SHM_VAR = 1;const M = 20000;const N = 100000;const NUM = 10;/** * 文件 */function pipe(){ // 申请锁资源 $sem_key = ftok( __F.

2020-05-19 20:31:28 218

原创 Php swoole协程揭秘

首先需要明白并发与并行的区别,并发是只多个任务在一段时间内交替执行,并行是多个任务可以在同一时刻同时执行。同一时刻可以执行的任务数取决于cpu的核数。sysctl -n machdep.cpu.core_count。接着讨论一个问题:cpu密集型与IO密集型Cpu密集型任务特点是要进行大量的计算,IO密集型网络、磁盘IO的任务都是IO密集型任务,任务的大部分时间是在等待io操作完成。CPU密集型计算20000到100000之间的质数单进程const M = 20000;const N.

2020-05-16 22:40:44 200

原创 Yii2模型-Model

Model是 MVC模式中的一部分, 是代表业务数据、规则和逻辑的对象。模型主要包括以下关键内容:属性:代表可像普通类属性或数组 一样被访问的业务数据;属性标签:指定属性显示出来的标签;场景:根据实际的业务请求设置验证规则,一个action下可以有一个场景,根据所在场景来进行相应的规则验证。接收方式:根据模型load的方式决定请求参数的请求格式验证v...

2019-11-06 17:59:06 683

原创 Yii2模块简介

Yii2中模块是软件的独立单元,由模型,视图,控制器和其他组件组成。模块必须从属与某个应用主体。1 模块声明通常在web.php文件中生成,声明方式如下:声明一个名为api的模块,同时在目录项下创建module文件,创建api文件,在api下创建controllers文件。在api下创建module.class文件,访问地址:ip:port/api/controller...

2019-11-06 16:05:25 207

原创 设计模式小结

设计模式主要包括23种,但是大体上可以划分为3大类即创建型、结构型、行为型。一 创建型,主要是在成产对象的阶段使用,在此重点学习工厂方法和单例两类。1 工厂方法:定义抽象工厂类,将类的实例化放到了子类中,同时在抽象工厂类中定义抽象操作方法,在抽象工厂类的子类中做实际方法的实现。yii2中的 interface ActiveRecordInterface就使用了该模式。2 单例:在对象操...

2019-11-03 14:40:05 86

原创 Call to a member function ** on null

Call to a member function ** on null,通常是因为** 方法的实体对象为空导致的,一般推荐使用get_class(对象名),来获取** 方法对象所对应的class类来反查对象的初始化情况。...

2019-10-29 20:35:38 4587

原创 Yii2行为

行为是yii\base\Behavior或其子类的实例, 可以无须改变类继承关系即可增强一个已有的组件类功能。所有组件类均可以使用行为。通常注册行为有以下方式:1 在组件类内部定义behaviors()函数,返回Behavior类数组,即可以是组件类对象访问行为内部所有公有属性或函数方法。public function behaviors(){ return [ ...

2019-10-29 00:00:08 106

原创 编译安装lnmp

很多PHP工程师没有做过编译安装的工作,经过一段探究,今天写个小博客。一 源码编译安装PHP1 下载PHP7.0源码包7.0.13tar.gz2 tar -zxvf 源码包3 切换到源码包目录执行:./configure --prefix=/usr/local/php/php-7.0 --with-config-file-path=/usr/local/php/php-7.0...

2019-10-17 00:35:34 166

原创 Linux网络总结之七-IO复用模型之select模型

前面提到的迭代式服务器与并发服务器都不能从根本上解决大量客户端连接通信的问题,因此为了实现海量客户端连接通信,Linux内核引入了I/O复用模型。分别是select、poll、epoll。在前面我们分析了通常的I/O模型中,往往限制网络通信效率的就是消息的通知机制和消息的等待过程。所以内核开发者们根据异步的思想引入了消息通知机制来处理网络读、写、异常事件的请求。一  函数介绍selec

2018-03-10 17:11:33 247

原创 Linux网络总结之六-服务器机制与网络编程

一 迭代服务器在客户端-服务器模式中,通常我们采用迭代式服务器,即一个进程处理一个客户端,又因为send与recv函数都是阻塞的,所以当有新的客户连接进来时,传统的迭代式服务器是无法及时作出响应的。如图: 当端口57267的client连接到服务器上之后,服务器进程阻塞与57266端口的client。缓存区有了4个字节的数据。二 并发服务器因为recv函数是阻塞的,所以在服

2018-03-10 15:30:02 273

原创 Linux网络总结之五-TCP连接中的系列函数

这部分我们研究TCP连接建立与关闭过程中各个API函数的作用与特性。首先我们看TCP过程的图示如下: TCP通信时socket之间的通信,所以首先要在内核空间创建socket描述符,其函数如下 :int socket(int domain, int type, int protocol),其中domain指协议族,type指流服务,protocol指具体的协议。返回值为int型整数,代

2018-03-09 22:03:26 440

原创 Linux网络总结之四-TCP超时重传与拥塞控制

一 超时重传前面我们探讨了TCP连接超时的问题,这是在TCP连接建立之前的可靠性机制,那么TCP是如何在连接建立之后维护可靠性传输的呢?这里我们就要探讨一下超时重传机制。超时重传往往发生在网络异常的情况下,TCP协议为TCP报文制定了一个定时器,它用于在给定的时间内接收到对端传回来的确认报文,加入超过给定时间确认报文段还没有传回到发送端,这时发送端就会重新发送上次发送的TCP数据包,并且延

2018-03-09 16:48:49 2875

原创 Linux网络总结三-TCP的可靠机制

TCP协议是一款基于连接的传输层协议,它最大的特点就是提供面向连接且提供可靠传输。这部分我们重点探究TCP的可靠性传输。一 超时重连机制我们知道在TCP建立连接的过程中,很多时候TCP连接并非是一次就可以建立完成的。有时候服务器由于网络繁忙无法对客户端的请求做出及时响应,那么此时客户端应该如何处理呢?我们进行如下实验:设置两台主机分别为:slave(192.168.188.130)与mas

2018-03-07 20:31:46 373

原创 Linux网络总结之二-TCP协议概述

TCP协议是一款传输层协议,也是网络中最重要的一款协议。这部分我们重点探究网络传输层协议TCP协议的头部。一 TCP固定头部结构 TCP固定头部如图所示:16位源/目的端口号,报文来自哪个端口,要与哪个端口通信。在进行TCP通信时,客服端往往选用系统空闲的端口,而服务器往往选用处于监听状态的端口。32位序号,在一次TCP通信中,一个传输方向上的每个字节的编号。通常系统给一个随机

2018-03-07 10:56:40 214

原创 Linux网络总结之一-应用层协议

通常情况下网络体系结构包括:应用层,传输层,网络层,数据链路层四层结构。应用层传输层网络层数据链路层这部分我们重点学习应用层相关协议,应用层直接和网络应用程序交互,是网络体系中最顶层的结构,由用户空间控制。常用的应用层协议包括:http,dns,https,dhcp。一 超文本传输协议HttpHttp规定了浏览器怎样向服务器请求万维网文档,以及怎样将文档传回给浏览器。通

2018-03-05 08:37:09 644

原创 Linux内存管理系列之五-内存问题实战

前面几部分主要从原理上讲解了Linux内核如何管理内核态内存与用户态内存,这部分我们重点探究内存管理中一些实际工程上的性能问题。1 为何需要内存对齐?内存对齐是一种提供内存访问速度的策略,cpu在访问未对齐的内存需要经过两次内存访问,而经过内存对齐一次就可以。这是根据CPU位数决定的,32位CPU一次的取指能力为4个字节,如果不做内存对齐,很可能一个4字节的变量会处于两个4字节的内存块中,这样就需...

2018-02-27 00:32:50 250

原创 Linux内存管理系列之四-进程地址空间

前面3节重点讲解了在内核如何分配内核空间内存,而进程的用户空间的内存同样受到内核的控制,用户空间的地址内存称为进程地址空间。Linux采用虚拟内存技术使得系统可以同时运行多个内存,而且每一个进程的地址空间都为整个物理内存的大小。这一部分重点讲解内核如何管理进程地址空间。一 地址空间进程地址空间由进程可寻址的虚拟内存组成,内核允许进程使用这种虚拟内存的地址,通常情况下各个进程之间的内存地址相互独立,...

2018-02-27 00:29:32 283

原创 Linux内存管理系列之三-slab缓存机制

在计算机体系结构中,读写速度排序如下:CPU>CPU缓存>物理内存>物理磁盘。因此在处理物理内存时,CPU缓存往往能够起到提高速度的作用。这部分我们重点研究伙伴系统与slab机制。一  CPU三级缓存为了解决CPU与物理内存速度不匹配的问题,计算机系统引入了缓存,它的读写速度介于CPU与物理内存之间。主要利用程序局部性原理,采用预先读与延迟写的策略,让CPU尽可能少地访问物理内存。目前

2018-02-13 11:09:12 1367

原创 Linux内存管理系列之二-物理内存分配机制

内存是计算机的重要组成部分,它是一种物理介质,它的存取速度介于cpu与磁盘之间。它的主要作用是用来交换数据,即将磁盘组的数据通过内存读入cpu,同时将cpu操作后的数据通过内存写入磁盘。在当下的Linux中,内存主要包括:内核空间内存与用户空间内存。这两部分的内存全部由Linux内核管理。我们首先来看内核是如何管理物理内存的。一  页与区的概念1:物理内存分页在linux中,内核通

2018-02-07 12:21:31 1231

原创 accept惊群研究

一:惊群的定义惊群是多进程多线程编程中的一个常见问题,就是当多个进程和线程在同时阻塞等待同一个事件时,如果这个事件发生,会唤醒所有的进程,但最终只可能有一个进程/线程对该事件进行处理,其他进程/线程会在失败后重新休眠,这种性能浪费就是惊群。二:accept惊群在使用多进程处理客户端-服务器连接时,往往会出现惊群现象,即在主进程listen之后调用fork创建多个子进程之后,这些子进程由

2018-02-02 21:10:37 551

转载 oom_killer机制

在操作系统中,往往运行着多个进程,这些进程所占的真实的物理往往也不一样,为了保证大部分进程都能正常执行下去。操作系统往往要自己杀死一些进程来释放出内存资源,以供其他进程使用。这就是oom_killer。Linux oom_killer机制

2018-01-16 13:59:19 239

操作系统精髓与设计原理

最经典的Linux讲解书籍,从进程、文件、内存、网络等四个方面来系统地阐述Linux操作系统,适合于任何读者的入门,深入到提高。

2017-11-19

TCP/IP卷1协议

TCP/IP详解卷1:协议,作为TCP/IP详解三卷中最核心最重要的一卷,是所有进入网络编程殿堂程序员的必备书籍之一。其余的两本是《Unix网络编程》卷1,卷2.

2017-11-17

Head First 设计模式(中文版)

Head First 设计模式(中文版) 非常棒的设计模式书

2017-10-18

java多线程编程

一本Java多线程编程的书

2016-11-04

Java多线程开发技术

2016-11-03

Android源码

200套Android源码适合从入门到提高!

2016-07-23

Jdic文件包

前提供了本机 Web 浏览器(Internet Explorer 或 Mozilla) 支持、系统托盘支持、文件扩展集成、应用程序启动与打印和其他桌面特性。

2016-07-18

开发SSH框架所需全部Jar包

开发SSH框架所需全部Jar包,非常全

2016-07-17

数据库系统概论

这是一本很有用的电子书:数据库系统概论

2016-07-10

空空如也

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

TA关注的人

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