乐趣区

关于php: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 软硬件架构

退出移动版