这篇文章主要讲解了“PHP面试题及答案有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP面试题及答案有哪些”吧!
php的框架:1、Laravel,Laravel是一款免费并且开源的PHP应用框架。2、Phalcon,Phalcon是运行速度最快的一个PHP框架。3、Symfony,Symfony是一款为Web项目准备的PHP框架。4、Yii,Yii是一款快速、安全和专业的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的开源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能强大的PHP框架。
2.1 你理解的面向对象?
一切皆对象。是计算机模拟现实世界的一种方式,面向对象的三大特征:封装、继承、多态。通过对成员属性和成员方法进行操作,来使对象具有行为属性和行为方法。
2.2 在PHP中有几种类不能通过 new 出来,请问他们是什么,并且有什么区别
有静态方法的类不能new,不需要创建实例,常驻内容
3.1 用最简单通俗易懂的方式表达你对AOP和IOC,DI的理解
AOP面向切面编程,对源代码无入侵,将业务无关的代码可以代码外面去做,比如方法入口的日志打印
IOC控制反转。传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象
DI依赖注入。应用程序依赖于IOC容器,应用程序需要IOC容器来提供对象需要的外部资源,IOC容器注入应用程序某个对象,应用程序依赖的对象
3.2 谈一谈你对于laravel中的契约,容器,服务提供者,facades理解以及它们的关系是什么
契约:指框架提供的一系列定义核心服务的接口
容器:管理类的依赖和执行依赖注入的工具
服务提供者:把服务注册、绑定到容器上的地方
facades:门面,一组静态接口或者代理,能让开发者简单的访问绑定到容器中的各种服务。
4.1 事务和IO之间的关系,是怎么控制的
innodb引擎通过缓存技术,将常用的数据和索引缓存到内存中,这样在读取数据或者索引的时候就减少磁盘io来提高性能。
4.2 事务的4个特点
原子性、一致性、隔离性、持久性
4.3简述一下MySQL主从复制中流程是什么,为什么会存在延迟问题,对于应用程序应如何规避或者减少延迟所带来的问题呢?
主从复制分三步,
1.主库把数据更改记录到二进制日志binary log中。2.从库启动一个IO线程,该线程连接到主库。主库的binlog dump线程会去读取主库本地的binlog日志文件中更新事件,发往从库,从库接收到日志后,会记录到本地的中继日志relay-log中。3.从库中的SQL线程读取中继日志relay-log中的事件,将其重放到从库中。
什么是主从延迟:
一个服务器开放N个链接给客户端来连接的, 这样有会有大并发的更新操作, 但是从服务器的里面读取binlog 的线程仅有一个, 当某个SQL在从服务器上执行的时间稍长 或者由于某个SQL要进行锁表就会导致,主服务器的SQL大量积压,未被同步到从服务器里。这就导致了主从不一致, 也就是主从延迟。
如何减少主从延迟:
1.一台从服务器当度作为备份使用, 而不提供查询, 那边他的负载下来了, 执行relay log 里面的SQL效率自然就高了
2.增加从服务器喽,分散读的压力, 从而降低服务器负载
5.1 在工作中常用那些数据类型,你能说一下每种数据类型是什么样的及运用场景嘛 ?
五种基本类型:
1.字符串:常规key-value缓存应用。常规计数: 微博数, 粉丝数
2.哈希,使用场景:存储部分变更数据,如用户信息等
3.列表,消息队列系统,将Redis用作日志收集器,实际上还是一个队列,多个端点将日志信息写入Redis,然后一个worker统一将所有日志写到磁盘
4集合,使用场景:交集,并集,差集
5有序集合,排行榜相关
此外,还有bitmap,hyperloglog,geo
5.2 redis的持久化方式有几种,分别是怎么个流程;redis4中出现的混合模式又是什么样的呢?
redis提供了RDB持久化和AOF持久化。
RDB持久化:在指定的时间间隔将内存数据集快照写入磁盘。
RDB持久化流程:
1.redis调用fork,现在有了子进程和父进程
2.父进程继续处理客户端请求,子进程负责将内存写入到临时文件。
3.当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,子进程退出。
AOF文件保存过程
以命令的方式存储,1.redis调用fork,现在有父子两个进程
2.子进程根据内存中的数据库快照,往临时文件中写入重建数据库状态的命令
3.父进程继续处理client请求,除把写命令写入到原来的aof文件中,同时把收到的写命令缓存起来。
4.子进程把快照内容写入已命名方式写到临时文件后,子进程发信号通知父进程。然后父进程把缓存的写命令也写入到临时文件。
5.父进程可以用临时文件替换老的aof文件,并重命名,后面收到的写命令也开始往新的aof文件中追加
Redis 4.0 提供了更好的混合持久化选项:
fork出的子进程先将共享的内存副本全量的以RDB方式写入aof文件,然后在将重写缓冲区的增量命令以AOF方式写入到文件,写入完成后通知主进程更新统计信息,并将新的含有RDB格式和AOF格式的AOF文件替换旧的的AOF文件。简单的说:新的AOF文件前半段是RDB格式的全量数据后半段是AOF格式的增量数据。
5.3 什么是redis哨兵?哨兵的数量有什么要求嘛为什么?
哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。
哨兵的数量至少三个,选举机制决定的。
5.4 redis哨兵是如何监控主从状态的,并如何实现故障转移的呢
redis哨兵是如何监控主从状态:
当监控的master节点出问题之后,sentinel节点会及时地发现而且还能自动执行failover,使其中一个slave节点成为新的Master节点,同时配置其他的节点成为新的Master节点的子节点。
实现故障转移:
1.设置新的master节点替换掉原来的故障master节点
2.设置其他的节点成为新的master节点的slave节点用于主从复制
3.告知客户端新的master节点地址信息,同时执行必要的脚本来通知系统管理员
5.5 redis集群和哨兵你会如何考虑,这两者有什么区别,有什么相似点
【redis主从】:
是备份关系, 我们操作主库,数据也会同步到从库。 如果主库机器坏了,从库可以上。就好比你 D盘的片丢了,但是你移动硬盘里边备份有。
【redis哨兵】:
哨兵保证的是HA,保证特殊情况故障自动切换,哨兵盯着你的“redis主从集群”,如果主库死了,它会告诉你新的老大是谁。
【redis集群】:
集群保证的是高并发,因为多了一些兄弟帮忙一起扛。同时集群会导致数据的分散,整个redis集群会分成一堆数据槽,即不同的key会放到不不同的槽中
6.1 网络通信协议有哪些?
TCP IP HTTP POP3 SMTP SSH
6.2 请用通俗的方式表达一下tcp握手与挥手的过程
三次握手,四次挥手。
三次握手:
第一次:客户端发送请求到服务器,服务器知道客户端发送,自己接收正常。SYN=1,seq=x
第二次:服务器发给客户端,客户端知道自己发送、接收正常,服务器接收、发送正常。ACK=1,ack=x+1,SYN=1,seq=y
第三次:客户端发给服务器:服务器知道客户端发送,接收正常,自己接收,发送也正常.seq=x+1,ACK=1,ack=y+1
四次挥手:
第一次:客户端请求断开FIN,seq=u
第二次:服务器确认客户端的断开请求ACK,ack=u+1,seq=v
第三次:服务器请求断开FIN,seq=w,ACK,ack=u+1
第四次:客户端确认服务器的断开ACK,ack=w+1,seq=u+1
6.3 进程和协程的区别是什么,请你用最简单最通俗的方式表达协程的运行
进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。
协程,是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。
协程在子程序内部是可中断的,然后转而执行别的子程序,在适当的时候再返回来接着执行。
线程切换是由操作系统的时间片控制的,而协程是程序自己实现的,让协程不断轮流执行才是实现并发,所以实现协程还必须要有一个类似于时间片的结构,不同于线程的切换,协程的切换不是按照时间来算的,而是按照代码既定分配,就是说代码运行到这一行才启动协程,协程是可以由我们程序员自己操控的。
6.4 你觉得swoole之所高性能的原因在哪里?
swoole采用事件机制。当IO事件发生后,swoole会自动回调指定的PHP函数。
PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。
6.5 swoole使用的时候有什么注意的地方嘛
Swoole 协程使用注意事项:
在swoole中使用协程时,使用协程客户端连接池。
感谢各位的阅读,以上就是“PHP面试题及答案有哪些”的内容了,经过本文的学习后,相信大家对PHP面试题及答案有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。