php 面试题总结:

it2022-05-06  5

1 MySQL中myisam与innodb的区别,至少5点

1>.InnoDB支持事物,而MyISAM不支持事物

2>.InnoDB支持行级锁,而MyISAM支持表级锁

3>.InnoDB支持外键,而MyISAM不支持

4>.InnoDB不支持全文索引,而MyISAM支持。

5> InnoDB索引和数据存储中一起,MyISAM 索引文件单独存储

6> InnoDB 适合用于修改比较多的场景,MyISAM适合读比较多的场景,比如日志表

2 MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义(1)、varchar与char的区别

char是一种固定长度的类型,varchar则是一种可变长度的类型,存储字符串的实际长度。

varchar(50)中50的涵义最多存放50个字符,

char(50)中50的涵义最多存放50个字符,

varchar(50)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度

 (3)、int(20)中20的涵义是指显示字符的宽度括号内指示最大显示宽度。20表示最大显示宽度为20,但仍整形仍然只占4字节存储,存储范围不变; (4)、mysql为什么这么设计 对大多数应用没有意义,只是规定一些工具用来显示字符的个数;int(1)和int(20)存储和计算均一样;

 

3、MySQL的复制原理以及流程

基本原理流程,3个线程以及之间的关联;

1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中;

2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中;

3. 从:sql执行线程——执行relay log中的语句;

4 sql优化方法

(1)、explain出来的各种item的意义;

①select_type 表示查询中每个select子句的类型

②Type 表示MySQL在表中找到所需行的方式,又称“访问类型”

③possible_keys 指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用

④key 显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL⑥key_len  表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度⑦rows 要检索的行数(预估值)

5 drop,delete和truncate 区别

    drop      表级的删除;不能回滚;

     truncat 清空表;不记录单行删除日志;无法恢复;只能对于TABLE操作;不能在带FOREIGN KEY约束的表(被引用的表)中使用;计数从头开始;

   delete   配合where删除数据;会记录日志用于回归;会触发触发器;不减少索引和表的空间;

6 解释MySQL交叉连接 外连接、内连接与自连接的区别

内连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出现在结果集中,即内连接只连接匹配的行。外连接 其结果集中不仅包含符合连接条件的行,而且还会包括左表、右表或两个表中 的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接。

左外连接,也称左连接,左表为主表,左表中的所有记录都会出现在结果集中,对于那些在右表中并没有匹配的记录,仍然要显示,右边对应的那些字段值以NULL来填充。右外连接,也称右连接,右表为主表,右表中的所有记录都会出现在结果集中。左连接和右连接可以互换,MySQL目前还不支持全外连接。

7 说一说什么是外键,优缺点

答:

外键指的是外键约束,

目的是保持数据一致性,完整性,

控制存储在外键表中的数据,使两张表形成关联

外键只能引用外表中列的值;

优点

由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。外键在一定程度上说明的业务逻辑,会使设计周到具体全面。

缺点

可以用触发器或应用程序保证数据的完整性;过分强调或说使用外键会平添开发难度,导致表过多,更改业务困难,扩展困难等问题;不用外键时数据管理简单,操作方便,性能高

9 索引是什么?索引能干什么?索引的分类?

索引是帮助MySQL高效获取数据的数据结构。

索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引能够轻易将查询性能提高好几个数量级,总的来说就是可以明显的提高查询效率。

普通索引:即一个索引只包含单个列,一个表可以有多个单列索引

唯一索引:索引列的值必须唯一,但允许有空值

复合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

10 请说明 PHP 中传值与传引用的区别,什么时候传值什么时候传引用?

按值传递:函数范围内对值的任何改变在函数外部都会被忽略

按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改

优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作;按引用传递则不需要复制值,对于性能提高很有好处。

11 说一下单引号双引号?

单引号内部的变量不会执行, 双引号会执行

单引号解析速度比双引号快。

单引号只能解析部分特殊字符,双引号可以解析所有特殊字符。

12 Mysql的读写分离?

读写分离的实现原理就是在执行SQL语句的时候,判断到底是读操作还是写操作,把读的操作转向到读服务器上(从服务器,一般是多台),写的操作转到写的服务器上(主服务器,一般是一台,视数据量来看)。

13 PHP的基本变量类型

四种标量类型:boolean (布尔型)、integer (整型)、float (浮点型, 也称作 double)、string (字符串)

两种复合类型:array (数组)、object (对象)

两种特殊类型:resource(资源)、NULL(NULL)

 

14 语句include和require的区别是什么?

require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示致命错误,并且会终止程序执行

include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的话,那么会提示一个警告,但是程序会继续执行下去

15.表单中 get与post提交方法的区别? 答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.

16 session与cookie的区别? 答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放    cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。     两者都可通过时间来设置时间长短

17:面向对象的特征,封装性的定义,使用和好处是什么?

封装,继承,多态

封装性:封装性就是把对象的属性和行为结合成一个独立的单位。 封装一个类需要两步 第一步是私有化一个类 第二步是用set和get 做出读取赋值的操作 他的好处是:隐藏类的实现细节,可以方便加入逻辑控制性,限制对属性的不合理操作,便于修改增强代码的可维护性。

封装性:封装性就是把对象的属性和行为结合成一个独立的单位。

封装一个类需要两步 第一步是私有化一个类 第二步是用set和get 做出读取赋值的操作

他的好处是:隐藏类的实现细节,可以方便加入逻辑控制性,限制对属性的不合理操作,便于修改增强代码的可维护性。

18 抽象类和接口的区别

1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以通过关键字extends继承。 2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。(另JAVA接口中的成员变量都要声明为public static final类型) 3、接口没有构造函数,抽象类可以有构造函数。

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

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

19 DO和Mysqli对比分析与总结归纳

 PDOMysqli数据库类型支持很多仅支持mysqlAPIOOPOOP+面向过程连接容易容易对象映射支持支持

20 HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

 

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

21 HTTP常见状态码

200 OK:表示从客户端发送给服务器的请求被正常处理并返回。

301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL;

302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL;

       301与302的区别:前者是永久移动,后者是临时移动(之后可能还会更改URL)

      302与303的区别:后者明确表示客户端应当采用GET方式获取资源

304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码;

4xx (4种)

400 Bad Request:表示请求报文中存在语法错误;

401 Unauthorized:未经许可,需要通过HTTP认证;

403 Forbidden:服务器拒绝该次访问(访问权限出现问题)

404 Not Found:表示服务器上无法找到请求的资源,除此之外,也可以在服务器拒绝请求但不想给拒绝原因时使用;

5xx (2种)

500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时;

502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。

503 Server Unavailable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求;


最新回复(0)