目录
1、echo(),print(),print_r(),var_dump()的区别?
2、表单中 get与post提交方法的区别?
4、请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
5、请解释PHP中的PDO是什么?
6、请解释PHP中的抽象类和接口的区别是什么?
7、请解释PHP中的命名空间是什么?
8、请解释PHP中的自动加载是什么
9、请解释PHP中的MVC是什么?
10、请解释PHP中的闭包是什么?
11、请解释PHP中的JWT是什么?
12、请解释PHP中的消息队列是什么?
13、MyISAM和 InnoDB 的基本区别?索引结构如何实现?
14、HTTP 状态中302、403、 500代码含义?
15、语句include和require的区别是什么?为避免多次包含同一文件,可用什么语句代替它们?
16、php垃圾回收机制
17、mongodb与mysql区别
18、MongoDB与es的区别:
19、什么是索引
20、索引优劣
21、索引分类
22、主键和普通索引的区别
23、索引失效情况
24、sql执行流程
25、主键、外键和索引的区别?
26、堆和栈的区别?
27、常用的魔术方法有哪些?举例说明
28、php垃圾回收机制
29、redis数据类型
30、ThinkPHP5和ThinkPHP6的区别
31.数组排序有冒泡排序法、选择排序法、插入排序法和快速排序法。
32.php有哪些设计模式
33.什么是面向对象?主要特征是什么?
34.TP的特性有哪些?
35.laravel有那些特点?
36.TP框架和Laravel框架的区别
37.tp5和tp6区别
38.redis 和 memache 缓存的区别
39、什么是构造函数,什么是析构函数,作用是什么?
40.$this和self、parent这三个关键词分别代表什么?在哪些场合下使用?
41、双引号和单引号的区别
42.linux常用命令
43、请解释PHP中的trait是什么?
44、请解释PHP中的反射是什么?
45、请解释PHP中的SPL是什么?
46、请解释PHP中的GD库是什么?
47、请解释PHP中的Memcached是什么?
48、请解释PHP中的协程是什么?
49、请解释PHP中的并发是什么?
50、请解释PHP中的异步IO是什么?
1、echo(),print(),print_r(),var_dump()的区别?
echo是PHP语句, print和print_r、dump是函数 echo没有返回值 输出一个或者多个字符串 print()只能打印出简单类型变量的值(如int,string) print_r() 可以打印出复杂类型变量的值(如数组,对象) dump()可以打印所有类型变量,并且可以输出具体信息类型和长度
2、表单中 get与post提交方法的区别?
get是发送请求HTTP协议通过url参数传递进行接收 而post是实体数据,可以通过表单提交大量信息.
3、session与cookie的区别?
session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的一般 用于后台和安全性比较高的地方。 cookie:是存储在客户端,对于Cookie来说是存储在用户浏览器下面的,一般用户 登陆,负载压力比较大的地方。可以减轻服务器的负载。
4、请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略 按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改 优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说, 这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。
5、请解释PHP中的PDO是什么?
PDO(PHP Data Objects)是一种PHP扩展,用于连接和操作多种数据库,包括MySQL、PostgreSQL、Oracle等。PDO提供了一种统一的接口和一组方法来执行数据库操作, 并且支持预处理语句和事务处理等高级功能。
6、请解释PHP中的抽象类和接口的区别是什么?
抽象类和接口都是用于实现代码重用和多态性,但它们的实现方式不同。 抽象类可以包含非抽象方法和属性,而接口只能包含常量和抽象方法。 另外,类只能继承一个抽象类,但可以实现多个接口。
7、请解释PHP中的命名空间是什么?
命名空间是一种用于避免命名冲突的机制,它可以将类、函数和常量分组到不同的命名空间中,以便于管理和使用。在PHP中,命名空间使用namespace关键字定义,并且可以在同一个文件中定义多个命名空间。
8、请解释PHP中的自动加载是什么
自动加载是一种机制,使得在使用类时可以自动加载类的定义文件,而无需使用require或include语句手动加载。 在PHP中,可以使用spl_autoload_register函数注册自己的自动加载函数, 当使用未定义的类时,PHP会调用自动加载函数来加载对应的类定义文件。
9、请解释PHP中的MVC是什么?
MVC(Model-View-Controller)是一种软件架构模式,用于将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。 模型用于处理数据业务逻辑,视图用于显示数据,控制器用于处理用户请求和调用模型和视图。
10、请解释PHP中的闭包是什么?
闭包是一种特殊的函数,可以在函数内部创建一个独立的作用域,以保护变量不受外部环境的影响。 在PHP中,闭包使用匿名函数实现,并且可以作为函数参数或返回值使用。
11、请解释PHP中的JWT是什么?
JWT(JSON Web Token)是一种用于认证和授权的标准,可以在不同的系统之间安全地传递信息。 在PHP中,可以使用各种JWT库来生成和解析JWT,JWT包含了一些元数据和签名, 可以在请求和响应中传递,并且可以使用密钥来验证和解密。
12、请解释PHP中的消息队列是什么?
消息队列是一种异步通信机制,可以将数据和任务异步地发送到队列中,并由消费者异步地处理 在PHP中,可以使用各种消息队列系统,例如RabbitMQ、Kafka和Redis等, 可以将数据和任务放到队列中,并由消费者异步地处理。
13、MyISAM和 InnoDB 的基本区别?索引结构如何实现?
A、MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,适合用于频繁查询的应用; B、InnoDB类型支持事务,行锁,有崩溃恢复能力,读写速度比MyISAM慢,适合于插入和更新操作比较多的应用,空间占用大,不支持全文索引等。 创建索引:alert table tablename add index 索引名 (`字段名`)
14、HTTP 状态中302、403、 500代码含义?
302:临时转移成功,请求的内容已转移到新位置 403 (禁止) 服务器拒绝请求。 404 (未找到) 服务器找不到请求的网页。 500 (服务器内部错误) 服务器遇到错误,无法完成请求
15、语句include和require的区别是什么?为避免多次包含同一文件,可用什么语句代替它们?
区别: 在失败的时候: include产生一个warning,而require产生直接产生错误中断 require在运行前载入 include在运行时载入 代替: require_once include_once
16、php垃圾回收机制
自动释放程序不需要内存块,对象被变量引用时,引用计数器+1, 执行unset后,计数器-1,计数器=0或脚本执行完,对象销毁,垃圾回收完成 (php7后null,bool,int和double的类型变量不计数)
17、mongodb与mysql区别
mongodb为非关系型数据库,mysql关系型数据库, mysql比较成熟,支持比较复杂关联sql,缺点数据大时变慢, mongodb热数据直接存在物理内存,大数据也能快速查询,不支持事务
18、MongoDB与es的区别:
1、es是java编写,通过RESTFul接口操作数 据。mongodb是C++编写,通过driver操作数据。(es对java开发更有好,利于排查理解) 2、mongodb的分片有hash和range两种方式,es只有hash一种。 3、es是天生分布式,主副分片自动分配和复制,开箱即用。mongodb的分布式是由“前置查询路由+配置服务+shard集合”,需要手动配置集群服务。 4、内部存储ES是到排索引+docvalues+fielddata。mongodb的b+tree。 5、es全文检索有强大的分析器且可以灵活组合,查询时智能匹配。mongodb的全文检索字段个数有限制。 6、es所有字段自动索引,mongodb的字段需要手动索引。 7、es非实时有数据丢失窗口。mongodb实时理论上无数据丢失风险
19、什么是索引
排好序的快速查找的数据结构
20、索引优劣
建立目录,提高数据检索的效率,降低数据库IO成本,通过索引列队数据进行排序,降低数据排序成本,降低了CPU的消耗 索引过多暂用空间越多,还会影响更新增加删除的速度
21、索引分类
单列索引:一个索引一个列,可多个 唯一索引:索引值必要唯一,但可为空 复合索引:一个索引包含多个列
22、主键和普通索引的区别
主键索引是唯一不能为空 主键索引用于唯一标识表中的行,查询效率高;普通索引用于加快查询速度,适用于频繁查询的列
23、索引失效情况
使用or没有每个建索引,like以%,!⁼等模糊查询条件会失效 如果是string,用int查询会失效,要带引号 数据过少 使用函数或者计算
24、sql执行流程
sql语句-)连接器-)查询缓存-)解释器-)执行器
25、主键、外键和索引的区别?
定义: 主键--唯一标识一条记录,不能有重复的,不允许为空 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引--该字段没有重复值,但可以有一个空值 作用: 主键--用来保证数据完整性 外键--用来和其他表建立联系用的 索引--是提高查询排序的速度 个数: 主键--主键只能有一个 外键--一个表可以有多个外键 索引--一个表可以有多个唯一索引
26、堆和栈的区别?
A、堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小; B、栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义。
27、常用的魔术方法有哪些?举例说明
php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。__construct() 实例化类时自动调用。__destruct() 类对象使用结束时自动调用。__set() 在给未定义的属性赋值的时候调用。__get() 调用未定义的属性时候调用。__isset() 使用isset()或empty()函数时候会调用。__unset() 使用unset()时候会调用。__sleep() 使用serialize序列化时候调用。__wakeup() 使用unserialize反序列化的时候调用。__call() 调用一个不存在的方法的时候调用。__callStatic()调用一个不存在的静态方法是调用。__toString() 把对象转换成字符串的时候会调用。比如 echo。__invoke() 当尝试把对象当方法调用时调用。__set_state() 当使用var_export()函数时候调用。接受一个数组参数。__clone() 当使用clone复制一个对象时候调用
28、php垃圾回收机制
自动释放程序不需要内存块,对象被变量引用时,引用计数器+1, 执行unset后,计数器-1,计数器=0或脚本执行完,对象销毁,垃圾回收完成 (php7后null,bool,int和double的类型变量不计数)
29、redis数据类型
string 字符串 list 列表 set 集合 hash散列值 sort set 有序集合
30、ThinkPHP5和ThinkPHP6的区别
1.目录结构异同 2.多应用需要装扩展 3.使用严格模式和更多prs规范 4.独立组件
31.数组排序有冒泡排序法、选择排序法、插入排序法和快速排序法。
1、冒泡排序法。冒泡排序是一个比较简单的排序方法。在待排序的数列基本有序的情况下排序速度较快 2、选择排序法。选择法的原理是先将第一个数与后面的每一个数依次比较,不断将将小的赋给第一个数,从而找出最小的值。 3、插入排序法。插入排序对少量元素的排序较为有效。 4、快速排序法。快速排序法的原理是通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
32.php有哪些设计模式
策略模式、工厂模式、单例模式、注册模式、适配器模式策略模式:将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,针对男性女性用户要各自跳转到不同的商品类目,并且所有的广告位展示不同的广告单例模式:单例模式生成一个对象后, 该对象可以被其它众多对象所使用,使某个类的对象仅允许创建一个。构造函数private修饰,申明一个static getInstance方法,在该方法里创建该对象的实例。如果该实例已经存在,则不创建。比如只需要创建一个数据库连接。工厂模式:工厂方法或者类生成对象,而不是在代码中直接new。使用工厂模式,可以避免当改变某个类的名字或者方法之后,在调用这个类的所有的代码中都修改它的名字或者参数。注册模式:解决全局共享和交换对象。已经创建好的对象,挂在到某个全局可以使用的数组上,在需要使用的时候,直接从该数组上获取即可。将对象注册到全局的树上。任何地方直接去访问。适配器模式:将各种截然不同的函数接口封装成统一的API。 PHP中的数据库MySQL,MySQLi,PDO三种,可以用适配器模式统一成一致,使 不同的数据库操作,统一成一样的API。类似的场景还有cache适配器,可以将memcache,redis,file,apc等不同的缓存函数,统一成一致。
33.什么是面向对象?主要特征是什么?
面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。
34.TP的特性有哪些?
1).多表查询非常方便,在model中几句代码就可以完成对多表的关联操作 2).融合了smarty模板,使前后台分离 3).支持多种缓存技术,尤其对memcache技术支持非常好 4).命名规范,模型,视图,控制器严格遵循命名规则,通过命名一一对应 5).支持多种url模式 6).内置ajax返回方法,包括xml,json,html等 7).支持应用扩展,类库扩展,驱动扩展等
35.laravel有那些特点?
回答一:1).强大的rest router:用简单的回调函数就可以调用,快速绑定controller和router 2).artisan:命令行工具,很多手动的工作都自动化 3).可继承的模板,简化view的开发和管理 4).blade模板:渲染速度更快 5).ORM操作数据库 6).migration:管理数据库和版本控制 7).测试功能也很强大 8).composer也是亮点回答二: laravel框架引入了门面,依赖注入,Ioc模式,以及各种各样的设计模式等
36.TP框架和Laravel框架的区别
1、提交数据的方式Laravel在提交表单时需要在表单中加入{csrf_field}来防止跨域攻击,而TP不会。2、路由Laravel必须先定义,再使用,路由文件为routes.php;TP在配置文件中开启路由后,路由格式是:'路由表达式' => '路由地址和参数'(使用路由的前提是URL支持phthinfo并且开启路由),路由可以使URL更符合SEO。3、渲染模版方式在Laravel框架里,使用return view()来渲染模版;而ThinkPHP里则使用了$this->display()的方式渲染模版。4、操作数据库方式都可以使用实例化(建立相对应的模型类)和DB:table('表名')来操作数据库,使用原生查询时不太相同,Laravel使用Db::操作('原生sql'),TP使用Db::query('原生sql')。5、条件判断语句书写方式Laravel框架里 if else判断语句和foreach语句 书写时必须以@if开头 以@endif结尾,如果没有则报语法错误,@foreach @endforeach同理。而TP框架则和PHP语法规则使用方式一致直接ifesle语句判断和foreach循环遍历6、中间件,Laravel特点,可以实现访问前后的处理,例如请求和返回,权限认证等;7、Laravel升级十分简易,而TP大版本的升级要重构代码。
37.tp5和tp6区别
目录结构异同 安装方式 tp6只能通过composer安装 类的加载方式 tp5采用自己的一套实现加载方式+composer部分加载方式 tp6采用composer类的加载方式 tp6使用严格模式而tp5没有使用 tp6支持更多的PSR规范(https://learnku.com/docs/psr) 组件独立 (tp6将orm独立出来)(模板引擎) 中间件改进 tp6开始使用了管道模式来实现中间件 比之间的版本实现更加简洁,有序 引入Filesystem组件
38.redis 和 memache 缓存的区别
1)、存储方式: memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小 redis有部份存在硬盘上,这样能保证数据的持久性。 2)、数据支持类型: redis在数据支持上要比memecache多的多。 3)、使用底层模型不同: 新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。 4)、运行环境不同: redis目前官方只支持Linux 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上 memcache只能当做缓存,cache redis的内容是可以落地的,就是说跟MongoDB有些类似,然后redis也可以作为缓存,并且可以设置master-slave
39、什么是构造函数,什么是析构函数,作用是什么?
构造函数(方法)是对象创建完成后第一个被对象自动调用的方法。它存在于每个声明的类中,是一个特殊的成员方法。作用是执行一些初始化的任务。Php中使用__construct()声明构造方法,并且只能声明一个。 析构函数(方法)作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法。是PHP5中新添加的内容作用是用于实现在销毁一个对象之前执行一些特定的操作,诸如关闭文件和释放内存等。
40.$this和self、parent这三个关键词分别代表什么?在哪些场合下使用?
$this 当前对象 self 当前类 parent 当前类的父类 $this在当前类中使用,使用->调用属性和方法。 self也在当前类中使用,不过需要使用::调用。 parent在类中使用。
41、双引号和单引号的区别
双引号解释变量,单引号不解释变量双引号里插入单引号,其中单引号里如果有变量的话,变量解释双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误双引号解释转义字符,单引号不解释转义字符,但是解释’\和\能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)
42.linux常用命令
查看目录pwd 创建文件touch 创建目录mkdir 删除文件rm 删除目录rmdir移动改名文件 mc 查询目录find 修改权限chmod 压缩包 tar 安装 yum install 修改文件vi查看进程ps 停止进程kill 定时任务crontab
43、请解释PHP中的trait是什么?
trait是一种PHP机制,用于实现代码重用和多继承。trait可以定义一组方法和属性,然后在类中使用use关键字来引入trait。引入trait的类可以使用trait中定义的方法和属性,就像自己定义的一样。
44、请解释PHP中的反射是什么?
反射是一种PHP机制,用于动态获取和操作类和对象的信息。在PHP中,可以使用Reflection类和一组相关的类来获取类和对象的属性、方法和注释等信息,也可以动态创建类和对象,以及调用对象的方法和属性。
45、请解释PHP中的SPL是什么?
SPL(Standard PHP Library)是一组PHP标准库,用于提供一些数据结构和算法的实现,以便于开发者快速地实现一些复杂的功能。SPL包含了一些常用的接口和类,例如迭代器、堆栈、队列、链表和排序算法等。
46、请解释PHP中的GD库是什么?
GD库是一种PHP扩展,用于生成和操作图像。GD库提供了一组函数,可以创建和操作图像,例如绘制线条、矩形、圆形和多边形等,也可以处理图像,例如缩放、裁剪和旋转等。
47、请解释PHP中的Memcached是什么?
Memcached是一种高性能的分布式内存对象缓存系统,用于缓存常用的数据和对象,以提高应用程序的性能和可扩展性。在PHP中,可以使用Memcached扩展来连接和操作Memcached服务器,以便于将数据和对象缓存到内存中,并且可以在多台服务器之间共享缓存数据。 希望以上PHP高级面试题及其答案对您有所帮助。
48、请解释PHP中的协程是什么?
协程是一种轻量级的线程,可以在单个线程中实现多个任务的并发执行。在PHP中,可以使用Generator函数来实现协程,Generator函数可以在函数执行过程中暂停和恢复执行,以实现协程的效果。
49、请解释PHP中的并发是什么?
并发是一种多任务处理方式,可以在同一时间内处理多个任务,以提高应用程序的性能和响应速度。在PHP中,可以使用多线程、多进程、协程和异步IO等技术来实现并发。
50、请解释PHP中的异步IO是什么?
异步IO是一种IO操作方式,可以在进行IO操作时不阻塞应用程序的执行,以提高应用程序的性能和响应速度。在PHP中,可以使用swoole扩展来实现异步IO操作,swoole扩展提供了一组异步IO操作的接口,例如异步TCP/UDP服务器、异步HTTP服务器和异步MySQL客户端等。