PHP中常见的面试题2(附答案)
2018-06-22 05:24:49来源:未知 阅读 ()
---恢复内容开始---
1.下面程序输出是什么?
$int_a = 5; function factorial() { for($int_i=$int_a; $int_i>0; $int_i--) { $int_a = $int_a * $int_i; } } factorial(); echo $int_a;
结果: 5
2. 写一个函数Check_ip,使用正则表达式检测一个IPV4的IP是否正确,正确返回1,错误返回0,例如 Check_ip(‘127.0.0.1’)。
function check_ip($mact){ $a='/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/'; $v=preg_match($a,$mact); if ($v!=0) { return 1; } else { return 0; } }
3. 请指出以下代码的错误之处(圈出来并加以改正):
<? function baz($y $a) { $x = new Array(); $x[sales] = 60; $x[profit] = 20; foreach($x as $key = $value) { echo $key + “ ” + $value + “<br>”; } }
<?php //参考答案 function baz($y,$a){ $x=array(); $x[‘sales’]=60; $x[‘profit’]=20; foreach($x as $key=>$value){ echo $key.””.$value.”<br>”; } } ?>
4. 有一数组 $a=array(4,3,8,9,2); 写一个排序函数对数组进行排序操作,要求使用快速排序法.快速排序的基本思想是:在待排序记录序列中,任取其中的一个记录(这里取了第一个)并以该记录的关键字作为基准,经过一趟排序后,所有关键字比它小的记录都交换到它的左边,比它大的记录都交换到它的右边.然后再分别对划分到它左,右两部分记录序列重复上述过程,直至每一部分最终划分为一个记录时为止即完成了排序工作.
//参考答案 function kuaiSort($arr) { //递归的出口 if (count($arr) <= 1) return $arr; //取出第一个元素 $flag = $arr[0]; //声明两个数组 $left = []; $right = []; //注意这里的索引是从1开始的 for ($i = 1; $i < count($arr); $i++) { if ($arr[$i] > $flag) { $right[] = $arr[$i]; } else { $left[] = $arr[$i]; } } $left = kuaiSort($left); $right = kuaiSort($right); return array_merge($left, [$flag], $right); }
5. 有一表 menu(id, pid, name),请用递归法打印树形菜单,将所有的menu列出来.
/* 参考sql create table menu ( id int auto_increment primary key, pid int, name varchar(255) )engine MyISAM default charset=utf8; insert into menu values (1,0,'服装'),(2,0,'数码'),(3,1,'外套'),(4,3,'男装'),(5,2,'手机'),(6,3,'女装'); */ //函数实现 function getMenu($pid) { $pdo= new PDO('mysql:host=localhost;dbname=lamp;charset=utf8','root',''); //获取pid为 $pid的菜单 $stmt = $pdo->query("select * from menu where pid = $pid"); $menus = $stmt->fetchAll(PDO::FETCH_ASSOC); //判断 if(empty($menus)) { return; } $res = []; foreach ($menus as $key => $value) { $value['submenu'] = getMenu($value['id']); $res[] = $value; } return $res; } $res = getMenu(0);
6. 在开发项目中,需要上传超过8M的文件,请说明在php.ini需要修改的配置项。
post_max_size=2M(默认)
Upload_max_filesize=8M(默认)
7. 写出session的运行机制,session与cookie的区别。多台WEB服务器如何共享session。
(1)session的运行机制:
用户A访问站点Y,如果站点Y指定了session_start();(以下假设session_start()总是存在)那么会产生一个session_id,这个session_id一般会以COOKIE的形式保存到用户A(我们可以通过在php.ini里设置session.use_only_cookies为1,强制SESSIONID必须以COOKIE专递。)。这时候SESSION ID表现为$_COOKIE[‘PHPSESSID’];(PHPSESSID可用session_name()函数来下修改),用户A接着访问,这个session id($_COOKID[‘PHPSESSID’])就会在A每次访问Y的时候传送到站点Y。在站点Y上,会有这么一个目录,是用来保存SESSION的实际数据的。站点Y接收到session id,然后通过session id,来获得与SESSION数据的关联,并返回SESSION数据
(2)session与cookie的区别:
1. 存储位置
Cookie在客户端存储,消耗客户端资源, session在服务器存储,消耗服务器资源.
2. 安全性
Session相对安全, cookie相对不安全, 因为用户可以看到传递的信息
3. 大小限制
单个cookie的最大长度为4k, session没有大小限制
4. 过期机制
Cookie的过期是实时, 过期时间一到cookie就会失效, 但session的过期是概率性触发, 也就是说即时session过期并不是立即就失效.
(3)多台服务器如何共享SESSION:
session专门存储到一台独立的服务器上,存数据库,memcache,redis都可以, 多台服务器都来这台服务器上操作session即可.
8. SQL中LEFT JOIN 的含义是什么? 如果tbl_user记录了学生的姓名(name)和学号(ID),tbl_score记录了学生(有的学生考试以后被开除了,没有记录)的学号(ID)和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的各科总成绩,请写出SQL语句.
学号 | id |
姓名 | name |
学号 | id |
成绩 | score |
科目 | subject |
id |
name |
1 |
a |
2 |
b |
Id |
Score |
subject |
1 |
10 |
语文 |
1 |
20 |
数学 |
2 |
30 |
语文 |
2 |
40 |
数学 |
答:left join 的含义:LEFT JOIN是以左
表为基准进行外联查询。
SQL: select tbl_user.name sum(tbl_score.score) from tbl_user left join tbl.score on tbl_user.id=tbl_score.id;
9. 读代码
<?php $data = array(‘a’, ‘b’, ‘c’); foreach($data as $key=>$val) { $val = &$data[$key]; //输出数组 var_dump($data); } ?>
问题1:程序执行时,每一次循环结束后变量$data的值是什么?请解释
答:第一次循环时,把下表为0的成员,引用赋值给变量$val,$val与$data[0]内容相同,
要是其中一个改变,另一个也改变,此时,$data原样输出,只是$data[0]变成了引用
输出结果 a b c
第二次循环时,$key的值为1,把$data[1]引用复制给$val.
由于$val与$data[0]也是引用关系,所以这时,$val,$data[0],$data[1]三者值同为’B’
$val不再与$data[0]有关系了,只与$data[1]是引用关系
// b b c
第三次循环时,$key的值为2,把$data[2]引用复制给$val,
由于$data[1]与$val是引用关系,所以都将改变$data[1]、$val、$data[2]三者值一样
//b c c
问题2:程序执行完后,变量$data的值是什么?请解释。(10分)
答:结果为B c c
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:斐波那契数列在php中的简单实现
下一篇:PHP腾讯与百度坐标转换
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- php 带逗号千位符数字的处理方法 2020-03-28
- PHP三元运算符的结合性介绍 2020-03-28
- PHP静态延迟绑定和普通静态效率的对比 2020-03-28
- 基于php流程控制语句和循环控制语句 2020-03-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash