PHP面试基础题之一

4 篇文章 0 订阅

1、echo,print,printf(),sprintf(),print_r(),var_dump()的区别。

答:

echo 用于输出变量或字符串,他是一个PHP语句,并非一个函数,所以他并不存在返回值。

print 同echo一样 print也不是一个函数 因此无需对其使用括号,但print稍慢于echo,需要注意的是使用print() 加上括号时会返回1。

printf()函数用于输出格式化字符串,sprintf()函数返回一个格式化后的字符串,而不是输出。

print_r()函数用于打印关于变量的易于理解的信息。

var_dump()函数用于打印变量的内容,类型,长度等。

<?php

echo "aaa ","bbb ","ccc "; //aaa bbb ccc
echo("aaa");    //aaa
//echo("aaa","bbb");//会报错,不可以传递多个参数。

print "aaa"; //aaa
$a = print("aaa"); //$a = 1

$str = "aaa";
$b = print_r($str); //打印输出 ,并返回1.
echo $b; // 1

$b = print_r($str,true); //不打印输出,将$str作为返回值。
echo $b; // aaa

printf("My name is %s %s","朱","某某"); //My name is 朱 某某

//在s前添加1\$或2\$...表示后面的参数显示的位置
printf("My name is %s %1\$s","朱","某某");  //My name is 朱 朱

sprintf("My name is %s %s","朱","某某"); //没有任何输出
$c = sprintf("My name is %s %s","朱","某某");
echo $c;    //My name is 朱 某某

2、表单中get与post提交方法的区别。

答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息。

3、session与cookie的区别。

答:session:存储用户访问的全局唯一变量,存储在服务器上的PHP指定的目录中的(session_dir)的位置进行的存放。

cookie:用来存储连续访问一个页面时所使用,是存储在客户端,对于Cookie来说是存储在WIn的Temp目录中。

两者都可通过时间来设置时间长短。


4、禁用Cookie后,Session还可以用吗,有什么解决方案?

第一种:通过url传值,把session_id附加到url上。(缺点:整个站点中不能有纯静态的页面,因为纯静态页面session_id将无法继续传到下一页面)

第二种:通过隐藏表单,把session_id放到表单的隐藏文本框中同表单一块提交。(缺点:不适用<a>标签之中直接跳转的非表单的情况)


5、HTTP和HTTPS的区别。

答:HTTP效率更高,HTTPS安全性更高。

HTTP:超文本传输协议,信息明文传输,是互联网上应用最为广泛的网络协议。HTTP使用的端口号是80,HTTP协议是无状态的(所以采用session或cookie去标识用户状态)。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS使用的端口443,HTTPS协议需要到ca申请证书,一般免费的证书很少,需要交费。


6、数据库中的事务是什么?事务的四个特性?

答:事务是指用户定义的 一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

事务具有4个特征:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这4个特性简称为ACID特性。

原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性:事务执行的结果必须是使数据库从一个一致性状态变到了一个一致性状态。

隔离性:一个事务的执行不能被其他事务干扰。

持续性:持续性也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久的。


7、索引的最左前缀原则?

答:也是最左优先,比如为name,age,city三个列建立多列索引,相当于创建了name和name,age组合索引和name,age,city的组合索引。如果where条件选择的是age and city 或 age 、city这些字段来查,则不会使用到索引,会遍历全表查找。一般情况下,where子句中使用最频繁的一列放在最左边。


8、MySql存储引擎MyISAM与InnoDB区别。

答:Mysql中有很多引擎,InnoDB和MyISAM是最常使用的两种,其中MyISAM是MySql默认存储引擎。

事务:InnoDB支持事务功能,MyISAM不支持并且MyISAM的执行速度更快且性能更好。

数据操作语言:MyISAM引擎适合执行大量select操作,InnoDB引擎适合执行大量的inset或update操作。

锁机制:MyISAM锁的粒度是表级即表级锁,InnoDB支持行级锁定即行级锁。

物理结构:MyISAM表存放在三个文件中:frm文件存放表格定义,数据文件是MYD(MyData),索引文件是MYI(MYIndex)。

    InnoDB表由共享空间、日志文件组(rado文件)、表结构定义文件组成。若将innodb_file_pre_table设置为on,则系统将为每个表单独生成一个table_name.ibd的文件,在此文件中存储与表相关的数据、索引、表的内部数据字典信息等。

索引:MyISAM支持全文类型索引,InnoDB不支持全文索引。

查询表的行数:比如执行select count(*) from table ,MyISAM引擎,表的行数存储在表中,没有使用where条件 可以直接读取出保存好的行数,所以效率较高。

    InnoDB中不保存表的具体行数,需要扫描一遍整个表来计算多少行,所以效率较低。

总结:MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要大量使用select查询,那么MyISAM是更好的选择。

   InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务。如果应用中需要执行大量的insert或update操作,则应该使用InnoDB。


9、语句include和require的区别是什么?为避免多次包含同一个文件,可用(?)语句代替他们?

答:include()在执行文件时每次都要进行读取和评估,require()文件只处理一次(实际上文件内容替换了require语句)

require()和include()语句是语言结构,不是真正的函数,可以像PHP的其他语言结构一样。他们最根本的区别在于错误处理的方式不一样。 

require()包含文件失败,停止执行,给出错误(致命的)。

include()常用于动态包含,通常是自动加载的文件,即使加载出错,程序也不会中端,而是继续执行,并显示一个警告错误。 

include_once()和require_onec()语句也是在脚本执行期间包括并运行指定文件,与include()require()唯一的区别是如果文件中的代码已经被包括了,则不会再次包括。


10、PHP中接口和抽象类的对比:

1.作用相同,都不能创建对象,都需要子类实现。
2.声明不一样。
3.接口和抽象类的实现方式不一样。
4.接口中所有方法都是抽象方法(不用使用abstract修饰)。
5.接口中的成员属性,只能声明常量,不能声明变量。
6.接口中的成员访问权限都必须是public,抽象类中最低的权限protected。
7.抽象类只要有一个方法是抽象方法,即可使用abstract关键字来修饰声明。
   接口中所有方法都是抽象方法,即可使用interface关键字来声明接口。


11、HTTP常见状态码

1xx 表示消息,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。

2xx 表示成功,代表请求已被服务器接受、理解并接受。
200 服务器成功处理了请求并提供请求的页面。
202 服务器已接受请求,但尚未处理。最终该请求可能会执行,也可能不执行。
204 服务器成功处理了请求,但没有返回任何内容。

3xx 表示重定向,代表需要客户端采用进一步的操作才能完成请求。
301 表示客服端请求的文档在其他地方,新的URL地址在Location头中给出,浏览器应该自动访问新的URL。
302 临时重定向,类似于301,但新的URL应该被视为临时性的代替,而不是永久性的。
304 客户端有缓存的文档并发出一个条件性的请求。服务器告诉客户,原来缓存的文档还可以继续使用。

4xx 表示请求错误,代表客户端看起来可能发生了错误,妨碍了服务器的处理。
400 请求出现语法错误。
401 请求要求身份验证(未授权),对于需要登录的页面,服务器可能返回此响应。
403 服务器拒绝请求(禁止)。
404 服务器找不到请求的页面(未找到)。
408 服务器等待请求时放生超时。

5xx 表示服务器错误,代表服务器在处理请求的过程中有错误或异常状态发生,也可能是服务器意识到以前的软件资源无法完成对请求的处理。
500 服务器遇到错误,无法完成请求(服务器内部错误)。
501 服务器不具备完成请求的功能(尚未实施)。
503 服务器目前无法使用(超载或停机维护,服务器不可用)。
505 服务器不支持请求中所用的HTTP协议版本。

12、谈谈对MVC的认识。

答:mvc是一种使用模型(model)、视图(view)、控制器(controller)设计创建应用程序的模式。
Model(模型)是应用程序中用于处理数据逻辑的部分,通常负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
优点:耦合性低,重用性高,声明周期成本低。
缺点:没有明确的定义,不适合小型,中等规模的应用程序。增加系统结构个实现的复杂性。


13、请说明PHP中传值和引用的区别。什么时候传值什么时候引用?

答: 传值:函数范围内对值的任何改变在函数外部都会被忽略。
 引用:函数范围内对值的任何改变在函数外部也能反映出这些修改。
优缺点:按值传递时,PHP必须复制值。特别是对大型的字符串和对象来说,这将是一个代价很大的操作。引用传递不需要复制值,对于性能提高有很大好处。

14、foo()和@foo()有什么区别?

答:foo()会执行这个函数时,任何解释错误、语法错误、执行错误都会显示在页面上。
@foo()在执行时,会隐藏解释错误、语法错误、执行错误的错误信息。


15、Mysql中char和varchar的区别。

答:char是一种固定长度的类型,varchar()则是一种可变长度的类型。
char(m)表示每个值都占用m个字符,如果某个长度小于m,Mysql就会在它的右边使用空格字符补足。
varchar(m)表示每个值只占刚好够用的字节在再加上一个用于记录其长度的字节(即L+1字节)。






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值