php面试题收集与整理(一)

1.谈谈对MVC的认识?

MVC是一种设计模式,他强制性的使应用程序的输入/处理/输出分开,应用程序被分化成三个核心部件:模型、视图、控制器。

视图是用户看到并与之交互的办面。

模型表示业务模型与企业规则

控制器接入用户输入并调用模型与视图去完成用户的需求。

MVC优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速部署、有利于软件工程化管理

MVC缺点:没有明确的定义,完全理解MVC并不容易.不适合小型规模的应用程序.

2.php如何抛出和接收错误?

try{....}catch(){.....}如果没有触发异常,继续执行.如果异常被触发就会抛出一个异常.catch代码捕获悍异常,并创建一个包含异常性的对象.$e->getMessage();

实例1.

[php] 
  1. <?php  
  2. try {  
  3.     $error = 'Always throw this error';  
  4.     throw new Exception($error);  
  5.   
  6.     // 从这里开始,tra 代码块内的代码将不会被执行  
  7.     echo 'Never executed';  
  8.   
  9. } catch (Exception $e) {  
  10.     echo 'Caught exception: ',  $e->getMessage(), "\n";  
  11. }  
  12.   
  13. // 继续执行  
  14. echo 'Hello World';  
  15. ?>   

3.请取出数组中最大值?

$a=array(1,9,8,7,8,7,9,7,10);

echo $max($a);

rsort($a);

echo array_shift($a);

4.请说明PHP中传值和引用的区别.什么时候用传值什么时候引用?

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

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

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

如果不想改变变量的值的时候就传值.如果要让函数改变原变量就可以用引用传值.

5.有一个一维数组,里面存储整形数据,请写一函数,将他们按从大到小的顺序排序,要求执行效率高.并说明如何改善执行效率,不能使用PHP函数.

  1. <?php  
  2. function getSort($array)  
  3. {  
  4.     for($i=0;$i<count($array);$i++)  
  5.     {  
  6.            for($j=$i+1;$j<count($array);$j++)  
  7.            {  
  8.                   if($array[$i]<$array[$j])  
  9.                   {  
  10.                             $tmp=$array[$i];  
  11.                              $array[$i]=$array[$j];  
  12.                               $array[$j]=$tmp  
  13.                    }  
  14.            }  
  15.      }  
  16. }  

6.请问同时满足这样条件的数:被10除余9,被9除余8,被8除余7?(100-1000间有多个这样的数)

分析:被10除余9,那么+1则被10整除,同理+1分别能被9和8整除.假高这个数为X,则这个100<=X<=100

则101<=X+1<=1000+1     => x+1为 8 ,9,10的倍数=>8=2*2*2,9=3*3,10=2*5

则X+1一定是2*2*2*3*3*5的倍数(只能约掉一个2)  =>第一个数为360,第二个数720

=> 359,719

7.请写出一个简单的静态数组?

class A

{

       static $a = array('xxx'=>xxxx);

}

print_r(A::$a);

8.写一个简单的jqeruy显示隐藏代码?

$("#xxx").show();

$("#xxx").hide();

9.include与require的区别是什么?

php在遇到include时就必须重新解析一次,如果在同一个页面出现10次include,它就会解析10次,而require不管在同一个页面出现多少次,只会解析一次.require执行效率比include高.

require包含进来 的内容被当成当前文件的一个组成部分,所以当包含进来的文件有语法错误或者文件不存在的时候,那个PHP脚本都不在执行.include函数相当于指定这个文件夹的路径,当包含的文件有错时不会影响本身程序执行.include可以进行判断是否包含进来,而require不管在任何时候都被包含进来了.

10.php获取当前时间并打印?

echo date('Y-m-d H:i:s');

11.字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是?

implode() expload() substr() str_replace() strpos,strrpos,strstr

12.解释下PHP类中:protected,public,prtvate,interface,abstract ,final,static的含义?

protected受保护的,在本类和子类中有效.

public 公共的,在本类,子类中,类外都可以用

private私有的,只在本类中有用

interface定义一个接口时使用的关键字

abstract定义一个抽象类或者抽象方法时使用的关键字.

final用final申明的方法无法被覆盖,用final申明的类不能被继承

static定义一个静态方法或者静态属性使用的关键字

13.从表login中选出name字段包含的前10条结果所有信息的sql语句

select * from login where name like '%admin%' limit 0,10;

14.解释左连接,右连接,内连接,全连接

内连接只会选出两张表中互相匹配的记录,因此,这会导致有时我们需要的记录没有包含进来.内连接是两个表中都必须有连接字段的对应值的记录,数据才能检索出来..

左连接和右连接者是外部链接,也就是区别于内部连接,它对不满足连接条件的行并不是像内部连接一样将数据完全过滤掉,而是保留一部分数据,行数不会减少;左连接只要左边表中有记录,数据就能被检索出来,而右边有的记录必要在左边表中有的记能才能被检索出来.

右连接就是只要右边表中有记录,数据就能检索出来.

全连接刚会回返两个表中的所有记录

15.简述论坛中无限分类的实现原理

数据库分类表的设计:id字段,父id字段,类名称字段,path字段

path字段存当前分类的路径, 格式:0,父类id,本身ID

查询分类select * from 分类表 order by path asc;(查出每个分类及其他对应的子类)

16.写一个函数,尽可能高效,从一个标准URL里取出文件的扩展名.如:http://www.baidu.com/sex/sm.php?id=1需要取php或.php

$a = "url地址";

$b=parse_url($a);

echo substr($b['path'],strpos($b['path'],'.')); 或 echo end(expload('.',$b['path']));

17.描述下大流量高并发量网站的解决方案

确认服务器硬件是否足够支持当前的流量

使用memcache缓存技术,将动态数据缓存到内存中,动态网直接调用这些文件不必再访问数据库

禁用外部盗链,外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对自身图片或者文件盗链.目前可以简单的通refer来控制盗链.apache自己就可以通过配置来禁止盗链.

控制大文件的下载,大文件下载会占很大的流量.对于非SCSI硬盘来说会消耗,使得网站响应能力下降.

使用不迥的主机分流主要流量,使用流量统计软件可以知道哪些地方不费大量流量,哪些页面需要再进行优化

分库分表

sphinx全文索引引擎

18.如何设计和配置MySQL,才能达到高效使用的目的.

数据库设计方面,设计结构良好的数据库,允许部分数据冗余

选取最适用的字段属性,尽可以把字段设置为NOTNULL,这样查询的时候,数据库不用去比较空值.

系统架构设计方面,表散列,把海量数据散列到几个不同的表里面,集群,数据库查询和写入分开

写高效sql语句,以提高效率

使用JOIN代替子查询

使用UNION来代替手动创建的临时表

只从数据取必须的数据

必要的时候用不同存储引擎,INNODB可以减少死锁,heap可以提高一个数量级的查询速度

使用事务/外键/索引

19.如何进行防SQL注入?

过滤一些常见的数据库操作关键字, select ,insert,update,delete,and,*等或通过系统函数addslashes对内容进行过滤

php配置文件中register_globals=off;设置为关闭状态.(作用将注册全局变量关闭);如接收POST表单的值使用$_POST['user'],假设设置为ON的话$user才接收值

sql语句书写的时候尽量不要省略小引号(tab上面那个)和单引号

提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,使之不易被猜中

对于常的方法加以封装,避免直接暴漏SQL语句

开启PHP安全模式safe_mode=on

打开magic_quotes_gpc来防止SQL注入,默认为关闭,开启后自动把用户提交sql查询语句进行转换把"'"转换成"\'"

控制错误信息输出,关闭错误信息提示,将错误信息写到系统日志

使用MYSQLI或PDO预处理

20.用PHP写出一个安全的用户登录系统需要注意哪些方面.

密码要使用MD5(密码+字符串)进行加密

登录表单的名称不要跟数据库字段一样,以免暴露表字段.

用户表的表名,字段名,密码尽量用不容易被猜到的.

要使用验证码验证登陆,以防止暴力破解

验证提交的数据是不是来本网站.

登陆后台处理代码数据库部分可以使用预处理,做好过滤,防止sql注入

21.输出为Moailla/4.0(compatible;MSIE5.01;Window NT5.0)时,可能的输出语句是:

$_SERVER['HTTP_USER_AGENT']

22.php一些正确的说法:

PHP有四种标量类型,布尔型(boolean),整型(integer),浮点型(float),字符串(string)

浮点型和双精度型是同一种类型

伪类型:混合型(mixed),数字型(number),回调(callback)

23.echo function_exists('print');

输出为空,echo和print不是系统函数

24.

  1. <?php  
  2. $bool = TRUE;  
  3. echo gettype($bool);  
  4. echo is_string($bool);  

输出boolean

25.

  1. <?php  
  2. $a=12;  
  3. $b=012;  
  4. $c=0x12;  
  5. echo $a,"\n",$b,"\n",$c;  
输入结果为 12 10 18

26.echo 1+2+"3+4+5"

输出6

26.return chr(65)=='A'

输出TRUE

26

  1. <?php  
  2.     $a =array(1=>5,5=>8,22,2=>'8',81);  
  3.     echo $a[7];  
  4.     echo $a[6];  
  5.     echo $a[3];  
  6.  ?>  
输出8122加提示信息

27

  1. <?php  
  2.   $a[bar]='hello';  
  3.   echo $a[bar];  
  4.   echo $a['bar'];  
  5. ?>  

输出hellohello

28.php二进制位移

<<相当于乘2,>>相当于除2

29.

  1. <?php  
  2.   function change(){  
  3.      static $i = 0;  
  4.      $i++;  
  5.      return $i;  
  6.   }  
  7.   print change();  //1  
  8.   print change();  //2  
  9. ?>  

30.下面的include语句不正确的是?A
A. include "mms://www.abc.com/a.php";
B. include"http://www.abc.com/a.php";
C. include"https://www.abc.com/a.php";
D. include"ftp://www.abc.com/home/a.php";

31.

  1. <?php  
  2. $foo = 'test';  
  3. $bar = <<<'EOT'  
  4. $foobar  
  5. EOT;  
  6. echo $bar;  
  7. ?>  

输出$foobar

32.

  1. $a=3;$b=4;  
  2. if($a||$b=5){    ||或和|的区别  
  3.     echo 'todo';  
  4. }  

$b的值是:4

33.什么是面向对象?主要特征是什么?

面向对象是程序的一种设计方式 ,它利于提高程序的重用性,使程序结构更加清晰

主要特征:封装,继承,多态

34.session与cookie的区别是什么,请从协议,产生的原因与作用上说明?

http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看作是同一个用户

session保存在服务器端,cookie保存在客户端,session依赖cookie进行保存.如果cookie被禁用了,session不能继续使用.

35.http状态中302,403,500代码含义?

300重定向,403服务器拒绝访问,500服务器内部错误

36.linux下建立压缩包,解压缩包的命令

压缩:gzip tar -cvfz,zip,bzip2

解压:gunzip,tar -zxvf,unzip,bunzip2

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值