高级PHP(初级架构师)面试题

PHP 篇GCPHP 5 的内存回收原理?请详细描述ZendMM的工作原理PHP 7 的垃圾回收和 PHP 5 有什么区别?结构PHP 7 中对zVal做了哪些修改?PHP 7 中哪些变量类型在栈,哪些变量类型在堆?变量在栈会有什么优势?PHP 7是如何让变量新建在栈的?详细描述PHP中HashMap的结构是如何实现的?下面代码中,在PHP 7下, $a 和 $b、$c、$d 分别指向什么zVal 阅读全部

PHP 之 foreach 的坑

(PHP 4, PHP 5, PHP 7)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法:foreach (array_expression as $value)     statement foreach (array_expression as $k 阅读全部

异常状态码一览表

### 异常状态码一览表 > 请先阅读本文档下有关异常处理的章节。 以下的异常状态码是各个基础服务通用的,各个基础服务可根据业务需要自行扩展,但禁止覆写通用异常状态码,以免引起歧义。 需要注意的是,`errmsg`字段的值仅为`errcode`字段的值对照的错误信息,供业务方判断异常状态。但业务方在业务逻辑上不应该依赖`errmsg`字段的值,而应该只依赖`errcode`字段。 | errcode | errmsg 阅读全部

PHP解决并发问题的几种实现

对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了在PHP语言中并没有原生的提供并发的解决方案,因此就需要借助其他方式来实现并发控制。方案一:使用文件锁排它锁flock函数用于获取文件的锁,这个锁同时只能被一个线程获取到,其它没有获取到锁的线程要么阻塞,要么获取失败在获取到锁的时候,先查询库存,如果库存大于0,则进行下订单操作,减库存,然后释放锁方案二:使用Mysql数据库提供的悲观锁Innodb存储引擎支持行级锁,当某行数据被锁定时,其他进程不能对这行数据进行 阅读全部

原生PHP实现队列与栈

队列队列(queue)是常用的数据结构之一,它是一种特殊的线性表,受到操作的限制,只能在尾部进行插入操作,在头部进行删除操作。 队列遵循先入先出(FIFO,First In First Out)的原则,每一个新插入的元素都是在队列的尾部插入,每一个要删除的元素都是位于队列的头部,当从队列的头部删除了一个元素后,其它队列中的元素就会向前进1位,在元素移动到队首时,就会接受出队的操作。 还有一种队列比较特殊,首尾两端都允许进行插入和删除的操作,这种队列可以称为双端队列,与标准的队 阅读全部

php算法----队列

此队列算法中有两个类一个是data类,这个类是存放数据;第二个是queue也就是队列类这个就是队列的一些操作。首先队列里包含front(队列的头,也就是出队是要出去的) rear(队列的尾部在这里永远指向0) queue(存放所有入队的data对像,queue中默认存在一个元素当空时front和rear都指向他) maxsize(队列的长度)四个属性应用说明:1初始化队列:生成一个队列传入一个参数作为maxsize初始化队列把rear设为0 ,front设为0此时queue中只有0号元素rear 阅读全部

PHP实现队列及队列原理

队列是一种线性表,按照先进先出的原则进行的:PHP实现队列原理看看各语言实现队列的方法:各语言实现队列的方法PHP实现队列:第一个元素作为队头,最后一个元素作为队尾<?php /**  * 队列就是这么简单  *   * @link http://www.phpddt.com  */ $array =  array('PHP', 'JA 阅读全部

PHP分布式中Redis实现Session

方法一:找到配置文件php.ini,修改为下面内容,保存并重启服务session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379"方法二:直接在代码中加入以下内容:ini_set("session.save_handler", "redis"); ini_set("session.save_pat 阅读全部

PHP实现一致性hash

随着memcache、Redis以及其它一些内存K/V数据库的流行,一致性哈希也越来越被开发者所了解。因为这些内存K/V数据库大多不提供分布式支持(本文以redis为例),所以如果要提供多台redis server来提供服务的话,就需要解决如何将数据分散到redis server,并且在增减redis server时如何最大化的不令数据重新分布,这将是本文讨论的范畴。取模算法取模运算通常用于得到某个半开区间内的值:m % n = v,其中n不为0,值v的半开区间为:[0, n)。取模运算的算 阅读全部

PHP实现各种经典算法

<?  //--------------------  // 基本数据结构算法 //--------------------  //二分查找(数组里查找某个元素)  function bin_sch($array,  $low, $high, $k){        if 阅读全部