av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

php語言

最新PHP工程面試題

時間:2025-05-18 17:49:03 php語言 我要投稿
  • 相關(guān)推薦

2017年最新PHP工程面試題

  PHP工程師是一個很吃香的職業(yè),是很多人想要從事的職業(yè),以下是百分網(wǎng)小編精心為大家整理的PHP面試題,希望對大家有所幫助!更多內(nèi)容請關(guān)注應(yīng)屆畢業(yè)生網(wǎng)!

2017年最新PHP工程面試題

  1. 簡單實(shí)現(xiàn)一個單例+工廠的設(shè)計(jì)模式abstract class Example{ // The parameterized factory method public static function factory($type) { if (include_once 'Drivers/' . $type . '.php') {

  $classname = 'Driver_' . $type;

  return new $classname;

  } else {

  throw new Exception ('Driver not found');

  }

  }}// Load a MySQL Driver$mysql = Example::factory('MySQL');

  // Load a SQLite Driver

  $sqlite = Example::factory('SQLite');

  definded('DRIVER','/data/wwwroot/www.want.com/core/driver/');abstract class Example(){ private function __construct() { } public static function factory($type) { if(include_once(DRIVER.$type.'.php')) { return ExampleSon::singleton($type); } else { throw new Exception("Driver is not found!"); } } }class ExampleSon implements Example{ // Hold an instance of the class private static $instance; //靜態(tài)私有的類實(shí)例 // A private constructor; prevents direct creation of object private function __construct() { echo 'I am constructed'; } // The singleton method public static function singleton() { if (!isset(self::$instance)) { //如果沒有設(shè)置靜態(tài)私有類實(shí)例,創(chuàng)建之 $c = __CLASS__; //獲得類名稱 self::$instance = new $c } return self::$instance; } // Example method public function bark() { echo 'Woof!'; } // Prevent users to clone the instance public function __clone() //不允許被克隆 { trigger_error('Clone is not allowed.', E_USER_ERROR);

  }}關(guān)鍵詞:

  1 私有靜態(tài)成員變量

  2 __CLASS__獲取當(dāng)前類名

  3 公共靜態(tài)方法獲取單例

  4 覆蓋__clone()方法

  ----十個字:私有靜態(tài)量,公共靜態(tài)法--------

  2. 例舉幾個常用的魔術(shù)方法, 并說明作用? 如何在打印一個對象的時候展示我們自定義的內(nèi)容?

  魔術(shù)函數(shù)

  1。__construct()

  實(shí)例化對象時被調(diào)用,

  當(dāng)__construct和以類名為函數(shù)名的函數(shù)同時存在時,__construct將被調(diào)用,另一個不被調(diào)用。

  2。__destruct()

  當(dāng)刪除一個對象或?qū)ο蟛僮鹘K止時被調(diào)用。

  3。__call()

  對象調(diào)用某個方法,

  若方法存在,則直接調(diào)用;

  若不存在,則會去調(diào)用__call函數(shù)。

  4。__get()

  讀取一個對象的屬性時,

  若屬性存在,則直接返回屬性值;

  若不存在,則會調(diào)用__get函數(shù)。

  5。__set()

  設(shè)置一個對象的屬性時,

  若屬性存在,則直接賦值;

  若不存在,則會調(diào)用__set函數(shù)。

  6。__toString()

  打印一個對象的時被調(diào)用。如echo $obj;或print $obj;

  7。__clone()

  克隆對象時被調(diào)用。如:$t=new Test();$t1=clone $t;

  8。__sleep()

  serialize之前被調(diào)用。若對象比較大,想刪減一點(diǎn)東東再序列化,可考慮一下此函數(shù)。

  9。__wakeup()

  unserialize時被調(diào)用,做些對象的初始化工作。

  10。__isset()

  檢測一個對象的屬性是否存在時被調(diào)用。如:isset($c->name)。

  11。__unset()

  unset一個對象的屬性時被調(diào)用。如:unset($c->name)。

  12。__set_state()

  調(diào)用var_export時,被調(diào)用。用__set_state的返回值做為var_export的返回值。

  13。__autoload()

  實(shí)例化一個對象時,如果對應(yīng)的類不存在,則該方法被調(diào)用。

  魔術(shù)常量

  1。__LINE__

  返回文件中的當(dāng)前行號。

  2。__FILE__

  返回文件的完整路徑和文件名。如果用在包含文件中,則返回包含文件名。自 PHP 4.0.2 起,__FILE__ 總是包含一個絕對路徑,而在此之前的版本有時會包含一個相對路徑。

  3。__FUNCTION__

  返回函數(shù)名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數(shù)被定義時的名字(區(qū)分大小寫)。在 PHP 4 中該值總是小寫字母的。

  4。__CLASS__

  返回類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區(qū)分大小寫)。在 PHP 4 中該值總是小寫字母的。

  5。__METHOD__

  返回類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區(qū)分大小寫)。

  3. 類靜態(tài)方法和實(shí)例化類方法比較及優(yōu)缺點(diǎn)

  4. 有一個論壇

  threads表記錄主題以及標(biāo)題等信息

  posts表記錄主題內(nèi)容以及回復(fù)內(nèi)容等信息

  threads 表主鍵為 tid

  posts 表主鍵為 pid, 所屬主題標(biāo)記為tid

  通過tid將threads和posts 一對多關(guān)聯(lián)起來

  現(xiàn)在數(shù)據(jù)量posts表達(dá)到了1億, threads表2000萬, 大約一個主題有5篇回復(fù)

  請你設(shè)計(jì)一下分表, 將posts表和threads表進(jìn)行mysql分表

  5. 現(xiàn)在有一個mysql 主庫/叢庫, 請問php mysql查詢的時候怎么在php程序中實(shí)現(xiàn)主從分離? 主從分離有什么好處配置主從數(shù)組文件,自己封轉(zhuǎn)幾個model函數(shù),查詢的加載slave配置實(shí)例化,破壞數(shù)據(jù)的操作加載master進(jìn)行實(shí)例化優(yōu)點(diǎn):并發(fā)負(fù)載能力提高,利于數(shù)據(jù)維護(hù)和安全,提高可用性缺點(diǎn):數(shù)據(jù)同步有些延遲

  6. 簡述UCenter的單點(diǎn)登錄機(jī)制

  所謂單點(diǎn)登錄,無非就是幾個站點(diǎn)共用一個用戶中心,實(shí)現(xiàn)同步登陸,同步退出。

  其實(shí)最終還是用戶去登錄,只是采用了ajax (javascript利用src異步跨域調(diào)用)用戶不會發(fā)現(xiàn)。

  而且利用了p3p頭實(shí)現(xiàn)了,不同域名,單點(diǎn)登錄(ucenter用的cookie)

  缺點(diǎn)就是采用ajax 客服端請求 ,如果有10個以上應(yīng)用,登錄速度就慢下來了。

  7. linux相關(guān) 有一個包 http://www.120.net/test-1.0.0.tar.gz

  a. 將它下載到/usr/local/src

  b. 將其源碼編譯安裝到/usr/local/test 目錄

  c. 他依賴mysql包, 位于/usr/local/mysql 目錄

  寫出下載編譯安裝過程

  wget - c http://www.120.net/test-1.0.0.tar.gz/usr/local/srctar zxvf /usr/local/src/test-1.0.0.tar.gzcd /usr/local/src/test-1.0.0./configure --prefix=/usr/local/test --exec--prefix=/usr/local/mysqlmake testmake install

  8. 使用php 的memcache擴(kuò)展編寫一個獲取數(shù)據(jù)的函數(shù)(緩存即將過期超時加鎖)

  a. 數(shù)據(jù)超時之后去mysql獲取, 獲取完后更新memcache

  b. 去mysql獲取數(shù)據(jù)的時候加鎖, 讓一個進(jìn)程去mysql拉數(shù)據(jù), 其他人返回memcache中的數(shù)據(jù)

  public function get_cache($key) { if($this->memcahe) { $var = $this->memcahe->get($this->pre.$key); $valid = $this->memcahe->get($this->pre.$key.'_valid'); if($var && !$valid) { $lock = $this->memcahe->get($this->pre.$key.'_lock'); if(!$lock) { $this->memcahe->set($this->pre.$key.'_lock', true, 0, 60); return false; } } return $var; } return false; }

  public function set_cache($key, $var = null, $expire = 0) { if($this->memcahe) { $expire = (int)$expire; $expire = ($expire ? $expire : $this->expire); $this->memcahe->set($this->pre.$key, $var, 0, $expire+300); $this->memcahe->set($this->pre.$key.'_lock', false, 0, $expire); $this->memcahe->set($this->pre.$key.'_valid', true, 0, $expire); return true; } return false; }

  9. 簡述隊(duì)列, 堆棧的原理

  都可以看做是一維數(shù)組來操作,隊(duì)列先進(jìn)先出,出列只能在列頭,進(jìn)列只能在列尾,堆棧是后進(jìn)先出,進(jìn)棧和出棧都是從棧頂

  堆棧的工作原理是什么?

  堆棧是一種抽象數(shù)據(jù)結(jié)構(gòu),其操作機(jī)理是后進(jìn)先出。當(dāng)你把新條目推進(jìn)堆棧時,已經(jīng)在堆棧內(nèi)的任何條目都會壓到堆棧的深處。同樣的,把一個條目從堆棧移出則會讓堆棧內(nèi)的其他條目都向堆棧的頂部移動。只有堆棧最頂端的條目能從堆棧中取出,條目離開堆棧的順序和它們被推進(jìn)堆棧的順序一樣。你不妨回想下自動售貨機(jī)的裝貨和取貨過程就明白了。

  10. arrayaccess 定義如下 用它實(shí)現(xiàn)一個數(shù)組

  ArrayAccess {

  /* Methods */

  abstract public boolean offsetExists ( string $offset )

  abstract public mixed offsetGet ( string $offset )

  abstract public void offsetSet ( string $offset , string $value )

  abstract public void offsetUnset ( string $offset )

  }

  class Single implements ArrayAccess{ private $name; private static $_Instance = null; private function __construct() { } static function load() { if(null == self::$_Instance) { self::$_Instance = new Single(); } return self::$_Instance; } public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } /** * 實(shí)現(xiàn)四個方法 * offsetExists(),用于標(biāo)識一個元素是否已定義 * offsetGet(),用于返回一個元素的值 * offsetSet(),用于為一個元素設(shè)置新值 * offsetUnset(),用于刪除一個元素和相應(yīng)的值 **/ public function offsetSet($offset, $value) { if (is_null($offset)) { $this->container[] = $value; } else { $this->container[$offset] = $value; } } public function offsetGet($offset) { return isset($this->container[$offset]) ? $this->container[$offset] : null; } public function offsetExists($offset) { return isset($this->container[$offset]); } public function offsetUnset($offset) { unset($this->container[$offset]); }}$s = Single::load();$s->setName("jack");$s["name"] = "mike";echo $s->getName(); //jackecho $s["name"]; //mike

  11. 假設(shè)coreseek安裝目錄為/usr/local/coreseek

  配置文件為/usr/local/coreseek/etc/test.conf

  索引名為 post

  a. 創(chuàng)建索引

  b. 啟動服務(wù)

  c. 重建索引(重建過程中保證搜索服務(wù)仍然可用)

  indexer -c /usr/local/coreseek/etc/test.conf --allsearchd -c /usr/local/coreseek/etc/test.conf indexer -c /usr/local/coreseek/etc/test.conf --all --rotate12. 假設(shè)您有一張posts帖子表 對該表進(jìn)行sphinx增量準(zhǔn)實(shí)時索引, 描述你的方案

  使用“主索引+增量索引”方法有個簡單的實(shí)現(xiàn),在數(shù)據(jù)庫中增加一個計(jì)數(shù)表,記錄每次重新構(gòu)建主索引時,被索引表的最后一個數(shù)據(jù)id,這樣在增量索引時只需要索引這個id以后的數(shù)據(jù)即可,每次重新構(gòu)建主索引時都更新這個表。

  13. php代碼:

  $i = 97;$a = ($i++) + (++$i) + $i ;$b = (--$i) + ($i--) + $i + 6;

  echo "$i, $a, $b";輸出結(jié)果是什么

  97, 295, 299

  97

  97+99+99

  98+98+97+6

  14. 以下代碼,用于取得客戶端IP: if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $onlineip = getenv('HTTP_CLIENT_IP');} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR');} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $onlineip = getenv('REMOTE_ADDR');} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $onlineip = $_SERVER['REMOTE_ADDR'];}但是以HTTP_開始的請求header均屬于客戶端可以偽造的信息,在反向代理環(huán)境下,如何保證PHP不會接收到偽造的HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR值?

  15. 例如google,baidu等大型網(wǎng)站,當(dāng)使用不同客戶端(如手機(jī)和PC機(jī))訪問同樣的URL時,呈現(xiàn)的頁面卻不相同,這是何原理? 如果能給出實(shí)際解決方案,可加分。

  簡單的可以用user_agent判斷,但是及其初步

  可以的話通過服務(wù)器或者手機(jī)終端特征或者wap網(wǎng)關(guān)accept信息等

  16. 生產(chǎn)環(huán)境php.ini中magic_quotes_gpc及magic_quotes_runtime值應(yīng)該設(shè)置為什么?onoff17. PHP調(diào)用遠(yuǎn)程http接口時可使用file_get_contents, 但當(dāng)遠(yuǎn)程主機(jī)不可達(dá)或響應(yīng)過慢,會導(dǎo)致本地PHP進(jìn)程被長時間掛起,從而影響本地服務(wù)器穩(wěn)定性,如何避免超時時,PHP進(jìn)程長時間被掛起?

  file_get_contents可以設(shè)置下超時時間$ctx = stream_context_create(array( 'http' => array( 'timeout' => 1

  )

  )

  );

  file_get_contents("http://www.want.com/", 0, $ctx);

  curl實(shí)現(xiàn)獲取遠(yuǎn)程http接口也可以,同樣需要設(shè)置超時時間curl_setopt($s,CURLOPT_TIMEOUT,$timeout);

  18. 同上題,如何避免DNS查詢過慢導(dǎo)致超時?19. mysql字符集set names * 命令設(shè)置哪幾個系統(tǒng)變量的值?(ACE) A、Character_set_client B、Character_set_system C、Character_set_results D、Character_set_server E、Character_set_connection F、Character_set_database20. 以下哪種校對規(guī)則不區(qū)分大小寫?(A) A、utf8_general_ci B、utf8_general_cs C、utf8_general_bin21. 如何杜絕XSS攻擊?

  strip_tags可以初步過濾,也可以自己寫過濾函數(shù)針對特殊標(biāo)簽進(jìn)行處理,用ascii碼進(jìn)行替換23. 如何杜絕CSRF攻擊?

  在Web應(yīng)用程序側(cè)防御CSRF漏洞,一般都是利用referer、token或者驗(yàn)證碼,tokenf方式還是比較可信

【最新PHP工程面試題】相關(guān)文章:

最新PHP面試題05-27

最新的PHP面試題及答案08-16

PHP最新面試題及答案07-16

PHP數(shù)組面試題「最新」08-01

2017最新PHP經(jīng)典面試題目07-12

最新PHP經(jīng)典面試題目匯總10-28

PHP經(jīng)典面試題07-28

php面試題10-26

PHP工程師面試題及答案07-19