轉載鏈接:http://www.2cto.com/kf/201304/201112.html
一. 基本知識點
1.1 HTTP協議中幾個狀態碼的含義:503 500 401 403 404 200 301 302。。。
200 : 請求成功,請求的數據隨之返回。
301 : 永久性重定向。
302 : 暫時行重定向。
401 : 當前請求需要用戶驗證。
403 : 服務器拒絕執行請求,即沒有權限。
404 : 請求失敗,請求的數據在服務器上未發現。
500 : 服務器錯誤。一般服務器端程序執行錯誤。
503 : 服務器臨時維護或過載。這個狀態時臨時性的。
1.2 Include require include_once require_once 的區別.
處理失敗方式不同:
require 失敗時會產生一個致命級別錯誤,并停止程序運行。
include 失敗時只產生一個警告級別錯誤,程序繼續運行。
include_once/require_once和include/require 處理錯誤方式一樣,
唯一區別在于當所包含的文件代碼已經存在時候,不在包含。
1.3 PHP/Mysql中幾個版本的進化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改進等等。
1.4 HEREDOC介紹
一種定義字符串的方法。
結構:
<<<。在該提示符后面,要定義個標識符(單獨一行),
然后是一個新行。接下來是字符串 本身,
最后要用前面定義的標識符作為結束標志(單獨一行)
注意:
標識符的命名也要像其它標簽一樣遵守PHP的規則:
只能包含字母、數字和下劃線,并且必須以字母和下劃線作為開頭
1.5 寫出一些php魔幻(術)方法;
__construct() 實例化類時自動調用。
__destruct() 類對象使用結束時自動調用。
__set() 在給未定義的屬性賦值的時候調用。
__get() 調用未定義的屬性時候調用。
__isset() 使用isset()或empty()函數時候會調用。
__unset() 使用unset()時候會調用。
__sleep() 使用serialize序列化時候調用。
__wakeup() 使用unserialize反序列化的時候調用。
__call() 調用一個不存在的方法的時候調用。
__callStatic()調用一個不存在的靜態方法是調用。
__toString() 把對象轉換成字符串的時候會調用。比如 echo。
__invoke() 當嘗試把對象當方法調用時調用。
__set_state() 當使用var_export()函數時候調用。接受一個數組參數。
__clone() 當使用clone復制一個對象時候調用。
1.6 一些編譯php時的configure 參數
–prefix=/usr/local/php??? php安裝目錄
–with-config-file-path=/usr/local/php/etc 指定php.ini位置
–with-mysql=/usr/local/mysql mysql安裝目錄,對mysql的支持
–with-mysqli=/usr/local/mysql/bin/mysql_config mysqli文件目錄,優化支持
–enable-safe-mode 打開安全模式
–enable-ftp 打開ftp的支持
–enable-zip 打開對zip的支持
–with-bz2 打開對bz2文件的支持
–with-jpeg-dir 打開對jpeg圖片的支持
–with-png-dir 打開對png圖片的支持
–with-freetype-dir 打開對freetype字體庫的支持
–without-iconv關閉iconv函數,種字符集間的轉換
–with-libxml-dir 打開libxml2庫的支持
–with-xmlrpc 打開xml-rpc的c語言
–with-zlib-dir 打開zlib庫的支持
–with-gd 打開gd庫的支持
更多可以使用 ./configure help 查看
?
1.7 向php傳入參數的三種方法。
/*
???? * 方法一 使用$argc $argv
???? *? 在命令行下運行 /usr/local/php/bin/php ./getopt.php -f 123 -g 456
???? */
//??? if ($argc > 1){
//??????? print_r($argv);
//??? }
??? /**
???? * 運行結果
???? *
???? sync@MySUSE11:~/web_app/channel3/interface> /usr/local/php/bin/php ./getopt.php -f 123 -g 456
??????? Array
??????? (
??????????? [0] => ./getopt.php
??????????? [1] => -f
??????????? [2] => 123
??????????? [3] => -g
??????????? [4] => 456
??????? )
???? */
?
?
?
?
???? /*
???? * 方法二 使用getopt函數()
???? *? 在命令行下運行 /usr/local/php/bin/php ./getopt.php -f 123 -g 456
???? */
//??? $options = "f:g:";
//??? $opts = getopt( $options );
//??? print_r($opts);
??? /**
???? * 運行結果
???? *
???? sync@MySUSE11:~/web_app/channel3/interface> /usr/local/php/bin/php ./getopt.php -f 123 -g 456
??????? Array
??????? (
??????????? [f] => 123
??????????? [g] => 456
??????? )
???? */
?
?
??? /*
???? * 方法三 提示用戶輸入,然后獲取輸入的參數。有點像C語言
???? *? 在命令行下運行 /usr/local/php/bin/php ./getopt.php
???? */
??? fwrite(STDOUT, "Enter your name: ");
??? $name = trim(fgets(STDIN));
??? fwrite(STDOUT, "Hello, $name!");
??? /**
???? * 運行結果
???? *
???? sync@MySUSE11:~/web_app/channel3/interface> /usr/local/php/bin/php ./getopt.php
???? Enter your name: francis
???? Hello, francis!
???? */
?
?
1.8 (mysql)請寫出數據類型(int char varchar datetime text)的意思; 請問varchar和char有什么區別;
int : 數值類型
char : 固定長度字符串類型
varchar : 可變長度字符串類型
datetime : 時期時間類型
text : 文本類型
varchar和char有什么區別:
a. char 長度是固定的,不管你存儲的數據是多少他都會都固定的長度。
而varchar則處可變長度但他要在總長度上加1字符,這個用來存儲位置。
b. char 固定長度,所以在處理速度上要比varchar快速很多,但是浪費存儲空間,
所以對存儲不大,但在速度上有要求的可以使用char類型,反之可以用varchar類型來實例。
1.9 error_reporting 等調試函數使用
error_reporting() 函數能夠在運行時設置php.ini中 error_reporting 指令。
所以可以再程序中隨時調節顯示的錯誤級別。
使用此函數時 display_errors必須是打開狀態。
1.10 您是否用過版本控制軟件? 如果有您用的版本控制軟件的名字是?
?
?
1.11 posix和perl標準的正則表達式區別;
?
1.12 Safe_mode 打開后哪些地方受限.
啟動safe_mode,會對許多PHP函數進行限制,特別是和系統相關的文件打開、命令執行等函數.
所有操作文件的函數將只能操作與腳本UID相同的文件.
1.13 寫代碼來解決多進程/線程同時讀寫一個文件的問題。
PHP是不支持多線程的,可以使用php的flock加鎖函數實現。
$fp = fopen("/tmp/lock.txt", "w+");
if (flock($fp, LOCK_EX)) { // 進行排它型鎖定
fwrite($fp, "Write something here\n");
flock($fp, LOCK_UN); // 釋放鎖定
} else {
echo "Couldn't lock the file !";
}
fclose($fp);
1.14 寫一段上傳文件的代碼。
upload.html
<form enctype="multipart/form-data" method="POST" action="upload.php">
Send this file: <input name="name" type="file" />
<input type="submit" value="Send File" />
</form>
upload.php
$uploads_dir = '/uploads';
foreach ($_FILES["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["tmp_name"][$key];
$name = $_FILES["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}
?
1.15 Mysql 的存儲引擎,myisam和innodb的區別。
a. MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持.
b. MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快.
c. InnoDB不支持FULLTEXT類型的索引.
d. InnoDB 中不保存表的具體行數,也就是說,
執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,
但是MyISAM只要簡單的讀出保存好的行數即可.
e. 對于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯合索引。
f. DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
g. LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據后再改成InnoDB表,
但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用.
h. MyISAM支持表鎖,InnoDB支持行鎖。
?
二. web 架構,安全,項目經驗
2.1 介紹xdebug,apc,eAccelerator,Xcache,Zend opt的使用經驗。
2.2 使用mod_rewrite,在服務器上沒有/archivers/567.html這個物理文件時,重定向到index.php?id=567 ,請先打開mod_rewrite.
首先,打開mod_rewrite模塊。
其次,http.conf找到以下代碼段:
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
將其中的:AllowOverride None 改為 AllowOverride All ,重啟httpd服務即可。
然后,在項目根目錄下簡歷 .htaccess 文件,填寫規則。
??
2.3 MySQL數據庫作發布系統的存儲,一天五萬條以上的增量,預計運維三年,怎么優化?
a. 設計良好的數據庫結構,允許部分數據冗余,盡量避免join查詢,提高效率。
b. 選擇合適的表字段數據類型和存儲引擎,適當的添加索引。
c. mysql庫主從讀寫分離。
d. 找規律分表,減少單表中的數據量提高查詢速度。
e。添加緩存機制,比如memcached,apc等。
f. 不經常改動的頁面,生成靜態頁面。
g. 書寫高效率的SQL。比如 SELECT * FROM TABEL 改為 SELECT field_1, field_2, field_3 FROM TABLE.
2.4 寫出一種排序算法(原理),并說出優化它的方法。
2.5 請簡單闡述您最得意的開發之作
2.6 對于大流量的網站,您采用什么樣的方法來解決各頁面訪問量統計問題
a. 確認服務器是否能支撐當前訪問量。
b. 優化數據庫訪問。參考2.3
c. 禁止外部訪問鏈接(盜鏈), 比如圖片盜鏈。
d. 控制文件下載。
e. 使用不同主機分流。
f. 使用瀏覽統計軟件,了解訪問量,有針對性的進行優化。
2.7 您是否用過模板引擎? 如果有您用的模板引擎的名字是?
Smarty
2.8 請介紹Session的原理,大型網站中Session方面應注意什么?
?
2.9 測試php性能和mysql數據庫性能的工具,和找出瓶頸的方法。
2.10 正則提出一個網頁中的所有鏈接.
2.11 介紹一下常見的SSO(單點登陸)方案(比如dedecms整合discuz的passport)的原理。
2.12 您寫過的PHP框架的特點,主要解決什么問題,與其他框架的不同點。
2.13 大型的論壇/新聞文章系統/SNS網站在性能優化上有什么區別?
2.14 相冊類應用:要求在瀏覽器中能同時選中并上傳多個文件,圖片要求能剪裁,壓縮包在服務器端解壓。能上傳單個達50M的文件。上傳過程中有進度條顯示。每個圖片能生成四種大小縮略圖,視頻文件要轉成flv供flash播放。敘述要涉及的各類開源軟件和簡單用途。
一群猴子排成一圈,按1,2,…,n依次編號。然后從第1只開始數,數到第m只,把它踢出圈,從它后面再開始數,再數到第m只,在把它踢出去…,如此不停的進行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過程,輸入m、n, 輸出最后那個大王的編號。用程序模擬該過程。
三. unix/linux 基本使用
3.1 linux下查看當前系統負載信息的一些方法。
3.2 vim的基本快捷鍵。
3.3 ssh 安全增強方法;密碼方式和rsa key 方式的配置。
3.4 rpm/apt/yum/ports 裝包,查詢,刪除的基本命令。
3.5 Makefile的基本格式,gcc 編譯,連接的命令,-O0 和-O3區別。
3.6 gdb,strace,valgrind的基本使用.
四. 前端,HTML,JS
css盒模型。
javascript中的prototype。
javascript中this對象的作用域。
IE和firefox事件冒泡的不同。
什么是怪異模式,標準模式,近標準模式。
DTD的定義
IE/firefox常用hack.
firefox,IE下的前端js/css調試工具。