2020年10月php面试笔记
码农天地 -1.请说明目前PHP最新版本的版本号和新特性
2.简要说明PHP的垃圾回收机制
垃圾回收机制是一种动态存储分配方案.它会自动释放程序已分配的不在需要的内存块.自动回收内存的过程叫垃圾收集.参考:浅析 PHP7 的垃圾回收机制
3.列举熟悉的PHP框架,并说出该框架的特点
4.常见的状态码,说明其含义
5.解释:脏读,幻读,不可重复读
脏读:脏读是指一个事务中访问到了另一个事务未提交的数据.幻读:一个事务读取2次,得到的记录条数不一致,由于2次读取之间另外一个事务对数据进行了增删.
不可重复读:一个事务读取同一条记录2次,得到的结果不一致,由于2次读取之间另外一个事务对此行数据进行了修改.
补充:
数据库事务的特点:ACID
原子性(A Atomicity):事务是一个原子性的操作单元,事务里面对数据库的操作,要么都执行,要么都不执行.
一致性(C Consistent):在事务开始之前和结束之后,数据都必须保持一致状态,必须保证数据库的完整性.也就是说,数据必须符合数据库的规则.
隔离性(I ioslation):数据库允许多个并发事务同时对数据进行操作,事务之间是相互独立的,事务处理的中间状态对其他事务是不可见的,以此防止出现数据不一致状态.
MySQL中4个事务隔离级别,隔离级别由低到高:隔离级别越高,越能保证数据的完整性和一致性,但对并发性能影响也越大.
读未提交(Read uncommitted),读已提交(Read committed),可重复读(Repeatable read),可串行化(serializable)
使用 _select @@tx_isolation;
_ 可以查看 MySQL 默认的事务隔离级别。
不同的事务隔离级别会导致不同的问题:
持久性(D Durable):一个事务结束后,其对数据库的修改是永久性的,即使系统故障也不会丢失.
6.详细说明rsync命令和实际应用
rsync是开源的,快速,多功能的,可实现全量及增量的本地或远程数据同步工具,适用于linux,unix,window等多种操作系统平台.可以当做文件复制工具,替代mv和cp.
常用命令:
1. rsync -av source destination //除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等),
2. 目标目录destination如果不存在,rsync 会自动创建。执行上面的命令后,
3. 源目录source被完整地复制到了目标目录destination下面,即形成了destination/source的目录结构。
5. 如果只想同步源目录source里面的内容到目标目录destination,则需要在源目录后面加上斜杠。
6. $ rsync -a source/ destination
7. 上面命令执行后,source目录里面的内容,就都被复制到了destination目录里面,
8. 并不会在destination下面创建一个source子目录。
11. rsync 除了支持本地两个目录之间的同步,也支持远程同步。它可以将本地内容,同步到远程服务器。
12. $ rsync -av source/ username@remote_host:destination
14. 也可以将远程内容同步到本地。
15. $ rsync -av username@remote_host:source/ destination
参考:rsync 用法教程
备份数据的重要性以及rsync的基本使用
1)可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似ssh带scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。
2)rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,
3)利用rsync还可以实现删除文件和目录的功能。相当于rm
4)rsync相当于scp,cp.rm但是还优于他们每一个命令。
数据备份的方式全量备份 --- 会将所有的数据进行备份,效率比较低下增量备份 --- 只是将变动的数据进行备份,效率比较高,并且适合进行异地备份rsync -avzP -e 'ssh -i /home/vagrant/.ssh/new*vidat.pem' test2 centos@18.*.*.34:/home/wwwroot/default/test //远程拷贝文件,相当于scp
7.说明app与服务器之间通信的安全机制
防非法调用——身份认证防抓包——数据加密防重放攻击——时间戳+随机字符串防篡改——签名机制HTTPS协议进行通信Token身份验证机制 : 防止恶意刷接口,可以反查调用者信息,封账号或token失效对称加密:
对称加密:对称加密是一种可逆的加密算法,其中“对称”的意思是加密过程和解密过程使用的是同一个密钥,常见的对称加密算法有DES、3DES、AES、IDEA等。对称加密算法的特点
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。对称加密算法的安全性依赖于密钥,任何人只要拿到密钥就能对数据进行加解密操作。
由于参与通信的双方都需要持有密钥,任何一方的秘钥泄露,那么双方的通信将无安全性可言,所以怎么安全的保存和传递密钥是使用对称加密最需要关注的问题。
非对称加密:
非对称加密指的是加密过程和解密过程使用不同的密钥,非对称加密算法需要一对密钥(公钥和私钥),公钥用来加密数据、私钥用来解密数据。常见的非对称加密算法有RSA、ECC、ElGamal等。
非对称加密算法特点
非对称加密算法使用公钥加密、私钥解密,私钥不需要公开传输所以安全性较高。同时私钥可以对数据进行签名、公钥可以用来验证签名,可以解决中间人攻击和信息被篡改的问题。
由于加解密过程使用不同的密钥,所以对大量数据进行加解密运算的话速度是比较慢的,通常情况下非对称加密算法只适合对少量数据进行加解密操作。
对称加密算法运算速度快但安全性不足、非对称加密算法安全性高但运算速度慢.那我们可以将两者结合一下:用对称加密算法加解密数据这样可以保证运算速度,用非对称加密算法加密对称加密算法的密钥这样可以兼顾密钥的安全性。
防重放攻击:
防重放攻击:拦截到请求之后只需再原样发送该请求到服务端就可以发起重放攻击,如果接口内有一些查库之类的比较耗性能的逻辑,那么在短时间内发起大量重放攻击的话将会直接导致服务端崩溃。我们只需要保证请求只能被正确处理一次即可,这里我们采用时间戳+随机字符串的解决方案
在请求中加入时间戳与随机字符串之后,服务端收到请求后会首先对时间戳和随机字符串进行校验,校验通过才会执行正常的业务处理逻辑。
参考: 如何保证APP与服务端通信安全
8.svn和git区别,列举常用的git命令,重点说明git中merge和rebase的区别
9.PHP写出快速排序的算法
(1)快速排序算法是对冒泡算法的一个优化。他的思想是先对数组进行分割, 把大的元素数值放到一个临时数组里,把小的元素数值放到另一个临时数组里(这个分割的点可以是数组中的任意一个元素值,一般用第一个元素,即$array[0]),然后继续把这两个临时数组重复上面拆分,最后把小的数组元素和大的数组元素合并起来。这里用到了递归的思想。
1. //快速排序
2. function quickSort($arr)
3. {
4. if (!isset($arr[1])) {
5. return $arr;
6. }
8. $mid = $arr[0];
9. $leftArr = [];
10. $rightArr = [];
12. foreach ($arr as $value) {
13. if ($value > $mid) {
14. $rightArr[] = $value;
15. }
17. if ($value < $mid) {
18. $leftArr[] = $value;
19. }
20. }
21. $leftArr = quickSort($leftArr);
22. $leftArr[] = $mid;
24. $rightArr = quickSort($rightArr);
25. return array_merge($leftArr, $rightArr);
26. }
28. $arr = [2, 4, 88, 33, 44, 5];
29. print_r(quickSort($arr));
30. //结果:Array ( [0] => 2 [1] => 4 [2] => 5 [3] => 33 [4] => 44 [5] => 88 )
10.用PHP写一个算法判断一个整数是否是回文数,考虑CPU和内存使用率最低
11.用装饰器模式写出具有房产销售功能的简单代码
12.设计高并发场景下的CRM软硬件架构
php介绍
PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。