国产精品亚洲综合久久系列,一本大道香蕉青青久久,播放高清的播放器,国产在线观看无码不卡

蜜蜂職場(chǎng)文庫(kù) > 面試技巧 >

php面試常見(jiàn)問(wèn)題

時(shí)間: 小龍 面試技巧

  PHP技術(shù)員的操作能力也會(huì)在面試中考察,能否快速準(zhǔn)確地回答問(wèn)題,快來(lái)學(xué)習(xí)php面試常見(jiàn)問(wèn)題啦,增加面試通過(guò)率,小編帶你一起學(xué)習(xí)。

  php面試常見(jiàn)問(wèn)題(一)

  1、表單提交get和post有何區(qū)別?

  答:get的方式是把數(shù)據(jù)在地址欄中發(fā)送,get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。

  2、用PHP打印出前一天的時(shí)間格式是2006-5-10 22:21:21

  echo date("Y-m-d H:i:s",time()-(3600*24));或echo date("Y-m-d H:i:s",strtotime("-1 day"));

  3、php中include和require的區(qū)別?

  這兩種結(jié)構(gòu)除了在如何處理失敗之外完全一樣。include() 產(chǎn)生一個(gè)警告而 require() 則導(dǎo)致一個(gè)致命錯(cuò)誤。換句話說(shuō),如果你想在遇到丟失文件時(shí)停止處理頁(yè)面就用 require()。include() 就不是這樣,腳本會(huì)繼續(xù)運(yùn)行。

  4、echo(),print(),print_r()的區(qū)別

  echo可以接多個(gè)參數(shù),print只能接一個(gè)參數(shù),它們都是PHP的語(yǔ)言結(jié)構(gòu),print_r是遞規(guī)打印,用來(lái)打印數(shù)組或?qū)ο?/p>

  5、能夠使HTML和PHP分離開(kāi)使用的模板

  smarty,phplib,SmartTemplate 6你如何理解MVC模式?

  首先說(shuō)一下框架,框架:就是別人把一些底層,常用操作.比如數(shù)據(jù)操作(增,刪,改,查)寫好.你來(lái)直接用.其它的功能要自己來(lái)做。

  MVC:設(shè)計(jì)模式,M模型,V顯示,C控制.現(xiàn)在許多框架都是基于MVC來(lái)做的把邏輯和顯示分開(kāi).比如你要換頁(yè)面,只需要改V里面的東西并不需要再去變動(dòng)程序(詳細(xì)的東西可以上網(wǎng)上!

  查一下)

  7、如何實(shí)現(xiàn)PHP、JSP交互?

  PHP提供了支持JAVA的類庫(kù)文件,或者通過(guò)HTTP協(xié)議來(lái)交互數(shù)據(jù)

  8、使用哪些工具進(jìn)行版本控制?

  VSS,CVS,SVN

  9、如何實(shí)現(xiàn)字符串翻轉(zhuǎn)?

  不考慮中英文混合,不是最優(yōu)算法,不用php庫(kù)函數(shù)翻轉(zhuǎn)字符串:

  function str_to_reverse( $str ){

  for($length=0;$str[$length]!=null;$length++){;}

  $strlength = $length-1;

  unset($length);

  for($start=0,$end=$strlength;$start<$end;$start++,$end--){

  $temp = $str[$start];

  $str[$start] = $str[$end];

  $str[$end] = $temp;

  }

  unset($temp,$start,$end,$strlength);

  return $str;

  }

  10、優(yōu)化MYSQL數(shù)據(jù)庫(kù)的方法。

  1) 將where中用的比較頻繁的字段建立索引,聯(lián)合索引。

  2) 保證單表數(shù)據(jù)不超過(guò)200W,適時(shí)分割表。

  3) 避免使用長(zhǎng)連接。

  4) 修改my.cnf里面的各項(xiàng)參數(shù),比如最大連接數(shù),查詢緩存等。根據(jù)你的服務(wù)器內(nèi)存來(lái)最大化調(diào)節(jié)那些配置參數(shù)。

  5) 針對(duì)需求,使用正確的表引擎,是myisam或是innodb。

  11.用PHP寫出顯示客戶端IP與服務(wù)器IP的代碼:

  echo $_SERVER['REMOTE_Aphp面試常見(jiàn)問(wèn)題R'] //客戶端ip

  echo $_SERVER['SERVER_Aphp面試常見(jiàn)問(wèn)題R'] //服務(wù)器端ip

  12、apache+mysql+php實(shí)現(xiàn)最大負(fù)載的方法

  1) 問(wèn)的太籠統(tǒng),生成靜態(tài)html頁(yè)面,squid反向代理,apache,mysql的負(fù)載均衡。

  2) 可以采取數(shù)據(jù)緩存的方法,我們通常在統(tǒng)計(jì)數(shù)據(jù)的時(shí)候,需要在原始數(shù)據(jù)的基礎(chǔ)上經(jīng)過(guò)計(jì)算等一系列操作,才會(huì)得到最終的結(jié)果,如果每做一個(gè)查詢都需要這樣一系列操作,當(dāng)數(shù)據(jù)量大時(shí),勢(shì)必會(huì)帶來(lái)很多問(wèn)題??梢越⒁粋€(gè)結(jié)果表,寫一個(gè)腳本,用crontab定時(shí)觸發(fā)腳本去原始表取數(shù)據(jù),計(jì)算,寫入到結(jié)果表,前端查詢從結(jié)果表取數(shù)據(jù),這也是比較常用的一種做法。

  3) 采用分布式,多個(gè)apache,多個(gè)mysql,其實(shí)就是dns負(fù)載均衡,dns根據(jù)當(dāng)前用戶解析幾個(gè)ip的ping值,將用戶轉(zhuǎn)移到某一臺(tái)最快的服務(wù)器,或者平均分配。

  4 )money不是問(wèn)題的話,可以考慮F5硬件負(fù)載均衡!

  5)可以使用Microsoft Windows Server系統(tǒng)的負(fù)載均衡設(shè)置

  php面試常見(jiàn)問(wèn)題(二)

  1. echo count(“abcd”);輸出多少?

  int count(mixed var)

  返回單元數(shù)目,通常是一個(gè)array,任何其他類型都只有一個(gè)單元,有一個(gè)例外, 如果var是null結(jié)果是0

  2.

  $a=$b=$c=0;

  $a=$b && $c;

  運(yùn)行以上代碼后$a $b $c 分別是?

  $a=false

  $c=0

  $b=0

  2. PHP打印出前一天的時(shí)間,格式是-12-29 22:21:21

  echo date('Y-m-d H:i:s',strtotime('-1 day'));

  strtotime 將任何英文文本的日期時(shí)間解析成時(shí)間戳

  4. 請(qǐng)用php的heredoc語(yǔ)法格式輸出:hello world!

  <?php

  echo <<<EOT

  hello world!

  EOT;

  5. $string = "abcdefg",那么$string{4}的值是?

  $string{4}=e

  因?yàn)镻HP是弱類型語(yǔ)言,可以將字符串“視為數(shù)組”,當(dāng)做字符集合看待,字符串中的字符可以在字符串之后用花括號(hào)指定所要字符從零開(kāi)始的偏移量來(lái)訪問(wèn)和修改。

  6. 簡(jiǎn)述echo(),print(),print_r()的區(qū)別。

  echo,print是PHP語(yǔ)言結(jié)構(gòu), print_r是函數(shù),語(yǔ)言結(jié)構(gòu)沒(méi)有返回值,函數(shù)可以有返回值(即便沒(méi)有用)

  print只能打印出簡(jiǎn)單類型變量的值(如int,string)

  print_r可以打印出復(fù)雜類型變量的值(如數(shù)組,對(duì)象)

  7.用PHP寫出顯示客戶端IP與服務(wù)器IP的代碼。

  客戶端: $_SERVER[REMOTE_Aphp面試常見(jiàn)問(wèn)題R]

  服務(wù)器: $_SERVER[SERVER_Aphp面試常見(jiàn)問(wèn)題R]

  8、用正則表達(dá)式判斷$a是否是一個(gè)以半角逗號(hào)分隔的多個(gè)手機(jī)號(hào)碼組成的字符串,是輸出yes

  <?php

  $phone = '13725439919,18588421409,18817006902';

  $pattern = '/^(1[34568]\d{9},)+(1[34568]\d{9})?$/';

  if(preg_match_all($pattern,$phone,$out)){

  echo 'yes';

  }else{

  echo 'no';

  }

  echo '<pre>';

  print_r($out);

  9、解釋MVC,介紹幾種目前比較流行的MVC框架

  由模型(model),視圖(view),控制器(controller)完成的應(yīng)用程序

  MVC模式的目的就是實(shí)現(xiàn)Web系統(tǒng)的功能分工,它強(qiáng)制性地把應(yīng)用程序的輸入、處理和輸出分開(kāi),可以各自處理自己的任務(wù),是一種分層的概念。Model層實(shí)現(xiàn)系統(tǒng)中的業(yè)務(wù)邏輯,View層用于與用戶的交互,Controller層是Model和View之間溝通的橋梁。

  Symfony:是為開(kāi)發(fā)大型web準(zhǔn)備的,學(xué)習(xí)曲線比較長(zhǎng)。

  Laravel:簡(jiǎn)潔、優(yōu)雅。

  10、描述一下大流量高并發(fā)網(wǎng)站的解決方案

  1) LVS或nginx負(fù)載均衡器,通過(guò)負(fù)載均衡把壓力分擔(dān)到多臺(tái)服務(wù)器.

  2) squid緩存或nginx web cache緩存

  3) web 服務(wù)器選型(nginx代替apache)

  4) 頁(yè)面靜態(tài)化(smarty或框架),數(shù)據(jù)緩存(memcache Redis)

  5) memcache

  6) sql語(yǔ)句一定要注意索引使用

  7) 主從數(shù)據(jù)庫(kù)

  8) 分庫(kù)分表或分區(qū)

  主要從以下幾個(gè)方面回答:

  1、硬件

  1) 垂直拓展:買更好的服務(wù)器。一般不建議這么做,因?yàn)閱蝹€(gè)服務(wù)器都有上限

  2) 水平拓展:多買幾臺(tái)服務(wù)器,利用負(fù)載均衡器(LVS、F5),將壓力分擔(dān)到不同服務(wù)器上。

  2、 數(shù)據(jù)庫(kù)

  a) 數(shù)據(jù)庫(kù)優(yōu)化 : 1、分表和分區(qū) 2、主從數(shù)據(jù)庫(kù)

  b) 數(shù)據(jù)庫(kù)的選型 :可以考慮將apache換成nginx

  c) SQl語(yǔ)句優(yōu)化

  3、 緩存

  a) 數(shù)據(jù)緩存 :使用memcache

  B) 頁(yè)面靜態(tài)化 :框架的頁(yè)面靜態(tài)化、smarty

  C) 使用CDN

  參考答案:

  1、硬件

  購(gòu)買更好的服務(wù)器,這種是縱向擴(kuò)展,但是不太推薦。購(gòu)買更多的服務(wù)器,利用LVS或者F5搭建服務(wù)器集群。從而提高整個(gè)網(wǎng)站的計(jì)算速度。

  2、web服務(wù)器

  由于Apache的并發(fā)處理能力有限,所以可以考慮使用Nginx。

  3、數(shù)據(jù)庫(kù)

  Mysql要結(jié)合NoSQL使用,由于單個(gè)數(shù)據(jù)庫(kù)能力有限,所以要搭建主從數(shù)據(jù)庫(kù)。

  4、緩存

  a) 為了減小數(shù)據(jù)庫(kù)的壓力,考慮使用Memcache或Redis做緩存。 b) 把網(wǎng)站的絕大多數(shù)頁(yè)面進(jìn)行頁(yè)面靜態(tài)化。(phpcms)

  c) 把靜態(tài)資源放到CDN上。

  5、禁止外部的盜鏈

  6、控制大文件的下載

  11、如何防SQL注入

  //表單盡量用post提交,核心用戶驗(yàn)證都走post,避開(kāi)get

  1、 表單盡量用post,表單判斷控制走get,因?yàn)間et比post速度快

  2、 $_SERVER[HTTP_REFERER]判斷提交者的源頭,只能本站提交。

  3、 使用aphp面試常見(jiàn)問(wèn)題slashes轉(zhuǎn)義用戶提交的數(shù)據(jù)

  4、 服務(wù)器本身的安全

  5、 數(shù)據(jù)庫(kù)使用PDO,因?yàn)镻DO有預(yù)處理

  12、如何實(shí)現(xiàn)多臺(tái)web服務(wù)器共享session數(shù)據(jù)

  1、改變session的域 ,比如域名是www.baidu.com

  域就應(yīng)該是.baidu.com

  2、使用數(shù)據(jù)庫(kù)或者memcache存儲(chǔ)session數(shù)據(jù)

  php面試常見(jiàn)問(wèn)題(三)

  1、用PHP打印出前一天的時(shí)間格式是2006-5-10 22:21:21 $a = date("Y-m-d H:i:s", strtotime("-1 day"));

  print_r($a);

  2、echo(),print(),print_r()的區(qū)別

  echo 和print不是一個(gè)函數(shù),是一個(gè)語(yǔ)言結(jié)構(gòu)

  int print(string $arg), 只有一個(gè)參數(shù)

  echo arg1,arg2; 可以輸出多個(gè)參數(shù),返回void

  echo和print只能打印出string,不能打印出結(jié)構(gòu)

  print_r能打印出結(jié)構(gòu)

  比如

  $arr = array("key"=>"value");

  print_r($arr);

  3、能夠使HTML和PHP分離開(kāi)使用的模板

  smarty,phplib

  4、使用哪些工具進(jìn)行版本控制?

  svn,git,cvs

  5、如何實(shí)現(xiàn)字符串翻轉(zhuǎn)?

  英文:

  strrev($a)

  中文或其他文字:

  中文:GB2312, 代碼是使用GB2312編碼

  <?php

  function reverse($str)

  {

  $ret = "";

  len=mbstrwidth(str,"GB2312");

  for(i=0;i< len;i++)

  {

  arr[]=mbsubstr(str, $i, 1, "GB2312"); }

  return implode("", array_reverse($arr));

  }

  print_r(reverse("你好"));

  6、優(yōu)化MYSQL數(shù)據(jù)庫(kù)的方法。

  語(yǔ)句方面:

  1 使用索引,增加查詢效率

  2 優(yōu)化查詢語(yǔ)句,提高索引命中率

  數(shù)據(jù)庫(kù)涉及方面:

  1 構(gòu)造分庫(kù)分表,提高數(shù)據(jù)庫(kù)的存儲(chǔ)和擴(kuò)展能力

  2 根據(jù)需要使用不同的存儲(chǔ)引擎

  7、PHP的意思

  超級(jí)文本預(yù)處理語(yǔ)言

  Hypertext PreProcessor

  8、MYSQL取得當(dāng)前時(shí)間的函數(shù)是?,格式化日期的函數(shù)是(2分) CURRENT_TIMESTAMP()

  DATE_FORMAT()

  select DATE_FORMAT("-11-21 10:10:10", "%Y-%m-%d");

  9、實(shí)現(xiàn)中文字串截取無(wú)亂碼的方法。

  mb_substr($str, 1, 1, "GB2312");

  10、您是否用過(guò)版本控制軟件? 如果有您用的版本控制軟件的名字是?

  svn

  git

  11、您是否用過(guò)模板引擎? 如果有您用的模板引擎的名字是? smarty

  12、請(qǐng)簡(jiǎn)單闡述您最得意的開(kāi)發(fā)之作

  XXX

  13、對(duì)于大流量的網(wǎng)站,您采用什么樣的方法來(lái)解決訪問(wèn)量問(wèn)題? 1 有效使用緩存,增加緩存命中率

  2 使用負(fù)載均衡

  3 對(duì)靜態(tài)文件使用CDN進(jìn)行存儲(chǔ)和加速

  4 想法減少數(shù)據(jù)庫(kù)的使用

  5 查看出現(xiàn)統(tǒng)計(jì)的瓶頸在哪里

  14、用PHP寫出顯示客戶端IP與服務(wù)器IP的代碼

  $_SERVER["REMOTE_Aphp面試常見(jiàn)問(wèn)題R"]

  $_SERVER["SERVER_Aphp面試常見(jiàn)問(wèn)題R"]

  15、語(yǔ)句include和require的區(qū)別是什么?為避免多次包含同一文件,可用(?)語(yǔ)句代替它們?

  在失敗的時(shí)候:

  include產(chǎn)生一個(gè)warning,而require產(chǎn)生直接產(chǎn)生錯(cuò)誤中斷

  require在運(yùn)行前載入

  include在運(yùn)行時(shí)載入

  require_once

  include_once

  16、如何修改SESSION的生存時(shí)間

  session_set_cookie_params

  17、有一個(gè)網(wǎng)頁(yè)地址, 比如PHP研究室主頁(yè): ...,如何得到它的內(nèi)容?

  file_get_contents

  curl

  18、在HTTP 1.0中,狀態(tài)碼401的含義是(?);如果返回“找不到文件”的提示,則可用 header 函數(shù),其語(yǔ)句為(?);

  未授權(quán)

  header("HTTP/1.0 404 Not Found");

  fast CGI中:

  header("Status: 404 Not Found");

  19、在PHP中,heredoc是一種特殊的字符串,它的結(jié)束標(biāo)志必須? 成對(duì)出現(xiàn)

  $a = <<EOD

  good test

  EOD;

49806