PHP面试题大全(值得收藏)
|
IoC(Inversion of Control)译为 「控制反转」,也被叫做「依赖注入」(DI)。什么是「控制反转」?对象 A 功能依赖于对象 B,但是控制权由对象 A 来控制,控制权被颠倒,所以叫做「控制反转」,而「依赖注入」是实现 IoC 的方法,就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。 其作用简单来讲就是利用依赖关系注入的方式,把复杂的应用程序分解为互相合作的对象,从而降低解决问题的复杂度,实现应用程序代码的低耦合、高扩展。 Laravel 中的服务容器是用于管理类的依赖和执行依赖注入的工具。 Facades 是什么? Facades(一种设计模式,通常翻译为外观模式)提供了一个”static”(静态)接口去访问注册到 IoC 容器中的类。提供了简单、易记的语法,而无需记住必须手动注入或配置的长长的类名。此外,由于对 PHP 动态方法的独特用法,也使测试起来非常容易。 Contract 是什么? Contract(契约)是 laravel 定义框架提供的核心服务的接口。Contract 和 Facades 并没有本质意义上的区别,其作用就是使接口低耦合、更简单。 依赖注入的原理? 这个就不解释了吧,这是理解 IoC 容器的前提。 什么是 Composer, 工作原理是什么? Composer 是 PHP 的一个依赖管理工具。工作原理就是将已开发好的扩展包从 packagist.org composer 仓库下载到我们的应用程序中,并声明依赖关系和版本控制。 缓存 Redis、Memecached 这两者有什么区别? Redis 支持更加丰富的数据存储类型,String、Hash、List、Set 和 Sorted Set。Memcached 仅支持简单的 key-value 结构。 Memcached key-value存储比 Redis 采用 hash 结构来做 key-value 存储的内存利用率更高。 Redis 提供了事务的功能,可以保证一系列命令的原子性 Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中 Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高。 Redis 如何实现持久化? RDB 持久化,将 redis 在内存中的的状态保存到硬盘中,相当于备份数据库状态。 AOF 持久化(Append-Only-File),AOF 持久化是通过保存 Redis 服务器锁执行的写状态来记录数据库的。相当于备份数据库接收到的命令,所有被写入 AOF 的命令都是以 redis 的协议格式来保存的。 数据库 什么是索引,作用是什么?常见索引类型有那些?Mysql 建立索引的原则? 索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针,相当于书本的目录。其作用就是加快数据的检索效率。常见索引类型有主键、唯一索引、复合索引、全文索引。 索引创建的原则 最左前缀原理 选择区分度高的列作为索引 尽量的扩展索引,不要新建索引 高并发如何处理? 使用缓存 优化数据库,提升数据库使用效率 负载均衡 PHP 的设计模式就不多讲了,但是 SOLID 设计原则是每一位 PHPer 都必须要掌握的。 一 、PHP基础部分 1、PHP语言的一大优势是跨平台,什么是跨平台? PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows、Linux等)上配置,不受操作系统的限制,所以叫跨平台 2、WEB开发中数据提交方式有几种?有什么区别?百度使用哪种方式? Get与post两种方式 区别: (1)url可见性:get 方式url参数可见,post 不可见 (2)可缓存性:get 方式是可以缓存的,post 方式不可以缓存。 (3)传输数据大小:get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大);post 请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。 (4)数据传输上:get 方式通过url地址栏拼接参数进行传输,post 方式通过body体进行传输。 建议: 1、get式安全性较Post式要差些包含机密信息建议用Post数据提交式; 2、做数据查询建议用Get式;做数据添加、修改或删除建议用Post方式; 百度使用的get方式,因为可以从它的URL中看出 3、掌握PHP的哪些框架、模板引擎、系统等 框架:框架有很多,例如CI、Yii、Laravel等等,咱们学过的是thinkphp 模板引擎:也有很多,在课本中有,咱们学过的是smarty 系统:有很多,例如:康盛的产品(uchome、supesite、discuzX等),帝国系统、DEDE(织梦)、ecshop等,咱们学过的是DEDECMS、Ecshop 4、说一下你所掌握的网页前端技术有哪些? 熟练掌握DIV+CSS网页布局,JavaScript,jQuery框架、photoshop图片处理 5、AJAX的优势是什么? ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验。 6、安全对一套程序来说至关重要,请说说在开发中应该注意哪些安全机制? (1)使用验证码防止注册机灌水。 (2)使用预处理,绑定参数,参数过滤转义 防止sql注入 (3)使用token防止远程提交,使用token验证登录状态。 7、在程序的开发中,如何提高程序的运行效率? (1)优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;少用子查询可用表连接代替;少用模糊查询。 (2)数据表中创建索引。 (3)对程序中经常用到的数据生成缓存(比如使用redis缓存数据,比如使用ob进行动态页面静态化等等)。 (4)对mysql做主从复制,读写分离。(提高mysq执行效率和查询速度) (5)使用nginx做负载均衡。(将访问压力平均分配到多态服务器) 8、PHP可否与其它的数据库搭配使用? PHP与MYSQL数据库是最优搭配,当然PHP也可以去其它的数据库搭配使用,例如PostgreSql,SqlServer,Oracle,SqlLite等。 9、现在编程中经常采取MVC三层结构,请问MVC分别指哪三层,有什么优点? MVC三层分别指:业务模型、视图、控制器,由控制器层调用模型处理数据,然后将数据映射到视图层进行显示。 优点是:①可以实现代码的重用性,避免产生代码冗余;②M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式 10、对json数据格式的理解? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,json数据格式固定,可以被多种语言用作数据的传递。 PHP中处理json格式的函数为json_decode( string $json [,它们包含着对数据表里所有记录的引用指针,相当于书本的目录。其作用就是加快数据的检索效率。常见索引类型有主键、唯一索引、复合索引、全文索引。 索引创建的原则 最左前缀原理 选择区分度高的列作为索引 尽量的扩展索引,不要新建索引 高并发如何处理? 使用缓存 优化数据库,提升数据库使用效率 负载均衡 PHP 的设计模式就不多讲了,但是 SOLID 设计原则是每一位 PHPer 都必须要掌握的。 (编辑:PHP编程网 - 金华站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

