PHP面试题每天10道(1)

文章目录

  • 1.php中单引号和双引号包含字符串有何区别区别?
  • 2.sql语句执行的顺序?
  • 3.HTTP常用的状态码
  • 4.PHP报错级别有哪些?
  • 5.什么是面向对象?主要特征是什么?有哪些原则呢?
  • 6.SESSION 与 COOKIE的区别有哪些?
  • 7.get和post的区别有哪些?
  • 8.include和require的区别是什么?
  • 9.redis和memcacahe的区别有哪些?
  • 10.如何处理负载,高并发等问题?

1.php中单引号和双引号包含字符串有何区别区别?

在PHP定义字符串的时候,在速度上,单引号和双引号没有差别,但是单引号中的字符全部是原样输出,而双引号可以解析变量和转义字符。

2.sql语句执行的顺序?

PHP面试题每天10道(1)_第1张图片可以看出图片中一共有十一个步骤,最先执行的是FROM操作,最后执行的是LIMIT操作。每个操作都会产生一个虚拟表,该虚拟表作为一个处理的输入,看下执行顺序:
(1) FROM:对FROM子句中的左表和右表执行笛卡儿积,产生虚拟表VT1;
(2) ON: 对虚拟表VT1进行ON筛选,只有那些符合的行才被插入虚拟表VT2;
(3) JOIN: 如果指定了OUTER JOIN(如LEFT OUTER JOIN、RIGHT OUTER JOIN),那么保留表中未匹配的行作为外部行添加到虚拟表VT2,产生虚拟表VT3。如果FROM子句包含两个以上的表,则对上一个连接生成的结果表VT3和下一个表重复执行步骤1~步骤3,直到处理完所有的表;
(4) WHERE: 对虚拟表VT3应用WHERE过滤条件,只有符合的记录才会被插入虚拟表VT4;
(5) GROUP By: 根据GROUP BY子句中的列,对VT4中的记录进行分组操作,产生VT5;
(6) CUBE|ROllUP: 对VT5进行CUBE或ROLLUP操作,产生表VT6;
(7) HAVING: 对虚拟表VT6应用HAVING过滤器,只有符合的记录才会被插入到VT7;
(8) SELECT: 第二次执行SELECT操作,选择指定的列,插入到虚拟表VT8中;
(9) DISTINCT: 去除重复,产生虚拟表VT9;
(10) ORDER BY: 将虚拟表VT9中的记录按照进行排序操作,产生虚拟表VT10;
(11) LIMIT: 取出指定街行的记录,产生虚拟表VT11,并返回给查询用户

3.HTTP常用的状态码

状态码的类别:
PHP面试题每天10道(1)_第2张图片
1XX系列:
100:客户端应继续其请求
101:服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
2XX系列:
200:请求成功。一般用于GET与POST请求
202:已接受。已经接受请求,但未处理完成
204:无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
3XX系列:
300:多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301:永久性重定向。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302:临时性重定向。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303:查看其它地址。与301类似。使用GET和POST请求查看
304:资源已找到,但未符合条件请求
4XX系列:
400:客户端请求的语法错误,服务器无法理解
401:该状态码表示发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息
403:不允许访问那个资源。该状态码表明对请求资源的访问被服务器拒绝了。(权限,未授权IP等)
404:服务器上没有请求的资源。路径错误等。
5XX系列:
500:服务器内部错误,无法完成请求
501:服务器不支持请求的功能,无法完成请求
502:为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503:由于超载或系统维护,服务器暂时的无法处理客户端的请求。
504:充当网关或代理的服务器,未及时从远端服务器获取请求

4.PHP报错级别有哪些?

一般的报错: E_NOTICE注意、E_WARNING警告、E_ERROR致命错误
PHP面试题每天10道(1)_第3张图片

5.什么是面向对象?主要特征是什么?有哪些原则呢?

面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。
三大特性:封装、继承、多态
五大基本原则:单一职责原则SRP、开放封闭原则OCP、里式替换原则LSP、依赖倒置原则DIP、接口分离原则ISP

6.SESSION 与 COOKIE的区别有哪些?

SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Session依赖于cookie进行传递。禁用cookie后,session还可以使用,在存储session的文件中,生成sessionID,通过get传参的方式将sessionID传到要实现session共享的页面,读取sessionID,从而从session中获取数据。

7.get和post的区别有哪些?

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

8.include和require的区别是什么?

require()语句的性能与include()相类似,bai都是包括并运行指定文件du。不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估;而对于require()来说,文件只处理一次(实际上,文件内容替换require()语句)。这就意味着如果可能执行多次的代码,则使用require()效率比较高。另外一方面,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用include()语句。
incluce在用到时加载,include的文件中出错了,主程序继续往下执行
require在一开始就加载,require的文件出错了,主程序也停了,所以包含的文件出错对系统影响不大的话(如界面文件)就用include,否则用require。
_once后缀表示已加载的不加载

9.redis和memcacahe的区别有哪些?

1、Redis和Memcache都是将数据存放在内存中。不过memcache还可用于缓存其他东西,例如图片、视频等等
2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘 .
4、过期策略–memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10
5、分布式–设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从
6、存储数据安全–memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化),支持持久化,服务器重启,缓存依然可以获取。(这个很重要哦)
7、灾难恢复–memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复
8、Redis支持数据的备份,即master-slave模式的数据备份

10.如何处理负载,高并发等问题?

1、HTML静态化
效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的 网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。
2、图片服务器分离
把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如七牛等
3、数据库集群和库表散列及缓存
数据库的并发连接为100,一台数据库远远不够,可以从读写分离、主从复制,数据库集群方面来着手。另外尽量减少数据库的访问,可以使用缓存数据库如memcache、redis。
4、镜像:
尽量减少下载,可以把不同的请求分发到多个镜像端。
5、负载均衡:
Apache的最大并发连接为1500,只能增加服务器,可以从硬件上着手,如F5服务器。当然硬件的成本比较高,我们往往从软件方面着手。

你可能感兴趣的:(php,mysql,redis,http,java)