收藏的面试题PHP.doc

上传人:wux****ua 文档编号:8919590 上传时间:2020-04-01 格式:DOC 页数:33 大小:76.50KB
返回 下载 相关 举报
收藏的面试题PHP.doc_第1页
第1页 / 共33页
收藏的面试题PHP.doc_第2页
第2页 / 共33页
收藏的面试题PHP.doc_第3页
第3页 / 共33页
点击查看更多>>
资源描述
PHP面试题1、用PHP打印出前一天的时间,格式是2006-5-10 22:21:212、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=1237694.如何实现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.如何实现字符串翻转??phpfunction reverse($var) $res=; for($i=0,$j=strlen($var);$i7、优化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实现最大负载的方法见710.实现中文字串截取无乱码的方法。mb_substr()11.12.1314、用PHP写出显示客户端IP与服务器IP的代码:1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的的前一页面URL记录在预定义变量(2)中?php/本页地址,SCRIPT_NAME也可以:php/test.phpecho $_SERVERPHP_SELF.;/链接到当前页面的前一页面的 URL 地址:echo $_SERVERHTTP_REFERER.;/其它的见参考手册:语言参考变量预定义变量/前执行脚本的绝对路径名:D:Inetpubwwwrootphp est.php echo $_SERVERSCRIPT_FILENAME.;/正在浏览当前页面用户的 IP 地址:127.0.0.1echo $_SERVERREMOTE_ADDR.;/查询(query)的字符串(URL 中第一个问号 ? 之后的内容):id=1&bi=2echo $_SERVERQUERY_STRING.;/当前运行脚本所在的文档根目录:d:inetpubwwwrootecho $_SERVERDOCUMENT_ROOT.;?2.执行程序段将输出_。?php/参考手册语言参考运算符算术运算符%为取模运算,输出0echo 8%(-2).;/取模 $a % $b 在 $a 为负值时的结果也是负值。输出-2echo (-8)%3).;/输出2echo (8%(-3).;?3.在HTTP 1.0中,状态码 401 的含义是_;如果返回“找不到文件”的提示,则可用 header 函数,其语句为_。答:401表示未授权;header(HTTP/1.0 404 Not Found);见参考手册函数参考HTTP函数header4.数组函数 arsort 的作用是_;语句 error_reporting(2047)的作用是_。答:arsort:对数组进行逆向排序并保持索引关系 error_reporting(2047)的作用是:report All errors and warnings5.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):?php$script=以下内容不显示:alert(cc);echo preg_replace(/.*?.*?/si, 替换内容, $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.x7.语句 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语句_.答:自然左外连接create database phpinterview;use phpinterviewcreate table tbl_user( ID int not null, name varchar(50) not null, primary key (ID);create table tbl_score( ID int not null, score dec(6,2) not null, subject varchar(20) not null);insert into tbl_user (ID, name) values (1, beimu);insert into tbl_user (ID, name) values (2, aihui);insert into tbl_score (ID, score, subject) values (1, 90, 语文);insert into tbl_score (ID, score, subject) values (1, 80, 数学);insert into tbl_score (ID, score, subject) values (2, 86, 数学);insert into tbl_score (ID, score, subject) values (2, 96, 语文);select A.id,sum(B.score) as sumscorefrom tbl_user A left join tbl_score Bon A.ID=B.IDgroup by A.id10. 在PHP中,heredoc是一种特殊的字符串,它的结束标志必须_答:结束标识符所在的行不能包含任何其它字符除;11.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。propertyName,例如:class myclass private $propertyName; public function _construct() $this-propertyName = value; 12.include 和 include_once 有什麼分別?require 又如何?三者都是用來在腳本中插入其他檔案,視乎 url_allow_fopen 是否核准,這個檔案可以從系統內部或外部取得。但他們之間也有微細的分別:include():這個函式容許你在腳本中把同一個檔案插入多次,若果檔案不存在,它會發出系統警告並繼續執行腳本。include_once():它跟 include() 的功能相似,正如它的名字所示,在腳本的執行期間,有關檔案只會被插入一次。require():跟 include() 差不多,它也是用來在腳本中插入其他檔案,但若果檔案不存在,它會發出系統警告,這個警告會引致致命錯誤令腳本中止執行13.以下哪一個函式可以把瀏覽器轉向到另一個頁面?redir()這不是一個 PHP 函式,會引致執行錯誤。header()這個是正確答案,header() 用來插入卷頭資料,可以用來使瀏覽器轉向到另一個頁面,例如:header(Location: http:/www.search-this.com/);location()這不是一個 PHP 函式,會引致執行錯誤。redirect()這不是一個 PHP 函式,會引致執行錯誤。14.以下哪一個函式可以用來開啟檔案以便讀寫?fget()這不是一個 PHP 函式,會引致執行錯誤。file_open()這不是一個 PHP 函式,會引致執行錯誤。fopen()這是正確答案,fopen() 可以用來開啟檔案以便讀寫,事實上這個函式還有很多選項,詳細資料請參閱 php.net。 open_file()這不是一個 PHP 函式,會引致執行錯誤。15.mysql_fetch_row() 和 mysql_fetch_array() 有什麼分別?mysql_fetch_row() 把數據庫的一列儲存在一個以零為基數的陣列中,第一欄在陣列的索引 0,第二欄在索引 1,如此類推。mysql_fetch_assoc() 把數據庫的一列儲存在一個關聯陣列中,陣列的索引就是欄位名稱,例如我的數據庫查詢送回first_name、last_name、email三個欄位,陣列的索引便是first_name、last_name和email。mysql_fetch_array() 可以同時送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。 16.下面的代碼用來做什麼?請解釋。$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 標籤除去?首先,PHP 有內建函式 strip_tags() 除去 HTML 標籤,為何要自行編寫正規表達式?好了,便當作是面試的一道考題吧,我會這樣回答:$stringOfText = This is a test;$expression = /(.*?)/;echo preg_replace($expression, 2, $stringOfText);/ 有人說也可以使用 /(*)/ $expression = /(*)/;echo preg_replace($expression, , $stringOfText);18.PHP 和 Perl 分辨陣列和散列表的方法有什麼差異?這正是為何我老是告訴別人選擇適當的編程語言,若果你只用一種語言的話你怎麼能回答這道問題?這道問題很簡單,Perl 所有陣列變量都是以 開頭,例如 myArray,PHP 則沿用 $ 作為所有變量的開頭,例如 $myArray。至於 Perl 表示散列表則用 %,例如 %myHash,PHP 則沒有分別,仍是使用 $,例如 $myHash。19.你如何利用 PHP 解決 HTTP 的無狀態本質?最主要的倆各選擇是 session 和 cookie。使用 session 的方法是在每一頁的開始加上 session_start(),然後利用 $_SESSION 散列表來儲存 session 變量。至於 cookie 你只需記著一個原則:在輸出任何文字之前調用 set_cookie() 函式,此外只需使用 $_COOKIE 散列表便可以存取所有 cookie 變量。還有一個不那麼可靠的方法,就是利用訪客的 IP 地址,這個方法有特定的危險性。20.GD 函式庫用來做什麼?這個可能是我最喜歡的函式庫,自從 PHP 4.3.0 版本後 GD 便內建在 PHP 系統中。這個函式庫讓你處理和顯示各式格式的圖檔,它的另一個常見用途是製作所圖檔。GD 以外的另一個選擇是 ImageMagick,但這個函式庫並不內建於 PHP 之中,必須由系統管理員安裝在伺服器上。 21.試寫出幾個輸出一段 HTML 代碼的方法。嗯,你可以使用 PHP 中任何一種輸出語句,包括 echo、print、printf,大部分人都使用如下例的 echo:echo My string $variable;你也可以使用這種方法:echo ENDThis text is written to the screen as output and this $variable is parsed too. If you wanted you can have HTML tags in here as well. The END; remarks must be on a line of its own, and cant contain any extra white space.END;22.PHP 比 Perl 好嗎?請討論。我們不要為一個簡單的問題引發一場舌戰,正如我經常說的:為工作選擇適合的語言,不要把工作遷就語言。我個人認為 Perl 十分適合用作命令行工具,雖然它在網頁應用上也有不錯的表現,但是它的真正實力在命令行上才能充分發揮。同樣地,PHP 雖然可以在控制台的環境中使用,但是個人認為它在網頁應用上有更好的表現,PHP 有大量專門為網頁應用而設計的函式,Perl 則似乎以命令行為設計之本。個人來說兩種語言我都喜歡,在大學期間我經常使用 Perl、PHP 和 Java,可惜工作上我使用 C#,但在家裡我花不少時間操練 PHP、Perl、Ruby(現正學習)和 Java,保持我的技能知識在最新狀態。很多人問我 C 和 C+ 怎麼樣,它們是否仍有機會在我的應用中佔一席位,我的答案基本上是否,我近來的工作主要集中在網頁開發,雖然 C 和 C+ 也可以用來寫網頁,但它們到底不是為這種工作而設計的,為工作選擇適合的語言,若果我需要編寫一個控制台應用,用來展示 bubble sort、quick sort 和 merge sort 的效能比較,我一定會使用 C / C+。若果我需要編寫一個相片簿系統,我會使用 PHP 或者 C#(我認為製作用戶介面方面 .NET 語言比網頁更加)。 参考:1.http:/blog.csdn.net/jerryfleming/archive/2007/01/17/1485528.aspx 2.http:/blog.csdn.net/phpme/archive/2006/06/23/826204.aspx3.http:/www.jian-li.com.cn/shiti/20061125/9125.Html4.http:/www.hkpug.net/node/2115.http:/club.phpe.net/index.php?act=ST&f=10&t=77686.http:/khaki.bloghome.cn/posts/126072.html1 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用? 答: 传值只是把某一个变量的值传给了另一个变量,而引用则说明两者指向了同一个地方。 2 在PHP中error_reporting这个函数有什么作用? 答: The error_reporting() function sets the error_reporting directive at runtime. PHP has many levels of errors, using this function sets that level for the duration (runtime) of your script. 3 请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。答: EMAIL检测 function checkEmail(sText) var reg=/(?:w+.?)*w+(?:w+.?)*w+$/; var email=document.getElementById(sText).value; if(!reg.test(email) alert(电子邮件检测失败); else alert(电子邮件格式正确); form action= method=POST电子邮件:4 简述如何得到当前执行脚本路径,包括所得到参数。5 有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)?phpfunction BubbleSort(&$arr) $cnt=count($arr); $flag=1; for($i=0;$i$cnt;$i+) if($flag=0) return; $flag=0; for($j=0;$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部分1 创建poll表,用于记录单选投票用户的数据字段包括 id Autoincreace , ip , time , iid(用户选则的选项,int型)写出create上述table的完整sql语句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的用户在当前时间的投票记录到数据库的SQLinsert into poll (ip,time,iid) values(127.0.0.1,now(),2);3 写出满足下边条件的SQL语句item表的结构为 id(就是poll表中的iid) , descp(用户选择的选项的文字)请查询并返回10条记录,包括ip和用户选择的选项的文字4 现在因为投票人数太多,网站时常出现too many connection的错误,请提供解决方案方法一:加大MySql的最大连接数 mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些,编辑my.ini 修改 max_connections=1000方法二,不用mysql数据库,改为直接写文件,详细方法参照问题5若非要用 mysql,还可方法三:由于用mysql语句调用数据库时,在每次之执行语句前,会做一个临时的变量用来打开数据库,所以你在使用mysql语句的时候,记得在每次调用完mysql之后就关闭mysql临时变量5 在成功解决连接数的问题后,发现程序运行缓慢,经查发现是mysql并发太多,表被锁定的现象严重,请提供解决方案对于访问量大的,本来就不推荐使用数据库,可以考虑直接写到文本中,根据预测的访问量,先定义假若是100个文件文件名依次为1.txt,2.txt100.txt,每有用户投票的时候,随机往其中的一个文件中写入投票信息。统计的时候,再对所有文本文件中的数据进行分析。必要的时候,再导入数据库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.descpfrom poll A,item Bwhere A.id=B.idlimit 106 因为用户实在太多,所以又分配给你两台服务器,你会如何来安排这3台服务器?对于服务器分配,其实有好几种方案(建议采用LINUX主机),先列出一个解决方案。1 考虑到电信,网通(南北差异)互访问速度慢的问题,可以让电信的用户走电信的线,网通的走网通的线。大致可以这样分配,国内南方用户(电信用户)拥有一台 服务器A;北方用户(网通用户)拥有一台服务器B。国外的用户也可以考虑给一台服务器C。用户访问的时候,首先访问的是针对国外的服务器,那台机器是电信 网通的用户访问速度都差不多的(可以考虑就租用香港或是什么地方的),经过服务器C判断后直接跳到相应的服务器。统计时三台机器的数据合起来。7 现在开始要求同一ip不能重复投票 ,请指出如何对数据表进行相应的修改ALTER TABLE phpinterview.poll ADD unique INDEX IX_poll_ip(ip);8. 原有数据已经有很多重复ip的数据了,所以我们把它导出为一个txt,格式和上边的poll一致,用TAB键间隔,请写一段程序,删除ip有重复的记录,并统计每个投票选项的投票数?php/读取文本并放入数组$apoll = file(c:1.txt);/对每一行数据进行分割,从而获取了一个二维数组for ($i=0;$icount($apoll);$i+) $poll$i = split( ,$apoll$i);/获取IP、出现的次数数据$arrIP=array();for($i=0;$icount($poll);$i+) $arrIP$poll$i1=isset($arrIP$poll$i1)?$arrIP$poll$i1+1:1;/获取选项、投票个数$arrRes=array();for($i=0;$imysql5.0测试版:/*/*=得到测试数据c: .txt=*/SELECT *into outfile c: .txtFROM testok;/*/*=载入临时表=*/create TABLE phpinterview.testok(id int,ip varchar(15),time datetime,iid int);LOAD DATA INFILE c: .txtinto table testok;/*/*=删除ip有重复的记录=*/delete A from testok A,(select ip from testok B group by ip having count(*) 1) Bwhere A.ip=B.ip/*/*=统计每个投票选项的投票数=*/select iid,count(*) from testok B group by B.iid1、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来表名User Name Tel Content Date 张三 13333663366 大专毕业 2006-10-11张三 13612312331 本科毕业 2006-10-15张四 021-55665566 中专毕业 2006-10-15请根据上面的题目完成代码: $mysql_db=mysql_connect(local,root,pass);mysql_select_db(DB,$mysql_db);drop table if exists user;/*=*/* Table: user */*=*/create table user( Name varchar(20), Tel varchar(16), Content varchar(255), Date date)insert into user(name,tel,content,date) values(张三,13333663366,大专毕业,2006-10-11);insert into user(name,tel,content,date) values(张三,13612312331,本科毕业,2006-10-15);insert into user(name,tel,content,date) values(张四,021-55665566,中专毕业,2006-10-1);select * from user where name=张三;?phpheader(content-type:text/html; charset=gbk); $mysql_db=mysql_connect(localhost,root,);mysql_select_db(phpinterview,$mysql_db);echo ;mysql_query(set names gbk);$result=mysql_query(select Name,Tel,Content,Date from user where Name=张三) or die(错误:.mysql_error();while($row=mysql_fetch_array($result,MYSQL_BOTH) echo .$rowName.$rowTel. $rowContent.$rowDate.;mysql_free_result($result);echo ?3、如何使用下面的类,并解释下面什么意思?class testfunction Get_test($num)$num=md5(md5($num).En);return $num;Get_test(123);?4、用javascipt打印 “上海爱吉”JS打印 document.write(上海吉它);5、写出 SQL语句的格式 : 插入 ,更新 ,删除select expressionfrom tablenamewhere conditiongroup by columns asc with rolluporder by column asclimit offset,rowcount;insert into tablename(columname) values(exp);update tablename set columnname=exp where condition order by column limit row
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!