PHP面试经验

问题:如果require一个不存在的文件,怎样让代码不报错继续执行?
回答:require改为include
解析:include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码,require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。


问题:get和post的区别
回答:

get参数通过url传递,post放在request body中。
get请求在url中传递的参数是有长度限制的,而post没有。
get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。
get请求只能进行url编码,而post支持多种编码方式
get请求会浏览器主动cache,而post支持多种编码方式。
get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
GET产生一个TCP数据包;POST产生两个TCP数据包。
长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

问题:说出你能想到的HTTP状态码并且说明代表什么。
回答:

100:客户端应当继续发送请求。
200:请求已成功,请求所希望的响应头或数据体将随此响应返回。
301:永久重定向
302:一次性重定向
401:当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。
403:服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。
404:请求失败,找不到资源。
500:服务器内部错误。
502:网关错误,从上游服务器接收到无效的响应,例如nginx和apache端就已经出错。

问题:列出常用的content-type并说明。
回答:

application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。
application/json:json格式
multipart/form-data: 上传用的。
text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。postman软件里标的是RAW。

问题:mysql联合缓存有a,b,c三个字段,有哪些where查询缓存有效?
回答:where a and b 完全发挥作用, where a and c a部分发挥作用


问题:Mysql并发时经典常见的死锁原因及解决方法
回答:https://www.cnblogs.com/zejin2008/p/5262751.html


问题:myisam和innodb引擎有何区别?
回答:

InnoDB:
支持事务处理等
不加锁读取
支持外键
支持行锁
不支持FULLTEXT类型的索引
不保存表的具体行数,扫描表来计算有多少行
DELETE 表时,是一行一行的删除
InnoDB 把数据和索引存放在表空间里面
跨平台可直接拷贝使用
InnoDB中必须包含AUTO_INCREMENT类型字段的索引
表格很难被压缩

MyISAM:
不支持事务,回滚将造成不完全回滚,不具有原子性
不支持外键
不支持外键
支持全文搜索
保存表的具体行数,不带where时,直接返回保存的行数
DELETE 表时,先drop表,然后重建表
MyISAM 表被存放在三个文件 。frm 文件存放表格定义。 数据文件是MYD (MYData) 。 索引文件是MYI (MYIndex)引伸
跨平台很难直接拷贝
MyISAM中可以使AUTO_INCREMENT类型字段建立联合索引
表格可以被压缩

选择:
因为MyISAM相对简单所以在效率上要优于InnoDB.如果系统读多,写少。对原子性要求低。那么MyISAM最好的选择。且MyISAM恢复速度快。可直接用备份覆盖恢复。
如果系统读少,写多的时候,尤其是并发写入高的时候。InnoDB就是首选了。
两种类型都有自己优缺点,选择那个完全要看自己的实际类弄。

问题:http和websocket的区别
回答:

1. http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也必须要有三次握手才能发送信息。

  http链接分为短链接,长链接,短链接是每次请求都要三次握手才能发送自己的信息。即每一个request对应一个response。长链接是在一定的期限内保持链接。保持TCP连接不断开。客户端与服务器通信,必须要有客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。

2. WebSocket 

  WebSocket他是为了解决客户端发起多个http请求到服务器资源浏览器必须要经过长时间的轮训问题而生的,他实现了多路复用,他是全双工通信。在webSocket协议下客服端和浏览器可以同时发送信息。

建立了WenSocket之后服务器不必在浏览器发送request请求之后才能发送信息到浏览器。这时的服务器已有主动权想什么时候发就可以发送信息到服务器。而且信息当中不必在带有head的部分信息了与http的长链接通信来说,这种方式,不仅能降低服务器的压力。而且信息当中也减少了部分多余的信息。  

问题:redis可以实现哪些功能?redis有哪几种数据结构?redis如何持久化数据?redis和memcache有什么区别?
回答: redis可以实现缓存和利用pub/sub+list实现消息队列,但是不推荐使用redis做消息队列,推荐使用rabbitmq等,有string、set、zset、list、hash数据结构,redis有两种持久化数据方式,一种是rdb隔一段时间持久化一次,另一种是aof把每一次操作记录通过日志方式持久化。redis与memcache的区别有:都是内存数据库,redis数据格式不只是字符串,又五种结构,redis可以持久化数据,当内存用完时redis可以使用磁盘交换,redis支持分布式


问题:mysql有哪些常用优化?
回答:

1、选中最适用的字段属性,尽量把字段设置为not null
2、使用join代替子查询
3、使用union查询来代替临时表
4、使用索引,多字段索引要注意顺序
5、开启慢查询日志,针对慢查询sql进行优化
6、使用explain分析性能优化
7、删除不用的索引
8、表字段过多可以垂直拆分,一个表拆成多个表
9、单表数据量太大,可以进行分区分表
10、配置数据库主从复制,读写分离
11、读大于写用myisam引擎,写大于读用innodb引擎
12、sql语句尽量能够使用到mysql的缓存,就是尽量少使用mysql自带的函数
13、只返回必要的列:最好不要使用 SELECT * 语句;只返回必要的行:使用 LIMIT 语句来限制返回的数据。

猜你喜欢

转载自blog.csdn.net/panco_/article/details/89739028
今日推荐