1. Do while while foreach for 区别 Do while 和while类似,do while 会不管条件真假先执行一次,while 条件为真才执 行,foreach 循环为先读取整块数据,然后再循环,而 for 主要用于限制循环次数 例如循环数组,while 是移动内部指针,foreach 是对数组副本进行操作,而 foreach 在读操作比较快,在写操作比较慢,因为 php 的 引用计数写时复制 的特性
  2. 进程,线程及通信方式 https://www.php.cn/php-ask-453612.html 进程和线程有点 主从关系一样的,线程共享进 程的资源 进程间通信方式:1. 管道 2. 信号 3. 消息队列 Posix 消息队列 4. 共享内存 5. 套接口
  3. Php 查看扩展路径 php -i | grep -i extension_dir 或者 phpinfo 来看一下 或者 echo ini_get('extension_dir');
  4. Php 底层数组实现方式 linked list + hashtable 双向链表是中间映射表,用来存放索 引和具体存储位置,然后具体存储位置对应的具体值在 hashtable 中
  5. 写时复制:如果两个变量是相同的值,则共享同一块内存,而那块内存的 is_ref =1 refcount = 1 后者被引用一次 +1,为 0 的时候被销毁,相当于资源延迟分配。 垃圾回收:不会立即回收,会放入缓冲区(一个双向链表),然后默认到了 10000 个开 始回收,先将 refcount -1 , =0 则进行回收
  6. 解决内存溢出:1、要增加PHP可用内存大小;2、对数组进行分批处理,将用过的变量 及时销毁;3、尽可能减少静态变量的使用;4、数据库操作完成后,要马上关闭连 接。5、可以使用 memory_get_usage () 函数,获取当前占用内存 根据当前使用的内 存来调整程序 引申:1 unset () 函数只能在变量值占用内存空间超过 256 字节时才会释放内存空间 2 有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存 3 unset 被 引用的变量只会接触引用关系,不会销毁该变量
  7. Php7 新特性 https://www.php.net/manual/zh/migration70.new-features.php 简要总结就 是: 标量类型声明、返回值类型声明、通过 define() 定义常量数组、匿名类、相同命名空间 类一次性导入 Php7 底层优化:1 ZVAL 结构体优化,占用由24字节降低为16字节 2 内部类型 zend_string,结构体成员变量采用 char 数组,不是用 char* 3 PHP 数组实现由 hashtable 变为 zend array 4 函数调用机制,改进函数调用机制,通过优化参数传递 环节,减少了一些指令