欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php面试必问的面试问题

程序员文章站 2022-05-12 14:48:51
...
本篇文章内容是php面试中必问的面试问题,在这里分享给大家,也可以给有需要的朋友一点参考,大家一起来看一看吧

相关推荐:《2019年PHP面试题大汇总(收藏)

1、css的定位有哪些方式?以及用法


position 在英文中表示“位置”的意思 它主要是用于实现对元素的定位

在CSS中定位分为三种:

position:fixed 固定定位

position:relatvie 相对定位

position:absolute 绝对定位

position:static  无特殊定位 (默认值)。

注意:

在使用定位属性时,一定要配合定位的坐标来使用!

left表示定位的元素离左边多远

right表示定位的元素离右边多远

top表示定位的元素离上边多远

bottom表示定位的元素离下边多远

1固定定位

语法:

position:fixed

固定定位,它是相对于浏览器窗口来进行定位。不管页面如何滚动,固定定位元素显示的位置不会改变!

特点:

固定定位元素它脱离了标准文档流

固定定位元素的的层级比标准文档流里面的元素要高 所以固定定位元素它会压盖住标准文档流里面的元素

固定定位元素它不再占用空间

固定定位元素它显示的位置不会随着浏览器滚动而滚动

2相对定位

语法:

position:relative;

相对定位它是相对于“原来的自己”来进行定位!

特点:

相对定位元素它没有脱离标准文档流

相对定位元素如果没有设置定位的坐标,那么相对定位元素它还在原来的位置

相对定位元素设置了定位的坐标以后,那么它会在老家留下一个坑

相对定位元素它会将标准文档流中的元素压盖住。

相对定位元素的定位坐标值可以是负数

注意:

相对定位元素它会在老家留下一个坑,所以一般情况下它很少单独使用,相对定位元素它主要是用来配合“绝对定位”元素来使用的。

3绝对定位

语法:

position:absolute;

什么是绝对定位?

绝对定位元素是相对于“祖先定位元素”来进行定位!

什么是祖先定位元素?

绝对定位元素它会先去查找其父元素是否设置了定位的属性

如果有设置定位的属性 那么它就会相对于其父元素来进行定位;

但是如果它的父元素没有设置定位属性 那么它就会去查找其父元素的上一级元素是否设置了定位的属性,

如果有设置就相对于其父元素的上一级元素进行定位

但是如果没有设置 那么会继续往向一级进行查找,

如果其祖先元素都没有设置定位属性,那么它会相对于“浏览器窗口”来进行定位!

①自己设置了绝对定位时:如果父元素没有设置定位属性,那么就相对于body进行定

②自己设置了绝对定位时:如果父元素设置定位属性,那么就会相对于父元素进行定位

③自己设置了绝对定位时:如果父元素设置定位属性,那么就会相对于父元素进行定位

2、用JQ发送AJAX请求时,$.ajax需要配置哪些参数??分别代表什么意义??


jQuery.ajax(options)

参数说明:

options :只有一个参数,要求是JSON格式的数据,其可以设置如下属性:

async :是否异步,true代表异步,false代表同步。默认为true

cache :是否缓存,true代表缓存,false代表不缓存,默认为true

complete :当Ajax状态码为4时所触发的回调函数

contentType :请求头,如果是POST请求,此参数为application/x-www-form-urlencoded

data : 发送Ajax请求时所传递的参数,要求是一个字符串

dataType :期待的返回值类型,可以是text/xml/json数据类型

success :当Ajax状态码为4且响应状态码为200时所触发的回调函数

type :发送的http请求,可以是get,也可以是post

url :请求的url地址

3、什么时候用同步请求??什么时候用异步请求??


一.什么是同步请求:(false)

同步请求即是当前发出请求后,浏览器什么都不能做,必须得等到请求完成返回数据之后,才会执行后续的代码,相当于是排队,前一个人办理完自己的事务,下一个人才能接着办。也就是说,当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面处于一个假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面解除假死状态(即当ajax返回数据后,才执行后面的function2)。
二.什么是异步请求:(true)
异步请求就当发出请求的同时,浏览器可以继续做任何事,Ajax发送请求并不会影响页面的加载与用户的操作,相当于是在两条线上,各走各的,互不影响。
一般默认值为true,异步。异步请求可以完全不影响用户的体验效果,无论请求的时间长或者短,用户都在专心的操作页面的其他内容,并不会有等待的感觉。

4、PHP有哪些魔术方法??


魔术方法包括:

__construct(),类的构造函数

__destruct(),类的析构函数

__call(),在对象中调用一个不可访问方法时调用

__callStatic(),用静态方式中调用一个不可访问方法时调用

__get(),获得一个类的成员变量时调用

__set(),设置一个类的成员变量时调用

__isset(),当对不可访问属性调用isset()或empty()时调用

__unset(),当对不可访问属性调用unset()时被调用。

__sleep(),执行serialize()时,先会调用这个函数

__wakeup(),执行unserialize()时,先会调用这个函数

__toString(),类被当成字符串时的回应方法

__invoke(),调用函数的方式调用一个对象时的回应方法

__set_state(),调用var_export()导出类时,此静态方法会被调用。

__clone(),当对象复制完成时调用

__autoload(),尝试加载未定义的类

__debugInfo(),打印所需调试信息

5、简述get方法和post方法


① 传参方式不同

get请求是在url的尾部传递参数的

post请求是在请求空白行的位置传递参数的

② 传参的大小不同

get请求,其传参的最大值为2kb

post请求理论上是没有任何限制的,但是实际应用中,受到php.ini文件的影响,一般为2M

③ 传参的类型不同

get请求,只能传递字符串

post请求,不仅可以传递字符串还可以传递二进制数据

④ 安全性不同

相对而言,post请求的安全性要略高于get请求

其请求头参数不同

6、PHP中的单词函数


I接收函数

M:实例化基础模型类

D:实例化自定义模型类

U:对URL地址进行组装

7、抽象类和接口又什么区别??


1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以通过关键字extends继承。

2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装

3、接口没有构造函数,抽象类可以有构造函数。

4、接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。

5、一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

共同点:做规范用

抽象类:不能被实例化,只能被继承;通过关键字abstract声明;抽象类中至少要包

含一个抽象方法,该抽象方法没有方法体,天生要被子类重写;

接口:通过interface声明;接口中的成员常量和方法都是 public 的,方法可以不写关键字 public;接口能实现多继承;

使用。抽象类是通过关键字

abstract 来声明的。

抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要 包含一个抽象方法,

抽象方法没有方法体,该方法天生就是要被子类重写的。 抽象方法的格式为:abstract function abstractMethod();

接口是通过 interface 关键字来声明的,接口中的成员常量和方法都是 public 的,方法可 以不写关键字 public,

接口中的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。 抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽

象类还是接口要看具体实现。

子类继承抽象类使用 extends,子类实现接口使用implements。

8、如何理解命名空间??


防止类和函数方法冲突

命名空间可以解决下面两个问题:

(1)用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

(2)为很长的标识符创建一个别名,提高代码的可读性,减少代码的编写量。

9、PHP哪个版本开始支持命名空间??


ThinkPHP3.2

PHP 在 5.3.0 以后的版本开始支持命名空间。

10、PHP拥有那些扩展??


PDO: PHP访问数据库定义的一个轻量级的一致接口。

CURL扩展

GD扩展

Memcache

Mysql

11、SVN出现冲突怎么办??


SVN作用:协同开发。

融合:

更新:

12、如何理解MVC??


MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。

MVC所指的就是在软件设计中一种编程模式。在该模式下会将业务操作、数据显示、数据交互会进行一个拆分操作

M:代表就是具体的模型(model) 主要作用就是与数据库进行数据交互

V:代表就是具体的视图(view)主要作用就是与用户进行数据交互

C:代表就是具体的控制器(controller)主要作用就是处理具体的业务逻辑

由模型(model),视图(view),控制器(controller)完成的应用程序,model 层负责提供数据,和数据库有关的操作都交给模型层来处理,view 层则提供交互的界面,并输出数据,而 controller 层则负责接收请求,并分发给相应的 model 来处理,然后调用 view 层来显示。

13、商品表里有哪些字段??

商品id,商品名称,商品货号,商品分类id,市场售价,本店售价,商品缩略图,商品缩略小图,是否热卖 1表示热卖 0表示不是,是否推荐 1表示推荐 0表示不推荐,是否热卖 1表示新品 0表示不是,添加时间,表示商品是否删除 1正常 0删除状态,商品是否销售 1销售 0下架状态,

14、相同商品ID的属性不同,怎么办??

商品表中的属性存成一个集合,属性表

15、cookie跟session


对比一下两者,有以下几点不同:

1.作用位置:cookie是在客户端保存用户信息,session实在服务器端保存用户信息;

2.保存内容:cookie保存的是字符串,session中保存的是对象;

3.作用时间:cookie可以长期保存在客户端,session随会话结束而关闭;

4.一般cookie保存不重要的用户信息,重要的信息由session保存。

5、cookie分为两种:会话cookie和文件Cookie。会话cookie当浏览器关闭时,数据消失,文件Cookie是将数据存储在一个文件中,设置过期时间,关闭浏览器后,若没到过期时间,再次打开浏览器,数据还存在。

16、购物车的实现原理


分两种情况:

1、用户没有登录,将数据存储在cookie中,若用户登录,再将cookie中的数据转存到数据库。

2、用户登录后,将数据直接存储到数据库。

17、RBAC权限管理

基于角色的权限访问控制(Role-Based Access Control)

五张表:两个中间表 admin、role、rule、admin_role、role_rule

三张表:一个中间表

通过代码控制不同的管理员是否能够访问某个方法的过程就是权限控制。


RBAC(Role-Based AccessControl,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。

18、如何理解接口开发

先下载第三方接口文件,

19、短信验证码如何防止短信轰炸??

JS客户端验证验证

手机号限制短信条数(计数器)

(一)增加图形验证

恶意攻击者采用自动化工具,调用“动态短信获取”接口进行动态短信发送,原因主要是攻击者可以自动对接口进行大量调用。
采用图片验证码可有效防止工具自动化调用,即当用户进行“获取动态短信” 操作前,弹出图片验证码,要求用户输入验证码后,服务器端再发送动态短信到用户手机上,该方法可有效解决短信轰炸问题。

安全的图形验证码必须满足如下防护要求

- 生成过程安全:图片验证码必须在服务器端进行产生与校验;
- 使用过程安全:单次有效,且以用户的验证请求为准;
- 验证码自身安全:不易被识别工具识别,能有效防止暴力破解。

图形验证的示例:

(二)单IP请求次数限制

使用了图片验证码后,能防止攻击者有效进行“动态短信”功能的自动化调用;
但若攻击者忽略图片验证码验证错误的情况,大量执行请求会给服务器带来额外负担,影响业务使用。建议在服务器端限制单个 IP 在单位时间内的请求次数,一旦用户请求次数(包括失败请求次数)超出设定的阈值,则暂停对该 IP 一段时间的请求;若情节特别严重,可以将 IP 加入黑名单,禁止该 IP 的访问请 求。该措施能限制一个 IP 地址的大量请求,避免攻击者通过同一个 IP 对大量用户进行攻击,增加了攻击难度,保障了业务的正常开展。

(三)限制发送时长

建议采用限制重复发送动态短信的间隔时长, 即当单个用户请求发送一次动态短信之后,服务器端限制只有在一定时长之后(此处一般为60秒),才能进行第二次动态短信请求。该功能可进一步保障用户体验,并避免包含手工攻击恶 意发送垃圾验证短信。

完整的动态短信验证码使用流程

20、商品的图片上传是怎么处理的??

21、如何设置session的有效期??

22、支付的同步回调和异步回调??


具体同步回调跟异步回调

同步回调作用:实现当用户支付完成之后能够跳转到对应的商户页面(确保用户支付完成之后能够正确的对用户的支付做一个处理操作)

异步回调作用:确保商户对用户的支付做了一个正确的处理

23、支付宝的支付流程?


1、申请支付宝账户信息,得到相应的APPID与公钥(交给支付宝)、私钥(自己保存)

2、下载官方文档,在本地搭建demo测试,config.php中设置APPID、同步异步回调地址、支付宝私钥等信息。

3、创建后台应用

4、具体使用代码实现支付功能

24、支付宝异步回调的作用??


异步回调作用:确保商户对用户的支付做了一个正确的处理

1、确保同步没执行,异步单方面请求。()

2、解决掉单问题

3、比较安全

同步回调作用:实现当用户支付完成之后能够跳转到对应的商户页面(确保用户支付完成之后能够正确的对用户的支付做一个处理操作)(get方式)

异步回调作用:确保商户对用户的支付做了一个正确的处理(post方式)

25、商品模块的多维属性

26、Linux常用的命令

查找文件:

find

-name根据文件名字进行查找

-group :根据文件的所属组进行搜索

-user :根据文件的拥有者进行搜索

locate指令,用于检索数据

locate 文件名称

df指令:显示磁盘信息

-l :显示本地磁盘信息

-h :以1024进制显示磁盘信息

-H :以1000进制显示磁盘信息

-T :显示磁盘格式信息

-t :显示指定格式的磁盘信息

cd 用户名:进入用于

cd ~ :回到家

yy:复制 p :粘贴

vim 文件名: 查看文件

27、hppt的状态码??

1、301 MovedPermanently:被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。永久重定向

2、302 Move temporarily:请求的资源临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求

3、404 Not Found:请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的

4、200 OK:请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是


表示正常状态。

200(成功):服务器已成功处理了请求。通常,这表示服务器提供了请求的网页
201(已创建):请求成功并且服务器创建了新的资源
202(已接受):服务器已接受请求,但尚未处理
203(非授权信息):服务器已成功处理了请求,但返回的信息可能来自另一来源
204(无内容):服务器成功处理了请求,但没有返回任何内容
205(重置内容):服务器成功处理了请求,但没有返回任何内容
206 (部分内容):服务器成功处理了部分GET 请求
404(未找到):服务器找不到请求的网页
500(服务器内部错误):服务器遇到错误,无法完成请求

28、require与include


require()语句的性能与include()相类似,都是包括并运行指定文件。

不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估;报错时不会阻止后面的代码运行;而对于require()来说,文件只处理一次(实际上,文件内容替换require()语句)。这就意味着如果可能执行多次的代码,则使用require()效率比较高。另外一方面,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用include()语句

incluce在用到时加载

require在一开始就加载

29、Linux系统中怎么编译PHP程序的扩展??

1、找到软件压缩包,解压

2、编译make &&make install

3、配置php.ini

4、重启Apache

30、对事务的理解


逻辑上的一组操作,含有几个组成部分,这几个部分构成一个整体,操作要么全部成功,要么全部失败并返回原状态!

在执行SQL语句之前,先执行start transaction,这就开启了一个事务(事务的起点),然后可以去执行多条SQL语句,最后要结束事务,commit表示提交,即事务中的多条SQL语句所做出的影响会持久化到数据库中。或者rollback,表示回滚,即回滚到事务的起点,之前做的所有操作都被撤消了!

事务的四大特性(ACID)

原子性(Atomicity):事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。

一致性(Consistency):事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。

隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。

持久性(Durability):一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

31、

PHP获取当前时间 time()

Php截取字符串:substr函数

PHP查找字符串中是否有子串:

32、五个有关数组处理函数?

In_array:判断数组中是否存在某个元素

array_reverse() 将数组中的元素倒叙,返回值为倒叙之后的数组。

array_splice(array1,start,length,array2) 从数组中移除相应的元素,并用新元素替换它

array_push() (进栈)向数组的尾部添加一个或多个元素,

array_pop() (出栈)从数组的中删除最后一个元素

33、跨域请求有哪几种方式??

JSONP

CORS

34、存储引擎有几个?有什么区别??

Mysiam与innodb


MyISAM 类型不支持事务处理等高级处理,而 InnoDB 类型支持。
MyISAM 类型的表强调的是性能,其执行速度比 InnoDB 类型更快,但是不提供事务支持,而 InnoDB 提供事务支持以及外部键等高级数据库功能。
创建索引:alert tabletablename add index (`字段名`)

35、Redis默认端口号?数据类型?


6379

String、hash、list(链表)、set(集合)、zset(有序集合)

36、Redis实用案例--抢购秒杀、计数器、推荐、收藏案例

秒杀:


使用Redis的list链表,pop操作,即使是很多用户同时到达也是依次执行

1、现将商品表的库存存入队列

2、抢购开始,设置库存的缓存周期

3、客户端执行下单操作,下单前判断redis队列库存量

计数器:

37、MySQL中的左链接跟右链接有什么区别??


Left join(左联接):是已左表为准,左表中的记录都会出现在查询结果中,如果右表没有相匹配的记录,则以 null 填充。

Right join(右联接):是以右表为准,右表中的记录都会出现在查询结果中,如果左表没有相匹配的记录,则以 null 填充。

Inner join(内联接):两张表地位是平等的,符合联接条件的记录才会出现在查询结果中。

38、memcache默认端口号??,Memcache跟Redis的区别??

27017,28017


Memcache 缓存是把所有的数据保存在内存中,采用hash 表的方式,把每条数据有 key 和 value 组成,每个 key 独一无二的,当要访问的某个值的时候先按照找到值,然后在返回结果,Memcache采用 LRU 算法来逐渐把过期的数据清除掉

39、mysql锁机制

40、数据库优化从哪几个方面做??

1、设计数据库方面

2、建立索引

3、读写分离

4、缓存

41、电商项目中,商品库存什么时候会发生变化??


1、添加商品时,商品库存增加。库存表针对不同的属性,添加

2、订单支付成功时,库存会减少

3、订单支付失败,库存不会减少

4、客户退货,库存增加

42、优化MySQL的查询

1、避免全表查询,给相应字段建立索引

2、避免查询语句过长,分批查询。

3、where后面不能有函数运算

4、左原则like第一个字段要有索引

5、在where和group by后面建立索引

相关推荐:

PHP面试题目整理分享

php面试中长见问题记录

以上就是php面试必问的面试问题的详细内容,更多请关注其它相关文章!

相关标签: php 问题 面试