2019 php面试题

1.++$a和​$a++ 区别

运算符优先级不一样

++$a 当++放在前面的时候 运算符优先计算

$a++ 而放后面就不优先

';
echo ++$b; //$b=2
exit;

笔试题

  • 考点1:0 == 'abc' ,int和string型比较,会把字符串截成int,如果字符串前面是数字如'123abc',转为int就变成123,'abc'前面没有数字,所以是0,所以 0 == 'abc' ? 成立;$count=5
  • 考点2:++$count = 1+5 =6;
  • 考点3:static用在函数里面,声明一次变量后,如果再次调用这个函数将会在初始值延续,这里$count将累加;
  • 考点4: return $count++ 会先返回 $count=0 ,然后再执行 $count++static $count +=1
  • 考点5:函数外面的$count 与函数内的$count不是同一个引用地址,所以没有关系。$count还是等于之前的6

2.MQ中的exchangge和ack是什么,如何取出消息,时间间隔,如果一个消息处理失败重新发送了,会从头部还是尾部塞入?

转自RabbitMQ之Exchange-4

关于exchange,生产者只能发送消息到一个交换组件中(Exchange),exchange是一个很简单的东西,一方面它接收来自生产者的消息,另外一方面它将把来自生产者的消息放入到队列中,exchange必须知道怎么接收一个消息,而且接收的消息应该被添加到一个特定的队列?还是多个队列中?或者接收的消息被丢弃,这个规则被exchange类型所定义。

Exchange有如下几种定义类型:direct(直接)、topic(主题)、headers(标题)和fanout,可以通过命令 rabbitmqctl list_exchanges查看

以下为常用的三种类型:direct、topic、fanout.

3.myisam和innodb区别,树叶节点的类型,索引的最左原则是什么意思,Btree的实现方式,为什么主键强调用无符号自增长的int型

给表建联合索引a,b,c,以下sql语句是否使用到索引以及使用到哪些索引

where a=? and b=? //a_b_c

where b=? and c=? //未使用到索引

Where a=? and c=?//a_b_c

where b=? and a in(?,?) //a_b_c

Where b>? and c=? and a=? //a_b_c

为什么主键强调用无符号自增长的int型原文链接
1、int 相比varchar、char、text使用更少的存储空间,而且数据类型简单,可以节约CPU的开销,更便于表结构的维护
2、默认都会在主键上建立主键索引,使用整形作为主键可以将更多的索引载入内存,提高查询性能
3、对于InnoDB存储引擎而言,每个二级索引都会使用主键作为索引值的后缀,使用自增主键可以减少索引的长度(大小),方便更多的索引数据载入内存
4、可以使索引数据更加紧凑,在数据插入、删除、更新时可以做到索引数据尽可能少的移动、分裂页,减少碎片的产生(可以通过optimize table 来重建表),减少维护开销
5、在数据插入时,可以保证逻辑相邻的元素物理也相邻,便于范围查找
当然,使用自增int作为主键也不是百利无一害,在高并发的情况下也可能会造成锁的争用问题。

4.什么是闭包函数
https://www.insp.top/article/we-need-to-know-something-about-closure

闭包函数既匿名函数,没有函数名,这个函数可以作为一个值赋给一个变量或者对象属性;其次,匿名函数可以被定义在不同地方,使他可以有效利用他所在局域内的变量(上下文)。
一个简单的闭包函数示例

$foo = function (){
    return  'hello';
}

5.下单时高并发如何保证库存数量正确
https://blog.csdn.net/xingxing_java/article/details/95055444
6.redis和memcache区别
7.csrf,xss攻防
8.session,cookie区别;如果客户端禁用cookie,session还可以正常使用吗,为什么。
9.如果一个表没有设置主键,但是需要做分表,以何为依据做分表
10.从浏览器请求一个php页面到返回的完整过程
一次完整的http请求过程
nginx是如何处理PHP请求的

你可能感兴趣的:(2019 php面试题)