分享30个基础的php面试题及答案(对新手非常有用)

题1:设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示!

答案:尼玛。都没明白出这题目是干嘛的,新浪工程师脑子进水了吗?考察js的window对象?亲们告诉我?

index.html

 1 <html>
 2     <head>
 3         <title>by http://www.manongjc.com</title>
 4     </head>
 5     <body>
 6         <h1></h1>
 7         <script type="text/javascript">
 8             open(‘manongjc.html‘);
 9         </script>
10     </body>
11 </html>

fullwin.html

 1 <html>
 2      <head>
 3         <title>by www.manongjc.com</title>
 4      </head>
 5     <body>
 6 <!-- http://www.manongjc.com/article/1524.html -->
 7         <script type="text/javascript">
 8             window.moveTo(0, 0);
 9             window.resizeTo(window.screen.width, window.screen.height);
10             var s = prompt(‘请输入:‘);
11             window.opener.document.getElementsByTagName(‘h1‘)[0].innerText = s;
12             window.close();
13         </script>
14     </body>
15 </html>

题2:nginx使用哪种网络协议?

答案:nginx是应用层 我觉得从下往上的话 传输层用的是tcp/ip 应用层用的是http fastcgi负责调度进程

题3:表单中 get与post提交方法的区别?

答案:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息。

题4:简述论坛中无限分类的实现原理

答案:无限极分类,那么应该是考察递归函数吧!

第一步:建立测试数据库:

1 CREATE TABLE `category` (
2   `id` smallint(5) unsigned NOT NULL auto_increment,
3   `fid` smallint(5) unsigned NOT NULL default ‘0‘,
4   `value` varchar(50) NOT NULL default ‘‘,
5   PRIMARY KEY (`id`)
6  ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

第二步:插入测试数据:

1 INSERT INTO `category` ( `fid`, `value`) VALUES
2  (0, ‘码农教程http://www.manongjc.com‘),
3  (1,‘a‘),
4  (1,‘b‘),
5  (2,‘c‘),
6  (2,‘d‘),
7  (4,‘e‘)

第三步:递归输出分类:

 1 <?php
 2 /** by http://www.manongjc.com/article/1524.html */
 3 $conn = mysql_connect("localhost", "root", "mckee");
 4 mysql_select_db("test",$conn);
 5 mysql_query("set names utf8");
 6 $sql = "SELECT * FROM category";
 7 $res = mysql_query($sql);
 8 while($row = mysql_fetch_assoc($res)){
 9     $arr[] = array($row[id],$row[fid],$row[value]);
10 }
11 getCate(0);
12 function getCate($fid = 0) {
13     global $arr;
14     for ($i = 0; $i < count($arr); $i++) {
15         if ($arr[$i][1] == $fid) {
16             echo $arr[$i][2] . "<br>";
17             getCate($arr[$i][0]); //递归
18         }
19     }
20 }
21 ?>

题5:请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确

答案:

1 <?php
2 /*  http://www.manongjc.com/article/1524.html */
3 $email=$_POST[‘email‘];
4 if(!preg_match(‘/^[\w.][email protected]([\w.]+)\.[a-z]{2,6}$/i’,$email))  {
5 echo "电子邮件检测失败";
6 }else{
7 echo "电子邮件检测成功";
8 }
9 ?>

题6:session与cookie的区别?

答案:

session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放.

cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。

两者都可通过时间来设置时间长短.

题7:请用最简单的语言告诉我PHP是什么?

答案:PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言。

题8:<? echo ‘hello tusheng‘ ; ?> 没有输出结果, 可能是什么原因, 简述的解决此问题的过程(提示: 语法没有问题)

答案:可能服务器上面没有开启短标签short_open_tag =设置为Off,,php.ini开启短标签控制参数: short_open_tag = On

题9:数据库中的事务是什么?

答案:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。

题9:写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。

答案: 这个我之前就写过(php opendir()函数讲解及遍历目录实例),只是实现的方法很多,效率不一定最高

 1 /*
 2  *@blog  http://www.manongjc.com
 3  */
 4 function listDir($dir = ‘.‘){
 5     if ($handle = opendir($dir)) {
 6         while (false !== ($file = readdir($handle))) {
 7             if($file == ‘.‘ || $file == ‘..‘){
 8                 continue;
 9             }
10             if(is_dir($sub_dir = realpath($dir.‘/‘.$file))){
11                 echo ‘FILE in PATH:‘.$dir.‘:‘.$file.‘<br>‘;
12                 listDir($sub_dir);
13             }else{
14                 echo ‘FILE:‘.$file.‘<br>‘;
15             }
16         }
17         closedir($handle);
18     }
19 }
20 listDir(‘e:\www\abc‘);

题10:用最少的代码写一个求3值最大值的函数.

答案: 

1 function($a,$b,$c){
2     /* www.manongjc.com/article/1524.html */
3     return $a>$b? ($a>$c? $a : $c) : ($b>$c? $b  :  $c );
4 }

题11:简述下面程序的输出结果, 简要说明为什么, 如何解决这类问题?

1 <?php
2 $tmp = 0 == "a"? 1: 2;
3 echo $tmp;
4 ?> 

答案: 1

int和string类型强制转换造成的,0==="a"

0 == 0 肯定是true啊

PHP是弱类型

$tmp = 0 === "a"? 1: 2;

echo $tmp; 这样就是2

题12:什么是MVC?

答案:MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。

Model:数据信息存取层。

View:view层负责将应用的数据以特定的方式展现在界面上。

Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

题13:优化MYSQL数据库的方法?

答案:

1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如‘省份,性别‘,最好设置为ENUM
2、使用连接(JOIN)来代替子查询:
   a.删除没有任何订单客户:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)
   b.提取所有没有订单客户:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)
   c.提高b的速度优化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid
   WHERE orderinfo.customerid IS NULL
3、使用联合(UNION)来代替手动创建的临时表
   a.创建临时表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`
4、事务处理:
   a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败
   mysql_query("BEGIN");
   mysql_query("INSERT INTO customerinfo (name) VALUES (‘$name1‘)";
   mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");
   mysql_query("COMMIT");
5、锁定表,优化事务处理:
   a.我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。
     包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前,
     不会有其它的访问来对 inventory 进行插入、更新或者删除的操作
   mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");
   mysql_query("SELECT customerid FROM `customerinfo` where id=".$id);
   mysql_query("UPDATE `orderinfo` SET ordertitle=‘$title‘ where customerid=".$id);
   mysql_query("UNLOCK TABLES");
6、使用外键,优化锁定表
   a.把customerinfo里的customerid映射到orderinfo里的customerid,
     任何一条没有合法的customerid的记录不会写到orderinfo里
   CREATE TABLE customerinfo
   (
     customerid INT NOT NULL,
     PRIMARY KEY(customerid) 
   )TYPE = INNODB;
   CREATE TABLE orderinfo
   (
     orderid INT NOT NULL,
     customerid INT NOT NULL,
     PRIMARY KEY(customerid,orderid),
     FOREIGN KEY (customerid) REFERENCES customerinfo
     (customerid) ON DELETE CASCADE   
   )TYPE = INNODB;
   注意:‘ON DELETE CASCADE‘,该参数保证当customerinfo表中的一条记录删除的话同时也会删除order
         表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;
7、建立索引:
   a.格式:
   (普通索引)->
   创建:CREATE INDEX <索引名> ON tablename (索引字段)
   修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
   创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段)) 
   (唯一索引)->
   创建:CREATE UNIQUE <索引名> ON tablename (索引字段)
   修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
   创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段)) 
   (主键)->
   它是唯一索引,一般在创建表是建立,格式为:
   CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
8、优化查询语句
   a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作
   例子1:
   SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)
   SELECT * FROM order WHERE orderDate<"2008-01-01";(快)
   例子2:
   SELECT * FROM order WHERE addtime/7<24;(慢)
   SELECT * FROM order WHERE addtime<24*7;(快)
   例子3:
   SELECT * FROM order WHERE title like "%good%";
   SELECT * FROM order WHERE title>="good" and name<"good";

题14:写一个函数,算出两个文件的相对路径

如 $a = ‘/a/b/c/d/e.php‘;
$b = ‘/a/b/12/34/c.php‘;
计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上

答案:

 1 <?php
 2     /** by www.manongjc.com */
 3     $a = ‘/a/b/c/d/e.php‘;
 4     $b = ‘/a/b/13/34/c.php‘;
 5     echo getRelativePath($a, $b); //"../../12/34/"
 6     function getRelativePath($a,$b){
 7         $a2array = explode(‘/‘, $a);
 8         $b2array = explode(‘/‘, $b);
 9         $relativePath   = ‘‘;
10         for( $i = 1; $i <= count($b2array)-2; $i++ ) {
11             $relativePath .= $a2array[$i] == $b2array[$i] ? ‘../‘ : $b2array[$i].‘/‘;
12         }
13         return $relativePath;
14     }
15 ?>

题15:javascript能否定义二维数组,如果不能你如何解决?

答案:javascript不支持二维数组定义,可以用arr[0] = new array()来解决

题16:MYSQL取得当前时间的函数是?,格式化日期的函数是

答案:now(),dateformat()

题17:下列HTTP状态码出现的可能原因, 如何处理

200, 301, 404, 502, 503

答案:

  • 200 请求已成功,请求所希望的响应头或数据体将随此响应返回。
  • 301 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。
  • 404 请求失败,请求所希望得到的资源未被在服务器上发现。
  • 502 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
  • 503 由于临时的服务器维护或者过载,服务器当前无法处理请求。
  • 200 OK 一切正常,对GET和POST请求的应答文档跟在后面。

题18:在页面中引用CSS有几种方式?

答案:

在页面中使用CSS有3中方式:

  • 引用外部CSS文件
  • 内部定义Style样式
  • 内联样式

题19:在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是一个标准的 meta 语句

<META http-equiv=‘Content-Type‘ content=‘text/html; charset=gbk‘>

请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5

请注意:

  1. 需要处理完整的 html 页面,即不光此 meta 语句
  2. 忽略大小写
  3. ‘ 和 " 在此处是可以互换的
  4. ‘Content-Type‘ 两侧的引号是可以忽略的,但 ‘text/html; charset=gbk‘ 两侧的不行
  5. 注意处理多余空格

答案:主要考察正则表达式

1 <?php
2     /** http://www.manongjc.com/article/1524.html */
3     $html = "<meta http-equiv=‘Content-Type‘ content=‘text/html; charset=gbk‘>";
4     //匹配标准的meta标签
5     $pattern = "/<meta\s+http-equiv=(\‘|\")?Content-Type(\‘|\")?\s+content=(\‘|\")text\/html;\s+charset=(.*)(\‘|\")>/i";
6     $replacement = "<meta http-equiv=‘Content-Type‘ content=‘text/html; charset=big5‘>";
7     $result = preg_replace($pattern, $replacement, $html);
8     echo htmlspecialchars($result);
9 ?>

题20:假设a.html和b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html。

答案:

1 /** http://www.manongjc.com/article/1524.html */
2 function go2b(){
3     window.location = “b.html”;
4     window.close();
5 }
6 setTimeout( “go2b()”,5000 ); //5秒钟后自动执行go2b()

题21:简述两种屏蔽php程序的notice警告的方法

答案:

  1. 在程序中添加:error_reporting (E_ALL & ~E_NOTICE);
  2. 修改php.ini中的:error_reporting = E_ALL 改为:error_reporting = E_ALL & ~E_NOTICE
  3. error_reporting(0);或者修改php.inidisplay_errors=Off

题22:PHP支持多继承吗?为什么?

答案:不支持。PHP类只能继承一个父类,并用关键字“extended”标识。

题23:include和require 分别返回什么错误级别

答案:include会系统警告并继续执行,require会发出系统警告但是会引致致命错误令脚本终止运行

题24:用PHP写出显示客户端IP与服务器IP的代码

答案:

打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv(‘REMOTE_ADDR’);

打印服务器IP:echo gethostbyname(“www.bolaiwu.com”)

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

例如: http://www.manongjc.com/article/1524.html?id=1 需要取出 html或 .html

答案:

1 <?php
2     /** by www.manongjc.com */
3     $url = "http://www.manongjc.com/article/1524.html?id=1";
4     $path = parse_url($url);
5     echo pathinfo($path[‘path‘],PATHINFO_EXTENSION);  //php
6 ?>

题26:PHP中获取图像尺寸大小的方法是什么?

答案:

getimagesize () 获取图片的尺寸

Imagesx () 获取图片的宽度

Imagesy () 获取图片的高度

题27:如何修改SESSION的生存时间

答案:

方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache

方法2:$savePath = “./session_save_dir/”;

1 $lifeTime = 小时 * 秒;
2 session_save_path($savePath);
3 session_set_cookie_params($lifeTime);
4 session_start();

方法3:setcookie() and session_set_cookie_params($lifeTime);

题28:写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个维数组

答案:

冒泡排序(数组排序):

 1 function bubble_sort($array)
 2 {
 3     $count = count($array);
 4     if ($count <= 0) return false;
 5     for($i=0; $i<$count; $i++){
 6         for($j=$count-1; $j>$i; $j–){
 7             if ($array[$j] < $array[$j-1]){
 8                 $tmp = $array[$j];
 9                 $array[$j] = $array[$j-1];
10                 $array[$j-1] = $tmp;
11             }
12         }
13     }
14     return $array;
15 }

快速排序(数组排序):

 1 function quicksort($array) {
 2     if (count($array) <= 1) return $array;
 3     $key = $array[0];
 4     $left_arr = array();
 5     $right_arr = array();
 6     for ($i=1; $i<count($array); $i++){
 7         if ($array[$i] <= $key)
 8             $left_arr[] = $array[$i];
 9         else
10             $right_arr[] = $array[$i];
11     }
12     $left_arr = quicksort($left_arr);
13     $right_arr = quicksort($right_arr);
14     return array_merge($left_arr, array($key), $right_arr);
15 }

题29:PHP中的错误类型有哪些?

答案:

PHP中遇到的错误类型大致有3类。

  1. 提示:这都是一些非常正常的信息,而非重大的错误,有些甚至不会展示给用户。比如访问不存在的变量。
  2. 警告:这是有点严重的错误,将会把警告信息展示给用户,但不会影响代码的输出,比如包含一些不存在的文件。
  3. 错误:这是真正的严重错误,比如访问不存在的PHP类。

题30:求两个日期的差数,例如2016-2-5 ~ 2016-3-6 的日期差数

答案:

方法一:

 1 <?php
 2 /*  http://www.manongjc.com/article/1524.html */
 3 class Dtime
 4 {
 5     function get_days($date1, $date2){
 6         $time1 = strtotime($date1);
 7         $time2 = strtotime($date2);
 8         return ($time2-$time1)/86400;
 9     }
10 }
11
12 $Dtime = new Dtime;
13
14 echo $Dtime->get_days(’2016-2-5′, ’2016-3-6′);
15
16 ?>

方法二:

1 <?php
2     /*  http://www.manongjc.com/article/1524.html */
3     $temp = explode(‘‘-‘, ’2016-2-5′);
4     $time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
5     $temp = explode(‘-‘, ’2016-3-6′);
6     $time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
7     echo ($time2-$time1)/86400;
8 ?>

方法三:

/*  http://www.manongjc.com */
echo abs(strtotime("2016-2-1″)-strtotime("2016-3-1″))/60/60/24

原文地址 http://www.manongjc.com/article/1524.html

时间: 2024-08-12 07:53:37

分享30个基础的php面试题及答案(对新手非常有用)的相关文章

收集了50道基础的java面试题

下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最新版本,去掉了EJB 2.x等无用内容,补充了数据结构和算法相关的题目.经典面试编程题.大型网站技术架构.操作系统.数据库.软件测试.设计模式.UML等内容,同时还对很多知识点进行了深入的剖析,例如hashCode方法的设计.垃圾收集的堆和代.Java新的并发编程.NIO.2等,相信对准备入职的Ja

面试题收集-java面试题及答案(基础题122道,代码题19道)

JAVA相关基础知识1.面向对象的特征有哪些方面?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象.2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派

老李分享: 并行计算基础&amp;编程模型与工具 1

老李分享: 并行计算基础&编程模型与工具 在当前计算机应用中,对高速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如大型科学工程计算与数值模拟: 数据密集(Data-Intensive)型应用,如数字图书馆.数据仓库.数据挖掘和计算可视化等: 网络密集(Network-Intensive)型应用,如协同工作.遥控和远程医疗诊断等. 并行编程模型主要有三种:适用于共享内存的多线程编程模型,适用于分布内存的消息传递编程模型,混合

分享30个最佳 jQuery Lightbox 效果插件(转载)

您可能还喜欢 60款很酷的 jQuery 幻灯片演示和下载 Web开发者必备的20款超赞jQuery插件 提升你网站水平的 jQuery 插件推荐 12个很棒的学习 jQuery 的网站推荐 分享27款非常棒的 jQuery 表单插件 Lightbox 应该是最流行的图片浏览效果了,常具有功能包括:自动根据窗口的大小缩放图片,模式窗口,幻灯片方式播放,内容预加载,渐变等效果.Web开发者们模仿 Lightbox 开发了各种各样的图片浏览插件,有基于 jQuery 的,有基于 Prototype

分享30个打动你的摄影师作品集网站

摄影师如何能够使他们的作品脱颖而出呢?精心设计的美妙的作品集可以很好的证明摄影师的优秀和独特.摄影作品集网站可以见证摄影师的个性,能力和创造力.在这里集合了30个可以打动你的摄影师作品集网站,向下滚动和享受! 您可能感兴趣的相关文章 经典网页设计:超炫动画效果单页网站 30个独具匠心的精美单页网站设计案例 25个以全屏照片为背景的精美网页作品 20个与众不同的网页联系表单设计案例 你应该知道的奇特的 HTML5 单页网站 Julie de Waroquier Lara Jade Serkan E

分享30个常用的Vim命令

分享30个常用的Vim命令,希望其中能有一二能让你觉得有用. 删除从光标位置到单词结尾之间的字符并进入插入模式:cw. 删除光标所在单词并进入插入模式:ciw,删除光标所在位置的单词及空格:daw. 高亮选中标签内部的内容:vit. 正向移动到下一单词的开头:w,反向移动到当前单词/上一单词的开头:b. 移动到当前行的第n列:n|. 重绘屏幕并把当前行显示在窗口正中:zz. 将光标所在行移到窗口的顶端:zt,将光标所在行移到窗口的底部:zb. Vim跳转位置前进:<Ctrl-i>,跳转位置后退

金9银10,分享几个重要的Android面试题

说一下java多态的理解,以及接继承,和接口的理解 于哥在这里只讲多态,其他自己上网体会 对于多态的定义不同类的对象对统一函数做出不同对的响应或者动作.作用主要是消除类之间的耦合性,灵活性比较强,利于代码的编写和修改.尤其在处理大量的运算和操作时,可以灵活地简化,替换或者是修改代码! 三个必要条件1.一个凳子(继承extends)2.重写3.父类引用指向子类对象 for example 测试结果: 测试结果 oKhttp的 原理 1.同步和异步: 1.异步使用了Dispatcher来将存储在 D

Redis面试题及答案

在网上看到有关Redis的50道面试题目,但是没有给出答案,之前我也在寻找这份试题的答案,特地把答案分享出来.有需要的可以看看咯 花了大量时间整理了这套Redis面试题 首发50题,绝无仅有,从入门到精通 从基础,高级知识点,再到集群,运维,方案- 弄明白了这些题可以说可以成为面霸了 面试官都得折服,Redis学得怎么样,都来检验下吧 前面部分是转发来自某篇推文的内容,给大家检索使用 --------------------------------------------------------

PHP面试题及答案解析(8)—PHP综合应用题

1.写出下列服务的用途和默认端口. ftp.ssh.http.telnet.https ftp:File Transfer Protocol,文件传输协议,是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输,其默认端口是21. ssh:Secure Shell,安全外壳协议,建立在应用层和传输层基础上的安全协议.SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,其默端口是22. http:hypertext transport protocol,超文本传送协议,是