PHP的面试题与应答

分类: 互联网 > 面试题

PHP有哪些数据类型?

    String(字符串)、Integer(整型)、Float(浮点型)、Boolean(布尔型)、Array(数组)、Null(空值)、Object(对象)、Resource(资源类型)

请说一下一个web请求的完整过程

    1. 浏览器通过域名解析将输⼊的⽹址转换为对应的IP地址;

    2. 根据IP在互联⽹上找到对应的服务器,建⽴TCP链接;

    3. 客户端向服务器发送HTTP协议请求包,请求服务器中的资源;

    4. 到达负载均衡服务器,根据相应策略来分配⽤户请求到指定服务器来处理请求;

    5. 请求的数据可以存储在分布式缓存中(redis、memcached),或者静态⽂件中,还有数据库等等;

    6. 当数据返回给浏览器时,浏览器解析数据和静态资源(css、js、jpg等等)时候⼜会发起另外⼀个请求,整个请求可能会在CDN上,那么CDN服务器有处理这个⽤户的请求

    7. WEB关闭TCP链接(如果服务器header为Connect: keep-alive,则保持连接),客户端与服务器断开。客户端解释HTML⽂档,在浏览器上渲染图形结果

三次握手?

    1. 第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

    2. 第二次握手:服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

    3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

什么是适配器模式?

    将一个类的接口转换成目标客户希望的另外一个接口。使原本由于接口不兼容而不能一起工作的那些类可以一起工作。

http2和http和https?

    1. http:HTTP 超文本传输协议,它定义了客户端和服务器之间交换报文的格式和方式,它使用 TCP 作为传输层协议,保证了数据传输的可靠性【无状态的协议,数据是明文传输,并未加密,默认使用80端口

    2. http2:HTTP/2 是一个二进制协议,它实现多路复用,使用tcp连接,使用数据流的概念,而且实现头信息压缩

    3. https:基于http协议,不过会使用tls/ssl加密数据,默认使用403端口

谈谈你对php中zval以及垃圾回收机制的理解?

    zval:php变量存在于一个zval的变量容器中,结构有:类型、值、is_ref(是否属于引用集合)、refcount(计数器,表示指向这个zval变量容器的变量个数);当refcount=1时,is_ref=false,当变量赋值给另外一个变量时,refcount+=1【只有两个变量其中发生变化,才会为新变量重新分配zval,并且refcount-=1】,当变量引用赋值时,refcount+=1,is_ref=true【如果unset原变量,新变量直接就使用原变量的zval而不是重新分配】

    当数组元素引用原数组时,会出现环状引用;采用了专门的算法(比较复杂)。,来处理环状引用导致内存泄露的问题。当一个zval可能为垃圾时,回收算法会把这个zval放入一个内存缓冲区。当缓冲区达到最大临界值时(最大值可以设置),回收算法会循环遍历所有缓冲区中的zval,判断其是否为垃圾,并进行释放处理。或者我们在脚本中使用gc_collect_cycles,强制回收缓冲区中的垃圾。

    垃圾回收机制:1. 如果一个zval的refcount增加,那么此zval还在使用,肯定不是垃圾,不会进入缓冲区;2:如果一个zval的refcount减少到0, 那么zval会被立即释放掉,不属于GC要处理的垃圾对象,不会进入缓冲区。3:如果一个zval的refcount减少之后大于0,那么此zval还不能被释放,此zval可能成为一个垃圾,将其放入缓冲区。

mysql事务隔离级别,说下你对事务的隔离性的理解?

    mysql事务隔离级别从低到高分别是:未提交读、已提交读、可重复读、串行。

    未提交读:允许读取未提交的数据变更,但这种级别会出现脏读,幻读或者不可重复读

    已提交读:允许读取并发事务提交的数据变更,这种级别可以防止脏读,但是幻读和不可重复读仍然有可能发生

    可重复读:对同一个字段的读取结果是一致的,除非数据被自身事务改变,这种级别可以防止脏读和不可重复读,但幻读仍然可能发生,也是Mysql默认的隔离级别

    串行:这个是最高级别,完全服从ACID的隔离级别,所有事务都是依次顺序执行,这样事务之间不可能产生干扰,可以防止脏读、幻读和不可重复读,但这种级别会严重影响到程序的性能,所以一般不会用到这个级别吧

    事务隔离级别是基于锁机制和并发调度,并发调度使用的MVCC多版本并发控制,通过保存修改的版本来支持并发一致性读和回滚等特性

innodb和myisam的区别

    1. InnoDB支持事务,MyISAM不支持;

    2. MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用

    3. InnoDB支持外键,MyISAM不支持

    4. 从MySQL5.5.5以后,InnoDB是默认引擎

    5. InnoDB不支持FULLTEXT类型的索引

    6. InnoDB中不保存表的行数,如select count() from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含where条件时MyISAM也需要扫描整个表

    7. 对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引

    8. 清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表

    9. InnoDB支持行锁

组合索引abc,查询bc和ab和ba,哪些会用到索引?

    ab和ba

MySQL优化

    优化成本:硬件>系统配置>数据库表结构>SQL及索引。

    优化效果:硬件<系统配置<数据库表结构<SQL及索引。

    1. 减少数据访问:设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO

    2. 返回更少的数据:只返回需要的字段和数据分页处理,减少磁盘io及网络io

    3. 减少交互次数:批量DML操作,函数存储等减少数据连接次数

    4. 减少服务器CPU开销:尽量减少数据库排序操作以及全表查询,减少cpu 内存占用

    5. 利用更多资源:使用表分区,可以增加并行操作,更大限度利用cpu资源

什么是读锁(共享)、写锁(排他锁)、 什么是乐观锁、悲观锁、行锁、间隙锁

    读锁:也叫共享锁、S锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S 锁,而不能加X锁,直到T释放A上的S 锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修 改。

    写锁:又称排他锁、X锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加 任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。
    悲观锁:悲观锁指的是外界对数据修改持保守态度(悲观),因此,在整个数据处理过程中,将数据处于锁定状态

    乐观锁:乐观锁假设认为数据⼀般情况下不会造成冲突,所以在数据进⾏提交更新的时候,才会正式对数据的冲突与否进⾏检测,如果发现冲突了,则让返回⽤户错误的信息,让⽤户决定如何去做

    行锁:单个行记录上的锁

    间隙锁:锁定一个范围,不包括记录本身

redis缓存击穿是什么?如何解决?

redis缓存穿透是什么?如何解决?

redis缓存雪崩是什么?如何解决?

Redis事务保证原子性吗,支持回滚吗?支持隔离性吗

Redis的内存用完了会发生什么?

Redis的内存淘汰策略有哪些

请对比下redis持久化之RDB和AOF?

redis如何优化

redis分布式锁的原理?如何优化?

Redis与Memcached的2个主要区别

谈谈你对5种常用IO模型的理解

如何提高linux最大文件打开数?

如何在Linux下更改权限?

请说说nginx如何优化?

nginx负载均衡如何实现高可用?

mongodb和redis的区别是什么?

谈谈你对mongodb集群的理解?

查看centos内存使用情况?

vim如何清空一个文件中的所有内容?

linux如何查看磁盘情况?

linux挂载命令?

如何保证RabbitMQ消息的可靠传输?

RabbitMQ的使用场景?

rabbitmq如何提高消息的消费速率?

rabbitmq如何保证消息的顺序性?

rabbitmq消息基于什么传输?

rabbitmq消息的持久化是如何实现的

rabbitmq如何保证消息不丢失

RabbitMq消息什么时候需要持久化?

RabbitMQ集群怎么避免重启后消息丢失?

如何架构一个消息队列?

什么是 kafka Rebalance?以及rebalance触发的时机?

谈谈你对kafka消费者组的理解?

kafka有哪几种ack机制,ack为 0, 1, -1 的时候代表啥

消费者提交消费位移时提交的是当前消费到的最新消息的offset还是offset+1?

比较RabbitMQ与Apache Kafka

要你做一个分布式日志系统,你打算怎么做?

分库分表后,需要统计多表数据,有什么好的办法吗?

ElasticSearch中的分片是什么?

简单介绍es的index

elasticsearch 的倒排索引是什么

介绍下你们的es的整体架构

有哪些数据结构?谈谈你的理解

什么是双链表?

MySQL中存储索引用到的数据结构是B+树,B+树的查询时间跟树的高度有关,是log(n),如果用hash存储,那么查

询时间是O(1)。既然hash比B+树更快,为什么mysql用B+树来存储索引呢?

B树的优势是什么?

B+树对B树进行了哪些改进

谈谈你对PHP的SPL中数据结构的理解

什么是二分查找法?

了解redis有序集合跳表吗?

sql注入?

xss

csrf

ddos

https和http

PHP魔术方法

PHP设计模式 如何实现?

PHP框架,框架优缺点

mysql索引

innodb,myasiam

mysql分库分表,锁,主从,binlog

redis存储类型,多线程,持久性存储?

redis雪崩,队列

tcp协议三次握手

冒泡算法

tcp,udp协议区别

socket

cookie session token

nagix负载均衡

linux性能优化

mysql保存在磁盘的数据格式是什么?然后又是如何编译成我们能识别的数据格式?

mysql索引在内存中以什么格式保存?

B+树是一个怎样的树状?为什么会这样?

谈谈反射的优缺点

如何处理脏读

大文件读取和存储

b 树和 b+树的异同

redis 哪些操作和方法是原子性的

mysql 分区表和数据统计问题

yield

二分查找

缓存穿透

缓存击穿

epoll和select-----------------

redis支持哪些类型?

事务里面有curl,会发生什么?改怎么办?

redis的过期策略是什么?

谈谈你对trait的了解

材料2

1、为什么要离职?

2、你觉得你个性上最大的优点是什么?

3、说说你的缺点?

4、你对加班的看法?

5、你对薪资的要求?

6、在五年的时间内,你的职业规划?

7、你朋友对你的评价?

8、如果你的工作出现失误,给本公司造成经济损失,你认为该怎么办?

9、如果你在这次面试中没有被录用,你怎么打算?

10、如果你做的一项工作受到上级领导的表扬,但你主管领导却说是他做的,你该怎样?

来源:原创 发布时间:2022-06-22 16:53:22