php練習筆試題大綱
- 網頁設計
- 關注:1.12W次
引導語:php學習成本低,開發效率高,擴充套件函式豐富,成為了最流行的伺服器端指令碼語言。以下是小編整理的php練習筆試題,歡迎參考閱讀!
1. echo count("abc"); 輸出什麼?
答:"1"
count — 計算陣列中的單元數目或物件中的屬性個數
int count ( mixed $var [, int $mode ] ), 如果 var 不是陣列型別或者實現了 Countable 介面的物件,將返回 1,有一個例外,如果 var 是 NULL 則結果是 0。
對於物件,如果安裝了 SPL,可以通過實現 Countable 介面來呼叫 count()。該介面只有一個方法 count(),此方法返回 count() 函式的返回值。
2. 用PHP寫出顯示客戶端IP與伺服器IP的程式碼
答:$_SERVER['SERVER_ADDR'] 伺服器
$_SERVER['REMOTE_ADDR']客戶端
function getOnlineIP(){
if (getenv('HTTP_CLIENT_IP')) return getenv('HTTP_CLIENT_IP');
if (getenv('HTTP_X_FORWARDED_FOR')) return getenv('HTTP_X_FORWARDED_FOR');
if ($_SERVER["REMOTE_ADDR"]) return $_SERVER["REMOTE_ADDR"];
if (!empty($HTTP_SERVER_VARS['REMOTE_ADDR'])) return $HTTP_SERVER_VARS['REMOTE_ADDR'];
}
3. error_reporting(2047)什麼作用?
答:PHP 顯示所有錯誤 E_ALL
4. echo,print()和print_r()有什麼區別?
答:echo是一個語言結構,沒有返回值。
print是一個函式,返回int型別的值。[只能列印int string]
print_r()是一個函式,返回bool型別值,按結構輸出變數的值。列印關於變數的易於理解的資訊[陣列、物件等]
5. 開啟中的Safe_mode,會影響哪些函式?至少說出6個。
答:1:使用者輸入輸出函式(fopen() file() require(),只能用於呼叫這些函式有相同指令碼的擁有者)
2:建立新檔案(限制使用者只在該使用者擁有目錄下建立檔案)
3:使用者呼叫popen() systen() exec()等指令碼,只有指令碼處在safe_mode_exec_dir配置指令指定的目 錄中才可能
4:加強HTTP認證,認證指令碼擁有者的UID的劃入認證領域範圍內,此外啟用安全模式下,不會設定PHP_AUTH
5:mysql伺服器所用的使用者名稱必須與呼叫mysql_connect()的檔案的擁有者使用者名稱相同
6:受影響的函式變數以及配置命令達到40個
6. 寫個函式來解決多執行緒同時讀寫一個檔案的問題。
答:flock($hander,LOCK_EX); 這個可是內建函式啊,
這個尚待解決
7. 請寫一個函式驗證電子郵件的格式是否正確(要求使用正則)
答:preg_match('/^[w-.]+@[w-]+(.w+)+$/', $email);
8. 考SQL語句的題,題太長了,實在不好回憶了。
答:去理解別人的回憶是件很困難的事情
9. MySQL資料庫,一天一萬條以上的增量,怎麼優化?
答:我們曾做過簡訊SP的東西,有個簡訊傳送的日誌表,每天增量也很大,處理的方法是按月進行分表,因為是日誌表,主要操作是操作,所以每月初自動生成新的資料表,資料插入到對應月份的那張資料表。[比如表明字首是cdb_smslog 後面加200910 及時cdb_smslog_200910]
其他優化方式暫時想不起來,對於myISAM, 考慮容量的話,也有優化的方案
但是對於那種查詢操作的表的話,我的思路是根據作者的'釋出時間儲存到不同的表裡面
所以對sina那種海量資料的處理很感興趣,很好奇他們的處理方法,[以前同事說sina 的首頁同時操作10多個數據庫]
10. 寫出一種排序演算法(要寫出程式碼),並說出優化它的方法。
答:
//氣泡排序
function maopao($arr) {
$count = count($arr);
for($i=0; $i<$count-1; ++$i) {
for($j=0; $j<$count-$i-1; ++$j) {
if($arr[$j] > $arr[$j+1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
return $arr;
}
//順序排序
function shunxu($arr) {
$count = count($arr);
for($i=0; $i<$count-1; ++$i) {
$p = $i;
for($j=$i+1; $j<$count; ++$j) {
$p = $arr[$p] > $arr[$j] ? $j : $p;
}
if($p != $i) {
$tvalue = $arr[$i];
$arr[$i] = $arr[$p];
$arr[$p] = $tvalue;
}
}
return $arr;
}
ps:有人說加個監控,計算陣列交換的頻度[這對冒泡], 比如冒泡的第一次操作頻度為0,則無需操作,直接返回,因為已經是排好序的陣列
11. 寫個函式用來對二維陣列排序。
答:
function array_sort_by_any_row($array_name, $row_id, $order_type){
$array_temp=array();
foreach($array_name as $key=>$value){
$array_temp[$key]=$value[$row_id];
}
if($order_type==="ASC"){ //順序
asort($array_temp);
} else {
arsort($array_temp);
}
$result_array=array();
foreach($array_temp as $key=>$value){
$result_array[$key]=$array_name[$key];
}
return $result_array;
}
$arr = array(array('num'=>5, 'value'=>6),
array('num'=>2, 'value'=>39),
array('num'=>36, 'value'=>29)
);
$sortarr = array_sort_by_any_row($arr, 'num', 'DESC');
print_r($sortarr);
12. 寫5個不同的自己的函式,來擷取一個全路徑的檔案的副檔名,允許封裝php庫中已有的函式。
答:$path = str_replace('', '/',__FILE__);
echo $path.'
';
function extname1($path) {
return strrchr($path, '.');
}
function extname2($path) {
$position = strrpos($path, '.');
return substr($path, $position);
}
function extname3($path) {
$arr = explode('.', $path);
return $arr[count($arr) - 1];
}
function extname4($path) {
preg_match_all('/[w/:-]+.([w]+)$/', $path, $out);
return $out[1][0];
}
function extname5($path) {
return preg_replace('/^[^.]+.([w]+)$/', '${1}', basename($path));
}
print_r(extname5($path));
13. 一群猴子排成一圈,按1,2,...,n依次編號。然後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去...,如此不停的進行下去,直到最後只剩下一隻猴子為止,那隻猴子就叫做大王。要求程式設計模擬此過程,輸入m、n, 輸出最後那個大王的編號。
答:
yuesefu環問題,PPC有很多針對這個問題的處理,我的就不上啦
function yuesefu($n,$m) {
$r=0;
for($i=2; $i<=$n; $i++) {
$r=($r+$m)%$i;
}
return $r+1;
}
print_r(yuesefu(3,3));
- 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/sjzz/sjzz/r54ok.html