2017年php練習筆試題

時間:2017-06-28 筆試題目 我要投稿

  下面CN人才網小編為大家帶來的是2017年php練習筆試題,希望對大家有所幫助~

  簡答題

  1. 寫出5個以上你所知道的常用的Linux命令和它的功能

  cat,顯示文件內容。

  cd,改變目錄路徑。

  cp,復制文件。

  find,查找文件。

  grep,搜索、過濾信息。

  ls,列出目錄信息。

  more,分頁顯示。

  rm,刪除文件或目錄。

  vi,調用vi文本編輯器。

  who,顯示登錄用戶信息。

  2. HTTP/1.0 中,狀態碼 200 301 304 403 404 500的含義

  200 - 服務器成功返回網頁

  301(永久移動)請求的網頁已永久移動到新位置。

  304(未修改)自從上次請求后,請求的網頁未修改過

  403(禁止)服務器拒絕請求

  404 - 請求的網頁不存在

  503 - 服務器超時

  3. 請寫出以下html標簽的含義:input form script style table b img

  4. 寫出PHP(或其他語言)的public、protected、private三種訪問控制模式的區別?

  屬于OOP面向對象語言中的類中訪問控制模式

  Public可以外部訪問

  Protected,private只可以內部訪問

  Public,protected可以被繼承

  Private不可以被繼承

  5. 請描述 PHP(或其他語言) Session 的運行機制,大型網站中Session方面應注意什么?

  運行機制:客戶端將session id傳遞到服務器,服務器根據session id找到對應的文件,讀取的時候對文件內容進行反序列化就得到session的值,保存的時候先序列化再寫入

  注意:1,session在大訪問量網站上確實影響系統性能,影響性能的原因之一由文件系統設計造成,在同一個目錄下超過10000個文件時,文件的定位將非常耗時,可以通過修改php.ini中session.save_path設置兩級子目錄 ,session將存儲在兩級子目錄中,每個目錄有16個子目錄[0~f],不過好像PHP session不支持創建目錄,你需要事先把那么些目錄創建好 。

  2,還有一個問題就是小文件的效率問題,可以通過存儲方式中的memcache來解決I/O效率低下的問題

  3,session同步問題,session同步有很多種,如果你是存儲在memcached或者MySQL中,那就很容易了,指定到同樣的位置即可,還有一種方法就是在負載均衡那一層保持會話,把訪問者綁定在某個服務器上,他的所有訪問都在那個服務器上就不需要session同步了

  6. 簡單描述mysql中,索引,主鍵,唯一索引,聯合索引的區別,對數據庫的性能有什么影響(從讀寫兩方面)

  索引就相當于對指定的列進行排序,排序有利于對該列的查詢,可以大大增加查詢效率

  建立索引也是要消耗系統資源,所以索引會降低寫操作的效率

  主鍵,唯一,聯合都屬于索引

  主鍵屬于唯一索引,且一個表只能有一個主鍵,主鍵列不允許空值

  唯一索引可以一個表中可以有多個,而且允許為空,列中的值唯一

  多個字段的多條件查詢多使用聯合索引

  7. MySQL 數據庫中 varchar和char的主要區別是什么,哪種查詢效率更高,為什么?

  varchar變長字符串,char定長字符串

  Char效率更高,由于不需要對儲存空間計算后在存儲,所以效率更高

  8. 解釋MySQL外連接、內連接與自連接的區別

  Mysql外連接分為左連接(left join....on)和右連接(right join.... on),左連接是以左表作為條件查詢關聯右表數據,無對應數據則補空,右連接則相反

  Mysql內連接(inner join.....on)是做關聯查詢時,內連接的特性是只顯示符合連接條件的記錄

  Mysql自連接:在FROM clause(子句)中我們可以給這個表取不同的別名, 然后在語句的其它需要使用到該別名的地方用dot(點)來連接該別名和字段名

  9. 說說下面這些這些協議的全稱和中文解釋SMTP、POP3、HTTP、FTP、DNS

  Smtp簡單郵件協議

  Pop3郵局協議

  http超文本傳輸協議

  ftp文件傳送協議

  Dns域名解析協議

  10. javascript 包括那些基本數據類型?

  數字,字符串,null,undefined,boolean

  11. 用css、html編寫一個兩列布局的網頁,右側固定寬度200px,左側自適應

  右邊固定200px寬度

  左邊自適應

  項目設計

  假設有一個包含Tag功能的博客系統,數據庫存儲采用mysql,用戶數量為1000萬,預計文章總數為10億,每天有至少10萬的更新量,每天訪問量為5000萬,對數據庫的讀寫操作的比例超過10:1。

  你如何設計該系統,以確保其系統高效,穩定的運行?

  提示:可以從數據庫設計,系統框架,及網絡架構方面進行描述,可以寫代碼/偽代碼輔助說明,可以自由發揮

  讀寫分離,讀寫服務器比例10:1,使用分頁查詢減少數據庫壓力,靜態化分頁后使用memcache分布式緩存,減少i/o開銷和數據壓力,增刪改時刪除對應的靜態化數據,通過查詢分頁,分開靜態化對應的分頁信息緩存,數據庫分庫分表分區,使用lvs負載均衡,活躍和不活躍的文章進行分表存儲,提高數據庫中文章查詢

  效率,建立聯合索引,提高查詢效率,使用中文分詞技術提高文章內容的查詢效率

  編寫程序(請任選兩題)

  1. 描述順序查找和二分查找(也叫做折半查找)算法,順序查找必須考慮效率,對象可以是一個有序數組

  2. 假設有"123abc456def789"這么一個字符串,寫一個函數,可以傳入一個字符串,和一個要截取的長度。返回截取后的結果。

  要求:

  1 和標記不得計算在長度之內。

  2 截取后的字符串,要保留原有標簽,不過如果最后有一個標簽沒有閉合,則去掉其開始標簽。

  示例:

  題中的字符串,要截取長度5,則返回的字符串應該為:123ab,要截取長度8,應返回123abc45。

  function newsubstr($str,$num){

  $strNeed = preg_replace(array('/<\/\w+>/','/<\w+>/'),array('',','),$str);

  $arr = explode(',',$strNeed);

  $arrCount = array_map('strlen',$arr);

  $newstr = '';

  if($num < $arrCount[0]+$arrCount[1] && $num >= 0){

  $newstr .= ($num<=$arrCount[0]) ? substr($arr[0],0,$num) : substr($arr[0],0,$arrCount[0]).substr($arr[1],0,$num-$arrCount[0]);

  }else{

  foreach($arr as $key=>$val){

  if( $key>1 && $num < array_sum(array_slice($arrCount,0,$key+1)) && $num >= array_sum(array_slice($arrCount,0,$key))){

  //echo $key;

  $newstr .= $arr[0]."{$arr[1]}";

  for($i = 2;$i <= $key; $i++ ){

  $newstr .= $i<$key ? ''.$arr[$i].'' : substr($arr[$key],0,$num-array_sum(array_slice($arrCount,0,$key+1)));

  }

  }

  }

  if($num >= array_sum($arrCount)){

  $newstr = $str;

  }

  }

  echo $newstr;

  }

  $str = ‘123abc456def789’;

  newsubstr($str,8);

  3. 一群猴子排成一圈,按1,2,…,n依次編號。然后從第1只開始數,數到第m只,把它踢出圈,從它后面再開始數,再數到第m只,在把它踢出去…,如此不停的進行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過程,輸入m、n, 輸出最后那個大王的編號。用程序模擬該過程。

  function monkeyKing($n, $m) { //$n為猴子總數,$m為剔除猴子步長

  $s = 0; //$s為大王坐標,只有一只猴子時,大王坐標為0

  for($i = 2; $i <= $n; $i++) { //依次向后遞推,求到共有$n只猴子,剔除步長為$m時的大王坐標

  $s = ($s + $m) % $i; //大王坐標遞推公式

  }

  return $s;

  }

  echo monkeyKing(6, 2);

  4. 翻轉字符串中的單詞,字符串僅包含大小寫字母和空格,單詞間使用空格分隔。

  如:輸入 “This is PHP”,輸出 “PHP is This”

  非必要請不要使用PHP自帶函數

  function myrev($str){

  $arr = explode(' ',$str);

  $num = count($arr);

  for($i = 0; $i < $num/2; $i++){

  $temp = $arr[$i];

  $arr[$i] = $arr[$num-$i-1];

  $arr[$num-$i-1] = $temp;

  }

  return implode(' ',$arr);

  }

  $str = 'This is PHP';

  echo myrev($str);

相關文章
前二组选复式