1.談談對MVC的認識?
MVC是一種設計模式,他強制性的使應用程序的輸入/處理/輸出分開,應用程序被分化成三個核心部件:模型、視圖、控制器。
視圖是用戶看到並與之交互的辦面。
模型表示業務模型與企業規則
控制器接入用戶輸入並調用模型與視圖去完成用戶的需求。
MVC優點:低耦合性、高重用性和可適用性、較低的生命週期成本、快速部署、有利於軟件工程化管理
MVC缺點:沒有明確的定義,完全理解MVC並不容易.不適合小型規模的應用程序.
2.php如何拋出和接收錯誤?
try{....}catch(){.....}如果沒有觸發異常,繼續執行.如果異常被觸發就會拋出一個異常.catch代碼捕獲悍異常,並創建一個包含異常性的對象.$e->getMessage();
實例1.
<?php
try {
$error = 'Always throw this error';
throw new Exception($error);
// 從這裏開始,tra 代碼塊內的代碼將不會被執行
echo 'Never executed';
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
// 繼續執行
echo 'Hello World';
?>
3.請取出數組中最大值?
$a=array(1,9,8,7,8,7,9,7,10);
echo $max($a);
或
rsort($a);
echo array_shift($a);
4.請說明PHP中傳值和引用的區別.什麼時候用傳值什麼時候引用?
按值傳遞:函數範圍內對值的任何改變在函數外部都會被忽略.
按引用傳遞:函數範圍內對值的任何改變在函數外部也能反映出這些修改.
優缺點:按值傳遞時.php必須複製值.特別是對於大型的字符串和對象說,將是一個很大的代價.按引用傳遞則不需要複製值.對於性能提高很有好處.
如果不想改變變量的值的時候就傳值.如果要讓函數改變原變量就可以用引用傳值.
5.有一個一維數組,裏面存儲整形數據,請寫一函數,將他們按從大到小的順序排序,要求執行效率高.並說明如何改善執行效率,不能使用PHP函數.
<?php
function getSort($array)
{
for($i=0;$i<count($array);$i++)
{
for($j=$i+1;$j<count($array);$j++)
{
if($array[$i]<$array[$j])
{
$tmp=$array[$i];
$array[$i]=$array[$j];
$array[$j]=$tmp
}
}
}
}
6.請問同時滿足這樣條件的數:被10除餘9,被9除餘8,被8除餘7?(100-1000間有多個這樣的數)
分析:被10除餘9,那麼+1則被10整除,同理+1分別能被9和8整除.假高這個數爲X,則這個100<=X<=100
則101<=X+1<=1000+1 => x+1爲 8 ,9,10的倍數=>8=2*2*2,9=3*3,10=2*5
則X+1一定是2*2*2*3*3*5的倍數(只能約掉一個2) =>第一個數爲360,第二個數720
=> 359,719
7.請寫出一個簡單的靜態數組?
class A
{
static $a = array('xxx'=>xxxx);
}
print_r(A::$a);
8.寫一個簡單的jqeruy顯示隱藏代碼?
$("#xxx").show();
$("#xxx").hide();
9.include與require的區別是什麼?
php在遇到include時就必須重新解析一次,如果在同一個頁面出現10次include,它就會解析10次,而require不管在同一個頁面出現多少次,只會解析一次.require執行效率比include高.
require包含進來 的內容被當成當前文件的一個組成部分,所以當包含進來的文件有語法錯誤或者文件不存在的時候,那個PHP腳本都不在執行.include函數相當於指定這個文件夾的路徑,當包含的文件有錯時不會影響本身程序執行.include可以進行判斷是否包含進來,而require不管在任何時候都被包含進來了.
10.php獲取當前時間並打印?
echo date('Y-m-d H:i:s');
11.字符串轉數組,數組轉字符串,字符串截取,字符串替換,字符串查找的函數分別是?
implode() expload() substr() str_replace() strpos,strrpos,strstr
12.解釋下PHP類中:protected,public,prtvate,interface,abstract ,final,static的含義?
protected受保護的,在本類和子類中有效.
public 公共的,在本類,子類中,類外都可以用
private私有的,只在本類中有用
interface定義一個接口時使用的關鍵字
abstract定義一個抽象類或者抽象方法時使用的關鍵字.
final用final申明的方法無法被覆蓋,用final申明的類不能被繼承
static定義一個靜態方法或者靜態屬性使用的關鍵字
13.從表login中選出name字段包含的前10條結果所有信息的sql語句
select * from login where name like '%admin%' limit 0,10;
14.解釋左連接,右連接,內連接,全連接
內連接只會選出兩張表中互相匹配的記錄,因此,這會導致有時我們需要的記錄沒有包含進來.內連接是兩個表中都必須有連接字段的對應值的記錄,數據才能檢索出來..
左連接和右連接者是外部鏈接,也就是區別於內部連接,它對不滿足連接條件的行並不是像內部連接一樣將數據完全過濾掉,而是保留一部分數據,行數不會減少;左連接只要左邊表中有記錄,數據就能被檢索出來,而右邊有的記錄必要在左邊表中有的記能才能被檢索出來.
右連接就是隻要右邊表中有記錄,數據就能檢索出來.
全連接剛會回返兩個表中的所有記錄
15.簡述論壇中無限分類的實現原理
數據庫分類表的設計:id字段,父id字段,類名稱字段,path字段
path字段存當前分類的路徑, 格式:0,父類id,本身ID
查詢分類select * from 分類表 order by path asc;(查出每個分類及其他對應的子類)
16.寫一個函數,儘可能高效,從一個標準URL裏取出文件的擴展名.如:http://www.baidu.com/sex/sm.php?id=1需要取php或.php
$a = "url地址";
$b=parse_url($a);
echo substr($b['path'],strpos($b['path'],'.')); 或 echo end(expload('.',$b['path']));
17.描述下大流量高併發量網站的解決方案
確認服務器硬件是否足夠支持當前的流量
使用memcache緩存技術,將動態數據緩存到內存中,動態網直接調用這些文件不必再訪問數據庫
禁用外部盜鏈,外部網站的圖片或者文件盜鏈往往會帶來大量的負載壓力,因此應該嚴格限制外部對自身圖片或者文件盜鏈.目前可以簡單的通refer來控制盜鏈.apache自己就可以通過配置來禁止盜鏈.
控制大文件的下載,大文件下載會佔很大的流量.對於非SCSI硬盤來說會消耗,使得網站響應能力下降.
使用不迥的主機分流主要流量,使用流量統計軟件可以知道哪些地方不費大量流量,哪些頁面需要再進行優化
分庫分表
sphinx全文索引引擎
18.如何設計和配置Mysql,才能達到高效使用的目的.
數據庫設計方面,設計結構良好的數據庫,允許部分數據冗餘
選取最適用的字段屬性,儘可以把字段設置爲NOTNULL,這樣查詢的時候,數據庫不用去比較空值.
系統架構設計方面,表散列,把海量數據散列到幾個不同的表裏面,集羣,數據庫查詢和寫入分開
寫高效sql語句,以提高效率
使用JOIN代替子查詢
使用UNION來代替手動創建的臨時表
只從數據取必須的數據
必要的時候用不同存儲引擎,INNODB可以減少死鎖,heap可以提高一個數量級的查詢速度
使用事務/外鍵/索引
19.如何進行防SQL注入?
過濾一些常見的數據庫操作關鍵字, select ,insert,update,delete,and,*等或通過系統函數addslashes對內容進行過濾
php配置文件中register_globals=off;設置爲關閉狀態.(作用將註冊全局變量關閉);如接收POST表單的值使用$_POST['user'],假設設置爲ON的話$user才接收值
sql語句書寫的時候儘量不要省略小引號(tab上面那個)和單引號
提高數據庫命名技巧,對於一些重要的字段根據程序的特點命名,使之不易被猜中
對於常的方法加以封裝,避免直接暴漏SQL語句
開啓PHP安全模式safe_mode=on
打開magic_quotes_gpc來防止SQL注入,默認爲關閉,開啓後自動把用戶提交sql查詢語句進行轉換把"'"轉換成"\'"
控制錯誤信息輸出,關閉錯誤信息提示,將錯誤信息寫到系統日誌
使用MYSQLI或PDO預處理
20.用PHP寫出一個安全的用戶登錄系統需要注意哪些方面.
密碼要使用MD5(密碼+字符串)進行加密
登錄表單的名稱不要跟數據庫字段一樣,以免暴露表字段.
用戶表的表名,字段名,密碼儘量用不容易被猜到的.
要使用驗證碼驗證登陸,以防止暴力破解
驗證提交的數據是不是來本網站.
登陸後臺處理代碼數據庫部分可以使用預處理,做好過濾,防止sql注入
21.輸出爲Moailla/4.0(compatible;MSIE5.01;Window NT5.0)時,可能的輸出語句是:
$_SERVER['HTTP_USER_AGENT']
22.php一些正確的說法:
PHP有四種標量類型,布爾型(boolean),整型(integer),浮點型(float),字符串(string)
浮點型和雙精度型是同一種類型
僞類型:混合型(mixed),數字型(number),回調(callback)
23.echo function_exists('print');
輸出爲空,echo和print不是系統函數
24.
<?php
$bool = TRUE;
echo gettype($bool);
echo is_string($bool);
輸出boolean
25.
<?php
$a=12;
$b=012;
$c=0x12;
echo $a,"\n",$b,"\n",$c;
輸入結果爲 12 10 18
26.echo 1+2+"3+4+5"
輸出6
26.return chr(65)=='A'
輸出TRUE
26
<?php
$a =array(1=>5,5=>8,22,2=>'8',81);
echo $a[7];
echo $a[6];
echo $a[3];
?>
輸出8122加提示信息
27
<?php
$a[bar]='hello';
echo $a[bar];
echo $a['bar'];
?>
輸出hellohello
28.php二進制位移
<<相當於乘2,>>相當於除2
29.
<?php
function change(){
static $i = 0;
$i++;
return $i;
}
print change(); //1
print change(); //2
?>
30.下面的include語句不正確的是?A
A. include "mms://www.abc.com/a.php";
B. include"http://www.abc.com/a.php";
C. include"https://www.abc.com/a.php";
D. include"ftp://www.abc.com/home/a.php";
31.
<?php
$foo = 'test';
$bar = <<<'EOT'
$foobar
EOT;
echo $bar;
?>
輸出$foobar
32.
$a=3;$b=4;
if($a||$b=5){ ||或和|的區別
echo 'todo';
}
$b的值是:4
33.什麼是面向對象?主要特徵是什麼?
面向對象是程序的一種設計方式 ,它利於提高程序的重用性,使程序結構更加清晰
主要特徵:封裝,繼承,多態
34.session與cookie的區別是什麼,請從協議,產生的原因與作用上說明?
http無狀態協議,不能區分用戶是否是從同一個網站上來的,同一個用戶請求不同的頁面不能看作是同一個用戶
session保存在服務器端,cookie保存在客戶端,session依賴cookie進行保存.如果cookie被禁用了,session不能繼續使用.
35.http狀態中302,403,500代碼含義?
300重定向,403服務器拒絕訪問,500服務器內部錯誤
36.linux下建立壓縮包,解壓縮包的命令
壓縮:gzip tar -cvfz,zip,bzip2
解壓:gunzip,tar -zxvf,unzip,bunzip2