若是幫到了您,能夠支持一下,謝謝您的支持!我會及時補充最新的面試題javascript
class sample implements Iterator { private $_items = array(1,2,3,4,5,6,7); public function __construct() { ;//void } public function rewind() { reset($this->_items); } public function current() { return current($this->_items); } public function key() { return key($this->_items); } public function next() { return next($this->_items); } public function valid() { return ( $this->current() !== false ); } } $sa = new sample(); foreach($sa as $key => $val){ print $key . "=>" .$val }
$array = array(1, 1, 1, 54, 3,4, 3,4, 3, 14, 3,4, 3,7,8,9,12,45,66,5,7,8,9,2,45);
$array2 = array_count_values($array); // 統計數組中全部值出現的次數
arsort($array2); // 按照鍵值對關聯數組進行降序排序
$first = reset($array2);
$first_key = key($array2);
echo("數組中數字{$first_key}重複次數最多,爲:{$first}次");
exit;php
寫出建立多級目錄的函數(新浪校招)
<?php
/*
寫出一個能建立多級目錄的PHP函數
*/
function
createdirlist(
$path
,
$mode
){
if
(
is_dir
(
$path
)){
//判斷目錄存在否,存在不建立
echo
"目錄'"
.
$path
.
"'已經存在"
;
//已經存在則輸入路徑
}
else
{
//不存在則建立目錄
$re
=
mkdir
(
$path
,
$mode
,true);
//第三個參數爲true便可以建立多極目錄
if
(
$re
){
echo
"目錄建立成功"
;
//目錄建立成功
}
else
{
echo
"目錄建立失敗"
;
}
}
}
$path
=
"/a/x/cc/cd"
;
//要建立的目錄
$mode
=0755;
//建立目錄的模式,即權限.
createdirlist(
$path
,
$mode
);
//測試
1.函數內部 static 和 global 關鍵字的做用,如:css
function foo() { static $a = 111; global $b; }
2.子類重寫父類的 protected 方法有什麼限制?或者說有什麼要遵照的規則?html
3.PHP文件末尾是否應該加 ?> 結束符號,爲何?java
4.談一談 PHP 開源框架 CI,ThinkPHP,Laravel 的優缺點及選型依據python
5.Memcache 和 Redis 的讀寫性能(qps)如何?二者優缺點?Redis 支持哪些數據類型?Redis 如何持久化?mysql
6.使用 PHP 下載網絡圖片,有哪些方法?linux
7.什麼是 CGI?什麼是 FastCGI?php-fpm,FastCGI,Nginx 之間是什麼關係?nginx
8.什麼是 CSRF 攻擊 ?XSS 攻擊?如何防範?git
XSS跨站腳本攻擊指攻擊者在網頁中嵌入客戶端腳本(例如JavaScript),當用戶瀏覽此網頁時,腳本就會在用戶的瀏覽器上執行,從而達到攻擊者的目的,好比獲取用戶的Cookie,導航到惡意網站,攜帶木馬等。
如何防止XSS跨站腳本攻擊:
原則:不相信用戶輸入的數據
< 轉化爲 <、> 轉化爲 >、& 轉化爲 &、' 轉化爲 '、" 轉化爲 "、空格 轉化爲
<script>、<iframe>、< for <、> for >、" for
過濾JavaScript 事件的標籤。例如 「onclick=」、」onfocus」 等等
不少瀏覽器都加入了安全機制來過濾XSS
注意:攻擊代碼不必定在<script></script>
中
CSRF(XSRF)儘管聽起來很想XSS跨站腳本攻擊,可是它於XSS徹底不一樣。XSS是利用站點內的信任用戶,而CSRF則是經過假裝來自受信任用戶的請求來利用受信任的站點。與XSS相比,CSRF攻擊不大流行和難以防範,因此比XSS更具危險性。
如何防止CSRF跨站請求僞造:
所謂SQL注入,就是經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
如何防止SQL注入:
9.列舉經常使用的設計模式並說明?單例模式,觀察者模式等等
10.寫一段代碼,實現PHP內部的通知機制,如當一個類的屬性發生變化時,另一個類就能夠收到通知。
1:基礎sql語句書寫(通常讓寫關聯和子查詢語句) 2:索引的建立,優缺點,最左原則 3:存儲引擎,經常使用的幾個,優缺點,差異,原理(面試必出) 4:sql注入的處理方法 5:mysql處理函數(PHP中封裝的) 6:PDO的使用方法,爲何使用 7:mysql的優化,表拆分等 8:事務處理,sql語句的處理效率等 9:數據表字段的類型,同類型間的區別,改如何選取,int(10)與int(11)的區別等。 10:數據庫索引使用的那種數據結構,畫出數據結構
1:經常使用命令的使用,vim編輯器的使用。 2:進程,cpu等信息的查看命令。 3:文件內查看命令(主要涉及統計信息)。 4:Shell的使用,命令操做。
1:Redis的應用場景,結合微博業務說出他的具體應用。 2:Redis與MC支持數據的不一樣點,二者都支持哪些數據結構的存儲,寫越多越好。 3:Redis持久化存儲的原理,與Mysql的應用區別。怎樣保持持久化數據與內存數據同步的關係(Redis同步機制) 4:Redis與MC在併發狀態下的性能比較。 5:MC的內存管理機制,當一個數據須要存儲的時候怎樣分配內存空間 6:Redis的內存管理機制,與MC有哪些不一樣點。
1:PHP7中的新特性與廢棄的特性 2:爲何要使用PHP7,PHP7快在哪裏
1:git的使用命令,例如:寫出版本回退命令。 2:git與svn的區別。 3:如何進行多分支開發,包括多人開發協同,分段測試,上線。
。
二、php數組函數常見的那些? (array_merge、in_array的做用)
三、PHP中幾個輸出函數echo,print(),print_r(),sprintf(),var_dump()的區別
七、禁掉cookie的session使用方案,設置session過時的方法,對應函數
1三、有mail.log的一個文檔,內容爲若干郵件地址,用’\n’分隔換行。挑選sina.com的地址。
1七、php.ini 中safe mod關閉 影響哪些函數和參數,至少寫6個?
1九、Isset() 、empty()與is_null的區別
2二、Session與cookie的聯繫和區別(運行機制),session共享問題解決方案
MySQL部分
一、select * from table where (ID = 10) or (ID = 32) or (ID = 22) 讓結果按10, 32, 22的順序檢索出來?
Linux部分
服務器部分
php部分我是按照面試常問的問題總結的,下面的問題在面試中出場率很高。問題比較基礎
做用:Keep-Alive:使客戶端到服務器端的鏈接持續有效,當出現對服務器的後繼請求時,Keep-Alive功能避免了創建或者從新創建鏈接。Web服務器,基本上都支持HTTP Keep-Alive。
缺點:對於提供靜態內容的網站來講,這個功能一般頗有用。可是,對於負擔較重的網站來講,雖然爲客戶保留打開的連 接有必定的好處,但它一樣影響了性能,由於在處理暫停期間,原本能夠釋放的資源仍舊被佔用。當Web服務器和應用服務器在同一臺機器上運行時,Keep- Alive功能對資源利用的影響尤爲突出。
二、php數組函數常見的那些? (array_merge、in_array的做用)
1 list(); //不是真正的函數,而是PHP的語言結構,用於給一組變量賦值,僅能用於索引數組 2 each(); //返回數組當前元素的鍵值對,並將指針移動到下一個元素位置 3 while(); //可配合list或each使用:while(list($key, $value) = each($arr)){each $key, $value; }
1 current(); //讀取指針位置的內容 2 key(); //讀取當前指針指向內容的索引值 3 next(); //將數組中的內部指針指向下一單元 4 prev(); //將數組內部指針倒回一位 5 end(); //將數組內部指針指向最後一個元素 6 reset(); //將目前指針指向第一個索引位置
1 array_values($arr); //得到數組的值 2 array_keys($arr); //得到數組的鍵名 3 array_flip($arr); //數組中的值與鍵名互換(若是有重複前面的會被後面的覆蓋) 4 array_search('PHP',$arr); //檢索給定的值,加true則是嚴格類型檢查 5 array_reverse($arr); //將數組中的元素翻轉(先後順序) 6 in_array("apple", $arr); //在數組中檢索apple 7 array_key_exists("apple", $arr); // 檢索給定的鍵名是否存在數組中 8 array_count_values($arr); // 統計數組中全部值出現的次數 9 array_unique($arr); // 刪除數組中重複的值
1 array_filter(); //使用回調函數過濾數組中的元素,若是回調返回true則當前的元素被包含到返回數組中 2 array_walk(); //回調函數處理數組,自定義函數要有兩個參數,本函數第三個參數能夠做爲回調第三個參數返回 3 array_map(); //能夠處理多個數組,每一個數組的長度應該相同,傳入數組的個數和回調函數參數個數應該一致
1 array_slice($arr, 0, 3); //將數組中的一段取出,此函數忽略鍵名(數組的分段) 2 array_splice($arr, 0, 3,array("black","maroon")); //將數組中的一段取出,返回的序列從原數組中刪除 3 array_chunk($arr, 3, TRUE); //將一個數組分割成多個,TRUE爲保留原數組的鍵名(分割多個數組)
1 array_push($arr, "apple", "pear"); //將一個或多個元素壓入數組棧的末尾(入棧),返回入棧元素的個數 2 array_pop($arr); // 將數組棧的最後一個元素彈出(出棧) 3 array_shift($arr); //數組中第一個元素移出並返回(長度減1,其餘元素向前移動一位,數字鍵名改成從零計數,文字鍵名不變) 4 array_unshift($arr,"a",array(1,2)); //在數組的開頭插入一個或多個元素
1 sort($arr); //由小到大,忽略鍵名 2 rsort($arr); //由大到小,忽略鍵名 3 asort($arr); //由小到大,保留鍵名 4 arsort($arr); //由大到小,保留鍵名 5 ksort($arr); //按照鍵名正序排序 6 krsort($arr); //按照鍵名逆序排序
1 array_sum($arr); //對數組內部的全部元素作求和運算(數組元素的求和) 2 array_merge($arr1, $arr2); //合併兩個或多個(相同字符串鍵名,後面覆蓋前面,相同的數字鍵名,後面的附加到後面) 3 4 array_diff($arr1, $arr2); //返回差集結果數組 array_diff_assoc($arr1, $arr2, $arr3); //返回差集結果數組,鍵名也作比較 5 array_intersect($arr1, $arr2); //返回交集結果數組 array_intersect_assoc($arr1, $arr2); //返回交集結果數組,鍵名也作比較
1 array_unique($arr); //移除數組中重複的值,新的數組中會保留原始的鍵名 2 shuffle($arr); // 將數組的順序打亂
1:echo:是語句不是函數,沒有返回值,可輸出多個變量值,不須要圓括號。不能輸出數組和對象,只能打印簡單類型(如int,string)。
2:print:是語句不是函數,有返回值 1 ,只能輸出一個變量,不須要圓括號。不能輸出數組和對象,只能打印簡單類型(如int,string)。
3:print_r:是函數,能夠打印複合類型,例如:stirng、int、float、array、object等,輸出array時會用結構表示,並且能夠經過print_r($str,true)來使print_r不輸出而返回print_r處理後的值
4:printf:是函數,把文字格式化之後輸出(參看C語言)
5:sprintf:是函數,跟printf類似,但不打印,而是返回格式化後的文字(該函數把格式化的字符串寫寫入一個變量中,而不是輸出來),其 他的與printf同樣。
例如:
1 $str = "Hello"; 2 $number = 123; 3 $txt = sprintf("%s world. Day number %u",$str,$number); 4 //輸出: Hello world. Day number 123
6:var_dump():函數,輸出變量的內容、類型或字符串的內容、類型、長度。經常使用來調試。
能夠經過function_exists('函數名稱')進行測試
1 var_dump(function_exists('print')); //bool(false) 2 3 var_dump(function_exists('echo')); //bool(false) 4 5 var_dump(function_exists('print_r')); //bool(true)
1 1: 3 list($a, $b) = array($b, $a); 4 2: 5 $a = $a . $b; 5 $b = strlen( $b ); 6 $b = substr( $a, 0, (strlen($a) – $b ) ); 7 $a = substr( $a, strlen($b) ); 8 9 3:(必須用一個兩個字符串都都不能出現的字符作爲分隔符) 10 $a = $b.','.$a ; 11 $a = explode(',', $a); 12 $b = $a[1]; 13 $a = $a[0]; 14 15 4:這個是當兩個數都是數字的時候: 16 $a = $a + $b; 17 $b = $a – $b; 18 $a = $a – $b; 19 20 5:藉助數組 21 $a = array($a,$b); 22 $b = $a[0]; 23 $a = $a[1];
Heredoc在正規的PHP文檔中和技術書籍中通常沒有詳細講述。他是一種Perl風格的字符串輸出技術。使用heredoc技術能夠實現界面與代碼的準分離,好比phpwind模板。
heredoc的語法是用」<<<」加上本身定義成對的標籤,在標籤範圍內的文字視爲一個字符串
規則以下:
一、以<<<End開始標記開始,以End結束標記結束,結束標記必須頂頭寫,不能有縮進和空格,且在結束標記末尾要有分號 。開始標記和開始標記相同,好比經常使用大寫的EOT、EOD、EOF來表示,也能夠使用其餘標記,只要保證開始標記和結束標記不在正文中出現就行。
二、位於開始標記和結束標記之間的變量能夠被正常解析,可是函數則不能夠。在heredoc中,變量不須要用鏈接符 . 或 , 來拼接,好比:
1 $a=2; 2 $b= <<<EOF 3 "zyf"$a 4 "zyf" 5 EOF; 6 echo $b; //結果連同雙引號一塊兒輸出:"zyf"2 "zyf"
三、heredoc經常使用在輸出包含大量HTML語法文檔的時候。他要比傳統的echo輸出精煉不少,以下所示:
1 function getHtml() 2 { 3 echo "<html>"; 4 echo "<head><title>Title</title></head>"; 5 echo "<body>Content</body>"; 6 echo "</html>; 7 } 8 9 function getHtml() 10 { 11 echo <<<EOT 12 <html> 13 <head><title>Title</title></head> 14 <body>Content</body> 15 </html> 16 EOT; 17 }
1 <?php 2 $fp = fopen("/tmp/lock.txt","w+"); 3 if(flock($fp, LOCK_EX)){// 進行排它型鎖定 4 fwrite($fp,"Write something here\n"); 5 flock($fp, LOCK_UN);// 釋放鎖定 6 }else{ 7 echo "Couldn't lock the file !"; 8 } 9 fclose($fp); 10 ?>
七、禁掉cookie的session使用方案,設置session過時的方法,對應函數
1 第一種 setcookie() 直接用setcookie設置session id的生命週期。 3 $lifetime=60; //保存1分鐘 4 session_start(); 5 setcookie(session_name(), session_id(), time()+$lifetime, "/"); 6 第二種 session_set_cookie_params() 7 $lifetime=60;//保存1分鐘 8 session_set_cookie_params($lifetime); 9 session_start(); 10 session_regenerate_id(true); 11 其中session_regenerate_id();方法用於改變當前session_id的值,並保留session中數組的值。參數默認爲 false,若是設置爲true則改變session_id的值,並清空當前session數組。
JSON 一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON採用徹底獨立於語言的文本格式,可是也使用了相似於c語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、 Python等)。這些特性使JSON成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(網絡傳輸速率)。
JSON的結構基於下面兩點
1. "名稱/值"對的集合 不一樣語言中,它被理解爲對象(object),記錄(record),結構(struct),字典(dictionary),哈希表(hash table),鍵列表(keyed list)等用$_SERVER獲取的IP地址有什麼問題?
$_SERVER['REMOTE_ADDR'] ; 經過全局數組來得到
getenv('REMOTE_ADDR') ; 經過環境變量來得到
當客戶機使用代理的時候獲取不到真實的IP地址
1 function get_dir_info($path){ 2 $handle = opendir($path);//打開目錄返回句柄 3 while(($content = readdir($handle))!== false){ 4 $new_dir = $path . DIRECTORY_SEPARATOR . $content; 5 if($content == '..' || $content == '.'){ 6 continue; 7 } 8 if(is_dir($new_dir)){ 9 echo "<br>目錄:".$new_dir . '<br>'; 10 get_dir_info($new_dir); 11 }else{ 12 echo "文件:".$path.':'.$content .'<br>'; 13 } 14 } 15 } 16 get_dir_info($dir);
1三、有mail.log的一個文檔,內容爲若干郵件地址,用’\n’分隔換行。挑選sina.com的地址(包括從文件讀取、過濾到列印出來)。
思路1:用正則表達式(比較慢,效率地,不推薦用)
思路2:cat mail.log | grep sina.com
1八、一羣猴子排成一圈,按1,2,…,n依次編號。而後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去…,如此不停 的進行下去,直到最後只剩下一隻猴子爲止,那隻猴子就叫作大王。要求編程模擬此過程,輸入m、n, 輸出最後那個大王的編號。
1 <?php 2 function fuhuan($allnum, $ti){ 3 $arr = array(); 4 for($i = 0; $i < $allnum; $i++){ 5 $arr[$i] = $i; 6 } 7 8 $nums = 1; 9 while(count($arr) > 1){ 10 foreach ($arr as $key => $value) { 11 if($nums == $ti){ 12 unset($arr[$key]); 13 $nums = 1; 14 }else{ 15 $nums++; 16 } 17 } 18 } 19 $new_arr = array_values($arr); 20 var_dump($new_arr[0] + 1); 21 } 22 fuhuan(10,10);
1九、isset() 、empty()與is_null的區別
一、當變量未定義時,is_null() 和「參數自己」是不容許做爲參數判斷的,會報Notice警告錯誤;
二、empty , isset首先都會檢查變量是否存在,而後對變量值進行檢測。而is_null 和 「參數自己」只是直接檢查變量值,是否爲null,所以若是變量未定義就會出現錯誤!
三、isset():僅當null和未定義,返回false;
四、empty():""、0、"0"、NULL、FALSE、array(),未定義,均返回true;
五、is_null():僅判斷是否爲null,未定義報警告;
六、變量自己做爲參數,與empty()一致,但接受未定義變量時,報警告;
1 getpath('/a/b/c/d/e.php', '/a/d/12/34/c.php'); 2 3 public function getpath($a, $b) 4 { 5 $aarr = explode('/', $a); 6 $barr = explode('/', $b); 7 $count = count($barr) - 2; 8 $pathinfo = ''; 9 for($i = 1; $i <= $count; $i++){ 10 if($aarr[$i] == $barr[$i]){ 11 $pathinfo .= '../'; 12 }else{ 13 $pathinfo .= $barr[$i] . '/'; 14 } 15 } 16 echo $pathinfo; 17 }
問題:程序須要定製;每次請求都進行數據庫讀寫開銷不小,另外數據庫是一個單點,能夠作數據庫的hash來解 決這個問題。
2:使用 memcached來保存session, 這種方式跟數據庫相似,內存存取性能比數據庫好不少。
問題:程序須要定製,增長 了工做量;存入memcached中的數據都須要序列化,效率較低,斷電或者重啓電腦容易丟失數據;
3: 經過加密的cookie,在A服務器上登陸,在用戶的瀏覽器上添加加密的cookie,當用戶訪問B服務器時,檢查有無Session,若是沒有,就檢驗 Cookie是否有效,Cookie有效的話就在B服務器上重建session。簡單,高效, 服務器的壓力減少了,由於session數據不存在服務器磁盤上。根本就不會出現session讀取不到的問題。
問題:網絡請求佔用不少。每次請求時,客戶端都要經過cookie發送session數據給服務器,session中數據不能太多,瀏覽器對cookie 的大
小存在限制。不適合高訪問量的狀況,由於高訪問量的狀況下。
匹配中文字符的正則表達式: [\u4e00-\u9fa5]
匹配雙字節字符(包括漢字在內):[^\x00-\xff]
匹配空行的正則表達式:\n[\s| ]*\r
匹配HTML標記的正則表達式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正則表達式:(^\s*)|(\s*$)
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配網址URL的正則表達式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$
匹配賬號是否合法(字母開頭,容許5-16字節,容許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配國內電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匹配騰訊QQ號:^[1-9]*[1-9][0-9]*$
function getHeader() { $headers = []; if (function_exists('getallheaders')) { $headers = getallheaders(); } elseif (function_exists('http_get_request_headers')) { $headers = http_get_request_headers(); } else { foreach ($_SERVER as $key => $value) { if(strstr($key, 'HTTP_')) { $newk = ucwords(strtolower(str_replace('_', '-', substr($key, 5)))); $headers[$newk] = $value; } } } var_dump($headers); }
------------------------mysql部分-----------------------
一、select * from table where (ID = 10) or (ID = 32) or (ID = 22) 讓結果按10, 32, 22的順序檢索出來?
Select *
from user_info
Where (ID IN (10, 32, 22))
order BY FIND_IN_SET(ID, '10, 32, 22')
----------------------linux部分-----------------------
core是unix系統的內核。當你的程序出現內存越界的時候,操做系統會停止你的進程,並將當前內存狀態倒出到core文件中,以便進一步分析。程序員能夠經過core文件來找出問題所在。它記錄了程序掛掉時詳細的狀態描述。
什麼是core dump Core的意思是內存, Dump的意思是扔出來, 堆出來。開發和使用Unix程序時, 有時程序莫名其妙的down了, 卻沒有任何的提示(有時候會提示core dumped). 這時候能夠查看一下有沒有形如core.進程號的文件生成, 這個文件即是操做系統把程序down掉時的內存內容扔出來生成的,它能夠作爲調試程序的參考. core dump又叫核心轉儲, 當程序運行過程當中發生異常, 程序異常退出時, 由操做系統把程序當前的內存情況存儲在一個core文件中, 叫core dump。如何使用core文件 gdb -c core文件路徑 [應用程序的路徑],進去後輸入where回車, 就能夠顯示程序在哪一行當掉的, 在哪一個函數中.
爲何沒有core文件生成呢? core文件的生成跟你當前系統的環境設置有關係, 能夠用下面的語句設置一下, 而後再運行程序便成生成core文件.
ulimit -c unlimited core文件生成的位置通常於運行程序的路徑相同, 文件名通常爲core.進程號
不用core文件,程序出了問題產生信號是否知道?答:內核向進程發信號嘛。
共享內存對象映射。
兩者有什麼區別:
答:內存映射文件是由一個文件到一塊內存的映射,使應用程序能夠經過內存指針對磁盤上的文件進行訪問,其過程就如同對加載了文件的內存的訪問,所以內存文件映射很是適合於用來管理大文件。
cat:把一個或多個文件內容顯示到標準輸出
chmod:改變文件屬性
chgrp:改變用戶分組
grep:在文件內進行搜索
wc:命令的功能爲統計指定文件中的字節數、字數、行數, 並將統計結果顯示輸出。
-rw-r--r--那個是權限符號,總共是- --- --- ---這幾個位。
第一個短橫處是文件類型識別符:-表示普通文件;c表示字符設備(character);b表示塊設備(block);d表示目錄 (directory);l表示連接文件(link);後面第一個三個連續的短橫是用戶權限位(User),第二個三個連續短橫是組權限位 (Group),第三個三個連續短橫是其餘權限位(Other)。每一個權限位有三個權限,r(讀權限),w(寫權限),x(執行權限)。若是每一個權限位都 有權限存在,那麼滿權限的狀況就是:-rwxrwxrwx;權限爲空的狀況就是- --- --- ---。
權限的設定能夠用chmod命令,其格式位:chmod ugoa+/-/=rwx filename/directory。例如:
一個文件aaa具備徹底空的權限- --- --- ---。
chmod u+rw aaa(給用戶權限位設置讀寫權限,其權限表示爲:- rw- --- ---)
chmod g+r aaa(給組設置權限爲可讀,其權限表示爲:- --- r-- ---)
chmod ugo+rw aaa(給用戶,組,其它用戶或組設置權限爲讀寫,權限表示爲:- rw- rw- rw-)
若是aaa具備滿權限- rwx rwx rwx。
chmod u-x aaa(去掉用戶可執行權限,權限表示爲:- rw- rwx rwx)
若是要給aaa賦予制定權限- rwx r-x r-x,命令爲:
chmod u=rwx,Go=rx aaa
-------------------服務器部分-------------------
cgi在2000年或更早的時候用得比較多, 之前web服務器通常只處理靜態的請求,web服務器會根據此次請求的內容,而後會fork一個新進程來運行外部c程序 (或perl腳本...), 這個進程會把處理完的數據返回給web服務器,最後web服務器把內容發送給用戶,剛纔fork的進程也隨之退出。 若是下次用戶還請求改動態腳本,那麼web服務器又再次fork一個新進程,周而復始的進行。
後來出現了一種更高級的方式是, web服務器能夠內置perl解釋器或php解釋器。 也就是說這些解釋器作成模塊的方式,web服務器會在啓動的時候就啓動這些解釋器。 當有新的動態請求進來時,web服務器就是本身解析這些perl或php腳本,免得從新fork一個進程,效率提升了。
fastcgi的方式是,web服務器收到一個請求時,他不會從新fork一個進程(由於這個進程在web服務器啓動時就開啓了,並且不會退 出),web服務器直接把內容傳遞給這個進程(進程間通訊,但fastcgi使用了別的方式,tcp方式通訊),這個進程收到請求後進行處理,把結果返回 給web服務器,最後本身接着等待下一個請求的到來,而不是退出。
fastcgi跟cgi的區別是:
在web服務器方面 在對數據進行處理的進程方面
cgi fork一個新的進程進行處理 讀取參數,處理數據,而後就結束生命期
fastcgi 用tcp方式跟遠程機子上的進程或本地進程創建鏈接 要開啓tcp端口,進入循環,等待數據的到來,處理數據
舉個例子: 服務端如今有個10萬個字單詞, 客戶每次會發來一個字符串,問以這個字符串爲前綴的單詞有多少個。 那麼能夠寫一個程序,這個程序會建一棵trie樹,而後每次用戶請求過來時能夠直接到這個trie去查找。 可是若是以cgi的方式的話,此次請求結束後這課trie也就沒了,等下次再啓動該進程時,又要新建一棵trie樹,這樣的效率就過低下了。 而用fastcgi的方式的話,這課trie樹在進程啓動時創建,之後就能夠直接在trie樹上查詢指定的前綴了。
select最先於1983年出如今4.2BSD中,它經過一個select()系統調用來監視多個文件描述符的數組,當select()返回後,該數組中就緒的文件描述符便會被內核修改標誌位,使得進程能夠得到這些文件描述符從而進行後續的讀寫操做。
select目前幾乎在全部的平臺上支持,其良好跨平臺支持也是它的一個優勢,事實上從如今看來,這也是它所剩很少的優勢之一。
select的一個缺點在於單個進程可以監視的文件描述符的數量存在最大限制,在Linux上通常爲1024,不過能夠經過修改宏定義甚至從新編譯內核的方式提高這一限制。
另外,select()所維護的存儲大量文件描述符的數據結構,隨着文件描述符數量的增大,其複製的開銷也線性增加。同時,因爲網絡響應時間的延遲 使得大量TCP鏈接處於非活躍狀態,但調用select()會對全部socket進行一次線性掃描,因此這也浪費了必定的開銷。
poll在1986年誕生於System V Release 3,它和select在本質上沒有多大差異,可是poll沒有最大文件描述符數量的限制。
poll和select一樣存在一個缺點就是,包含大量文件描述符的數組被總體複製於用戶態和內核的地址空間之間,而不論這些文件描述符是否就緒,它的開銷隨着文件描述符數量的增長而線性增大。
另外,select()和poll()將就緒的文件描述符告訴進程後,若是進程沒有對其進行IO操做,那麼下次調用select()和poll() 的時候將再次報告這些文件描述符,因此它們通常不會丟失就緒的消息,這種方式稱爲水平觸發(Level Triggered)。
直到Linux2.6纔出現了由內核直接支持的實現方法,那就是epoll,它幾乎具有了以前所說的一切優勢,被公認爲Linux2.6下性能最好的多路I/O就緒通知方法。
epoll能夠同時支持水平觸發和邊緣觸發(Edge Triggered,只告訴進程哪些文件描述符剛剛變爲就緒狀態,它只說一遍,若是咱們沒有采起行動,那麼它將不會再次告知,這種方式稱爲邊緣觸發),理論上邊緣觸發的性能要更高一些,可是代碼實現至關複雜。
epoll一樣只告知那些就緒的文件描述符,並且當咱們調用epoll_wait()得到就緒文件描述符時,返回的不是實際的描述符,而是一個表明 就緒描述符數量的值,你只須要去epoll指定的一個數組中依次取得相應數量的文件描述符便可,這裏也使用了內存映射(mmap)技術,這樣便完全省掉了 這些文件描述符在系統調用時複製的開銷。
另外一個本質的改進在於epoll採用基於事件的就緒通知方式。在select/poll中,進程只有在調用必定的方法後,內核纔對全部監視的文件描 述符進行掃描,而epoll事先經過epoll_ctl()來註冊一個文件描述符,一旦基於某個文件描述符就緒時,內核會採用相似callback的回調 機制,迅速激活這個文件描述符,當進程調用epoll_wait()時便獲得通知。
3臺Web服務器,兩臺MySQL數據庫服務器,採用Master/Slave同步的方式減輕數據庫負載,Web服務器能夠結合Memcahe緩存來減小負載,同時三臺Web服
務器內容一致,能夠採用DNS輪訓的方式來進行負載平衡
2.說說你所瞭解的搜索引擎包含那些技術?
爬蟲(採集)、切詞(分詞)、索引(存儲)、查詢以及其餘相關技術
3.使用過Memcache緩存嗎,若是使用過,可以簡單的描述一下它的工做原理嗎?
Memcahce是把全部的數據保存在內存當中,採用hash表的方式,
每條數據又key和value組成,每一個key是獨一無二的,當要訪問某個值的時候先按照找到
值,而後返回結果。
Memcahce採用LRU算法來逐漸把過時數據清除掉。
平時喜歡哪些php書籍及博客?CSDN、虎嗅、獵雲
js閉包是什麼,原型鏈了不瞭解?
for與foreach哪一個更快?
php鳥哥是誰?能不能講一下php執行原理?
php加速器有哪些?apc、xcache.....能不能講一下它的加速原理,與如今的O+有什麼差異?
Node.js能完全代替php+apache 嗎?
怎樣判斷一個值是否存在於數組中?in_array(),array_key_exists 哪個更好
怎樣判斷select語句中是否使用了索引?explain 等的使用
sphinx的中文分詞詞庫使用第三方庫仍是本身建庫?
mysql與mysqli的區別有哪些?
未來的發展方向?安全、仍是數據挖掘、大數據處理?
php的面向對象:類的修飾符、封裝、繼承、多態等
php的設計模式:單例模式、工廠模式、生產者模式......等23種
服務器狀態碼:200、20二、30一、40四、500......
i++與++i++與++i的區別?
項目開發:電商項目中的購物車數據持久化、考試系統的安全性考慮、
mysql設計基礎:三大範式、功能->思惟導圖、建立表的第一字段是什麼?
mysql字段char、varchar、int、smallint、tinyint、mediumint、bigint、decimal、double、float字節數及應用場景
mysql 數據類型有哪些 ? 分別佔用多少存儲空間 ?
mysql 索引原理及sql性能優化
memcache與mongoDB、Redis各自的使用場景是什麼?
爲何mongoDB與Redis非但沒有造成競爭反而是互補關係?
Redis數據類型有哪些?int、string、hash、set、list ?
安裝linux軟件時使用make方式還使用yum方式?
linux網絡優化,如何查看進程、怎樣查看最大文件打開數?
1條微薄要推送給100萬個粉絲該怎麼處理?
知道哪些算法?冒泡排序?快速排序?二分查找法?
yii thinkphp ci 各自優勢
php 設計模式有哪些?單例模式的4個特性和實現原理
C語言中的虛函數是什麼?
C排序算法有哪些?
php 基本結構是什麼?
memcache magent 分佈式設計?
php的內存回收機制是什麼?
php在2011年末出現hash碰撞,hash碰撞原理爲? 如何進行修復?
一個php文件的解釋過程是? 通常加速php有哪些? 提升php總體性能會用到哪些技術?
redis 分佈式設計,如何設計?
mongo 集羣架構是怎樣的?
tcp/ip 網絡協議,osi7層指是什麼?
php 處理大數據業務
linux 應用,負載性能查看 ?
nginx設置緩存js、css、圖片等信息,緩存的實現原理是?
nginx負載均衡有哪些? 若是其中一臺服務器掛掉,報警機制如何實現?
nginx 實戰優化業務功能 ?
談一下近三年來你的得意之做?
看看簡歷,會問一些過去作的項目的用戶量、pv、吞吐量、相關難點和解決方法等
數據庫設計經驗,爲何進行分表? 分庫?
通常多少數據量開始分表? 分庫? 分庫分表的目的? 什麼是數據庫垂直拆分? 水平拆分? 分區等等?能夠舉例說明
數據庫優化有哪些? 分別須要注意什麼?
web開發方面會遇到哪些緩存? 分別如何優化?
給你256M的內存,對10G的文件進行排序(文件每行1個數字),如何實現?
對10G的文件進行查找如何實現?
統計10G文件每一個關鍵字出現的次數如何實現?
假如你如今是12306火車訂票的設計師,你該如何設計知足全國人民訂票?
假若有1億用戶的訪問量,你的服務器架構是怎樣的? 用戶信息的存儲方案如何設計?
若是你是技術組長,所帶團隊任務進度沒法完成你該如何解決?
若是在進度排滿的前提下插入任務,你該如何保證總進度不延期?
若是有的工程師今天預約任務沒有完成,你該如何解決?
從你的經驗方面談一下如何構建高性能web站點? 須要哪些環節? 步驟? 每一個步驟須要注意什麼如何優化等?
爲何要對數據庫進行主從分離?
如何處理多服務器共享session?
一個10G的表,你用php程序統計某個字段出現的次數,思路是?
會告訴你一個nginx日誌例子,用你認爲最佳的編程語言統計一下http響應時間超過1秒的前10個url?
給你一個mysql配置文件,用你認爲最佳的編程語言解析該文件?
給你兩個路徑a和b,寫一個算法或思路計算a和b差距幾層並顯示a和b的交集?
給你一個url,在nginx配置一下rewrite指定到某個具體路徑?
session和cookie生存週期區別? 存儲位置區別?
require、include、require_once、include_once區別? 加載區別? 若是程序按需加載某個php文件你如何實現?
chrome號稱爲多線程的,那麼多線程和多進程的區別爲?
如何提升緩存命中率? 如何對緩存進行顆粒化?
web不安全因素有哪些? 分別如何防範?
假如兩個單鏈表相交,寫一個最優算法計算交點位置,說思路也能夠?
假如你是技術組長? 如何提升團隊效率?
不優化前提下,apache通常最大鏈接數爲? nginx通常最大鏈接數爲? mysql 每秒insert ? select ? update ? delete?
個人全部問題都問完了(固然沒有這麼多),你有什麼問題問我沒有?若是幫到了您,能夠支持一下,謝謝您的支持!