面試總結

 

是什麼 ,在什麼地方用,注意什麼,特色,如何配置(相關關聯),出現的問題(缺點),引出解決辦法或另外一種方法php

+-html

PHPHypertext Preprocessormysql

 

1、getpost的區別linux

1. get是從服務器上獲取數據,post是向服務器傳送數據。
2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中能夠看到。post是經過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一塊兒傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
3. 對於get方式,服務器端Request.QueryString獲取變量的值,對於post方式,服務器端Request.Form獲取提交的數據。
4. get傳送的數據量較小,不能大於2KBpost傳送的數據量較大,通常被默認爲不受限制。但理論上,IIS4中最大量爲80KBIIS5中爲100KB
5. get安全性很是低,post安全性較高。可是執行效率卻比Post方法好。 nginx

 

2、sessioncookie的區別web

1cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。ajax

2cookie不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙
   考慮到安全應當使用session正則表達式

3session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能
   考慮到減輕服務器性能方面,應當使用COOKIEredis

4、單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20cookie算法

5、因此我的建議:
   將登錄信息等重要信息存放爲SESSION
   其餘信息若是須要保留,能夠放在COOKIE

 

3、數據庫中的事務是什麼

事務是做爲一個邏輯單元執行的一系列操做,一個邏輯工做單元必須有四個屬性,稱爲 ACID(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成爲一個事務:
原子性
事務必須是原子工做單元;對於其數據修改,要麼全都執行,要麼全都不執行。

一致性
事務在完成時,必須使全部的數據都保持一致狀態。在相關數據庫中,全部規則都必須應用於事務的修改,以保持全部數據的完整性。
    事務結束時,全部的內部數據結構(如 B 樹索引或雙向鏈表)都必須是正確的。

隔離性
由併發事務所做的修改必須與任何其它併發事務所做的修改隔離。事務查看數據時數據所處的狀態,要麼是另外一併發事務修改它以前的狀態,
       要麼是另外一事務修改它以後的狀態,事務不會查看中間狀態的數據。這稱爲可串行性,由於它可以從新裝載起始數據,
       而且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。
持久性
事務完成以後,它對於系統的影響是永久性的。該修改即便出現系統故障也將一直保持。

 

begin 開始一個事務

rollback事務回滾

commit事務確認

注:rollbackcommit不能並列使用,當同時使用時,只有前面一個生效

 

MYSQL默認是自動提交的

能夠經過set autocommit=0 來設置 禁止自動提交

能夠經過set autocommit=1 來設置 開啓自動提交

 

4、PHP打印 日期

 

<?php
echo date('Y-m-d H:i:s', strtotime('-1day')); //前一天
echo '<br>';
echo date('Y-m-d H:i:s', strtotime('-1week'));//前一週
echo '<br>';
echo date('Y-m-d H:i:s');//如今時間
echo '<br>';
echo date('Y-m-d H:i:s', strtotime('next Monday'));//下一個星期一
echo '<br>';
echo date('Y-m-d H:i:s', strtotime('last Monday'));//上一個星期一

echo 「如今的時間是:」 .date(h:i:sa);  //a - 小寫的午和午後(am pm

?>

/*  時間差  */

<?php
$startdate = strtotime("2012-01-01");
$enddate = strtotime("2012-02-14");
$days = round(($enddate-$startdate) / 86400)+1;
echo $days;
?>

5、可以使HtmlPHP分離開的模板

 

smarty phptal templatePHPlib Template FastTemplate

 

Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate

 

6、$a='abcdef';請取出$a的值並打印出一個字

echo $a[0];   echo $a{0};   echo chr(ord($a));

 

7、echo(),print(),print_r()的區別

echo
能夠一次輸出多個值,多個值之間用逗號分隔。echo是語言結構(language construct),而並非真正的函數,所以不能做爲表達式的一部分使用。

print()
函數print()打印一個值(它的參數),若是字符串成功顯示則返回true,不然返回false

printf()
printf()源於C語言中的printf()。該函數輸出格式化的字符串。

print_r()var_dump()
print_r()能夠把字符串和數字簡單地打印出來,而數組則以括起來的鍵和值得列表形式顯示,並以Array開頭

 

8、PHP能夠和sql server/oracle等數據庫鏈接嗎

Oracle

<?php
$dbconn=oci_connect("你的帳號","你的密碼","你的數據庫名稱");//請把中文件設置爲你的值;
$stmt=oci_parse($dbconn, "select * from scott.hallo");
oci_execute($stmt, OCI_DEFAULT);
echo $conn."----selecting\n\n";
while (oci_fetch($stmt))
{
echo ($conn."[".oci_result($stmt, "TEST")."]\n\n");
}
echo ($conn . "----done\n\n");
?>

 

 

 

9、php5權限控制修飾符

public(公共), private(私用), protected(繼承)

 

 

10、寫一個函數,儘量高效的,從一個標準 url 裏取出文件的擴展名

 

例如: http://www.sina.com.cn/abc/de/fg.

public string GetExtended(string url)
{
    return url.Substring(url.LastIndexOf('.'));
}

 

例如http://www.sina.com.cn/abc/de/fg.php?id=1 須要取出 php  .php

function getExt($url){
   $arr = parse_url($url);
  
   $file = basename($arr['path']);
   $ext = explode(".",$file);
   return $ext[1];
}

11、php5的構造函數和析構函數是?

構造函數__construct()  在類實例化對象的同時執行該函數;析構函數:distruct() 在類實例化的對象銷燬時執行。

 

12、寫一個函數,算出兩個文件的相對路徑
  如 $a = '/a/b/c/d/e.php';
  $b = '/a/b/12/34/c.php';
  計算出 $b 相對於 $a 的相對路徑應該是 ../../c/d()添上

function getRelativePath($a, $b) {  
    $returnPath = array(dirname($b));  
    $arrA = explode('/', $a);  
    $arrB = explode('/', $returnPath[0]);  
    for ($n = 1, $len = count($arrB); $n < $len; $n++) {  
        if ($arrA[$n] != $arrB[$n]) {  
            break;  
        }   
    }  
    if ($len - $n > 0) {  
        $returnPath = array_merge($returnPath, array_fill(1, $len - $n, '..'));  
    }  
      
    $returnPath = array_merge($returnPath, array_slice($arrA, $n));  
    return implode('/', $returnPath);  
   }  

 

遍歷文件夾及文件

function show($dirs){

$dir = opendir($dirs);

echo "<ul>";

while($f=readdir($dir)){

if($f!='.' && $f!='..'){

echo "<li>{$f}</li>";

if(is_dir("$dirs/{$f}")){

show("$dirs/{$f}");

}

}

}

echo "</ul>";

}

getFiles("C:\web\HTML5Upload");

//getFiles($_SERVER['DOCUMENT_ROOT']);

 

 

十3、如何 實現網站靜態化

 

方法一:使用現成的插件,好比:ISAPI_RewriteIIS RewriteApache
HTTP服務器的mod_rewrite等,它們都是基於正則表達式解析器開發的重寫引擎。它們的使用方法查看它們自帶的幫助便可。

方法二:本身寫的代碼實現動態網頁靜態化,方法也有好幾種:

1、建立FSO對象,利用此對象將所需的內容動態建立到文件中生成HTML頁面;
2、利用模板技術,將模板中特殊代碼的值替換爲從表單或是數據庫字段中接受過來的值 生成HTML文件;
3、使用Server.Transfer轉換技術,


方法三:使用HttpWebRequest請求客戶端的方式,獲取返回資源,生成靜態頁面。通常這樣只須要獲取網頁內容便可,其它資源可放置在服務器上,自動加載。(注:此方法缺點明顯,須要大量更改匹配URL,建議慎用)

方法四:在asp中有IhttpModule接口。Ihttpmodule能夠簡單理解爲一個能夠在執行像.aspx,或者mvccontrol/action前,添加咱們自定義的操做的東西。

 

十4、大流量的網站如何解決訪問量的問題

 

分類:服務器負載

確認服務器硬件是否足夠支持當前的流量。

優化數據庫訪問。

禁止外部的盜鏈

控制大文件的下載

使用不一樣主機分流主要流量

使用流量分析統計軟件。

 

十5、PHP獲取客戶端和服務器IP

客戶端 $_SERVER[REMOTE_ADDR]
服務器 $_SERVER[SERVER_ADDR]

 

十6、includerequire 的區別

includerequire 都能把另一個文件包含到當前文件中

include引入文件的時候,若是碰到錯誤,會給出提示,並繼續運行下邊的代碼。

require引入文件的時候,若是碰到錯誤,會給出提示,並中止運行下邊的代碼。

 

十7、如何修改session的生存時間

一:在php.ini 中設置 session.gc_maxlifetime = 1440 //默認時間

二:代碼實現
$lifeTime = 24 * 3600;  // 保存一天
session_set_cookie_params($lifeTime);
session_start();

 

十8、php根據URL得到網頁內容

$html = file_get_contents('http://www.baidu.com/');  

 

十9、在HTTP 1.0中,狀態碼401的含義是什麼;若是返回「找不到文件」的提示,用header函數

 

狀態碼401的含義是:未受權(Unauthorized)

若是返回找不到文件的提示 用:Header("http/1.0 403 Forbidden");

(一)、1字開頭:這一類型 的狀態碼,表明請求已被接受,須要繼續處理。這類響應是臨時響應,史包含狀態行和某些可選 的響應頭信息,並以空行結束。-

100 發出請求

101 切換協議

(二)、2字開頭的狀態碼,請求已 成功被 器 接收、理解

200 交易成功

201 已 建立

202 已 接受

203 非權威性信息

204 無內存

205 重置內容

206 部份內容

207 多狀態

(三)、3字開頭:須要客戶端採起進一步的操做才能完成請求。一般,這些狀態碼用來重定向,後續的請求地址在本次響應的location域中指明

301 永久移除

302 臨時移除

(四)、4字開頭:

1、語義有誤,當前請求沒法被服務器理解。除非進行修改,不然客戶端不該該重複提交這個請求

2、請求參數有誤

 

400 錯誤請求

401訪問被拒絕

402 【爲未來可能的需求而預留的】

403禁止訪問

404 沒有發現文件

(五)、表明了服務器在處理請求的過程當中有錯誤或者異常狀態發生,也有多是服務器意識到以的軟硬件資源沒法完成對請求的處理,除非這是一個HEAD請求,澡是服務器應當包含一個解釋當前錯誤狀態以及這個善是臨時的仍是永久的解釋 信息實體。瀏覽器應當向用戶展現任何在當前響應中被 包含的實體

500 內部服務器錯誤

501 頁眉值指定了未實現的配置

502 無效響應

503 服務器不可用

504 網關超時

505 服務器不支持

 

二10、談談對MVC的認識

MVCModel-View-Controller),即把一個應用的輸入、處理、輸出流程按照ModelViewController的方式進行分離,這樣一個應用被分紅三個層——模型層、視圖層、控制層。

視圖(View):表明用戶交互界面,MVC設計模式對於視圖的處理是限於視圖上數據的採集和處理,以及用戶的請求,而不包括在視圖上的業務流程的處理。

模型(Model):業務流程/狀態的處理以及業務規則的制定。業務流程的處理過程對其它層來講是黑箱操做,模型接受視圖請求的數據,並返回最終的處理結果。業務模型的設計能夠說是MVC的核心。

控制(Controller):能夠理解爲從用戶接收請求, 將模型與視圖匹配在一塊兒,共同完成用戶的請求,可是它卻不作任何的數據處理。

 

二11、php設計模式

1、單例模式 2、工廠模式 3、觀察者模式 4、命令鏈模式 5、策略模式

 

一、 單例模式

a) 一個類在整個應用中,只有一個對象實例的設計模式

b) 類必須自行建立這個實例

c) 必須自行向整個系統提供這個實例

 

三私:私有靜態成員變量、構造函數、克隆函數

一公:公共的靜態方法

 

2工廠模式

能夠根據輸入的參數或者應用程序配置的不一樣一建立一種專門用來實例化並返回其它類的實例的類

3、觀察者模式

觀察者模式提供了組件之間緊密耦合的另外一種方法。

該模式:一個對象經過添加一個方法(該方法容許另外一個對象,即觀察者註冊本身)全自己變得可觀察。當可觀察的對象更改時,它會將消息發送到已註冊的觀察者。這些觀察者使用該信息執行的操做與可觀察的對象無關。

 

二12、HTTP & HTTPS

 

http ()超文本傳輸協議

https (Secure Hypertext Transfer Protocol)安全超文本傳輸協議

一、 效率更高

二、 使用端口80來和TCP/IP進行通訊, 信息明文傳輸

 

一、 安全性更高

二、 端口443,使用SSL做爲HTTP應用層的子層(SSL使用40位關鍵字做爲RC4流的加密算法

SSL:安全保密協議,運行在TCP/IP層之上、應用層之下

三、 使用https須要到CA申請一個用於證實服務器用途類型的證書

 

 

一、 http的URL以http://開頭,而https的URL以https://開頭

二、 http是不安全的,而https是安全的

三、 http標準端口80,面https的標準商品443

四、 在OSI網絡模型中,http工做於應用層,https工做在傳輸層

五、 http沒法加密,而https對傳輸的數據進行加密

六、 http無需證書,而https須要CA機構wosign頒發的SSL證書

 

二十3、MySql字符類型

 

 

二十4、《索引》

(1) 普通索引:惟一的任務就是加快訪問速度

(2) 惟一索引:普通索引容許被索引的數據列包含重複的值。惟一索引的目的是爲了不重複的數據。優勢1、簡化MySQL對這個索引的管理工做,使工做更有效率。2MySQL會對新插入的數據自動檢測是否有重複的值。 大多時候建立惟一索引的目的每每是爲了不重複的數據,而不是提升訪問速度。

(3) 主索引  :即主鍵索引,關鍵字PRIMARY

(4) 外鍵索引:外鍵約束

(5) 複合索引:索引能夠覆蓋多列數據。如 INDEXcolumnA,columnB)。這種索引的特色是MySQL能夠有選擇的使用這樣的一個索引,好比:INDEXA,B,C)能夠當作A或(AB )的索引來使用,但不能當作B或(BC)來使用。

(6) 索引的長度:在爲CHARVARCHAR類型的數據列定義索引時,能夠把索引的長度限制爲一個給定的字符個數,這個數字必須小於這個字段所容許的最大字符個數。

(7) 全文索引:針對內容開頭的字符進行檢索操做,若是檢索的內容是多個字段構成、數據量較大,全文索引是必要的。註解:InnoDB數據表不支持全文索引。

 

 

二十5、索引的優缺點

1、優勢:

a)能夠保證數據庫表中每一行的數據的惟一性

b)能夠大大加快數據的索引速度

c)加速表與表之間的鏈接,物別是在實現數據的參考完事性方面特別有意義

d)在使用分組和排序子句進行數據檢索時,一樣能夠顯著減小查詢中分組和排序的時間

f)經過使用索引,能夠在時間查詢的過程當中,使用優化隱藏器,提升系統的性能

2、缺點:

a) 建立索引和維護索引要耗費時間,這種時間隨着數據量的增長而增長

b) 索引須要佔物理空間,除了數據表佔用數據空間以外,每個索引還要佔用必定的物理空間,若是須要創建聚簇索引,那麼須要佔用的空間會更大

c) 以表中的數據進行增、刪、改的時候,索引也要動態的維護,這就下降了整數的維護速度

四、 創建索引的原則

a) 在常常須要搜索的列上,能夠加快搜索的速度

b) 在做爲主鍵的列上,強制該列的惟一性和組織表中數據的排列結構

c) 在常常用在鏈接的列上,這些列主要是一外鍵,能夠加快鏈接的速度

d) 在經常常須要根據範圍進行搜索的列上建立索引,國爲索引已經排序,其指定的範圍是連續的

e) 在常常須要排序的列上,國爲索引已經排序,這樣井底能夠利用索引的排序,加快排序井底時間

f) 在常用在where子句中的列上,加快條件的判斷速度

 

 

二十6、Myisam Innodb優缺點

 

 

MyISAM

InnoDB

構成上的區別:

 每一個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。
  .frm文件存儲表定義。

數據文件的擴展名爲 .MYD(MYData)

索引文件的擴展名是 .MYI(MYIndex)

基於磁盤的資源是InnoDB表空間數據文件和它的日誌文件,InnoDB 表的大小隻受限於操做系統文件的大小,通常爲 2GB

事務處理上方面:

 MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,可是不提供事務支持

 InnoDB提供事務支持事務,

外部鍵等高級數據庫功能

SELECT   UPDATE,INSERTDelete操做

MyISAM表格能夠被壓縮,

並且它們支持全文搜索

 不支持熱備,不支持事務

 

執行大量的SELECTMyISAM是更好的選擇

1.若是你的數據執行大量的INSERTUPDATE,出於性能方面的考慮,應該使用InnoDB
 2. DELETE  FROM table時,InnoDB不會從新創建表,而是一行一行的刪除。

  3. LOAD TABLE FROM MASTER操做對InnoDB是不起做用的,解決方法是首先把InnoDB表改爲MyISAM表,導入數據後再改爲InnoDB表,可是對於使用的額外的InnoDB特性(例如外鍵)的表不適用

AUTO_INCREMENT的操做

每表一個AUTO_INCREMEN列的內部處理。
  MyISAMINSERTUPDATE操做自動更新這一列。這使得AUTO_INCREMENT列更快(至少10%)。在序列頂的值被刪除以後就不能再利用。(AUTO_INCREMENT列被定義爲多列索引的最後一列,能夠出現重使用從序列頂部刪除的值的狀況)。
  AUTO_INCREMENT值可用ALTER TABLEmyisamch來重置
  對於AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,可是在MyISAM表中,能夠和其餘字段一塊兒創建聯合索引
  更好和更快的auto_increment處理

若是你爲一個表指定AUTO_INCREMENT列,在數據詞典裏的InnoDB表句柄包含一個名爲自動增加計數器的計數器,它被用在爲該列賦新值。

  自動增加計數器僅被存儲在主內存中,而不是存在磁盤上

  關於該計算器的算法實現,請參考

  AUTO_INCREMENT列在InnoDB裏如何工做

表的具體行數

 select count(*) from table,MyISAM只要簡單的讀出保存好的行數,注意的是,當count(*)語句包含   where條件時,兩種表的操做是同樣的

InnoDB 中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行

InnoDB不支持full text類型的索引。

 

 

表鎖

提供行鎖(locking on row level),提供與 Oracle 類型一致的不加鎖讀取(non-locking read in
   SELECTs),另外,InnoDB表的行鎖也不是絕對的,若是在執行一個SQL語句時MySQL不能肯定要掃描的範圍,InnoDB表一樣會鎖全表,例如update table set num=1 where name like 「%aaa%」

存儲

MyISAM 中,表被存放在單獨的文件中

InnoDB 是一套放在 MySQL 後臺的完整數據庫系統,InnoDB 有它本身的緩衝池,能緩衝數據和索引,InnoDB 還把數據和索引存放在表空間裏面,可能包含好幾個文件,這和 MyISAM 表徹底不一樣,InnoDB 表的大小隻受限於操做系統文件的大小

備份

擴展

MyISAM不支持熱備

MyIASMIASM表的新版本,有以下擴展: 

1) 二進制層次的可移植性。

2)  NULL列索引

3) 對變長行比ISAM表有更少的碎片

4) 支持大文件

5) 更好的索引壓縮

6) 更好的鍵嗎統計分

7) 更好和更快的auto_increment處理

InnoDB支持熱備,可是須要專門的工具

 

 

二十7、Mysql備份

(一)備份的目的

a)作災難恢復:對損壞的數據進行恢復和還原

b)需求改變:  因需求改變而須要把數據還原到改變之前

c)測試:   測試新功能是否可用

(二) 備份須要考慮的問題

a)能夠容忍多長時間的數據

b)恢復數據要在多長時間內完成

c)恢復的時候是否須要持續提供服務

d)恢復的對像,是整個庫,多個表,仍是單個庫,單個表

 

(三)備份的類型

1、根據是否須要數據庫離線

a) 冷備(cold backup):須要關mysql服務,讀寫請求均不容許狀態下進行

b) 溫備(warm backup):服務在線,但只支持讀請求,不容許寫請求

c) 熱備(hot backup):備份的同時,業務不受影響

 

注:

1) 這種類型的數據取決於業務的需求,而不是備份工具

2) MyISAM不支持熱備,InnoDB支持熱備,可是須要專門的工具

 

2、根據要備份的數據集合的範圍

a)徹底備份:full backup,備份所有字符集

b)增量備份:incremental backup 上次徹底備份或增量備份以來改變了的數據,不能單獨使用,要藉助徹底備份

c)差別備份:differential backup 上次徹底備份以來改變了的數據

 

建議恢復策略:

1) 徹底 + 增量 + 二進制日誌

2) 徹底 + 差別 + 二進制日誌

3、根據備份數據或文件

a)物理備份:直接備份數據文件

優勢:備份和恢復都比較簡單,可以跨myslq的版本,恢復速度快,屬於文件系統級別的

建議:不要假設備份必定可用,要測試

Mysql>check talbes; 檢測表是否可用

b)邏輯備份:備份表中的數據和代碼

優勢:恢復簡單、備份的結果爲ASCII文件,能夠編輯。與存儲引擎無關,能夠經過網絡備份和恢復

缺點:備份或恢復都須要mysql 服務器進程參與,備份結果佔據更多的空間,浮點數可能會丟失精度,還原後,縮影須要重建

 

(四)、備份的對象

1、數據

2、配置文件

3、代碼:存儲過程、存儲函數、觸發器

4os相關的配置文件

5、複製相關的配置

6、二進制日誌

 

(五)、備份和恢復的實現

參閱:http://www.jb51.net/article/41570.htm

 

二十8、Redis五種經常使用數據類型

一、 String

二、 Hash

三、 List

四、 Set

五、 Sort Set

六、 Pub/Sub

七、 transation

 

 

二十9、序列化和反序列化

一、 序列化:serialize()

二、 反序列化:unserialize()

 

三10、PHP 五種覺的設計模式

  • 工廠模式:

一、 是一種類,具備建立對象的某些方法

  • 單元素模式:

二、 資源是獨佔的,有且只有一個此類型的資源。

  • 觀察者模式:

三、 觀察者模式提供了避免組件之間耦合的另外一種方法,該模式很是簡單:一個對象經過添加方法(該方法容許另外一個對象,即觀察者本身)使自己變得可觀察。當可觀察的對象更改時,它會將消息發送到已註冊的觀察者。

  • 命令鏈模式:

四、 以鬆散耦合主題爲基礎,發送消息、命令和請求,或經過一組處理程序發送任意內容。每一個處理程序都會自行判斷本身可否處理請求,若是能夠,該請求被處理,進程中止。

  • 策略模式:

五、 此算法是從複雜類提取的,於是能夠方便地替換。

 

三11、mb_substr

1$str = "中文截取無亂碼";

/*中文截取

mb_substr($str,$start,$lenth,$encoding);

$str :須要截取的字符串

$start :開始截取的位置

$length :要截取的字數

$encoding :字符編碼,utf-8,GB2312,GBK

*/

echo mb_substr($str,2,3,'utf8');

 

/*獲取中文長度

$str :要計算長度的字符串

$encoding :字符編碼,utf-8GB2312GBK

*/

echo mb_strlen($str,'utf-8');

 

此外可參考  http://blog.sina.com.cn/s/blog_8edc37a801016l7r.html

substr($str,int start[,int length]):$strstrat位置開始提取[length長度的字符串]

str_replace(search,replace,$str):$str中查找searchreplace來替換

str_split($str,len):$strlen長度進行分割返回數組

strtolower($str) 字符串轉換爲小寫
strtoupper($str) 字符串轉換爲大寫
ucfirst($str) 將函數的第一個字符轉換爲大寫
ucwords($str) 將每一個單詞的首字母轉換爲大寫

 

2、實現字符串反轉:strrev($str);

3php中將utf8轉換成bgk iconv(「utf8」,」gbk」,$str)

4、截取.

strstr()函數的做用是:返回一個字符串在另外一個字符串中首次出現的位置到後者末尾的子字符串(大小寫敏感)。

 

 

三12、支付寶支付的三種方式

 

1、擔保交易  2、即時到帳  3、擔保交易和即時到帳

 

負載均衡配置:1、權重 2、輪循(或加權輪循) 3hash(分部IP段) 4、隨機

 

 

 

三十3、冒泡排序

 

 

三十4、PHP版本差異

 

PHP5.2 之前:autoload, PDO 和 MySQLi, 類型約束  JSON 支持
PHP5.3:棄用的功能,匿名函數,新增魔術方法,命名空間,後期靜態綁定Heredoc 和 Nowdoc, const, 三元運算符,Phar
PHP5.4:Short Open Tag, 數組簡寫形式,Traits, 內置 Web 服務器,細節修改
PHP5.5:yield, list() 用於 foreach, 細節修改
PHP5.6: 常量加強,可變函數參數,命名空間加強

 

三十5、ApacheNginx的優缺點

 

 

nginx

apache

資源、性能

佔用更少的內存和資源、抗併發

安裝、配置都比較簡單

靜態處理性能比Apache3倍以上

負載均衡能國比apache

rewrite功能強大,相對穩定

處理請求

異步非阻塞

阻塞型

進程

異步

同步多進程模型,一個鏈接對應一個進程

 

 

 

 

三十6、對稱加密 非對稱加密

 

一、 對稱加密與解密使用的是一樣的密鑰,但因爲須要將密鑰在網絡傳輸,因此安全性不高

二、 非對稱加密使用了一對密鑰,公鑰與私鑰,把以安全性高,但加密與解密速度慢

三、 解決的辦法是將對稱加密的密鑰使用非對稱加密的公鑰進行加密,而後發送出去,接收方使用私鑰進行解密獲得對稱加密的密鑰,而後雙方可使用對稱加密來進行溝通

 

)對稱加密(Symmetric Cryptography)

對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是一樣的密鑰(secret key),這種方法在密碼學中叫作對稱加密算法。

 

(二)非對稱加密(Asymmetric Cryptography)

容許在不安全的媒體上的通信雙方交換信息,安全地達成一致的密鑰,這就是「公開密鑰系統」。相對於「對稱加密算法」這種方法也叫作「非對稱加密算法」。

 

 

三十7、數據庫三大範式

 

一、 第一範式指:數據庫表的每一列都是不可分割的基本數據項

二、 第二範式指:要求數據庫表中的每一個實例或行必須能夠被惟一區分

三、 第三範式指:要求一個數據表中不包含已存在的非主關鍵字的信息

 

三十8、ob系列函數

1ob_start() //打開緩衝區,全部輸出的信息不直接發送到瀏覽器,而是保存在緩衝區裏面

2ob_clean() //刪除內部緩衝區的內容,不關閉緩衝區(不輸出)

3ob_end_clean() //刪除內部緩衝區的內容,關閉緩衝區(不輸出)

4ob_get_clean() //返回內部緩衝區的內容,關閉緩衝區。【至關於執行 ob_get_contents() and ob_end_clean()

5ob_flush() //發送內部緩衝區的內容到瀏覽器,刪除緩衝區的內容,不關閉緩衝區。

6ob_end_flush() //發送內部緩衝區的內容到瀏覽器,刪除緩衝區的內容,關閉緩衝區

7ob_get_flush() //返回內部緩衝區的內容,並關閉緩衝區的內容

8ob_get_contents()//返回緩衝區的內容,不輸出

9ob_get_length() //返回內部緩衝區的長度,若是緩衝區未被激活,該函數返回 false

 

三十9、驗證email

/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i

^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$

 

四10、接口安全

 

簽名(隨機數)

其它一些常規的: 對稱加密、非對稱加密(公鑰與私鑰),md5

 

四11、redis  memcache

1.Redis中,並非全部的數據都一直存儲在內存中的,這是和Memcached相比一個最大的區別

memecache 把數據所有存在內存之中,斷電後會掛掉,數據不能超過內存大小

redis有部份存在硬盤上,這樣能保證數據的持久性。

災難恢復--memcache掛掉後,數據不可恢復; redis數據丟失後能夠經過aof恢復

2.Redis不只僅支持簡單的k/v類型的數據,同時還提供listsethash等數據結構的存儲。
3.Redis支持數據的備份,即master-slave模式的數據備份。
4.Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用。

 

四12、php傳值與傳引用的區別:

 

傳值:將實參賦值給形參,形參的改變,不會影響到實參的值。

傳引用:真正以地址的方式傳遞參數,傳遞之後,實參與形參都是同一個對象,只是名字不一樣而已,形參的改變,會影響到實參的值。

 

四十3、Nginx 負載均衡

TCP/IP

1) 鏈路層

2) 網絡層

3) 運輸層:兩臺主機上的應用程序提供 的通訊

4) 應用層:處理特定的應用程序細節

Telnet 運程登陸

FTP 文件傳輸協議

SMTP 簡單的郵件傳送協議

SNMP 簡單網絡管理協議

 

  

 

四十4、Linux基本命令,目錄結構

arch 顯示機器的處理器架構(1) 
uname -m 顯示機器的處理器架構(2) 
uname -r 顯示正在使用的內核版本 
dmidecode -q 顯示硬件系統部件 - (SMBIOS / DMI) 
hdparm -i /dev/hda 羅列一個磁盤的架構特性 
hdparm -tT /dev/sda 在磁盤上執行測試性讀取操做 
cat /proc/cpuinfo 顯示CPU info的信息 
cat /proc/interrupts 顯示中斷 
cat /proc/meminfo 校驗內存使用 
cat /proc/swaps 顯示哪些swap被使用 
cat /proc/version 顯示內核的版本 
cat /proc/net/dev 顯示網絡適配器及統計 
cat /proc/mounts 顯示已加載的文件系統 

date 顯示系統日期 
cal 2007 顯示2007年的日曆表 
date 041217002007.00 設置日期和時間 - 月日時分年. 
clock -w 將時間修改保存到 BIOS 

文件搜索 
find / -name file1 '/' 開始進入根文件系統搜索文件和目錄 

locate \*.ps 尋找以 '.ps' 結尾的文件 - 先運行 'updatedb' 命令 
whereis halt 顯示一個二進制文件、源碼或man的位置 
which halt 顯示一個二進制文件或可執行文件的完整路徑 

 

掛載一個文件系統 
mount /dev/hda2 /mnt/hda2 掛載一個叫作hda2的盤 - 肯定目錄 '/ mnt/hda2' 已經存在 
umount /dev/hda2 卸載一個叫作hda2的盤 - 先從掛載點 '/ mnt/hda2' 退出 


追加命令

1,linux裏把文件/etc/aaa中的內容追加到/usr/bbb中的內容的後面
  sudo cat /etc/aaa >>/usr/bbb
2,更改/etc/index.html的文件全部者爲apache,文件羣組爲apache
  sudo chmod apache:apache  /etc/index.html
3,更改/etc/index.html的全部者權限爲讀取、寫入、執行。羣組權限爲讀取。其餘權限爲讀取
  sudo chmod 744 /etc/index.html
4,刪除/etc下名爲hello的文件
  sudo rm /etc/index.html

固然,若是你是以root用戶執行以上操做,能夠去掉前邊的sudo

 

df -hl 查看磁盤剩餘空間

df -h 查看每一個根路徑的分區大小

du -sh [目錄名返回該目錄的大小

du -sm [文件夾返回該文件夾總M

關機 (系統的關機、重啓以及登出 ) 
shutdown -h now 關閉系統(1) 
init 0 關閉系統(2) 
telinit 0 關閉系統(3) 
shutdown -h hours:minutes & 按預約時間關閉系統 
shutdown -c 取消按預約時間關閉系統 
shutdown -r now 重啓(1) 
reboot 重啓(2) 
logout 註銷

文件和目錄 
pwd 顯示工做路徑 
ls 查看目錄中的文件 
ls -F 查看目錄中的文件 
ls -l 顯示文件和目錄的詳細資料 
ls -a 顯示隱藏文件 
ls *[0-9]* 顯示包含數字的文件名和目錄名 
tree 顯示文件和目錄由根目錄開始的樹形結構(1) 
lstree 顯示文件和目錄由根目錄開始的樹形結構(2) 
mkdir dir1 建立一個叫作 'dir1' 的目錄' 

磁盤空間 
df -h 顯示已經掛載的分區列表 
ls -lSr |more 以尺寸大小排列文件和目錄 
du -sh dir1 估算目錄 'dir1' 已經使用的磁盤空間' 

下載、解壓

1)對於.tar結尾的文件 
  tar -xf all.tar 

2)對於.gz結尾的文件 
  gzip -d all.gz 
  gunzip all.gz 

# zip all.zip *.jpg 
  這條命令是將全部.jpg的文件壓縮成一個zip 
# unzip all.zip 
  這條命令是將all.zip中的全部文件解壓出來

下載命令

wget + 空格 + 下載文件的url路徑

=====================================

Shell 腳本:

必須以  #!/bin/sh  開頭

簡單例子:判斷這個目錄下有沒有文件(File

#!/bin/bash
Num=`ls -al /opt |grep "^-"|wc -l `
if [ $Num != 0 ]
 then echo "/opt has $Num files"
else
 echo "/opt has none file"
fi

ls -al /opt |grep "^-"|wc -l  這個命令可以統計文件個數 爲0就是沒有文件 非零就是有文件

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

1、桌面共享:使用 Trim view

2、不清楚的東西先不要反問(反問要看準時機)

3、不以技術 論 技術

4、以自己的優點平衡不足

5、掛羊頭賣狗肉(若是問到想法)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

四十5、

一、 TCP/IPYII/TP 執行原理

TCP (傳輸控制協議) - 應用程序之間通訊

IP (網際協議) -計算機之間的通訊

 

YII可參考(MVC)  http://blog.csdn.net/wzllai/article/details/7658802

 

二、負載均衡和http(幾層協議配置)【lvs四層,nginx七層,web通常四臺

 

三、數據怎麼優化

索引優化

一、 索引優化原則

數據類型越小越好,越簡單越好,避免空值

二、 索引順序:最左原則

例如:index(a,b) where 中有 a ab 時索引會被使用,只有 b 時不會被使用。(不一樣的數據庫或不一樣的版本可能會有不一樣)

三、 彙集索引、B+樹、主鍵

一個表只能有一個彙集索引,彙集索引以B+樹形式存儲,因此,彙集索引的規則決定了索引存放的物理順序(彙集索引對須要最快速縮小查詢訪問及最快速進行字段排序時,很是有用),須要特別注意

查詢優化

一、 儘可能避免表掃描,首先應考慮在  where order by 涉及的列上創建索引

二、 儘可能避免在 where 子句中對字段進行 null 值判斷,不然將致使引擎放棄使用索引而進行全表掃描

select id from t where num is null
能夠在num上設置默認值0,確保表中num列沒有null值,而後這樣查詢:
select id from t where num=0

3、儘可能避免在 where 子句中使用 != <> or 操做符,不然將放棄引擎而進行全表掃描

 

四、頁面空值,輸出php,404,是什麼緣由,解決辦法是什麼

空值:錯誤被屏蔽、可查看log日誌

404 :rewrite規則

輸出php:apache未開啓

開啓apache的錯誤級別

error_reporting(0)//禁用錯誤報告;

error_reporting(E_ALL)//報告全部錯誤;

error_reporting(E_ERROR | E_WARNING | E_PARSE);//報告運行時錯誤;

error_reporting(2047):
E_ALL能從不良編碼實踐到無害提示到出錯的全部信息.E_ALL 對於開發過程來講有點太細,由於它在屏幕上爲一些小事(例如變量未初始化)也顯示提示,會搞糟瀏覽器的輸出
因此不建議使用2047,最好把默認值改成:error_reporting = E_ALL & E_NOTICE

 

 

五、單點登陸原理、路由規則

 

六、memcache緩存什麼數據

1、常常被讀取而且實時性要求不強能夠等到自動過時的數據。例如網站首頁最新文章列表、某某排行等數據。

2、常常被讀取而且實時性要求強的數據。好比用戶的好友列表,用戶文章列表,用戶閱讀記錄等。

3、統計類緩存,好比文章瀏覽數、網站PV

4、活躍用戶的基本信息或者某篇熱門文章。

5、session數據

 

四十6、PHP 全局變量 - 超全局變量

$GLOBALS

$_SERVER

$_REQUEST

$_POST

$_GET

$_FILES

$_ENV

$_COOKIE

$_SESSION

 

四十7、數組相關

 

1、向數組中插入一個值用什麼函數

若是用 array_push() 來給數組增長一個單元,還不如用 $array[] = ,由於這樣沒有調用函數的額外負擔

若是第一個參數不是數組,array_push() 將發出一條警告。這和 $var[] 的行爲不一樣,後者會新建一個數組

例如:

<?php
$stack = array("orange", "banana");
array_push($stack, "apple", "raspberry");
print_r($stack);

?>
結果:Array( [0] => orange  [1] => banana  [2] => apple  [3] => raspberry )

array_pop() - 將數組最後一個單元彈出(出棧)

array_shift() - 將數組開頭的單元移出數組

array_unshift() - 在數組開頭插入一個或多個單元

字符串分割爲數組explode(在哪裏分割字符串要分割的字符串返回的數組元素的最大數目《可選》)

l array_merge_recursive()函數與array_merge()相同

  • array_merge()會覆蓋前面存在的鍵/值對
  • array_merge_recursive()將把兩個值合併在一塊兒

l array_combine()函數會獲得一個新數組,它由一組提交的鍵和對應的值組成

兩個輸入數組必須大小相同,不能爲空

l array_slice()  拆分數組

n offset 爲正值時,拆分將從距數組開頭的offset 位置開始;

若是offset 爲負值,則拆分從距數組末尾的offset 位置開始。

若是省略了可選參數length,則拆分將從offset 開始,一直到數組的最後一個元素

果給出了length 且爲正數,則會在距數組開頭的offset+length 位置結束

負數相反

l array_splice()函數會刪除數組中從offset開始到offset+length 結束的全部元素

l array_intersect()函數返回一個保留了鍵的數組,這個數組只由第一個數組中出現的且在其餘每一個輸入數組中都出現的值組成(取交集)

l array_intersect_assoc()array_intersect()基本相同,只不過他在比較中還考慮了數組的鍵

l array_diff()返回出如今第一個數組中但其餘輸入數組中沒有的值。這個功能與array_intersect()相反(差集)

l array_diff_assoc()array_diff()基本相同,只是它在比較時還考慮了數組的鍵

l array_key_exists()查找指定的鍵值,成功返回 true 失敗 返回 false

l shuffle() 函數

<?php

$my_array = array("red","green","blue","yellow","purple");

shuffle($my_array);

print_r($my_array);

?>

Array ( [0] => purple [1] => yellow [2] => red [3] => green [4] => blue )

 

二、 將一個數組打散

str_split(string $string,[, int $split_length = 1 ])該函數將一個字符串轉化爲一個數組 ,第一個參數爲須要轉換的字符串,第二個可選參數爲數組每一個元素的長度,缺省值爲1  以下例

<?php
$str = "Hello Friend";
$arr1 = str_split($str);
$arr2 = str_split($str, 3);
print_r($arr1);
print_r($arr2);
?>

Array  ( [0] => H  [1] => e  [2] => l  [3] => l   [4] => o   [5] =>  [6] => F   [7] => r  [8] => I 

 [9] => e   [10]=> n  [11] => d )

Array  (  [0] => Hel  [1] => lo  [2] => Fri  [3] => end )


3一個sql中有兩個索引字段,運行時會先執行哪一個。如何查看索引?

 

顯示一個表全部索引的SQL語句是:
show index from 數據庫名.表名

看某表某一列上的索引使用下面的SQL語句
show index from 數據庫名.表名 where column_name like '列名'


敏感詞過濾:若是有一個六千字的詞庫,怎麼去匹配一個 100字的短語,並把其中的敏感詞替換成xx

 

Mysql主從配置用的是內網仍是公網

 

存儲、堆存儲,REST接口

 

四十8、Mysql 天天 1億條數據的增量如何優化、分頁。 主從同步原理,不一樣步的解決方案?

 

四十9、魔術方法

1__construct()
實例化對象時被調用,當__construct和以類名爲函數名的函數同時存在時,__construct將被調用,另外一個不被調用。

2__destruct()

當刪除一個對象或對象操做終止時被調用。

3__call()
對象調用某個方法,若方法存在,則直接調用;若不存在,則會去調用__call函數。

4__get()
讀取一個對象的屬性時,若屬性存在,則直接返回屬性值;若不存在,則會調用__get函數。

5__set()
設置一個對象的屬性時,若屬性存在,則直接賦值;若不存在,則會調用__set函數。

6__toString()

打印一個對象的時被調用。如echo $obj;print $obj;

7__clone()

克隆對象時被調用。如:$t=new Test();$t1=clone $t;

8__sleep()

serialize以前被調用。若對象比較大,想刪減一點東東再序列化,可考慮一下此函數。

9__wakeup()

unserialize時被調用,作些對象的初始化工做。

10__isset()
檢測一個對象的屬性是否存在時被調用。如:isset($c->name)

11__unset()
unset一個對象的屬性時被調用。如:unset($c->name)

12__set_state()
調用var_export時,被調用。用__set_state的返回值作爲var_export的返回值。

13__autoload()
實例化一個對象時,若是對應的類不存在,則該方法被調用。

魔術常量:

1__LINE__
返回文件中的當前行號。

2__FILE__
返回文件的完整路徑和文件名。若是用在包含文件中,則返回包含文件名。自 PHP 4.0.2 起,__FILE__ 老是包含一個絕對路徑,而在此以前的版本有時會包含一個相對路徑。

3__FUNCTION__
返回函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值老是小寫字母的。

4__CLASS__
返回類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在 PHP 4 中該值老是小寫字母的。

5__METHOD__
返回類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。

 

五10、JQuery

$.ajax({

   type: "POST",

   url: "some.php",

   data: "name=John&location=Boston",

   success: function(msg){

     alert( "Data Saved: " + msg );

   }

});

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息