php面試題-2
1.檢測一個變數是否有設定的函式是否?是否為空的函式是?(2分)
檢測⼀個變數是否有設定的函式是isset()
檢測⼀個變數是是否為空的函式是empty()
2. echo(),print(),print_r()的區別(3分)
echo()是php語句 沒有返回值 輸出一個或多個字串
print()是函式 有返回值 列印簡單型別的變數(int,string
print_r()是函式 有返回值 列印複雜的型別的變數的值(陣列,物件
3. 表單中 get與post提交方法的區別?
① 傳輸的資料量不同
get小,被url長度限制,效率高,安全性差,post可以傳輸大量資料,
② 傳輸方式不同
Get是傳送請求http協議通過URL引數傳遞
Post是實體資料
③ 伺服器端獲取資料方式不同
$_GET和$_POST
④ 用途不同
Get主要用於頁面搜尋,post用於資料的增刪改
4. session與cookie的區別?
① Cookie存放在客戶端 Session儲存在伺服器端
② 安全性cookie差
③ cookie有大小限制
④ session過大伺服器壓力會增大
5. 用PHP打印出前一天的時間格式是2015-8-10 22:21:21
date_default_timezone_set('PRC');
echo date('Y-m-d H:i:s', time()-24*3600);
echo '<br>';
echo date('Y-m-d H:i:s', strtotime('-1 day'));
6. 能夠使HTML和PHP分離開使用的模板引擎
Smarty TagTemplate EasyTemplatePHP dttag Mustache
7. 使用哪些工具進行版本控制
Svn git cvs
8. 如何實現字串翻轉
Strrev()函式
$str = "abcdefg";
function strrevv($str)
{
$len=strlen($str);
$newstr = '';
for($i=$len;$i>=0;$i--)
{
$newstr .= $str{$i};
}
return $newstr;
}
$showstr = strrevv($str);
echo $showstr."<br>";
9. 有一個網頁地址, 比如PHP開發資源網主頁: baidu.com, 如何得到它的內容?
Fopen()
$readcontents = fopen("baidu.com ", "rb");
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
File_get_contents()
10. 在PHP中error_reporting這個函式有什麼作用?
設定報錯級別
11. JS表單彈出對話方塊函式是?獲得輸入焦點函式是?
彈出對話方塊: alert(),prompt(),confirm() 獲得輸入焦點 focus()
12. foo()和 @ foo()之間有什麼區別
@foo() 控制錯誤輸出
13. GD庫是做什麼用的?
php處理圖形的擴充套件庫 驗證碼
14. 寫一個函式,能夠遍歷一個資料夾下的所有檔案和子資料夾
function my_scandir($dir)
{
$files = array();
if ( $handle = opendir($dir) ) {
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".." && $file != "." ) {
if ( is_dir($dir . "/" . $file) ) {
$files[$file] = scandir($dir . "/" . $file);
}else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
$files=my_scandir('D:\www\moning');
print_r($files);
15. 寫出 SQL語句的格式 : 插入 ,更新 ,刪除 (4分)
表名User Name Tel Content Date
張三 13333663366 大專畢業 2006-10-11
張三 13612312331 本科畢業 2006-10-15
張四 021-55665566 中專畢業 2006-10-15
(a) 有一新記錄(小王 13254748547 高中畢業 2007-05-06)請用SQL語句新增至表中
(b) 請用sql語句把張三的時間更新成為當前系統時間
(c) 請寫出刪除名為張四的全部記錄
Mysql_query(“insert into `User`(name,tel,content,date) value(‘小王’, 13254748547,’ 高中畢業’,’ 2007-05-06’ )”)
Mysql_query(“update `user` set date =’”.time().”’ Where name = ‘張三’”)
Mysql_query(“delete from `user` where name=’張四’”)
16. myisam與innodb的區別
① Myisam不支援事務 innodb支援
② innodb為行級鎖 myisam表級鎖
③ innodb不儲存錶行數
④ myisam適用執行select innodb適用insert update
⑤ 物理結構不同 myisam存三個檔案,。frm 檔案存放表格定義。 資料檔案是MYD (MYData) 。 索引檔案是MYI (MYIndex)引伸 InnoDB 把資料和索引存放在表空間裡面
⑥ MyISAM中可以使AUTO_INCREMENT型別欄位建立聯合索引 InnoDB中必須包含AUTO_INCREMENT型別欄位的索引
17. int 與bigint的區別
int普通大小的整數 預設10位 bigint大整數 預設20位
18. int(10)與int(11)的區別
顯示長度不同
19. varchar與char的區別
Char 儲存定長的型別
Varchar儲存可變長的型別
20. 資料庫設計,使用者表與登入表分開的好處
效能和安全
21. 分散式怎樣解決session共享問題
使用redis集中管理session
session複製
tomcat的session複製,可以實現session共享 只需搭建tomcat叢集即可
session繫結
當用戶A第一次訪問系統時,tomcat1對其進行服務,那麼,下次訪問時仍然讓tomcat1對其進行服務
22. php __autoload機制
自動載入機制
23. 三次握手與四次揮手的過程(主要是畫圖),各個引數的含義
三次握手
第一次握手:主機A傳送位碼為syn=1,隨機產生seq number=10001的資料包到伺服器,主機B由SYN=1知道,A要求建立聯機,此時狀態為SYN_SENT;
第二次握手:主機B收到請求後要確認聯機資訊,向A傳送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=20001的包,此時狀態由LISTEN變為SYN_RECV;
第三次握手:主機A收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到後確認seq值與ack=1則連線建立成功,雙方狀態ESTABLISHED。
四次揮手:
客戶端向伺服器傳送FIN,請求關閉,進入FIN_WAIT_1狀態。
服務端接受到FIN報文,然後需要告訴客戶端,我已經知道請求,但還沒有準備好,你可以繼續等我訊息,所以服務端傳送ACK。然後可以進入CLOSE_WAIT狀態
客戶端接收到服務端資料,不做任何迴應,進入FIN_WAIT_2狀態。
服務端確認資料傳送完成之後,傳送FIN報文,告訴客戶端可以關閉連線了,然後進入LAST_ACK狀態。
客戶端接收到FIN報文之後,進入TIME_WAIT狀態,傳送ACK確認報文,如果2msl時間沒有反應則關閉連線。否則進行重傳。
服務端在接收到ACK之後,關閉連線。
24. http與https的區別,https怎樣保準安全(結合ssl)
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
4、http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。
25. 寫出一個排序演算法
冒泡法:
function bubbleSort($str){
$_count=count($str);
for($i=0;$i<$_count;$i++){
for($j=$i+1;$j<$_count;$j++){
if($str[$j]>$str[$i]){
$tem=$str[$j];
$str[$j]=$str[$i];
$str[$i]=$tem;
}
}
}
return $str;
}
$str=array(8,5,4,3,32,2.4,54,59,6,7,);
print_r($str);
print_r(bubbleSort($str));
快速排序法:
function qkSort($str){
$_count=count($str);
if($_count<2) return $str;
$standard=$str[0];
$_left=$_right=array();
for($i=1;$i<$_count;$i++){
if($str[$i]>$standard){
$_left[]=$str[$i];
}else{
$_right[]=$str[$i];
}
}
$_left=qkSort($_left);
$_right=qkSort($_right);
return array_merge($_left,array($standard),$_right);
}
$str=array(8,5,4,3,32,2.4,54,59,6,7,);
print_r($str);
print_r(qkSort($str));
26. 二分查詢的思想
1.只適用於一組有序數,雜亂無序的數是不能使用二分法查詢的
2.思想:根據你查詢的數來判斷查詢前半段還是後半段
27. linux常用命令
ls -a 列出目錄所有檔案,包含以.開始的隱藏檔案
ls -A 列出除.及..的其它檔案
ls -r 反序排列
ls -t 以檔案修改時間排序
ls -S 以檔案大小排序
ls -h 以易讀大小顯示
ls -l 除了檔名之外,還將檔案的許可權、所有者、檔案大小等資訊詳細列出來
cd [目錄名]。說明:切換當前目錄至dirName
pwd 檢視當前工作目錄路徑
mkdir t 建立t資料夾
rm 刪除一個目錄中的一個或者多個檔案或目錄
rmdir 刪除空目錄
mv 移動檔案
cp 複製檔案
find 查詢檔案
chmod 改變許可權
tar 壓縮
df 顯示磁碟空間使用情況
du 顯示檔案佔用磁碟空情況
free 顯示系統記憶體使用情況