分享30个基础的php面试题及答案(对新手非常有用)
你是否正在筹备探求一份PHP开拓的事变,而且也在探求一些关于PHP的口试题及谜底?本文为各人分享了一些被提问频率较高PHP口试题,以及对应的通例答复,每个公司都有本身的口试尺度,口试和题目是完全取决于你在事变中所饰演的脚色,虽然也和你的编程手艺痛痒相干。 题1:计一律个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口封锁,而输入的信息却在主网页中表现! 谜底:尼玛。都没大白出这标题是干嘛的,新浪工程师脑筋进水了吗?考查js的window工具?亲们汇报我? index.html fullwin.html 题2:nginx行使哪种收集协议? 谜底:nginx是应用层 我认为从下往上的话 传输层用的是tcp/ip 应用层用的是httpfastcgi认真调治历程 题3:表单中 get与post提交要领的区别? 谜底:get是发送哀求HTTP协议通过url参数转达举办吸取,而post是实体数据,可以通过表单提交大量信息。 题4:简述论坛中无穷分类的实现道理 谜底:无穷极分类,那么应该是考查递归函数吧! 第一步:成立测试数据库: CREATE TABLE `category` ( `id` smallint(5) unsigned NOT NULL auto_increment, `fid` smallint(5) unsigned NOT NULL default '0', `value` varchar(50) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 第二步:插入测试数据: INSERT INTO `category` ( `fid`,`value`) VALUES (0,'编程之家教程http://www.manongjc.com'), (1,'a'),'b'), (2,'c'),'d'), (4,'e') 第三步:递归输出分类: /** by http://www.manongjc.com/article/1524.html */ $conn = mysql_connect("localhost","root","mckee"); mysql_select_db("test",$conn); mysql_query("set names utf8"); $sql = "SELECT * FROM category"; $res = mysql_query($sql); while($row = mysql_fetch_assoc($res)){ $arr[] = array($row[id],$row[fid],$row[value]); } getCate(0); function getCate($fid = 0) { global $arr; for ($i = 0; $i < count($arr); $i++) { if ($arr[$i][1] == $fid) { echo $arr[$i][2] . " getCate($arr[$i][0]); //递归 } } } ?> 题5:请用正则表达式(Regular Expression)写一个函数验证电子邮件的名目是否正确 谜底: /* http://www.manongjc.com/article/1524.html */ $email=$_POST['email']; if(!preg_match(‘/^[w.]+@([w.]+).[a-z]{2,6}$/i’,$email)) { echo "电子邮件检测失败"; }else{ echo "电子邮件检测乐成"; } ?> 题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()函数讲授及遍历目次实例),只是实现的要领许多,服从不必然最高 /* *@blog http://www.manongjc.com */ function listDir($dir = '.'){ if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if($file == '.' || $file == '..'){ continue; } if(is_dir($sub_dir = realpath($dir.'/'.$file))){ echo 'FILE in PATH:'.$dir.':'.$file.' listDir($sub_dir); }else{ echo 'FILE:'.$file.' } } closedir($handle); } } listDir('e:wwwabc'); 题10:用起码的代码写一个求3值最大值的函数. 谜底: function($a,$b,$c){ /* www.manongjc.com/article/1524.html */ return $a>$b? ($a>$c? $a : $c) : ($b>$c? $b : $c ); } 题11:简述下面措施的输出功效,扼要声名为什么,怎样办理这类题目? $tmp = 0 == "a"? 1: 2; echo $tmp; ?> 谜底: 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将()添上 谜底: /** by www.manongjc.com */ $a = '/a/b/c/d/e.php'; $b = '/a/b/13/34/c.php'; echo getRelativePath($a,$b); //"../../12/34/" function getRelativePath($a,$b){ $a2array = explode('/',$a); $b2array = explode('/',$b); $relativePath = ''; for( $i = 1; $i <= count($b2array)-2; $i++ ) { $relativePath .= $a2array[$i] == $b2array[$i] ? '../' : $b2array[$i].'/'; } return $relativePath; } ?> 题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 语句 请行使 PHP 说话写一个函数,把一个尺度 HTML 页面中的相同 meta 标志中的 charset 部门值改为 big5 请留意: 必要处理赏罚完备的 html 页面,即不仅此 meta 语句 忽略巨细写 ' 和 " 在此处是可以交流的 'Content-Type' 两侧的引号是可以忽略的,但 'text/html; charset=gbk' 两侧的不可 留意处理赏罚多余空格 谜底:首要考查正则表达式 /** http://www.manongjc.com/article/1524.html */ $html = ""; //匹配尺度的meta标签 $pattern = "/ $replacement = ""; $result = preg_replace($pattern,$replacement,$html); echo htmlspecialchars($result); ?> 题20:假设a.html和b.html在统一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html。 谜底: /** http://www.manongjc.com/article/1524.html */ function go2b(){ window.location = “b.html”; window.close(); } setTimeout( “go2b()”,5000 ); //5秒钟后自动执行go2b() 题21:简述两种屏障php措施的notice告诫的要领 谜底: 在措施中添加:error_reporting (E_ALL & ~E_NOTICE); 修改php.ini中的:error_reporting = E_ALL改为:error_reporting = E_ALL & ~E_NOTICE 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 谜底: /** by www.manongjc.com */ $url = "http://www.manongjc.com/article/1524.html?id=1"; $path = parse_url($url); echo pathinfo($path['path'],PATHINFO_EXTENSION); //php ?> 题26:PHP中获取图像尺寸巨细的要领是什么? 谜底: getimagesize () 获取图片的尺寸 Imagesx () 获取图片的宽度 Imagesy () 获取图片的高度 题27:怎样修改SESSION的保留时刻 谜底: 要领1:将php.ini中的session.gc_maxlifetime配置为9999重启apache 要领2:$savePath = “./session_save_dir/”; $lifeTime = 小时 * 秒; session_save_path($savePath); session_set_cookie_params($lifeTime); session_start(); 要领3:setcookie() and session_set_cookie_params($lifeTime); 题28:写一个排序算法,可所以冒泡排序可能是快速排序,假设待排序工具是一个维数组 谜底: 冒泡排序(数组排序): function bubble_sort($array) { $count = count($array); if ($count <= 0) return false; for($i=0; $i<$count; $i++){ for($j=$count-1; $j>$i; $j–){ if ($array[$j] < $array[$j-1]){ $tmp = $array[$j]; $array[$j] = $array[$j-1]; $array[$j-1] = $tmp; } } } return $array; } 快速排序(数组排序): function quicksort($array) { if (count($array) <= 1) return $array; $key = $array[0]; $left_arr = array(); $right_arr = array(); for ($i=1; $i if ($array[$i] <= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i]; } $left_arr = quicksort($left_arr); $right_arr = quicksort($right_arr); return array_merge($left_arr,array($key),$right_arr); } 题29:PHP中的错误范例有哪些? 谜底: PHP中碰着的错误范例大抵有3类。 提醒:这都是一些很是正常的信息,而非重大的错误,有些乃至不会展示给用户。好比会见不存在的变量。 告诫:这是有点严峻的错误,将会把告诫信息展示给用户,但不会影响代码的输出,好比包括一些不存在的文件。 错误:这是真正的严峻错误,好比会见不存在的PHP类。 题30:求两个日期的差数,譬喻2016-2-5 ~ 2016-3-6 的日期差数 谜底: 要领一: /* http://www.manongjc.com/article/1524.html */ class Dtime { function get_days($date1,$date2){ $time1 = strtotime($date1); $time2 = strtotime($date2); return ($time2-$time1)/86400; } } $Dtime = new Dtime; echo $Dtime->get_days(’2016-2-5′,’2016-3-6′); ?> 要领二: /* http://www.manongjc.com/article/1524.html */ $temp = explode(‘'-',’2016-2-5′); $time1 = mktime(0,$temp[1],$temp[2],$temp[0]); $temp = explode('-',’2016-3-6′); $time2 = mktime(0,$temp[0]); echo ($time2-$time1)/86400; ?> 要领三: /* http://www.manongjc.com */ echo abs(strtotime("2016-2-1″)-strtotime("2016-3-1″))/60/60/24 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |