我不清楚的,亟待學習的

 

memcached的分佈式應用

 

html、dhtml、xhtml的區別

 

xml怎樣轉化爲html格式

 

面向對象深入、再深入

 

index爲什麼能加快檢索速度

 

1、apache的工作原理

 

網絡服務器由於要同時爲多個客戶提供服務,就必須使用某種方式來支持這種多任務的服務方式。一般情況下可以有三種方式來選擇,多進程方式、多線程方式及異步方式。

 

apache2可以是多進程與多線程混合的工作方式。影響它性能的核心模塊主要是MPM(Multi-ProcessingModules,多道處理模塊)。

 

可以選擇prefork和worker模式。

其中,prefork是單純的多進程工作方式,當apache啓動時,生成startserver個進程,爲了滿足MinSpareServers設置的需要創建一個進程,等待一秒鐘,繼續創建兩個,再等待一秒鐘,繼續創建四個……如此按指數級增加創建的進程數,最多達到每秒32個,直到滿足MinSpareServers設置的值爲止。每個進程處理多個請求後退出,維持最小空閒進程數,當服務器處理的請求比較複雜、要求高穩定性的時候,可以選擇該工作模式,因爲多個進程之間不干擾。

而worker是多進程與多線程混合的方式。系統啓動時,生成startserver個進程,每個進程又包含Threadsperchild個線程,每個線程獨立的處理請求。這樣能夠增大系統的併發負載量。

以上參考:http://blog.tianya.cn/blogger/post_show.asp?BlogID=40003&PostID=4585547

 

 

[Figure 3: The Data Axis]

 

一個請求到來的,依次經過metadata模塊、內容生成模塊、logging模塊,而content generator 模塊又會通過pipelined的方式調用input filters和output filters進行處理,這些filters比如:Server side includes (SSI), XML and XSLT processing, gzip compression, and Encryption (SSL)。

 

內容生成模塊通過addhandler或sethandler,在httpd.conf中指定。

 

metadata 模塊比如:

  • The request URL will be matched against the configuration to determine what content generator should be used.
  • The request URL will be normally mapped to the filesystem. The mapping may be to a static file, a CGI script, or whatever else the content generator may use.
  • If content negotiation is enabled, mod_negotiation will find the version of the resource that best matches the browser's preference. For example, the Apache manual pages are served in the language requested by the browser.
  • Access and Authentication modules will enforce the servers access rules, and determine whether the user is permitted what has been requested.
  • mod_alias or mod_rewrite may change the effective URL in the request.

 

以上參考:http://www.apachetutor.org/dev/request

 

 

2、apache的編譯方式:DSO與靜態編譯

 

DSO(Dynamic Shared Objects,動態共享目標),它提供了在運行時加載模塊的方式。

 

apache分4層,從上到下依次爲:第三方庫、可選的附加功能模塊(如mod_rewrite)、基本功能庫(http_core、mod_so等)、os相關的庫。其中,第三層和第四層都可以靈活選擇。於是就有了DSO和靜態編譯的方式。

 

前者,在apache啓動時,加載動態庫,可以通過配置文件來選擇需要哪些模塊,但是啓動速度會受到影響。後者,在編譯時,將動態庫編譯進apache。

 

 

3、HTTP/1.1 爲什麼能提高性能?

 

在HTTP/1.0中,每次請求得到響應之後,都會斷開瀏覽器與服務器端的連接。這樣,如果一個頁面有多個請求,就會有多個連接。而1.1中,引入了持久連接,因爲TCP允許來自IP層的多個請求打包爲一個發送,並把響應也打包發送,這樣就減少了連接數目。同時,由於連接請求少了,也減少了爲了建立請求而發送的數據包,減少了網絡負載。

 

 

4、PHP引擎的工作原理

 

首先,分析php代碼的執行順序:

    1.         Scanning(Lexing) , PHP 代碼轉換爲語言片段 (Tokens)

2.         Parsing, Tokens 轉換成簡單而有意義的表達式

3.         Compilation, 將表達式編譯成 Opocdes

4.         Execution, 順次執行 Opcodes ,每次一條,從而實現 PHP 腳本的功能。

附記 : 現在有的 Cache 比如 APC, 可以使得 PHP 緩存住 Opcodes ,這樣,每次有請求來臨的時候,就不需要重複執行前面 3 步,從而能大幅的提高 PHP 的執行速度。

以上參考: http://www.laruence.com/2008/06/18/221.html

 

即 php代碼 -> token -> opcodes ,緩存php代碼效果較好的方式,應該是緩存opcodes。

 

提高php性能的方法:

1、使用優化引擎,去除不必要的代碼

2、使用緩衝技術,緩存opcodes

3、對輸出內容進行壓縮

以上參考:http://developer.51cto.com/art/200904/120151.htm

 

 


 

 

PHP總共有三個模塊:內核、Zend引擎、以及擴展層; PHP內核用來處理請求、文件流、錯誤處理等相關操作; Zend引擎(ZE)用以將源文件轉換成機器語言,然後在虛擬機上運行它;擴展層是一組函數、類庫和流,PHP使用它們來執行一些特定的操作。比如,我們 需要mysql擴展來連接MySQL數據庫;當ZE執行程序時可能會需要連接若干擴展,這時ZE將控制權交給擴展,等處理完特定任務後再返還;最後,ZE將程序運行結果返回給PHP內核,它再將結果傳送給SAPI層,最終輸出到瀏覽器上。

MINIT的意思是“模塊初始化”,RINIT方法,即“請求初始化”。它們分別對應PHP全局變量、函數等的兩種生命週期:一個apache進程(線程)內都有效,以及僅在一次請求內有效。它們對應的有MSHUTDOWN和RSHUTDOWN。

  1. We never start any PHP daemon or anything by ourself. When we start Apache, it starts the PHP interpreter along itself
  2. PHP is linked to Apache (In general term SAPI i.e. a Server API) using mod_php5.so module
  3. PHP as a whole consists of 3 modules (Core PHP, Zend Engine and Extension Layer)
  4. Core PHP is the module which handles the requests, file streams, error handling and other such operations
  5. Zend Engine(ZE) is the one which converts human readable code into machine understandable tokens/op-codes. Then it executes this generate code into a Virtual Machine.
  6. Extensions are a bunch of functions, classes, streams made available to the PHP scripts, which can be used to perform certain tasks. For example, we need mysql extension to connect to MySQL database using PHP.
  7. While Zend Engine executes the generated code, the script might require access to a few extensions. Then ZE passes the control to the extension module/layer which transfer back the control to ZE after completion of tasks.
  8. Finally Zend Engine returns back the result to PHP Core, which gives that to SAPI layer, and finally which displays it on your browser.

 

以上參考:http://abhinavsingh.com/blog/2008/11/how-does-php-echos-a-hello-world-behind-the-scene/

 

5、緩存

 

緩存分爲服務器和客戶端緩存。服務器端緩存可以利用memcached緩存數據,php加速器緩存編譯好的opcodes,還有類似varnish的http緩存服務器。而客戶端緩存主要是根據http協議,減少客戶端對服務器端的重複請求。

 

客戶端緩存方式:

a、expires/cache-control: 給靜態資源(HTML文件,圖片文件等)的Repsone加上Expires/Cache-Control Header,這樣下次瀏覽器需要這個資源的時候,就會檢查本地緩存的文件是否過期,如果不過期就不請求了

b、 HTTP的Response中還會有另外一個Header叫Last-Modified 瀏覽器訪問一個URI得 到這樣的Resposne之後,就知道這個資源最後一次的修改時間,下次需要再次獲得這個資源的時候,會發一個Request給Server,不過這個 Request中有一條“If-Unmodified-Since: Thu, 06 Apr 2006 21:17:12 GMT”,如果在Server端在這個日期之後對這個資源進行了修改,就會照常返回這個資源給Client端,但是如果沒有修改,就會返回一個304 (Not Modified) Response而不返回資源,告訴Client端:“這個資源從上次給你之來從來沒改過,你放心用你Cache中的好了。” 一個304 Response比一個靜態資源通常小多了,這樣就節省了網絡帶寬

 

當用戶在IE或者 Firefox裏面按F5或者點擊Refresh按鈕的時候(不是在URL欄裏重新輸入一遍URL然後回車),就算對於有Expires的URI,一樣也 會發一個HTTP請求出去,所以,Last-Modified還是要用的,而且要和Expires一起用。

 

c、Etags方式:服務器的response中,對資源打一個標記,下次瀏覽器請求的時候,會帶上這個tag,如果服務器端的tag=客戶端的tag,則返回304,客戶端可以直接使用本地緩存。

 

6、join的區別

 

join默認是outer join的。

 

內連接           只連接匹配的行
左外連接        包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行
右外連接        包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行
全外連接        包含左、右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行。

 

7、數據庫索引(index)

 

在數據庫中,索引的含義與日常意義上的“索引”一詞並無多大區別(想想小時候查字典),它是用於提高數據庫表數據訪問速度的數據庫對象。
A )索引可以避免全表掃描。多數查詢可以僅掃描少量索引頁及數據頁,而不是遍歷所有數據頁。
B 對於非聚集索引,有些查詢甚至可以不訪問數據頁。
C 聚集索引可以避免數據插入操作集中於表的最後一個數據頁。
D 一些情況下,索引還可用於避免排序操作。

 

當然,衆所周知,雖然索引可以提高查詢速度,但是它們也會導致數據庫系統更新數據的性能下降,因爲大部分數據更新需要同時更新索引。

 

以上參考:http://www.cnblogs.com/KissKnife/archive/2009/03/30/1425534.html

 

B-tree是爲磁盤或者其他直接存取輔助存儲設備而設計的一種平衡查找樹,能降低磁盤I/O操作次數。它可以有許多個兒女,即分支因子可能較大,含n個節點的B-tree的高度是O(lgn)。

 

8、表單提交:get和post方式的區別

 

get方式:參數和值存儲在http頭裏;可以被cache;可以被記錄在log裏;某些舊瀏覽器有長度限制

 

post方式:參數和值存在在http數據裏;不可以被cache;不可以被記錄在log裏

 

最安全的方式還是使用https。


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