大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

php面试题1

1.用 PHP 获取当前时间并打印,打印格式:2006-5-10 22:21:21

date_default_timezone_set('PRC');

echo date('Y-n-d H:i:s'); n不带前导0

echo date('Y-m-d H:i:s'); 默认都是带前导0的。

12小时制是小写h,24小时制是大写h

改时区的两种方法

① php.ini找到date.time.row=PRC 全改时区为中华人民共和国时区

② date_default_timezone_set('PRC');改当前页面的时区

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

字符串转数组

1)$str='www.baidu.com';

print_r(str_split($str));//str_split字符串分割

explode()

数组转字符串

2)$arr=array("aaa","bbb","ccc");

print_r(implode('',$arr)); //join()

字符串截取

substr($str,1,10);

mb_substr mb_strcut

字符串替换

4)$bodytag = str_replace("%body%", "black", "");

preg_replace();//正则替换

例如:Linux和php替换成java

$str="linux is very much php";

echo preg_replace('/linux|php/','java',$str);

字符串查找

strpos

strrpos

preg_match 匹配

preg_match_all

例如

截取目录的文件部分

$str="/web/a/b/index.html";

//获取斜线的位置

$pos=strrpos($str,'/');//strrpos获取最后一个斜线

//echo $pos;//8

echo substr($str,$pos+1);

截取目录

$pos=strrpos($str,'/');

echo substr($str,0,$pos);

使用basename,dirname截取目录

basename 截取目录部分

dirname截取目录中的文件部分

$str="/web/a/b/index.html";

echo dirname($str);

echo basename($str);

案例

查看所有的p*p

$str="pap is pbp and pcp";

preg_match_all('p.p',$str,$ms);

<pre>

echo $ms;

</pre>

3,解释一下 PHP 的类中: public, protect,private,interface,abstract,final,static 的含义

public,private,protected修饰类的属性和方法,体现面向对象三大特性的封装特性;封装是指安全级别。

public 共有的 本类 子类 类的外面

protected 受保护的 本类,子类

private 私有的 子类

interface 接口

abstract 抽象类

抽象类是什么?

含有任意一个抽象方法的类叫抽象类

没有方法体的方法叫抽象方法【没有大括号】如function a()

接口中只含有抽象方法。

final和static是两个关键字

final 最后的类和方法

final修饰类和方法,不能修饰属性;代表类是最后一个类,不能有子类;

static 静态方法和属性;属于类,但是并不依附于对象而生成。如果一个类有static,直接object::方法名;不用实例化,因为不属于对象。

static修饰属性和方法

4, 写出下列代码的数据结果

$date='08/26/2003'; 2003/08/26

$date='08/26/2003';

echo preg_replace('/(\d+)\/(\d+)\/(\d+)/',$3/$1/$2’,$date);

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

select * from login where name like '%admin%' limit 10 order by id;

6,解释:左连接,右连接,内连接,索引

左连接:left join,以左表为主导,右表匹配显示。不匹配,用null补全。多表查询

右连接:right join,以右表为主导,左表匹配显示。

内连接:inner join,与where条件相同,等于普通多表查询。匹配2个表内,条件相等的值。

索引:index,像词典中的目录一样,目的是,查找数据更快。

分为:主键索引,唯一索引,普通索引。

主键索引:一个表一个主键索引。用于id

唯一索引:每一列都可以有唯一索引。不允许有相同值。如id

索引:每一列都可以有普通索引

案例

发过帖子的人

select user.name,post.info from user,post where user.id=post.user_id 普通多表查询

select user.name,post.info from user inner join post on user.id=post.user_id 内联查询

左连接 左表都查出来 【所有人都发过什么帖子】

select user.name,post.info from userleft joinpostonuser.id=post.user_id

右连接 右表都查出来

select user.name,post.info from postright join useronuser.id=post.user_id

desc select * from user where id=5/G 检索一行

desc select * from user where user5='user5'/G 检索5行,没有加索引

添加索引

alert table user add index in_username(username);//给where条件用的列加索引

删除索引

alert table user drop index in_username; 影响又成5行

7,简述论坛中无限分类的实现原理。

1.设计无限分类表

表中有4列 (递归查询)

id ,name,pid,path

2.好处

可以快速找到父分类,子分类,祖先分类。

8,写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名

pathinfo:对应目录

path_url:对应url参数

$ref='http://localhost/a/b/index.php'; (文件名中没有?参数)【使用pathinfo】

$arr=pathinfo($ref);

echo "<pre>";

print_r($arr);

echo "</pre>"

运行结果:

array(

[dirname]=>'http://localhost/a/b

[basename]=>index.php

[extension]=>php

[filename]=>index

)

正则比字符串慢

$ref='http://localhost/a/b/index.php?id=10';

$arr=path_url($ref);

echo "<pre>"

print_r($arr);

echo "</pre>"

运行结果:

array(

[scheme]=>http

[host]=>localhost

[path]=>/a/b/index.php

[query]=> id=10

)


正确做法

$ref='http://localhost/a/b/index.php?id=10';(文件名中有?参数)【先使用path_url,再使用pathinfo】

$arr=path_url($ref);

$path=$arr[path];//取出目录

$arr2=pathinfo($path);

echo "<pre>";

print_r($arr2);

echo "</pre>";

9,解释:MVC

m:model 模型层 数据层 对数据库进行增删改

v:view 视图层

c:controller 控制层 逻辑层

最大优点:实现视图层逻辑层的分离

由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;

10,描述一下大流量高并发量网站的解决方案

1.dns负载均衡【分流到不同机房】

2.负载均衡服务器

3.集群服务器

4.web服务器采用nginx

5.静态缓存(tp,smarty)

6.文件数据缓存(tp)

7.内存数据缓存(memcache,redis)

8.给数据库加索引

9.磁盘阵列技术

********************************************************************

集群:防止挂掉,进行替换

买服务器:阿里云,自己公司

web服务器,apache同时在线用户是4000人。解决办法,加服务器。

********************************************************************

高并发是由大流量带来的

高并发是指同一时间打开同一个页面,同时在线的状态,针对视频网站。

大流量:访问量,访问次数。

*******************************************************

Mysql 数据库优化

1.sql语句(索引优化,语句定位:1.慢查询 2. desc或explain去解析sql语句,分析索引使用

情况以及扫描行数)

2.表优化(表引擎使用:myisam 或 innodb)

3.数据库优化(分库分表或分区)

4.服务器优化(四种字符集,主从 mysql)

get与post区别

get安全性低,传播速度快,有数据大小限制,1024字节

post安全性高,传播速度慢,没有数据限制。

如何进行防sql注入

sql注入是借助sql语句入侵服务器

1.表单尽量用post提交,表单判断用get。

2.$_SERVER[HTTP_REFERER]判断提交者的源头。如果是本服务器的ip,则提交;不是,则停止提交。

3.开启addslashes,防止sql语句的破坏性。php是自动开启的。

4.密码一定要设置md5加密

5.服务器本身的安全(web+mysql)

案例

a.php是表单,提交到b.php,在b.php进行源头判断。

b.php

$path=$_SERVER[HTTP_REFERER];

$arr=parse_url($path);

echo "<pre>";

print_r($arr);

echo "</pre>";

运行结果

array(

[scheme]=>http

[host]=>localhost

[path]=>/test/index.php

判断host的值