面試之前多看看公司的資料,可以看出面試的公司主要做什么,電商,數據庫,php函數,sql的優化,接口,session和cookie等經常會問到,都是必問之題,這其中有一部分題目摘抄自網絡,個人感覺回答的也不錯
36.redis如何防止高并發?
????????答:其實redis是不會存在并發問題的,因為他是單進程的,再多的命令都是一個接一個地執行的。我們使用的時候,可能會出現并發問題,比如獲得和設定這一對。Redis的為什么 有高并發問題?Redis的的出身決定?
Redis是一種單線程機制的nosql數據庫,基于key-value,數據可持久化落盤。由于單線程所以redis本身并沒有鎖的概念,多個客戶端連接并不存在競爭關系,但是利用jedis等客戶端對redis進行并發訪問時會出現問題。發生連接超時、數據轉換錯誤、阻塞、客戶端關閉連接等問題,這些問題均是由于客戶端連接混亂造成。
同時,單線程的天性決定,高并發對同一個鍵的操作會排隊處理,如果并發量很大,可能造成后來的請求超時。
在遠程訪問redis的時候,因為網絡等原因造成高并發訪問延遲返回的問題。
解決辦法
在客戶端將連接進行池化,同時對客戶端讀寫Redis操作采用內部鎖synchronized。
服務器角度,利用setnx變向實現鎖機制。
37.秒殺當中的細節你是怎么得出來的?
???????答:通過性能測試及模擬秒殺場景。每個問題都經過反復測試,不斷的發現問題,不斷的解決。
38.做秒殺用什么數據庫,怎么實現的?
????????答:因為秒殺的一瞬間,并發非常大,如果同時請求數據庫,會導致數據庫的壓力非常大,導致數據庫的性能急劇下降,更嚴重的可能會導致數據庫服務器宕機。這時候一般采用內存高速緩存數據庫redis來實現的,redis是非關系型數據庫,redis是單線程的,通過redis的隊列可以完成秒殺過程。
39.支付寶流程怎么實現的?
????????答:首先要有一個支付寶賬號,接下來向支付寶申請在線支付業務,簽署協議。協議生效后有支付寶一方會給網站方一個合作伙伴ID,和安全校驗碼,有了這兩樣東西就可以按照支付寶接口文檔開發支付寶接口了,中間主要涉及到一個安全問題。整個流程是這樣的:我們的網站通過post傳遞相應的參數(如訂單總金額,訂單號)到支付頁面,支付頁面把一系列的參數經過處理,以post的方式提交給支付寶服務器,支付寶服務器進行驗證,并對接收的數據進行處理,把處理后的結果返回給我們網站設置的異步和同步回調地址,通過相應的返回參數,來處理相應的業務邏輯,比如返回的參數代表支付成功,更改訂單狀態。
40.什么是單點登錄?
???????答:單點登錄SSO(Single Sign On)說得簡單點就是在一個多系統共存的環境下,用戶在一處登錄后,就不用在其他系統中登錄,也就是用戶的一次登錄能得到其他所有系統的信任。
41.什么情況下使用緩存?
????????答:當用戶第一次訪問應用系統的時候,因為還沒有登錄,會被引導到認證系統中進行登錄;根據用戶提供的登錄信息,認證系統進行身份校驗,如果通過校驗,應該返回給用戶一個認證的憑據--ticket;用戶再訪問別的應用的時候,就會將這個ticket帶上,作為自己認證的憑據,應用系統接受到請求之后會把 ticket送到認證系統進行校驗,檢查ticket的合法性。如果通過校驗,用戶就可以在不用再次登錄的情況下訪問應用系統2和應用系統3了。
實現主要技術點:
? ? 1、兩個站點共用一個數據驗證系統
? ? 2、主要通過跨域請求的方式來實現驗證及session處理。
42.怎么實現第三方登陸?
????????答:第三方登陸主要是基于author協議來實現,下面簡單說下實現流程:
1、首先我們需要以開發者的身份向第三方登陸平臺申請接入應用,申請成功后,我們會獲得一個appID和一個secrectID.
2、當我們的網站需接入第三方登陸時,會引導用戶跳轉到第三方的登陸授權頁面,此時把之前申請的appID和secrectID帶給登陸授權頁面。
3、用戶登陸成功后即得到授權,第三方會返回一個臨時的code給我們的網站。
4、我們的網站接受到code后,再次向我們的第三方發起請求,并攜帶接收的code,從第三方獲取access_token.
5、第三方處理請求后,會返回一個access_token給我們的網站,我們的網站獲取到access_token后就可以調用第三方提供的接口了,比如獲取用戶信息等。最后把該用戶信息存入到我們站點的數據庫,并把信息保存到session中,實現用戶的第三方登陸。
43.如何處理負載,高并發(好好看看,經常問到,能回答到主要的東西即可)?
????????答:從低成本、高性能和高擴張性的角度來說有如下處理方案:
1、HTML靜態化
其實大家都知道,效率最高、消耗最小的就是純靜態化的html頁面,所以我們盡可能使我們的 網站上的頁面采用靜態頁面來實現,這個最簡單的方法其實也是最有效的方法。
2、圖片服務器分離
把圖片單獨存儲,盡量減少圖片等大流量的開銷,可以放在一些相關的平臺上,如騎牛等
3、數據庫集群和庫表散列及緩存
數據庫的并發連接為100,一臺數據庫遠遠不夠,可以從讀寫分離、主從復制,數據庫集群方面來著手。另外盡量減少數據庫的訪問,可以使用緩存數據庫如memcache、redis。
4、鏡像:
盡量減少下載,可以把不同的請求分發到多個鏡像端。
5、負載均衡:
Apache的最大并發連接為1500,只能增加服務器,可以從硬件上著手,如F5服務器。當然硬件的成本比較高,我們往往從軟件方面著手。
負載均衡 (Load Balancing) 建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐量、加強網絡數據處理能力,同時能夠提高網絡的靈活性和可用性。目前使用最為廣泛的負載均衡軟件是Nginx、LVS、HAProxy。我分別來說下三種的優缺點:
Nginx的優點是:
????1.工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構,它的正則規則比HAProxy更為強大和靈活,這也是它目前廣泛流行的主要原因之一,Nginx單憑這點可利用的場合就遠多于LVS了。
????2.Nginx對網絡穩定性的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢之一;相反LVS對網絡穩定性依賴比較大,這點本人深有體會;
????3.Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日志打印出來。LVS的配置、測試就要花比較長的時間了,LVS對網絡依賴比較大。
????4.可以承擔高負載壓力且穩定,在硬件不差的情況下一般能支撐幾萬次的并發量,負載度比LVS相對小些。
????5.Nginx可以通過端口檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,并且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支持url來檢測。比如用戶正在上傳一個文件,而處理該上傳的節點剛好在上傳過程中出現故障,Nginx會把上傳切到另一臺服務器重新處理,而LVS就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話,用戶可能會因此而不滿。
????6.Nginx不僅僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。LNMP也是近幾年非常流行的web架構,在高流量的環境中穩定性也很好。
????7.Nginx現在作為Web反向加速緩存越來越成熟了,速度比傳統的Squid服務器更快,可以考慮用其作為反向代理加速器。
????8.Nginx可作為中層反向代理使用,這一層面Nginx基本上無對手,唯一可以對比Nginx的就只有 lighttpd了,不過 lighttpd目前還沒有做到Nginx完全的功能,配置也不那么清晰易讀,社區資料也遠遠沒Nginx活躍。
????9.Nginx也可作為靜態網頁和圖片服務器,這方面的性能也無對手。還有Nginx社區非常活躍,第三方模塊也很多。
Nginx的缺點是:
????1.Nginx僅能支持http、https和Email協議,這樣就在適用范圍上面小些,這個是它的缺點。
????2.對后端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測。不支持Session的直接保持,但能通過ip_hash來解決。
LVS:使用Linux內核集群實現一個高性能、高可用的負載均衡服務器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。
LVS的優點是:
????1.抗負載能力強、是工作在網絡4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟件里的性能最強的,對內存和cpu資源消耗比較低。
????2.配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯的幾率。
????3.工作穩定,因為其本身抗負載能力很強,自身有完整的雙機熱備方案,如LVS+Keepalived,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived。
????4.無流量,LVS只分發請求,而流量并不從它本身出去,這點保證了均衡器IO的性能不會受到大流量的影響。
????5.應用范圍比較廣,因為LVS工作在4層,所以它幾乎可以對所有應用做負載均衡,包括http、數據庫、在線聊天室等等。
LVS的缺點是:
????1.軟件本身不支持正則表達式處理,不能做動靜分離;而現在許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所在。
????2.如果是網站應用比較龐大的話,LVS/DR+Keepalived實施起來就比較復雜了,特別后面有 Windows Server的機器的話,如果實施及配置還有維護過程就比較復雜了,相對而言,Nginx/HAProxy+Keepalived就簡單多了。
HAProxy的特點是:
????1.HAProxy也是支持虛擬主機的。
????2.HAProxy的優點能夠補充Nginx的一些缺點,比如支持Session的保持,Cookie的引導;同時支持通過獲取指定的url來檢測后端服務器的狀態。
????3.HAProxy跟LVS類似,本身就只是一款負載均衡軟件;單純從效率上來講HAProxy會比Nginx有更出色的負載均衡速度,在并發處理上也是優于Nginx的。
????4.HAProxy支持TCP協議的負載均衡轉發,可以對MySQL讀進行負載均衡,對后端的MySQL節點進行檢測和負載均衡,大家可以用LVS+Keepalived對MySQL主從做負載均衡。
????5.HAProxy負載均衡策略非常多,HAProxy的負載均衡算法現在具體有如下8種:
????????① roundrobin,表示簡單的輪詢,這個不多說,這個是負載均衡基本都具備的;?
????????② static-rr,表示根據權重,建議關注;?
????????③ leastconn,表示最少連接者先處理,建議關注;?
????????④ source,表示根據請求源IP,這個跟Nginx的IP_hash機制類似,我們用其作為解決session問題的一種方法,建議關注;?
????????⑤ ri,表示根據請求的URI;?
????????⑥ rl_param,表示根據請求的URl參數’balance url_param’ requires an URL parameter name;?
????????⑦ hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;?
????????⑧ rdp-cookie(name),表示根據據cookie(name)來鎖定并哈希每一次TCP請求。
Nginx和LVS對比的總結:
????1.Nginx工作在網絡的7層,所以它可以針對http應用本身來做分流策略,比如針對域名、目錄結構等,相比之下LVS并不具備這樣的功能,所以Nginx單憑這點可利用的場合就遠多于LVS了;但Nginx有用的這些功能使其可調整度要高于LVS,所以經常要去觸碰觸碰,觸碰多了,人為出問題的幾率也就會大。
????2.Nginx對網絡穩定性的依賴較小,理論上只要ping得通,網頁訪問正常,Nginx就能連得通,這是Nginx的一大優勢!Nginx同時還能區分內外網,如果是同時擁有內外網的節點,就相當于單機擁有了備份線路;LVS就比較依賴于網絡環境,目前來看服務器在同一網段內并且LVS使用direct方式分流,效果較能得到保證。另外注意,LVS需要向托管商至少申請多一個ip來做Visual IP,貌似是不能用本身的IP來做VIP的。要做好LVS管理員,確實得跟進學習很多有關網絡通信方面的知識,就不再是一個HTTP那么簡單了。
????3.Nginx安裝和配置比較簡單,測試起來也很方便,因為它基本能把錯誤用日志打印出來。LVS的安裝和配置、測試就要花比較長的時間了;LVS對網絡依賴比較大,很多時候不能配置成功都是因為網絡問題而不是配置問題,出了問題要解決也相應的會麻煩得多。
????4.Nginx也同樣能承受很高負載且穩定,但負載度和穩定度差LVS還有幾個等級:Nginx處理所有流量所以受限于機器IO和配置;本身的bug也還是難以避免的。
????5.Nginx可以檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,并且會把返回錯誤的請求重新提交到另一個節點。目前LVS中 ldirectd也能支持針對服務器內部的情況來監控,但LVS的原理使其不能重發請求。比如用戶正在上傳一個文件,而處理該上傳的節點剛好在上傳過程中出現故障,Nginx會把上傳切到另一臺服務器重新處理,而LVS就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話,用戶可能會因此而惱火。
????6.Nginx對請求的異步處理可以幫助節點服務器減輕負載,假如使用 apache直接對外服務,那么出現很多的窄帶鏈接時apache服務器將會占用大 量內存而不能釋放,使用多一個Nginx做apache代理的話,這些窄帶鏈接會被Nginx擋住,apache上就不會堆積過多的請求,這樣就減少了相當多的資源占用。這點使用squid也有相同的作用,即使squid本身配置為不緩存,對apache還是有很大幫助的。
????7.Nginx能支持http、https和email(email的功能比較少用),LVS所支持的應用在這點上會比Nginx更多。在使用上,一般最前端所采取的策略應是LVS,也就是DNS的指向應為LVS均衡器,LVS的優點令它非常適合做這個任務。重要的ip地址,最好交由LVS托管,比如數據庫的 ip、webservice服務器的ip等等,這些ip地址隨著時間推移,使用面會越來越大,如果更換ip則故障會接踵而至。所以將這些重要ip交給 LVS托管是最為穩妥的,這樣做的唯一缺點是需要的VIP數量會比較多。Nginx可作為LVS節點機器使用,一是可以利用Nginx的功能,二是可以利用Nginx的性能。當然這一層面也可以直接使用squid,squid的功能方面就比Nginx弱不少了,性能上也有所遜色于Nginx。Nginx也可作為中層代理使用,這一層面Nginx基本上無對手,唯一可以撼動Nginx的就只有lighttpd了,不過lighttpd目前還沒有能做到 Nginx完全的功能,配置也不那么清晰易讀。另外,中層代理的IP也是重要的,所以中層代理也擁有一個VIP和LVS是最完美的方案了。具體的應用還得具體分析,如果是比較小的網站(日PV小于1000萬),用Nginx就完全可以了,如果機器也不少,可以用DNS輪詢,LVS所耗費的機器還是比較多的;大型網站或者重要的服務,機器不發愁的時候,要多多考慮利用LVS。
數據庫優化
44.做秒殺時鎖表考慮到沒有?
????????答:考慮到了,當時我們做秒殺時考慮了好幾種方案,其中有一種就是使用事務加上排他鎖來實現。
45.架構類的東西接觸過嗎?
????????有接觸過,曾經自己在自己的服務器上配置過。我以前做過以下幾個架構方面的配置和測試;
????????1、數據庫的讀寫分離、主從復制及集群。
????????2、Nginx負載均衡
????????3、redis集群及主從
46.有沒有封裝過一個簡單的框架?
????????答;封裝過一個簡單的MVC框架,主要分為3層,控制器層和模型層視圖層,以及路由的分配和入口文件,模板引擎,單例模式、工廠模式,第三方類庫的引入等。
47.談談對MVC的認識?
????????答:核心思想是:視圖和用戶交互通過事件導致控制器改變 控制器改變導致模型改變 或者控制器同時改變兩者 模型改變 導致視圖改變 或者視圖改變 潛在的從模型里面獲得參數 來改變自己。他的好處是可以將界面和業務邏輯分離。
Model(模型),是程序的主體部分,主要包含業務數據和業務邏輯。在模型層,還會涉及到用戶發布的服務,在服務中會根據不同的業務需求,更新業務模型中的數據。
View(視圖),是程序呈現給用戶的部分,是用戶和程序交互的接口,用戶會根據具體的業務需求,在View視圖層輸入自己特定的業務數據,并通過界面的事件交互,將對應的輸入參數提交給后臺控制器進行處理。
Contorller(控制器),Contorller是用來處理用戶 輸入數據,已經更新業務模型的部分。控制器中接收了用戶與界面交互時傳遞過來的數據,并根據數據業務邏輯來執行服務的調用和更新業務模型的數據和狀態。
48.session與cookie的區別?
????????1、cookie數據存放在第三方應用的瀏覽器上,session數據放在服務器上。
????????2、cookie不是很安全,別人可以分析存放在本地的COOKIE,進行COOKIE欺騙,考慮到安全應當使用session。
????????3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面,應當使用COOKIE。
????????4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。
????????5、所以個人建議:
? ? ????????將登陸信息等重要信息存放為SESSION
? ? ? ? ? ? 其他信息如果需要保留,可以放在COOKIE
49.echo(),print(),print_r()的區別?
????????echo可以一次輸出多個值,多個值之間用逗號分隔。echo是語言結構(language construct),而并不是真正的函數,因此不能作為表達式的一部分使用。echo是php的內部指令,不是函數,無返回值。
????????print():函數print()打印一個值(它的參數),如果字符串成功顯示則返回true,否則返回false。只能打印出簡單類型變量的值(如int,string),有返回值
????????printf():源于C語言中的printf()。該函數輸出格式化的字符串。
????????print_r()和var_dump()
????????print_r()可以把字符串和數字簡單地打印出來,而數組則以括起來的鍵和值得列表形式顯示,并以Array開頭。但print_r()輸出布爾值和NULL的結果沒有意義,因為都是打印"\n"。因此用var_dump()函數更適合調試。print_r是函數,可以打印出比較復雜的變量(如數組,對象),有返回值
????????var_dump()判斷一個變量的類型與長度,并輸出變量的數值,如果變量有值輸的是變量的值并回返數據類型。此函數顯示關于一個或多個表達式的結構信息,包括表達式的類型與值。數組將遞歸展開值,通過縮進顯示其結構。
50.說一下單引號雙引號?
????????①單引號內部的變量不會執行, 雙引號會執行
????????②單引號解析速度比雙引號快。
????????③單引號只能解析部分特殊字符,雙引號可以解析所有特殊字符。
51.索引的優缺點?
????????1、優點:
a)可以保證數據庫表中每一行的數據的唯一性
b)可以大大加快數據的索引速度
c)加速表與表之間的連接,物別是在實現數據的參考完事性方面特別有意義
d)在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間
f)通過使用索引,可以在時間查詢的過程中,使用優化隱藏器,提高系統的性能
2、 缺點:
a)? 創建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加
b)? 索引需要占物理空間,除了數據表占用數據空間之外,每一個索引還要占用一定的物理空間,如果需要建立聚簇索引,那么需要占用的空間會更大
c)? 以表中的數據進行增、刪、改的時候,索引也要動態的維護,這就降低了整數的維護速度
d)? 建立索引的原則
e)? 在經常需要搜索的列上,可以加快搜索的速度
f)? 在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構
g)? 在經常用在連接的列上,這些列主要是一外鍵,可以加快連接的速度
h)? 在經經常需要根據范圍進行搜索的列上創建索引,國為索引已經排序,其指定的范圍是連續的
i)? 在經常需要排序的列上,國為索引已經排序,這樣井底可以利用索引的排序,加快排序井底時間
j)? 在經常使用在where子句中的列上,加快條件的判斷速度
52.get和post的區別?
????????1. get是從服務器上獲取數據,post是向服務器傳送數據。
????????2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
????????3. get傳送的數據量較小,不能大于2KB。post傳送的數據量較大,一般被默認為不受限制。
????????4. get安全性非常低,post安全性較高。但是執行效率卻比Post方法好。
53.如何修改會話的生存時間?
????????一:在php.ini中設置session.gc_maxlifetime = 1440 //默認時間
????????二:代碼實現? ? ? $ lifeTime = 24 * 3600; //保存一天
? ? ????session_set_cookie_params($ lifeTime);
? ????? 在session_start();
54.Linux基本命令,目錄結構?
????????arch顯示機器的處理器架構
(1) uname -m顯示機器的處理器架構
(2) uname -r顯示正在使用的內核版本
dmidecode -q顯示硬件系統部件 - (SMBIOS / DMI)?
hdparm -i / dev / hda羅列一個磁盤的架構特性? ?
hdparm -tT / dev / sda在磁盤上執行測試性讀取操作
cat / porc / cpuinfo顯示CPU信息
cat / porc / interrupts顯示中斷
cat / porc / meminfo校驗內存使用?
cat / porc / swaps顯示哪些交換被使用
cat / porc / verion顯示內核的版本
cat /porc/net/dev 顯示網絡適配器及統計
cat /porc/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
當然,如果你是以orot用戶執行以上操作,可以去掉前邊的sudo!
df -hl 查看磁盤剩余空間
df -h 查看每個根路徑的分區大小
du -sh [目錄名] 返回該目錄的大小
du -sm [文件夾] 返回該文件夾總M數
關機 (系統的關機、重啟以及登出)
shutdown -h now 關閉系統(1)
init 0 關閉系統(2)
telinit 0 關閉系統(3)
shutdown -h hour: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就是沒有文件 非零就是有文件
55..memcache緩存什么數據?
? ? ? ?一、經常被讀取并且實時性要求不強可以等到自動過期的數據。例如網站首頁最新文章列表、某某排行等數據。
? ? ????二、經常被讀取并且實時性要求強的數據。比如用戶的好友列表,用戶文章列表,用戶閱讀記錄等。
????????三、統計類緩存,比如文章瀏覽數、網站PV等。
????????四、活躍用戶的基本信息或者某篇熱門文章。
????????五、session數據
56.魔術方法、魔術常量?
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()
實例化一個對象時,如果對應的類不存在,則該方法被調用。
魔術常量:
__LINE__
返回文件中的當前行號。
__FILE__
返回文件的完整路徑和文件名。如果用在包含文件中,則返回包含文件名。自 PHP 4.0.2 起,__FILE__ 總是包含一個絕對路徑,而在此之前的版本有時會包含一個相對路徑。
__FUNCTION__
返回函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。在PHP 4 中該值總是小寫字母的。
__CLasS__
返回類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在PHP 4 中該值總是小寫字母的。
__METHOD__
返回類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。
__set()當程序試圖寫入一個不存在或者不可見的成員變量時,__set()方法包含兩個參數,分別表示變量名稱和變量值,兩個參數都不可省略
__get()當程序試圖調用一個未定義或不可見的成員變量時,__get()方法有一個參數,表示要調用的變量名
__sleep() 常用于提交未提交的數據,或類似的清理操作如果有一些很大的對象,但不需要全部保存,這個功能就很好用。
__construct()? 在類實例化對象的同時執行該函數
__distruct() 在類實例化的對象銷毀時執行
__call()對象調用某個方法,若方法存在,則直接調用;若不存在,則會去調用__call函數。
__clone()克隆對象時被調用。如:$t=new Test();$t1=clone $t;
__toString()打印一個對象的時被調用。如echo $obj;或print $obj;
__isset()檢測一個對象的屬性是否存在時被調用。如:isset($c->name)。
__unset()unset一個對象的屬性時被調用。如:unset($c->name)。
__autoload()實例化一個對象時,如果對應的類不存在,則該方法被調用。
57.接口和抽象類的區別是什么?
????????答:抽象類是一種不能被實例化的類,只能作為其他類的父類來使用。抽象類是通過關鍵字abstract來聲明的。?
抽象類與普通類相似,都包含成員變量和成員方法,兩者的區別在于,抽象類中至少要包含一個抽象方法,抽象方法沒有方法體,該方法天生就是要被子類重寫的。?
抽象方法的格式為:abstract function abstractMethod();
接口是通過 interface 關鍵字來聲明的,接口中的成員常量和方法都是 public 的,方法可以不寫關鍵字public,接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現的。?
抽象類和接口實現的功能十分相似,最大的不同是接口能實現多繼承。在應用中選擇抽象類還是接口要看具體實現。?
子類繼承抽象類使用 extends,子類實現接口使用implements。
58.什么是隊列?排它鎖,Myisam死鎖如何解決?
????????答:在默認情況下MYisam是表級鎖,所以同時操作單張表的多個動作只能以隊列的方式進行;
排它鎖又名寫鎖,在SQL執行過程中為排除其它請求而寫鎖,在執行完畢后會自動釋放;
死鎖解決:先找到死鎖的線程號,然后殺掉線程ID
59.bootstrap框架有哪些優點?
????????答:bootstrap是一款web開發框架,它由CSS,JavaScript,Html,三部分構成,它簡潔靈活,使得web開發更加的快捷
優點:?
①節省時間: 使用bootstrap框架,可以大大的節省項目開發時間,它包含了很多現成的代碼,如果需要使用,只需要找到合適的代碼,插入合適的位置即可,此外,CSS是使用LESS編寫,很多樣式和設計都已經設計完成了?
②定制化: bootstrap可以根據自己的項目,留取框架中自己需要的部分?
③設計合理:
柵格系統: bootstrap定義12格柵系統,在頁面已經完成時,你可以根據合適的網格,以自己的需求改變行數和布局大小,樣式已經開發完成了,只需要把代碼放入合適的HTML代碼位置即可
LESS: LESS是基于CSS之上的高級語言,其目的是使得CSS開發更加靈活,更加強大
JavaScript:bootstrap提供JavaScript庫,該庫超越了基本的架構和樣式,開發者可以輕松的操作窗口警告框,工具提示框等,可避免了我們費神費力的寫腳本?
4.一致性: bootstrap可以保證界面在不同平臺的統一性,無論實在IE,Chrome等?
5.持續更新: bootstrap在不斷的改進,更具規律性和持續性?
6.響應式: 無論是在PC端還是移動端,都可以保持界面的一致性?
7.文檔多: bootstrap的非常多