PHP面试题
1、用PHP打印出前一天的时间,格式是2006-5-10 22:21:21
2、echo(),print(),print_r()的区别
echo是语言结构,无返回值;print功能和echo基本相同,不同的是print是函数,有返回值;print_r是递归打印,用于输出数组对象
3、能够使HTML和PHP分离开使用的模板
so much,其实PHP本身就是一种模版引擎,我用过的是smarty,常见的还有PHPLib,FastTemplate,Savant这里有个模板引擎列表:http://www.sitepoint.com/forums/showthread.php?t=123769
4.如何实现PHP、JSP交互?
题目有点含糊不清,SOAP,XML_RPC,Socket function,CURL都可以实现这些,如果是考PHP和Java的整合,PHP内置了这种机制(如果考PHP和.NET的整合,也可以这么回答),例如$foo = new Java('java.lang.System');
5.使用哪些工具进行版本控制?
CVS和SVN,SVN号称下一代CVS,功能强大,不过CVS是老牌,市占率很高.我一直用SVN,题目是问用什么工具,呃,这个可能需要这么回答:CVS Server on Apache作服务端,WinCVS作客户端;Subversion on Apache/DAV 做服务端,TortoiseSVN做客户端,或者Subclipse做客户端
6.如何实现字符串翻转?
7、优化MYSQL数据库的方法。
(1).数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据库,必要的时候,去正规化(英文是这个:denormalize,中文翻译成啥我不知道),允许部分数据冗余,避免JOIN操作,以提高查询效率
(2).系统架构设计方面,表散列,把海量数据散列到几个不同的表里面.快慢表,快表只留最新数据,慢表是历史存档.集群,主服务器Read & write,从服务器read only,或者N台服务器,各机器互为Master
(3).(1)和(2)超越PHP Programmer的要求了,会更好,不会没关系.检查有没有少加索引
(4).写高效的SQL语句,看看有没有写低效的SQL语句,比如生成笛卡尔积的全连接啊,大量的Group By和order by,没有limit等等.必要的时候,把数据库逻辑封装到DBMS端的存储过程里面.缓存查询结果,explain每一个sql语句
(5).所得皆必须,只从数据库取必需的数据,比如查询某篇文章的评论数,select count(*) ... where article_id = ? 就可以了,不要先select * ... where article_id = ?然后msql_num_rows.
只传送必须的SQL语句,比如修改文章的时候,如果用户只修改了标题,那就update ... set title = ? where article_id = ?不要set content = ?(大文本)
(6).必要的时候用不同的存储引擎.比如InnoDB可以减少死锁.HEAP可以提高一个数量级的查询速度
8、谈谈事务处理
A给B的账户转账50美元的例子
9、apache+mysql+php实现最大负载的方法
见7
10.实现中文字串截取无乱码的方法。
mb_substr()
11.
12.
13
14、用PHP写出显示客户端IP与服务器IP的代码:
1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的的前一页面URL记录在预定义变量(2)中
2.执行程序段将输出__。
3.在HTTP 1.0中,状态码 401 的含义是____;如果返回“找不到文件”的提示,则可用 header 函数,其语句为____。
答:401表示未授权;header("HTTP/1.0 404 Not Found");[见参考手册》函数参考》HTTP函数》header]
4.数组函数 arsort 的作用是____;语句 error_reporting(2047)的作用是____。
答:arsort:对数组进行逆向排序并保持索引关系 error_reporting(2047)的作用是:report All errors and warnings
5.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):
6.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,
然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
答:LoadModule php5_module "c:/php/php5apache2.dll";AddType application/x-httpd-php .php
见参考手册》目录》II. 安装与配置》6. Windows 系统下的安装》Microsoft Windows 下的 Apache 2.0.x
7.语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是____;为了避免多次包含同一文件,可以用语句____来代替它们。
答:在如何处理失败时,警告而 致命错误;require_once()/include_once()
8.一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on.
答:allow_call_time_pass_reference
9.SQL 中LEFT JOIN的含义是__,如果 tbl_user记录了学生的姓名(name)和学号(ID),
tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句____.
答:自然左外连接
10. 在PHP中,heredoc是一种特殊的字符串,它的结束标志必须____
答:结束标识符所在的行不能包含任何其它字符除";"
11.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
1.以下哪一句不會把 John 新增到 users 陣列? 2.sort()、assort()、和 ksort() 有什麼分別?它們分別在什麼情況下使用? sort() 3.以下的代碼會產生什麼?為什麼? $num =10; 由於函式 multiply() 沒有指定 $num 為全域變量(例如 global $num 或者 $_GLOBALS['num']),所以 $num 的值是 10。 4. reference 跟一個正規的變量有什麼分別?如何 pass by reference?在什麼情況下我們需要這樣做? $myVariable = "its' value";
以 reference 傳送參數給函式,可以使函式改變了的變量,即使在函式結束後仍然保留新值。 5.些函式可以用來在現正執行的腳本中插入函式庫? 6.foo() 與 @foo() 有什麼分別? 7.你如何替 PHP 的應用程式偵錯? pear install apd安裝後在你的腳本的開頭位置加入以下的語句開始進行偵錯: apd_set_pprof_trace();執行完畢,打開以下檔案來查閱執行日誌: 8.「===」是什麼?試舉一個「==」是真但「===」是假的例子。 if (strpos("abc", "a") == true){ // 這部分永不會被執行,因為 "a" 的位置是 0,換算成布爾值「假」}if (strpos("abc", "a") === true){ // 這部份會被執行,因為「===」保證函式 strpos() 的送回值不會換算成布爾值.} 9.你會如何定義一個沒有成員函式或特性的類別 myclass? class myclass{} 10.你如何產生一個 myclass 的物件? $obj = new myclass(); 11.在一個類別內如何存取這個類別的特性及變改它的值? class myclass{ private $propertyName; public function __construct() { $this->propertyName = "value"; }} 12.include 和 include_once 有什麼分別?require 又如何? 13.以下哪一個函式可以把瀏覽器轉向到另一個頁面?
$date='08/26/2003';print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","//2///1///3",$date); 這是把一個日期從 MM/DD/YYYY 的格式轉為 DD/MM/YYYY 格式。我的一個好朋友告訴我可以把這個正規表達式拆解為以下的語句,對於如此簡單的表示是來說其實無須拆解,純粹為了解說的方便: // 對應一個或更多 0-9,後面緊隨一個斜號$regExpression = "([0-9]+)/";// 應一個或更多 0-9,後面緊隨另一個斜號$regExpression .= "([0-9]+)/";// 再次對應一個或更多 0-9$regExpression .= "([0-9]+)";至於 //2///1///3 則是用來對應括號,第一個括號對的是月份,第二個括號對應的是日期,第三個括號對應的是年份。 17.給你一行文字 $string,你會如何編寫一個正規表達式,把 $string 內的 HTML 標籤除去? $stringOfText = " This is a test 18.PHP 和 Perl 分辨陣列和散列表的方法有什麼差異? echo "My string $variable";你也可以使用這種方法: echo << 22.PHP 比 Perl 好嗎?請討論。 参考: 1.http://blog.csdn.net/jerryfleming/archive/2007/01/17/1485528.aspx 2.http://blog.csdn.net/phpme/archive/2006/06/23/826204.aspx 3.http://www.jian-li.com.cn/shiti/20061125/9125.Html 4.http://www.hkpug.net/node/211 5.http://club.phpe.net/index.php?act=ST&f=10&t=7768 6.http://khaki.bloghome.cn/posts/126072.html
1 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
php
if ( isset ( $_POST [ ' action ' ]) && $_POST [ ' action ' ] == ' submitted ' ) { $email = $_POST [ ' email ' ]; if ( ! preg_match ( " /^(?:w+.?)*w+@(?:w+.?)*w+$/ " , $email )) { echo " 电子邮件检测失败 " ; } else { echo " 电子邮件检测成功 " ; } } else { ?> < html > < head >< title > EMAIL检测 title > < script type = " text/javascript " > function checkEmail(sText) { var reg =/^ ( ?: w + .? ) * w + @( ?: w + .? ) * w + $ / ; var email = document . getElementById(sText) . value; if ( ! reg . test(email)) { alert( " 电子邮件检测失败 " ); } else { alert( " 电子邮件格式正确 " ); } } script > head > < body > < form action = " " method = " POST " > 电子邮件: < input type = " text " id = " email " name = " email " />< br /> < input type = " hidden " name = " action " value = " submitted " /> < input type = " button " name = " button " value = " 客户端检测 " onclick = " checkEmail('email') " /> < input type = " submit " name = " submit " value = " 服务器端检测 " /> form > body > html > php } ?> 4 简述如何得到当前执行脚本路径,包括所得到参数。
php
echo " http:// " . $_SERVER [ ' SERVER_NAME ' ] . $_SERVER [ ' PHP_SELF ' ] . " ? " . $_SERVER [ ' QUERY_STRING ' ]; // echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; ?> 5 有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)
php
function BubbleSort( & $arr ) { $cnt = count ( $arr ); $flag = 1 ; for ( $i = 0 ; $i < $cnt ; $i ++ ) { if ( $flag == 0 ) { return ; } $flag = 0 ; for ( $j = 0 ; $j < $cnt - $i - 1 ; $j ++ ) { if ( $arr [ $j ] > $arr [ $j + 1 ]) { $tmp = $arr [ $j ]; $arr [ $j ] = $arr [ $j + 1 ]; $arr [ $j + 1 ] = $tmp ; $flag = 1 ; } } } } $test = array ( 1 , 3 , 6 , 8 , 2 , 7 ); BubbleSort( $test ); var_dump ( $test ); ?>
6 请举例说明在你的开发过程中用什么方法来加快页面的加载速度 Mysql部分
drop
table
if
exists
poll;
/* ============================================================== */ /* Table: poll */ /* ============================================================== */ create table poll ( id int unsigned not null auto_increment, ip varchar ( 15 ) not null , time datetime not null , iid int not null , primary key (id) ) 2 写出将一个选择2号选项的ip为127.0.0.1的用户在当前时间的投票记录到数据库的SQL
insert
into
poll (ip,time,iid)
values
(
'
127.0.0.1
'
,now(),
2
);
3 写出满足下边条件的SQL语句 4 现在因为投票人数太多,网站时常出现too many connection的错误,请提供解决方案
drop
table
if
exists
item;
/*==============================================================*/ /* Table: item */ /*==============================================================*/ create table item ( id int not null , descp varchar ( 200 ) not null , primary key (id) ); select A.ip,b.descp from poll A,item B where A.id = B.id limit 10
6 因为用户实在太多,所以又分配给你两台服务器,你会如何来安排这3台服务器? 8. 原有数据已经有很多重复ip的数据了,所以我们把它导出为一个txt,格式和上边的poll一致,用TAB键间隔,请写一段程序,删除ip有重复的记录,并统计每个投票选项的投票数
php
// 读取文本并放入数组 $apoll = file ( " c:/1.txt " ); // 对每一行数据进行分割,从而获取了一个二维数组 for ( $i = 0 ; $i < count ( $apoll ); $i ++ ) { $poll [ $i ] = split ( " " , $apoll [ $i ]); } // 获取IP、出现的次数数据 $arrIP = array (); for ( $i = 0 ; $i < count ( $poll ); $i ++ ) { $arrIP [ $poll [ $i ][ 1 ]] = isset ( $arrIP [ $poll [ $i ][ 1 ]]) ? $arrIP [ $poll [ $i ][ 1 ]] + 1 : 1 ; } // 获取选项、投票个数 $arrRes = array (); for ( $i = 0 ; $i < count ( $poll ); $i ++ ) { if ( $arrIP [ $poll [ $i ][ 1 ]] == 1 ) { $arrRes [ $poll [ $i ][ 3 ]] = isset ( $arrRes [ $poll [ $i ][ 3 ]]) ? $arrRes [ $poll [ $i ][ 3 ]] + 1 : 1 ; } } var_dump ( $arrRes ); ?> mysql5.0测试版:
/*========================得到测试数据c: .txt=========*/
SELECT * into outfile ' c: .txt ' FROM `testok`; /*========================载入临时表=========*/ create TABLE phpinterview.testok(id int ,ip varchar ( 15 ),time datetime ,iid int ); LOAD DATA INFILE ' c: .txt ' into table testok; /*=========================删除ip有重复的记录=========*/ delete A from testok A,( select ip from testok B group by ip having count ( * ) > 1 ) B where A.ip = B.ip /*================统计每个投票选项的投票数==============================*/ select iid, count ( * ) from testok B group by B.iid
1、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来
?> 3、如何使用下面的类,并解释下面什么意思? class test{ function Get_test($num){ $num=md5(md5($num)."En"); return $num; } } /** * 使用md5加密数据... * */ class test{ function Get_test($num){ $num=md5(md5($num)."En"); return $num; } } $a=new test(); echo $a->Get_test("123"); ?> 4、用javascipt打印 “上海爱吉” 5、写出 SQL语句的格式 : 插入 ,更新 ,删除 select expression from tablename where condition group by columns asc with rollup order by column asc limit offset,rowcount; insert into tablename(columname) values(exp); update tablename set columnname=exp where condition order by column limit rowcount; delete from tablename where condition order by column limit rowcount; 一、PHP/MySQL编程 2)同样上述内容管理系统:表comment记录用户回复内容,字段如下 文章id 文章标题 点击量 回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0 3) 上述内容管理系统,表category保存分类信息,字段如下
drop
table
if
exists
Comment;
drop table if exists category; drop table if exists message; /*==============================================================*/ /* Table: Comment */ /*==============================================================*/ create table Comment ( comment_id int unsigned not null , id int unsigned not null , comment_content text , primary key (comment_id) ) type = InnoDB; /*==============================================================*/ /* Table: category */ /*==============================================================*/ create table category ( category_id int not null AUTO_INCREMENT, category_name varchar ( 40 ) not null , primary key (category_id), key AK_pk_category_id (category_id) ) type = InnoDB; /*==============================================================*/ /* Table: message */ /*==============================================================*/ create table message ( id int not null , title varchar ( 120 ) not null , content text not null , category_id int unsigned, hit int unsigned, primary key (id) ) type = InnoDB; select A.id,A.title,A.hits,IFNULL(B.num, 0 ) from message A left join ( select id, count ( * ) as num from comment B group by id) B on A.id = B.id order by B.num desc ;
<
html
>
< head >< title > JS打印 title > head > < body > < form > < select id = " category " name = " category " > php mysql_connect ( " localhost " , " root " , "" ) or die ( " db conn error: " . mysql_error ()); mysql_select_db ( " phpinterview " ) or die ( " db error " . mysql_error ()); $result = mysql_query ( " select category_id,category_name from category " ); while ( $row = mysql_fetch_array ( $result )) { echo " " . $row [ " category_name " ] . " " ; } ?> select > form > body > html >
1)内容管理系统:用户提交内容后,系统生成静态HTML页面;写出实现的基本思路 6)- 给你三个数,写程序求出其最大值。 9)- 写出发贴数最多的十个人名字的SQL,利用下表: 13)-防止SQL注射漏洞一般用__addslashes___函数。 二. 数据库设计题: 在数据库设计中应: 数据库应用: 结合第二题中你的设计,用一种数据库实现,要求使用三层结构或者多层结构,要求采用面向对象的思想进行编程,有可能的话,设计一套模板机制来实现之。 功能:列出当前借出图书的情况 ,按日期排列 编号 用户姓名 书名 书的编号 借出日期 |