php知识点_php中一些重要的php知识点分享
1. 简述php中的autoload
在PHP中使用类时,我们必须在使用前加载进来,不管是通过 require 的方式还是 include 的方式,但是会有两个问题影响我们做出加载的决定。首先是不知道这个类文件存放在什么地方,另外一个就是不知道什么时候需要用到这个文件。特别是项目文件特别多时,不可能每个文件都在开始的部分写很长一串的require。
Autoload 的加载机制,当通过 new 来实例化一个类时,PHP会通过定义的autoload 函数加载相应的文件,如果这个类文件使用了 extends 或者 implements 需要用到其他的类文件,php会重新运行 autoload 去进行类文件的查找和加载,如果发生了两次对同一类文件的请求,就会报错。
2. 静态变量及有什么优缺点?
静态局部变量的特点: 1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。2.静态局部变量只会初始化一次。3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜.
3. strtr 和 str_replace 有什么区别,两者分别用在什么场景下?
str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)
strtr() 函数转换字符串中特定的字符。
5.6版本 str_replace 比 strtr 效率高10+倍, 7.0版本效率基本相同, 但5.6的 str_replace 竟比 7.0高 3倍
4. 魔术方法
__construct():类的默认构造方法,如果__construct()和与类同名的方法共同出现时,默认调用__construct()而不是同类名方法。
__call():当调用不存在或者不可访问的方法时,会调用__call($name, $arguments)方法。
__toString():当打印对象时会被直接调用。如echo $object;
__clone():当对象被拷贝时直接调用。
__isset():对不存在或者不可访问的属性使用isset()或者empty()时,__isset()会被调用;
__destruct():类的析构函数,当该对象的所有引用都被删除,或者对象被显式销毁时执行。
5. 如下所示,会输出什么结果?foreach ($array as $key => $item)
{ $array[$key + 1] = $item + 2;
echo "$item"; }
print_r($array);
结果示例: $array = [3,6,7,8];
3678 //echo 输出数组内元素的值Array(
[0] => 3 //$key 保持不变
[1] => 5 //每次的$eky + 1,对应的值加2, [2] => 8 [3] => 9 [4] => 10)
laravel
laravel和其他框架对比的优缺点
laravel
优点: 使用人数全球第一,文档齐全,框架结构组织清晰,大量第三方扩展包供引用,适合大型网站协同开发,提供的artisan开发工具开发效率高。composer扩展自动加载,中间件
缺点:稍复杂,上手比一般框架要慢;大量引用第三方包,但某些场景下我们只使用类中的部分方法,代码显得有些冗余
ThinkPHP
优点:是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用开发提供了强有力的支持。简单明了方便快捷,上手快
缺点:缺少面向对象的设计,5的版本基本面向对象,框架社区相关的辅助工具少
Mysql
1. Mysql中,int(10)和int(11)的区别
BIT[M]位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1
TINYINT [(M)] [UNSIGNED] [ZEROFILL] M默认为4。很小的整数。带符号的范围是-128到127。无符号的范围是0到255。
SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6。小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M默认为9。中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。
INT[(M)] [UNSIGNED] [ZEROFILL] M默认为11。普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默认为20。大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。
注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。其实当我们在选择使用int的类型的时候,不论是int(3)还是int(11),它在数据库里面存储的都是4个字节的长度,在使用int(3)的时候如果你输入的是10,会默认给你存储位010,也就是说这个3代表的是默认的一个长度,当你不足3位时,会帮你不全,当你超过3位时,就没有任何的影响。
**int(M) M指示最大显示宽度。最大有效显示宽度是255。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
2.索引左原则:
like,匹配字符串时,不以通配符开头,左侧必须固定,该字段索引才会起作用
复合索引,左侧的字段固定时,在索引匹配时,右侧的索引才有效。因为复合索引关键字排序,按照左边字段进行排序,如果左边字段相同,才依据右边字段。
3.索引创建的优缺点:
优点:
创建索引可以大大提高系统的性能
通过唯一性索引,可以保证数据库表中每一行数据的唯一性
大大加快检索速度
加速表与表之间的连接
使用分组和排序子句进行数据检索时,减少查询中分组和排序的时间
通过使用索引,可以在查询过程中,使用优化隐藏器,提高系统性能
缺点:
创建索引和维护索引要耗费时间,随数据量的增加而增加
索引占用物理空间
对表中的数据进行增删改的时候,索引需动态维护,降低了数据的维护速度
4. 请描述一下mysql主从服务器之间是如何同步数据的,什么样的sql会造成主从无法正确同步?
网络的延迟
由于mysql主从复制是基于binlog的一种异步复制,通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。
主从两台机器的负载不一致
由于mysql主从复制是主数据库上面启动1个io线程,而从上面启动1个sql线程和1个io线程,当中任何一台机器的负载很高,忙不过来,导致其中的任何一个线程出现资源不足,都将出现主从不一致的情况。
max_allowed_packet设置不一致
主数据库上面设置的max_allowed_packet比从数据库大,当一个大的sql语句,能在主数据库上面执行完毕,从数据库上面设置过小,无法执行,导致的主从不一致。
key自增键开始的键值跟自增步长设置不一致引起的主从不一致。
mysql异常宕机情况下,如果未设置sync_binlog=1或者innodb_flush_log_at_trx_commit=1很有可能出现binlog或者relaylog文件出现损坏,导致主从不一致。
mysql本身的bug引起的主从不同步。
版本不一致,特别是高版本是主,低版本为从的情况下,主数据库上面支持的功能,从数据库上面不支持该功能
5.有一个order表,如下,求购买次数最多的两个用户
order_id
user_id
goods
100000 100 苹果
100001 100 苹果
100002 101 橘子
100003 102 苹果
100004 102 香蕉
sql:
SELECT order_id,user_id,COUNT(order_id) AS count FROM order GROUP BY user_id ORDER BY count DESC limit 2
Linux
如何发现web服务慢
top:查看系统性能
Nginx:最后一个字段加入$request_time
列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前100条
cat access.log|awk '($NF > 1 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
代码中实现,开头写入时间,结尾写入时间
综合
1. AES和RSA的区别:
RSA是非对称加密,公钥加密,私钥解密, 反之亦然。缺点:运行速度慢,不易于硬件实现。常私钥长度有512bit,1024bit,2048bit,4096bit,长度越长,越安全,但是生成密钥越慢,加解密也越耗时。
AES对称加密,密钥最长只有256个bit,执行速度快,易于硬件实现。由于是对称加密,密钥需要在传输前通讯双方获知。
AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥 长度不足时,会补齐)
总结:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
RBAC:基于角色的访问控制
一个用户属于多个角色
角色拥有多个动作的权限
用户是否具有某些动作的权限
表:用户表、角色表、动作表,用户角色关联表、角色动作关联表
MongoDB
MongoDB数据类型:
String(字符串): mongodb中的字符串是UTF-8有效的。
Integer(整数): 存储数值。整数可以是32位或64位,具体取决于您的服务器。
* Boolean(布尔): 存储布尔(true/false)值。
Double(双精度): 存储浮点值。
Min/ Max keys(最小/最大键): 将值与最低和最高BSON元素进行比较。
Arrays(数组): 将数组或列表或多个值存储到一个键中。
Timestamp(时间戳): 存储时间戳。
Object(对象): 嵌入式文档。
Null (空值): 存储Null值。
Symbol(符号): 与字符串相同,用于具有特定符号类型的语言。
Date(日期): 以UNIX时间格式存储当前日期或时间。
Object ID(对象ID) : 存储文档ID。
Binary data(二进制数据): 存储二进制数据。
Code(代码): 将JavaScript代码存储到文档中。
Regular expression(正则表达式): 存储正则表达式
算法
1. 排序算法
* 快速排序
快速排序是十分常用的高效率的算法,其思想是:我先选一个标尺,用它把整个队列过一遍筛选,以保证其左边的元素都不大于它,其右边的元素都不小与它function quickSort($arr){ // 获取数组长度$length = count($arr); // 判断长度是否需要继续二分比较
if($length <= 1){ return $arr;
} // 定义基准元素
$base = $arr[0]; // 定义两个空数组,用于存放和基准元素的比较后的结果
$left = [];
$right = []; // 遍历数组
for ($i=1; $i < $length; $i++) {
// 和基准元素作比较
if ($arr[$i] > $base) {
$right[] = $arr[$i];
}else {
$left[] = $arr[$i];
}
} // 然后递归分别处理left和right
$left = quickSort($left);
$right = quickSort($right); // 合并
return array_merge($left,[$base],$right);
}
冒泡排序
思路:法如其名,就像冒泡一样,每次从数组中冒出一个最大的数
比如:2,4,1
第一次冒出4:2,1,4
第二次冒出2:1,2,4function bubbleSort($arr){ // 获取数组长度
$length = count($arr); // 第一层循环控制冒泡轮次
for ($i=0; $i < $length-1; $i++) {
// 内层循环控制从第0个键值和后一个键值比较,每次冒出一个最大的数
for ($k=0; $k < $length-$i; $k++) {
if($arr[$k] > $arr[$k+1]){
$tmp = $arr[$k+1];
$arr[$k+1] = $arr[$k];
$arr[$k] = $tmp;
}
}
} return $arr;
}
选择排序
思路:每次选择一个相应的元素,然后将其放到指定的位置function selectSort($arr){
// 实现思路 // 双重循环完成,外层控制轮数,当前的最小值,内层控制比较次数 // 获取长度 $length = count($arr);
for ($i=0; $i < $length - 1; $i++) {
// 假设最小值的位置 $p = $i;
// 使用假设的最小值和其他值比较,找到当前的最小值 for ($j=$i+1; $j < $length; $j++) {
// $arr[$p] 是已知的当前最小值
// 判断当前循环值和已知最小值的比较,当发下更小的值时记录下键,并进行下一次比较 if ($arr[$p] > $arr[$j]) { $p = $j; // 比假设的值更小
}
}
// 通过内部for循环找到了当前最小值的key,并保存在$p中 // 判断 日光当前$p 中的键和假设的最小值的键不一致增将其互换 if ($p != $i) { $tmp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $tmp;
}
} // 返回最终结果
return $arr;
}
相关推荐:
php知识点_php中一些重要的php知识点分享相关推荐
- Java常用的知识点就20_JAVA中一些需要记录的知识点
原标题:JAVA中一些需要记录的知识点 的老师今天给大家讲java中一些重要的知识点. JDK与JRE的区别: JRE是所有JAVA程序运行所需要的环境,任何JAVA程序的运行都依赖于JRE,当前从J ...
- ideaspringboot项目上传服务器_PHP中使用 TUS 协议来实现可恢复文件上传
曾经尝试过用PHP上传大文件吗?想知道您是否可以从上次中断的地方继续上传,而不会在遇到任何中断的情况下再次重新上传整个数据?如果您觉得这个场景很熟悉,请接着往下阅读. 文件上传是我们几乎所有现代Web ...
- 机器学习(Machine Learning)、深度学习(Deep Learning)、NLP面试中常考到的知识点和代码实现
网址:https://github.com/NLP-LOVE/ML-NLP 此项目是机器学习(Machine Learning).深度学习(Deep Learning).NLP面试中常考到的知识点和代 ...
- mysql覆盖索引二次查找_mysql中关于覆盖索引的知识点总结
如果一个索引包含(或覆盖)所有需要查询的字段的值,称为'覆盖索引'. 覆盖索引是一种非常强大的工具,能大大提高查询性能,只需要读取索引而不需要读取数据,有以下优点: 1.索引项通常比记录要小,所以My ...
- Mysql中B+Tree索引相关知识点
Mysql中B+Tree索引相关知识点 索引生效及限制 索引的优点 结语 索引有很多种类型,可以为不同的场景提供更好的性能.在Mysql中,索引是在存储引擎层而不是服务器层实现的,所以,并没有统一的索 ...
- TPC/IP协议中与IP相关的知识点简介
TPC/IP协议中与IP相关的知识点简介 简介 TCP/IP参考模型作为实现网络连接性和互操作性的关键,它使得网络上不同的计算机具有互操作能力,并且在较差的网络环境下可维持主机之间的连接 其协议结构分 ...
- 程序员前辈归纳整理Python中的控制流语句的知识点(要记得收藏)
这篇文章主要归纳整理了Python中的控制流语句的知识点,来自于IBM官方网站技术文档,需要的朋友可以参考下 程序流 Python 解释器在其最简单的级别,以类似的方式操作,即从程序的顶端开始,然后一 ...
- 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token...
为什么你学不会递归?告别递归,谈谈我的一些经验 可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! 可 ...
- 带你全面了解高级 Java 面试中需要掌握的 JVM 知识点
对于一名高级 Java 工程师来说,JVM 可以说是面试必问的一个知识点,而大多数人可能没有对 JVM 的实际开发和使用经验,接下来这一系列文章将带你深入了解 JVM 需要掌握的各个知识点.这也将帮助 ...
最新文章
- 理科生的体面,是不是全在那些幻想里?
- SQL Server procedure
- pytorch使用mean降维打击
- 计算机数控是什么专业,数控是什么专业
- 【知识梳理1】Android触摸事件机制
- 【转】数学与编程——求余、取模运算及其性质
- Numpy之Broadcasting
- kafka分区与分组原理_Kafka工作原理
- 一个Linux中用于监控的简易shell脚本
- mozilla原代码编译
- 【图像去噪】基于matlab小波变换图像去噪(MSE和SNR)【含Matlab源码 2192期】
- Qt 使用资源管理器打开文件夹,并定位到指定文件。
- linux 网络安全工具,常用的Linux网络安全工具简介
- 计算机玩游戏不能全屏,如果电脑游戏无法全屏显示怎么办?电脑游戏解决方案不能全屏显示...
- JAVA线程池 -clt设计与分析
- 利用神经网络的embedding层处理类别特征
- 一对多表关联(转载虾皮工作室)
- 日撸 Java 三百行(81-90天,CNN 卷积神经网络)
- i.MX6ULL驱动开发 | 27 - 使用WM8960 CODEC播放音频
- 计算机毕设(附源码)JAVA-SSM京东仓库管理系统
热门文章
- 高性能WEB开发(11) - flush让页面分块,逐步呈现
- mipi和isp处理_图像信号处理 (ISP) 流水线
- 短信计费(信息学奥赛一本通-T1398)
- 数的计算(洛谷-P1028)
- 信息学奥赛C++语言: 输出最大值
- 信息学奥赛C++语言: 绝对素数
- vm安装net失败_使用minikube安装kubernetes和dashboard
- k8s创建Deployment报错:no matches for kind “Deployment“ in version “extensions/v1beta1“
- POI处理超过65536条记录
- [流体输配管网] 使用 Matlab 绘制莫迪图