有详细答案的php面试题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 写出session的运行机制
第一次访问一个网站时,服务器会生成一个SESSIONID(文件名),并生成一个SESSION文件。把这个文件名传给客户端,存到COOKIE中
。再请求这人网站时。浏览器会把刚刚服务器上对应的文件名(SESSIONID)传到服务器,打上自己专属性的SESSION文件,SESSION的变量
就存在这个文件中,因为SESSION存在文件中,所以不会丢失,再多个页面可以共存SESSION的值,但是当关闭浏览器,本地的COOKIE中的SESSIONID
也被删除了,所以下次再时打开的一个新的SESSION文件,之前的就丢失了。
2 如何实现字符串翻转?
strrev()
3 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名?
例如: /abc/de/fg.php?id=1 需要取出 php 或 .php
$url="/abc/de/fg.php?id=1";
$str = strrchr($str, '.');
echo substr($str, 1, strpos($str, '?')-1);
?>
4 请写一个函数验证电子邮件的格式是否正确
preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/', $email);
5 使用PHP描述冒泡排序,对象可以是一个数组
6 用PHP打印出前一天的时间格式是2006-5-10 22:21:21。(2分
echo date ("Y-m-d H:i:s" ,strtotime(‘-1 days’));
7 echo(),print(),print_r()的区别
(1)echo 是语法,Output one or more strings,没有返回值;
(2)print 是函数,不能输出数组和对象,Output a string,print有返回值;
(3)print_r 是函数,可以输出数组。print_r是个比较有意思的函数,可以输出stirng、int、float、
array、object等,输出array时会用结构表示,print_r输出成功时返回true;
而且print_r可以通过print_r($str,true)来,使print_r不输出而返回print_r处理后的值。
此外,对于echo和print,基本以使用echo居多,因为其效率比print要高。
# mysql
1 一个表tb1,字段是name,class,score。分别代表姓名,所在班级,分数。
要求用一条语句查出每个班的及格人数和不及格人数,格式为:class,及格人数,不及格人数。
SELECT class,SUM( if(score>60,1,0) ),SUM( if(score<60,1,0) ) FROM tb1 GROUP BY class
2 写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)
SELECT username FROM members ORDER BY posts DESC LIMIT 10
(一)创建新闻发布系统,表名为message有如下字段
id 文章
title 文章标题
content 文章内容
category_id 文章分类
hits 点击量
文章表
id title content
---------------------------------
1 a
2 b
文章回复表
coment_id artile_id (文章id关联上面表的id) title content
--------------------------------------------------
1 1 dfa
2 1 dfa
3 1
dfa
SELECT a.id,a.title,ment_id,b.article_id
FROM article a LEFT JOIN comment b ON a.id=b.artile_id
返回结果:
id title commint_id article_id
1 a 1 1
1 a 2 1
1 a 3 1
2 b null null
回复数据最多的前10篇文章,按回复量降序排列
SELECT a.id,a.title,COUNT(ment_id) rcount
FROM article a LEFT JOIN comment b ON a.id=b.artile_id
GROUP BY a.id
ORDER BY rcount DESC
LIMIT 10
id title rcount
1 a 3
2 b 1
(三)上述内容管理系统,表category保存分类信息,字段如下
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用户输入文章时,通过选择下拉菜单选定文章分类写出如何实现这个下拉菜单
$types = $db->getAll('SELECT * FROM category');
echo '';
# html js css
1 请列举几个 meta元素。
设置编码,设置关键字,设置描述
2 请写出一条至少3个节点的DOM(document object model)树
如何使用JS操作HTML中的标签。
结果HTML:
3 Css中class和id的区别。
id : 每个页ID是唯一的不能重复。
class : 可以设置多个class为同一个值。
如:
--> 页面中只能有一个id叫做 user
4 JS表单弹出对话框函数是?获得输入焦点函数是?
alert() , focus();
5 请列举出TABLE里所包含的所有元素,并构造一个三行四列的表格。
# 百度/新浪
1. Ajax, 数据库触发器,GUI,中断机制的共同思想。谈一谈该种思想(机制)。
主要就是异步,主进程不会被一个异步任务阻塞,放进程发出命令之后,继续执行主任务,不用等待子任务执行完,这样效率更高。
2. 打开php.ini中的Safe_mode,会影响哪些函数?至少说出6个。
1:用户输入输出函数(fopen() file() require(),只能用于调用这些函数有相同脚本的拥有者)
2:创建新文件(限制用户只在该用户拥有目录下创建文件)
3:用户调用popen() systen() exec()等脚本,只有脚本处在safe_mode_exec_dir配置指令指定的目 录中才可能
4:加强HTTP认证,认证脚本拥有者的UID的划入认证领域范围内,此外启用安全模式
下,不会设置PHP_AUTH
5:mysql服务器所用的用户名必须与调用mysql_connect()的文件的拥有者用户名相同
6:受影响的函数变量以及配置命令达到40个
3. 写个函数来解决多线程同时读写一个文件的问题。
核心思路:加锁。
$fp = fopen("/tmp/lock.txt", "w+");
$retry = 0;
while(!flock($fp, LOCK_EX)) {
usleep(500); // 睡0.5
if($retry++ > 10)
break ;
} else {
fwrite($fp, "Write something here\n");
flock($fp, LOCK_UN); // 释放锁定
}
fclose($fp);
4. 写个函数用来对二维数组排序。
$arr = array(
array('username' => 'tom', 'age' => 10),
array('username' => 'tom', 'age' => 32),
array('username' => 'tom', 'age' => 11),
array('username' => 'tom', 'age' => 5),
array('username' => 'tom', 'age' => 33),
array('username' => 'tom', 'age' => 2),
array('username' => 'tom', 'age' => 41),
);
usort($arr, mys);
// 如果第一个小于第二个就返回小于0的
function mys($a, $b)
{
// 指定用字组中的哪个字段排序
return ($a['age'] < $b['age']);
}
var_dump($arr);