php面試題收集與整理(三)

1.echo print print_r的區別?

echo 是PHP語法,可以輸出多個值,不能輸出數組.

print()是PHP函數,可以輸出單個簡單類型的變量值

print_r()是php函數,可以打印出複雜類型變量的值,如數組,對象

2.mysql_fetch_row()和mysql_fetch_array()之間的區別?

mysql_fetch_row()以索引數組的方式取查詢的結果集,mysql_fetch_array()以索引數組和關聯數組兩種方式查詢結果集.

3.實現中文字串截取無亂碼的方法?

mb_substr();

4.有一個網頁地址,如何得到他的內容?

$url ="http://.....";

$str=file_get_contents($url);

5.請寫一個函數驗證電子郵件的格式是否正確

funcion checkMail($email)

{

      echo preg_match('/^[/w]+@[\.]([\w]+)$/',$email)?'ok':'error';

}

6.禁止了cookie後session能正常使用嗎?session的缺點是什麼?session在服務器端存在哪裏?session是公有還是私有?

cookie保存在客戶端,用戶通過手段可以進行修改,不安全,單個cookie允許大小不能超過3K

而session保存在服務器端,相對比較安全,大小沒有限制

禁用cookie不能正常使用session

session缺點:保存在服務器端,每次讀取都從服務器進行讀取,對服務器有資源消耗

session保存在服務器端的文件或數據庫中,默認保存在文件中,文件路徑由PHP配置文件的session.save_path指定

session文件是公有的

7.數據庫的索引有幾類,分別是什麼?什麼時候該用索引?

普通索引,主鍵索引,唯一索引

並非所有的數擾庫都以相同的方式使用索引,作爲通用規則,只有當經常查詢列中的數據時才需要在表上創建索引

8.寫幾個魔術方法並說明作用?

__call()當調用不存的方法時會自動調用的方法

__autoload()在實例化一個尚未被定義的類時會自動調用此方法來加載類文件

__set()當給未定義的變量賦值時會自動調用的方法

__get()獲取未定義變量值時會自動調用方法

__construct()構造方法,實例化類時自動調用的方法

__destroy()銷燬對象自動調用的方法

__unset()當對一個未定義的變量調用unset()時自動調用的方法

__isset()當對一個未定義變量調用isset()方法時自動調用的方法

__clone()克隆一個對象

__toString()當輸出一個對象時自動調用的方法

9.$_REQUEST,$_POST,$_GET,$_COOKIE,$_SESSION,$_FILE的意思是什麼?

都是PHP的預定義變量.

$_REQUEST用來獲取post或get方式提交的值

$_POST用來獲取post方法提交的值

$_GET用來獲取GET方式提交的值

$_COOKIE用來獲取COOKIE存儲的值

$_SESSION用來獲取SESSION存儲的值

$_FILE用來獲取上傳文件表單的值

10.數組中下標最好是什麼類型的,爲什麼?

數組的下標最好是數字類型的,數字類型的處理速度快

11.++i效率比i++哪個效率更高,爲什麼?

++i效率比i++的效率更高,因爲++i少了一個返回的過程

12.magic_quotes_gpc(),magic_quotes_runtime()的意思是什麼?

magic_quotes_gpc()是php配置文件中的,如果設置爲ON則會自動POST,GET,COOKIE中的字符串進行轉義,在'前面加\

magic_quotes_runtime()是php中的函數,如果參數爲true則會對數據庫中取出來的單引號,雙引號,反斜線自動動加上反斜槓

13.框架中什麼是單一入口和多入口,單一入口的優缺點?

多入口就是通過訪問不同的文件來完成用戶請求.單一入口只WEB程序所有的請求都指向一個腳本文件.

單一入口更容易控制權限,方便對HTTP請求可以進行安全性檢查.

缺點:URL看起來不是那麼美觀,特別是對搜索引擎來說不友好.

14.你對Memcache的理解,優點有哪些?

memcache是一種緩存技術,在一定的時間內將動態網頁經過解析之後保存到文件,下次訪問時動態網頁就直接調用這個文件,而不必在重新訪問數據庫,使用memcache的好外是,提高 網站的訪問速度,減少高併發時服務器的壓力

memcache的優點:穩定,配置簡單,多機分佈式存儲,速度快.

15.對於關係型數據庫而言,索引是相當重要的概念.請回答有關索引 幾個問題:

a)索引 的目的是什麼?

快速訪問數據表中的特定信息,有高檢索速度

創建唯一性索引,保證數據表中每一行數據的唯一性

加速表與表之間的連接

使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間

b)索引對數據庫系統的負面影響是什麼?

負面影響:創建索引和維護索引需要耗費時間,這個時間隨着數據量的增加而增加;索引需要佔用物理空間,不光是表需要佔用數據空間,每個索引也需要佔用物理空間,當對錶進行增刪改的時候索引也要動態維護,降低了數據的維護速度

c)爲數據表建立索引 的原則有哪些?

在最頻繁使用的,用以縮小查詢範圍的字段止建立索引

在頻繁使用的,需要排序的字段上建立索引

d)什麼情況下不宜建立索引

對於查詢中很少涉及的列或者重複值比較多的列,不宜建立索引

對於一引起特殊的數據類型,不宜建立索引,如文本字段TEXT

16.WEB應用中,數據庫的讀取頻率遠高於寫入頻率,如何優化MYSQL而應對此種情景?

使用memcache緩存技術,將動態數據緩存到文件,訪問動態頁面時直接調用緩存文件而不必要重新訪問數據庫,這樣減少查詢數據庫的次數.

如果網站的訪問量很大,可以把數據庫讀寫服務器分開,使用多態服務器去處理數據庫查詢,使用較少的服務器處理數據庫的寫入和修改.

17.php字符串中單引號與雙引號的區別?

單引號不能解釋變量,而雙引號可以解釋變量,單引號裏不能轉放字符,在雙引號可以轉義字符

18.指出sql注入漏洞以及解決方法(magic_quotes_gpc=off)?

msyql_query("select id,title from content where catid='{$_GET[catid]}' and title lick '%$_GET['keyword']%' ",$link);

注入漏洞主要存在用戶提交的數據上,這裏注入主要是$_GET[catid]和$_GET['keyword']

解決方案:

$_GET[catid] =intval($_GET[catid])

$sql = addslashes($sql);

.....

19.如何快速下載一個遠程http服務器上的圖片文件到本地

$file=""

$fp=fopen($file,'rb');

$img=fread($fp,10000);

$dir=""

$local=fopen($dir,'/'.basename($file),'w');

fwrite($local,$img)

20.什麼是時間戳?如何取得當前時間戳

時間戳是從1970年1月1日 00:00:00到提定日期的秒數

獲取當前時間戳的:time()

21.什麼是XSS攻擊?如何防止?

XSS是跨站腳本攻擊,首先是利用跨站腳本漏洞以一個特權模式去執行攻擊者構件的腳本,然後利用不安全的Activex執行惡意的行爲

使用htmlspecialchars()函數進行過濾,使字符串裏面的特殊符號實體化

22.sql注入漏洞產生的原因?如何防止?

sql注入產生的原因:程序開發過程中不注意規範書寫SQL語句和對特殊字符進行過濾,導致客戶端$_GET和$_POST擔交一些SQL語句正常執行

防止SQL注入:

開啓配置文件中的magic_quotes_gpc和magic_quotes_runtime設置

執行sql語句時使用addslashes進行sql語句轉換

sql語句書寫儘量不要省略小引號和單引號

過濾sql語句中的一引起關鍵字:update insert delete select *

提高數據庫和字段的命名技巧,對一些重要的字段根據程序的特點命名,取不易被猜到的

PHP配置文件中調置register_globals爲off關閉全局變量註冊

控制錯誤信息,不要再瀏覽器輸出錯誤信息,將錯誤貪睡 寫到日誌文件中

23.一個字節點多少個字節,一個IPV4地址佔幾個字節?一個IPV6地址佔幾個字節?

一個字節佔8個BIT,一個IPV4佔用4個字節,一個IPv6佔用16個字節

24.windows平臺, Apache Http Server啓動失敗, 排錯思路是什麼?
檢查apache使用的80端口是否被佔用,如果被佔用,先停止佔用80端口的服務,然後啓動apache服務器
151.PHP session擴展默認將session數據儲存在哪裏? D
A)  SQLite Database B)  MySQL Database C)  Shared Memory D)  File System E)  Session Server
25.如果你想要自動加載類,下面哪種函數聲明是正確的 C
A)function autoload($class_name) B)function __autoload($class_name, $file)
C)function __autoload($class_name) D)function _autoload($class_name) E)function autoload($class_name, $file)
26.PHP程序使用utf-8編碼, 以下程序輸出結果是什麼? B
<?php
$str = ’hello你好世界’;
echo strlen($str);
?>
A) 9 B) 13 C) 18 D) 17
27.你所知道的php數組相關的函數?
Array_flip()
Array_pop()
Array_push()
Array_unshift()
End()
Sort()
Rsort()
Usort()
Count()
Key()
Current()
List()
Each()
Foreach()
Array_count_values()
Array_difff()
Arrry_keys()
Array_merge()
Array_pad()
Array_rand()
Array_shift()
Array_unique()
Array_values()
Next()
Prev()
Reset()
28.php讀取文件內容的幾種方法和函數?
打開文件,然後讀取。Fopen() fread()
打開讀取一次完成 file_get_contents()
29.以下程序,變量str什麼值的情況下輸入111? if( ! $str ) { echo 111; }
在$str值爲:0,’0′,false,null,”"
30.你所知道的設計模式有哪些?
工廠模式、策略模式、單元素模式、觀察者模式、命令鏈模式
31.說說你對代碼管理的瞭解? 常使用那些代碼版本控制軟件?
通常一個項目是由一個團隊去開發,每個人將自己寫好的代碼提交到版本服務器,由項目負責人按照版本進行管理,方便版本的控制,提高開發效率,保證需要時可以回到舊版本。
常用的版本控制器:SVN
32.說說你對SVN的瞭解?優缺點?
SVN是一種版本控制器,程序員開發的代碼遞交到版本服務器進行集中管理。
SVN的優點:代碼進行集中管理,版本控制容易,操作比較簡單,權限控制方便。
缺點:不能隨意修改服務器項目文件夾。
33.怎麼找到PHP.ini的路徑?
一般都在php的安裝目錄下,或者window系統的windows目錄下。
34.PHP加速模式/擴展? PHP調試模式/工具?
Zend Optimizer加速擴展
調試工具:xdebug
35.你常用到的mysql命令?
Select * from table
Update table set field=’value’ where id=
Delete from where id=
Insert into table values(‘value1′,’value2′)
Create table tablename
Show tables
36.進入mysql管理命令行的命令?
Mysql -u root -p
37.show databases; 這個命令的作用?
顯示當前mysql服務器中有哪些數據庫
38.show create database mysql; 這個命令的作用?
顯示創建數據庫的sql語句
39.show create table user; 這個命令的作用?
顯示創建表的sql語句
40.desc user; 這個命令的作用?
查詢user表的結構
41.explain select * from user; 這個命令的作用?
獲取select相關信息
42.show processlist; 這個命令的作用?
顯示哪些線程正在運行
43.SHOW VARIABLES; 這個命令的作用?
顯示系統變量和值
44.SHOW VARIABLES like ’%conn%’; 這個命令的作用?
顯示系統變量名包含conn的值
45.LEFT JOIN 寫一個SQL語句?
Select A.id,A.class from A left join B on A.cid=B.id
46.in, not ni, exist, not exist的作用和區別?
in在什麼中
Not in 不在什麼中
Exists 存在
Not exists 不存在
47.怎麼找到數據庫的配置文件路徑?
在數據庫安裝目錄下,my.ini
181.簡述Linux下安裝PHP的過程?
安裝軟件之前先安裝編譯工具gcc、gcc-c++
拷貝源碼包,解包解壓縮
Cd /lamp/php進入php目錄
./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc指定安裝目錄和配置文件目錄
Make 編譯
Make install安裝
48.簡述Linux下安裝Mysql的過程?
Groupadd mysql 添加一個用戶組mysql
Useradd -g mysql mysql 添加一個mysql用戶指定分組爲mysql
Cd /lamp/mysql 進入mysql目錄
./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all
Make
Make all
49.簡述Linux下安裝apache的過程?
Cd /lamp/httpd 進去apache軟件目錄
./configure –prefix=/usr/local/apache2/ –sysconfdir=/etc/httpd/ –with-included-apr
Make
Make all
50.用javascript取得一個input的值?取得一個input的屬性?
document.getElementById(‘name’).value;
document.getElementById(‘name’).type;
51.用Jquery取得一個input的值?取得一個input的屬性?
$(“input[name='aa']“).val();
$(“input[name='aa']“).attr(‘name’);
52.面向對象中接口和抽象類的區別及應用場景
1、有抽象方法的類叫做抽象類,抽象類中不一定有抽象方法,抽象方法必須使用abstract關鍵字定義。
2、接口中全部是抽象方法,方法不用使用abstract定義。
3、當多個同類的類要設計一個上層,通常設計爲抽象類,當多個異構的類要設計一個上層,通常設計爲接口。
53.用面向對象來實現A對象繼承B和C對象
Interface B{
}
Interface C{
}
Class A implements B,C{
}
54.創建索引語句:alert table tablename add index (`字段名`)
55.如下user表結構
名稱     類型     說明     備註
Uid     Int unsigned     主鍵     
Name     Varchar(20)         
Age     Tinyint unsigned         
需求:
 增加一個字段性別sex,寫出修改語句
Alert table user add sex enum(’0′,’1′);

查詢出年齡介於20歲到30歲之間的用戶
Select * from user where age>20 and age<30

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章