双引号解释变量,单引号不解释变量
双引号里插入单引号,其中单引号里如果有变量的话,变量解释
$file = 'x.y.z.png'; echo substr(strrchr($file, '.'), 1); //1 echo substr($file, strrpos($file, '.')+1); //2 $arr=explode('.', $file); //3 echo $arr[count($arr)-1]; echo pathinfo($file)['extension']; //4 echo pathinfo($file, PATHINFO_EXTENSION);
echo date("Y-m-d",strtotime("-1 day"));
substr(string,start,length) //按长度截取字符串,start为stirng数组下标,得到的字符串包含start下标的字符,start为负数时表示从后往前截取 mb_substr(string,start,length,encoding) //与substr相似,分割中文字符时用 strrev(string) //字符串反转 strpos(string,str) //返回str在string中第一次出现的位置,如果没有则返回false strrchr(string,str) //返回str在string中最后一次出现的位置,如果没有则返回false substr_count(string,str) ///返回str在string中出现的次数
array_unique($arr) //元素去重,返回过滤后的数组 array_merge($arr1,$arr2) //合并返回合并的数组 array_push($arr,$value1,$value2...)或$array[]=$value //追加元素返回新数组的元素个数 array_reverse($arr) //数组反转,返回翻转后的数组 array_shift($arr) //删除数组中的第一个元素(red),返回被删除元素的值 array_pop($arr) //删除数组中的最后一个元素返回数组的最后一个值。如果数组是空的,或者非数组,将返回 NULL
$_GET ----->get传送方式 $_POST ----->post传送方式 $_REQUEST ----->可以接收到get和post两种方式的值 $_GLOBALS ----->所有的变量都放在里面 $_FILES ----->上传文件使用 $_SERVER ----->系统环境变量 $_SESSION ----->会话控制的时候会用到 $_COOKIE ----->会话控制的时候会用到
__get __set __call __construct __destruct __invoke __isset __unset
Get是不安全的,因为在传输过程,数据被放在请求的URL中,对用户是可见的;
Get传送的数据量较小,这主要是因为受URL长度限制;
echo、print是php语句,var_dump和print_r是函数
echo 输出一个或多个字符串,中间以逗号隔开,没有返回值是语言结构而不是真正的函数,因此不能作为表达式的一部分使用
print有返回值,只能打印出简单类型变量的值;
print_r 可以打印出复杂类型变量的值(如数组、对象)以列表的形式显示,并以array、object开头;
var_dump() 判断一个变量的类型和长度,并输出变量的数值;
$_SERVER[“REMOTE_ADDR”];或者getenv(‘REMOTE_ADDR’)
require是无条件包含,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行;
include有返回值,而require没有,如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去;
require_once表示了只包含一次,避免了重复包含;
变量默认总是传值赋值,当一个变量的赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量
首先要了解几个概念
nginx与php-fpm的结合,完整的流程:
www.example.com | | Nginx | | 路由到www.example.com/index.php | | 加载nginx的fast-cgi模块 | | fast-cgi监听127.0.0.1:9000地址 | | www.example.com/index.php请求到达127.0.0.1:9000 | | php-fpm 监听127.0.0.1:9000 | | php-fpm 接收到请求,启用worker进程处理请求 | | php-fpm 处理完请求,返回给nginx | | nginx将结果通过http返回给浏览器
M方法实例化模型无需用户为每个数据表定义模型类,D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会自动调用M方法去实例化Model基类。同时对于已实例化过的模型,不会重复去实例化
普通模式、PATHINFO、REWRITE和兼容模式
用户URL请求
调用应用入口文件(通常是网站的index.php)
载入框架入口文件(ThinkPHP.php)
记录初始运行时间和内存开销
系统常量判断及定义
载入框架引导类(Think\Think)并执行Think::start方法进行应用初始化
设置错误处理机制和自动加载机制
调用Think\Storage类进行存储初始化(由STORAGE_TYPE常量定义存储类型)
。。。。。
TP的访问规则是:根目录/模块/控制器/方法,那么我们只需要定义一下映射关系“reg”=>“index/user/reg”,此时只需要再浏览器输入“域名/reg”就能访问“index模块/user/控制器/reg方法”这个地址了
Json Web Token,是基于Json的一个公开规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换。它的原理是由服务端根据规范生成一个令牌(token),并且发放给客户端。此时客户端请求服务端的时候就可以携带者令牌,以令牌来证明自己的身份信息。
Swoole是PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写。一般用于即时通讯,分布式服务等
Hyperf Swoft EasySwoole
参考答案:Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
MySQL默认采用的是MyISAMMyISAM不支持事务;
MyISAM不支持事务,而InnoDB支持;
InnoDB支持数据行锁定,MyISAM不支持行锁定,只支持锁定整个表;
InnoDB支持外键,MyISAM不支持;
都是先进先出,如果想优先处理某个任务就不太好处理了,这就需要让队列有优先级的概念;实现方式有以下几种方式:
1)单一列表实现:队列正常的操作是 左进右出(lpush,rpop)为了先处理高优先级任务,在遇到高级别任务时,可以直接插队,直接放入队列头部(rpush)
2)使用两个队列,一个普通队列,一个高级队列,针对任务的级别放入不同的队列
1、存储方式:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis有部份存在硬盘上,这样能保证数据的持久性。
2、数据支持类型:
redis在数据支持上要比memecache多的多。
3、使用底层模型不同:
新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
参考答案:
1.建立索引
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将引擎放弃使用索引而进行全表扫描
3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描
5.in 和 not in 也要慎用,否则会导致全表扫描
6.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间
7.MySQL集群、负载均衡、读写分离
8.尽量使用整型表示字符串
9.不要写一些没有意义的查询,如需要生成一个空表结构:select col1,col2 into #t from t where 1=0
查询条件尽量使用数组方式;
使用预处理机制;
数据字段类型验证;
主从复制:异步方式,主服务器执行更改数据的事务后,会产生 binlog,之后 binlog 会被发送到从服务器变成 relay log,与此同时,主服务器会对应用提交返回。从服务器接收到 relay log 后,会通过一个 applier 的线程对日志里面的内容进行施放,使产生的数据更改写入从服务器,之后产生自己的 binlog,进行提交。
原因:
主从数据不同步是不可避免的,只能尽可能减少这种情况
解决方案:
分布式事务(XA)在多系统协作,比如跨行转账、下单扣库存等特别是微服务架构方面经常用到。分布式事务需要保证的就是一致性问题,例如在大型电商系统中,下单接口通常会扣减库存、减去优惠、生成订单 id, 而订单服务与库存、优惠、订单 id 都是不同的服务,下单接口的成功与否,不仅取决于本地的 db 操作,而且依赖第三方系统的结果,这时候分布式事务就保证这些操作要么全部成功,要么全部失败。
解决方案:
ps -ef | grep 进程名
获取pid,然后用pmap -x pid
https://www.cnblogs.com/993089249a/p/11613099.html
https://www.cnblogs.com/993089249a/p/11613404.html
https://www.cnblogs.com/993089249a/p/11613195.html
https://www.cnblogs.com/993089249a/p/11613149.html
https://www.cnblogs.com/993089249a/p/11613044.html
https://www.cnblogs.com/993089249a/p/11612844.html
https://www.cnblogs.com/993089249a/p/11612726.html
https://www.cnblogs.com/993089249a/p/11608039.html