php 面试题一(看视频的学习量比网上瞎转悠要清晰和明了很多)(看视频做好笔记)(注重复习)
一、总结
1、无线分类的本质是树(数据结构)(数的话有多种储存结构可以实现,所以对应的算法也有很多),想到这一点你有一万种方法来实现无限分类
2、反斜杠(\)表示转义字符,在php和php正则中都是这样,c的话\n,echo preg_replace(‘’/(\d+)\/(\d+)\/(\d+)/,’$3$1$2’,$date);
二、php 面试题一
1,用 PHP 获取当前时间并打印,打印格式:2006-5-10 22:21:21
date_default_timezone_set('PRC');
echo date('Y-n-d H:i:s');
2,字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是什么?
1) $str='www.baidu.com';
print_r(str_split($str));
explode()
2) $arr=array("aaa","bbb","ccc");
print_r(implode('',$arr)); //join()
3)substr($str,1,10); mb_substr mb_strcut
4) $bodytag = str_replace("%body%", "black", "<body text='%body%'>");
preg_replace();
5) $string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '\${1}1,\${3}';
echo preg_replace($pattern, $replacement, $string);
6)preg_match()
preg_grep()
strstr()
strpos()
strrpos()
3,解释一下 PHP 的类中:protect,public,private,interface,abstract,final,static 的含义
1)protect 被保护的
2)public 公有的
3)private 私有的
4)interface 接口
5)abstract 抽象类
6)final 最后的类和方法
7)static 静态方法和属性
4, 写出下列代码的数据结果
$date='08/26/2003'; 2003/08/26
1) $date='08/26/2003';
echo preg_replace("/([0-9]+)\/([0-9]+)\/([0-9]+)/","\${3}/\${1}/\${2}",$date);
echo preg_replace(‘’/(\d+)\/(\d+)\/(\d+)/,’$3$1$2’,$date);
5,从表 login 中选出 name 字段包含 admin 的前 10 条结果所有信息的 sql 语句
1)select * from login where name like "%admin%" limit 10 order by id;
6,解释:左连接,右连接,内连接,索引
1)left join
2)right join
3)inner join
mysql> select t1.name,t2.addr from t1 inner join t2 on t1.id=t2.uid;
select t1.name,t2.addr from t1,t2 where t1.id=t2.uid;
mysql> select t1.name,t2.addr from t1,t2 where t1.id=t2.uid;
4)index
Alter table t1 add index in_name(name);
Alter table t1 drop index in_name;
Alter table t1 add primary key(id);
7,简述论坛中无限分类的实现原理。
1)一张表,有 id,pid
2)get
id pid name
prev > next
id name pid path
1 aaa 0 0
2 bbb 1 0-1 aaa
3 ccc 1 0-2
8,写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如:http://www.test.com.cn/abc/de/fg.php需要取出php或.php
parse_url
pathinfo
extension
basename
dirname
explode
三、另一份解答
1.date函数参数
Y
y
m
n
d
j
t
L
H
i
s
2.字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找
explode();
join();
substr();
mb_substr();
str_replace();
preg_replace();
preg_match();
3.左链接,右链接,内链接
user left join post on user.id=post.user_id
post right join user on post.user_id=user.id
user inner join post on user.id=post.user_id
#复习基础课中mysql的所有课程
4.无限分类
id name pid path
#高级课24号课程
5.从url地址中取出后缀
第一种:
<?php
$url='http://www.baidu.com/index.php';
$arr=pathinfo($url);
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
第二种:
<?php
$url='http://www.baidu.com/index.php';
$arr=explode('.',$url);
echo array_pop($arr);
?>
第三种:
<?php
$url='http://www.baidu.com/index.php';
$pos=strrpos($url,'.');
echo substr($url,$pos+1);
?>
6.mvc理解:
m model 数据模型
v view 模板视图
c control 类控制器
7.解决大访问量
web服务器:
至少两台以上服务器来提交对客户的请求,web服务器负载均衡,apache并发人数3000左右,nginx并发人数20000左右
mysql服务器:
多台mysql服务器对外提供sql响应,数据库服务器负载均衡
软件:
1)静态缓存
2)数据缓存
数据库:
1)字段加索引
2)分表
8.mysql优化
1)服务器优化
1)服务器负载均衡
2)数据库优化
1)myisam表引擎
3)表优化
1)分表
2)字段索引
4)sql语句优化
1)写sql语句时,where后面的字段尽量使用加索引的字段,而且要小心有的sql语句会让索引失效.
9.安全登录系统
1)验证码
2)限制登录时间
3)动态口令
4)短信验证
10.防sql注入
1)mysql服务器用户权限问题
2)用addslashes函数把表单数据进行转义处理
3)用htmlspecialchars函数把表单数据进行实体化
4)使用mysql预处理机制发送执行sql语句
5)及时给mysql软件更新补丁
11.防盗链
$_SERVER['HTTP_REFERER'];
#获取上一个页面的来源url,通过url中的域名或ip可以判断是否是来自本机的某一个脚本
12.heredoc标记
$str=<<<x
<html>
<head>
<title></title>
</head>
<body>
<div>
<h1>{$name}</h1>
<h1>{$name}</h1>
<h1>{$name}</h1>
<h1>{$name}</h1>
</div>
</body>
</html>
x;
13.运算符
<?php
$a=0;
$b=4;
if($a=3 || $b=5){
$a++; //true
$b++; //5
}
echo $a; //1
echo '<br>';
echo $b; //5
?>
<?php
$a=0;
$b=4;
if($a=3 & $b=4){
$a++;
$b++;
}
echo $a;
echo '<br>';
echo $b;
13.web服务器返回的状态码:
1)200 正常响应
2)404 文件找不到
3)302 地址重定向
4)403 拒绝访问
5)500 内部程序错误
6)304 没有更新
14.冒泡排序
function ss($arr){
for($i=0;$i<count($arr);$i++){
for($j=$i+1;$j<count($arr);$j++){
if($arr[$i]>$arr[$j]){
$x=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$x;
}
}
}
return $arr;
}