招聘面試_面試資料匯總_第1頁
招聘面試_面試資料匯總_第2頁
招聘面試_面試資料匯總_第3頁
招聘面試_面試資料匯總_第4頁
招聘面試_面試資料匯總_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、酒店預(yù)訂怎么實(shí)現(xiàn) ?怎么設(shè)計(jì)表 你好,我大概的說下我們的業(yè)務(wù)流程,我們的業(yè)務(wù)流程是:用戶在網(wǎng)站瀏覽酒店信息,可以根據(jù)地區(qū)檢索出該地區(qū)的酒店信息。列表展示酒店的信息由:酒店的名稱,酒店圖片,酒店位置,評(píng)論人數(shù),評(píng)論分?jǐn)?shù)以及最低入住價(jià)格。用戶選中要入住的酒店進(jìn)入酒店詳情頁面,查看酒店的介紹以及酒店的房型列表,用戶根據(jù)他要入住的時(shí)間和離店的時(shí)間,檢索出這個(gè)時(shí)間段內(nèi)的所有可選房型(房間數(shù)量-當(dāng)天的訂單-當(dāng)天未離店訂單=剩余房間數(shù)量)顯示給用戶。用戶選擇好房型后就可以進(jìn)行下單,要求有訂單的開始時(shí)間,結(jié)束時(shí)間,房間數(shù)量,住客姓名,抵店時(shí)間,聯(lián)系方式,備注信息等等。 那我的表是這么設(shè)計(jì)的,總共有6張表,分別是:用戶表user,里面有下面幾個(gè)字段,(用戶編號(hào),用戶名稱,用戶密碼,用戶聯(lián)系方式)酒店表hotel,里面有(酒店編號(hào),酒店名稱,酒店圖片,評(píng)論人數(shù),評(píng)論分?jǐn)?shù),最低入住價(jià)格,所在地區(qū))酒店圖片表pic(圖片編號(hào),圖片地址,圖片排序,圖片所屬酒店)評(píng)論表comment(評(píng)論編號(hào),評(píng)論內(nèi)容,評(píng)論時(shí)間,用戶編號(hào),酒店編號(hào))房型表house(房型編號(hào),床型,早餐,寬帶,人數(shù)上限,房?jī)r(jià),房間數(shù)量,最長(zhǎng)預(yù)定時(shí)間)訂單表order(訂單編號(hào),開始時(shí)間,結(jié)束時(shí)間,房間數(shù)量,住客姓名,最晚抵店時(shí)間,聯(lián)系電話,使用優(yōu)惠券,備注,訂單狀態(tài))以上就是我對(duì)這個(gè)酒店預(yù)訂系統(tǒng)的設(shè)計(jì)2、預(yù)定時(shí)間怎么寫入數(shù)據(jù)庫(kù)的以預(yù)訂當(dāng)時(shí)的時(shí)間戳作為預(yù)訂時(shí)間寫入數(shù)據(jù)庫(kù)。用戶下訂單時(shí)會(huì)選擇一個(gè)抵店時(shí)間,將該抵店時(shí)間以時(shí)間戳方式存入數(shù)據(jù)庫(kù)中。離店時(shí)間以當(dāng)時(shí)的日期轉(zhuǎn)為時(shí)間戳方式存入數(shù)據(jù)庫(kù)中3、怎么判斷還有沒有房間我可以根據(jù)用戶的入住時(shí)間和離店時(shí)間來檢索這個(gè)有效時(shí)間段內(nèi)房間的庫(kù)存。房間數(shù)量扣除在這個(gè)時(shí)間段內(nèi)入住的訂單和在這個(gè)時(shí)間段內(nèi)離店的訂單??鄢蟮鹊降臄?shù)量才是這段時(shí)間內(nèi)有效房間數(shù)量。4、怎么記錄每天的房間庫(kù)存我的思路是根據(jù)一個(gè)公式來推理實(shí)現(xiàn)的,每天房間的庫(kù)存=房型下房間數(shù)量-(當(dāng)天入住的訂單+當(dāng)天未離店的訂單),這樣我就可以得到每天還有多少房間是剩余的了。5、怎么在數(shù)據(jù)庫(kù)里對(duì)房間做唯一標(biāo)識(shí)上面所設(shè)計(jì)的房型表就是我們的房間表,每個(gè)房間是唯一的,我們是使用數(shù)字作為編號(hào)的,也即使用主鍵作為唯一標(biāo)識(shí)。6、最近出的新功能 最近我們出了個(gè)會(huì)員機(jī)制,客戶第一次預(yù)訂酒店成功后,可以辦理會(huì)員卡,憑借會(huì)員卡,下次來的時(shí)候可以打折,會(huì)員在一些比較特殊的日期預(yù)訂酒店成功,可以享受不一樣的優(yōu)惠措施。7、 怎么保證促銷商品不會(huì)超賣 這個(gè)問題是我們當(dāng)時(shí)開發(fā)時(shí)遇到的一個(gè)難點(diǎn),超賣的原因主要是下的訂單的數(shù)目和我們要促銷的商品的數(shù)目不一致導(dǎo)致的,每次總是訂單的數(shù)比我們的促銷商品的數(shù)目要多,當(dāng)時(shí)我們的小組討論了好久,給出了好幾個(gè)方案來實(shí)現(xiàn):第一種方案是:在每次下訂單前我們判斷促銷商品的數(shù)量夠不夠,不夠不允許下訂單,更改庫(kù)存量時(shí)加上一個(gè)條件,只更改商品庫(kù)存大于0的商品的庫(kù)存,當(dāng)時(shí)我們使用ab進(jìn)行壓力測(cè)試,當(dāng)并發(fā)超過500,訪問量超過2000時(shí),還是會(huì)出現(xiàn)超賣現(xiàn)象。所以被我們否定了。第二種方案是:使用mysql的事務(wù)加排他鎖來解決,首先我們選擇數(shù)據(jù)庫(kù)的存儲(chǔ)引擎為innoDB,使用的是排他鎖實(shí)現(xiàn)的,剛開始的時(shí)候我們測(cè)試了下共享鎖,發(fā)現(xiàn)還是會(huì)出現(xiàn)超賣的現(xiàn)象。有個(gè)問題是,當(dāng)我們進(jìn)行高并發(fā)測(cè)試時(shí),對(duì)數(shù)據(jù)庫(kù)的性能影響很大,導(dǎo)致數(shù)據(jù)庫(kù)的壓力很大,最終也被我們否定了。第三種方案是:使用文件鎖實(shí)現(xiàn)。當(dāng)用戶搶到一件促銷商品后先觸發(fā)文件鎖,防止其他用戶進(jìn)入,該用戶搶到促銷品后再解開文件鎖,放其他用戶進(jìn)行操作。這樣可以解決超賣的問題,但是會(huì)導(dǎo)致文件得I/O開銷很大。最后我們使用了redis的隊(duì)列來實(shí)現(xiàn)。將要促銷的商品數(shù)量以隊(duì)列的方式存入redis中,每當(dāng)用戶搶到一件促銷商品則從隊(duì)列中刪除一個(gè)數(shù)據(jù),確保商品不會(huì)超賣。這個(gè)操作起來很方便,而且效率極高,最終我們采取這種方式來實(shí)現(xiàn)8、redis集群怎么做1、 Redis集群提供了以下兩個(gè)好處1、將數(shù)據(jù)自動(dòng)切分(split)到多個(gè)節(jié)點(diǎn)2、當(dāng)集群中的某一個(gè)節(jié)點(diǎn)故障時(shí),redis還可以繼續(xù)處理客戶端的請(qǐng)求。2、集群的方案: redis-cluster集群,采用無中心結(jié)構(gòu),每個(gè)節(jié)點(diǎn)保存數(shù)據(jù)和整個(gè)集群狀態(tài),每個(gè)節(jié)點(diǎn)都和其他所有節(jié)點(diǎn)連接,主要通過節(jié)點(diǎn)的配置,輔以redis的主從來完成集群。由于這塊東西我使用得很少,所以只是平時(shí)抽時(shí)間去研究過,并沒有真正的在線上實(shí)現(xiàn)過。9、redis和memcacahe、mongoDB的區(qū)別答:都是非關(guān)系型數(shù)據(jù)庫(kù),性能都非常高,但是mongoDB和memcache、redis是不同的兩種類型。后兩者主要用于數(shù)據(jù)的緩存,前者主要用在查詢和儲(chǔ)存大數(shù)據(jù)方面,是最接近數(shù)據(jù)庫(kù)的文檔型的非關(guān)系數(shù)據(jù)庫(kù)。 這里我主要談?wù)刴emcache和redis的區(qū)別。從數(shù)據(jù)存儲(chǔ)位置上來分,memcache的數(shù)據(jù)存在內(nèi)存中,而redis既可以存儲(chǔ)在內(nèi)存中,也可以存儲(chǔ)的到磁盤中,達(dá)到持久化存儲(chǔ)的功能,memcache一旦斷電,數(shù)據(jù)全部丟失,redis可以利用快照和AOF把數(shù)據(jù)存到磁盤中,當(dāng)恢復(fù)時(shí)又從磁盤中讀取到內(nèi)存中,當(dāng)物理內(nèi)存使用完畢后,可以把數(shù)據(jù)寫入到磁盤中。 從存儲(chǔ)數(shù)據(jù)的類型上來分,memcache和redis存儲(chǔ)的方式都是鍵值對(duì),只不過redis值的類型比較豐富,有string(字符串),hash(哈希),list(列表),set(集合)zset(有序集合),而memcache主要存儲(chǔ)的是字符串。 從架構(gòu)層次來分,Redis支持master-slave(主從)模式應(yīng)用,memcache支持分布式。 另外從存儲(chǔ)數(shù)據(jù)的大小上來分,Redis單個(gè)value的最大限制是1GB,memcached只能保存1MB的數(shù)據(jù)。但是Memcache在存儲(chǔ)100K以上的數(shù)據(jù),性能稍微好一點(diǎn)。 另外redis只支持單核,memcache可以支持多核,當(dāng)然關(guān)于redis取代memcache的說法,在一般情況下,兩者性能都很高,在大多的業(yè)務(wù)場(chǎng)景選擇上,redis的選擇可能更加具有優(yōu)勢(shì),但也不能說可以完全取代,最終還是取決于你的應(yīng)用場(chǎng)景。10、持久化redis有幾種方式?答:主要有兩種方式: 快照持久化在redis配置文件中已經(jīng)自動(dòng)開啟了,格式是:save N M表示在N秒之內(nèi),redis至少發(fā)生M次修改則redis抓快照到磁盤。當(dāng)然我們也可以手動(dòng)執(zhí)行save或者bgsave(異步)命令來做快照append only file AOF持久化 總共有三種模式,如appendfsync everysec默認(rèn)的是每秒強(qiáng)制寫入磁盤一次 appendfsync always 每次執(zhí)行寫操作的時(shí)候就強(qiáng)制寫入磁盤appendfsync no 完全取決于os,性能最好但是持久化沒法保證其中第三種模式最好。redis默認(rèn)的也是采取第三種模式。11、mysql存儲(chǔ)引擎答:常用的主要分為兩種,一種是innodb,一種是myisam,兩者的主要區(qū)別是myisam不支持事務(wù)處理,而innoDB支持事務(wù)處理myisam 不支持外鍵,innoDB支持外鍵myisam支持全文檢索,而innoDB在MySQL5.6版本之后才支持全文檢索數(shù)據(jù)的存儲(chǔ)形式不一樣,mysiam表存放在三個(gè)文件:結(jié)構(gòu)、索引、數(shù)據(jù),innoDB存儲(chǔ)把結(jié)構(gòu)存儲(chǔ)為一個(gè)文件,索引和數(shù)據(jù)存儲(chǔ)為一個(gè)文件myisam在查詢和增加數(shù)據(jù)性能更優(yōu)于innoDB,innoDB在批量刪除方面性能較高。myisam支持表鎖,而innoDB支持行鎖12、 sql注入是什么及如何預(yù)防sql注入?答:SQL注入攻擊指的是用戶或者黑客通過構(gòu)建特殊的輸入作為參數(shù)傳入我們的Web應(yīng)用程序端,而這些輸入大都是SQL語法里的一些組合,通過執(zhí)行SQL語句進(jìn)而執(zhí)行攻擊者所要的操作,其主要原因是程序員沒有細(xì)致地過濾用戶輸入的數(shù)據(jù),致使非法數(shù)據(jù)侵入系統(tǒng)而造成的。因此我們?cè)谧鲩_發(fā)過程中一定要預(yù)防sql注入,主要從兩方面著手:1、占位符的方式,就是對(duì)sql語句進(jìn)行預(yù)處理,然后執(zhí)行sql語句2、通過addslashes或者mysql_real_escape_string這兩個(gè)函數(shù)對(duì)用戶輸入的值進(jìn)行轉(zhuǎn)義處理,把一些特殊的字符轉(zhuǎn)義掉。13、有用過預(yù)處理么?答:用過,PDO類中,有個(gè)prepare方法可以實(shí)現(xiàn)預(yù)處理,PDOStament類中的excute方法可以執(zhí)行預(yù)處理,預(yù)處理的參數(shù)分為兩種,一種是:字符串占位符,另一種是?占位符,:字符串占位符在執(zhí)行預(yù)處理傳遞參數(shù)時(shí)傳入的是關(guān)聯(lián)數(shù)組,而?占位符傳遞的是索引數(shù)組。兩者不能混合使用,但一般推薦使用:字符串占位符。14、用框架還用自己的處理嗎答:一般成熟的開源框架中都考慮到了數(shù)據(jù)安全這方面的東西,但有時(shí)候我們可能會(huì)使用一些原生的SQL語句時(shí),我們就需要考慮自己對(duì)sql語句進(jìn)行預(yù)處理。當(dāng)然有時(shí)候框架中的過濾方法我們不希望采用,比如使用文本編輯器時(shí),我們可以使用自己的過濾方式。15、mysql優(yōu)化怎么做的?答:mysql優(yōu)化主要從以下幾個(gè)方面來實(shí)現(xiàn): 設(shè)計(jì)角度:存儲(chǔ)引擎的選擇,字段類型選擇,范式 功能角度:可以利用mysql自身的特性,如索引,查詢緩存,碎片整理,分區(qū)、分表等 sql語句的優(yōu)化方面:盡量簡(jiǎn)化查詢語句,能查詢字段少就盡量少查詢字段,優(yōu)化分頁語句、分組語句等。 部署大負(fù)載架構(gòu)體系:數(shù)據(jù)庫(kù)服務(wù)器單獨(dú)出來,負(fù)載大時(shí)可以采用主從復(fù)制,讀寫分離機(jī)制進(jìn)行設(shè)計(jì) 從硬件上升級(jí)數(shù)據(jù)庫(kù)服務(wù)器。16、訂單表用是什么存儲(chǔ)引擎答:因?yàn)橛唵伪泶嬖谥聞?wù)的處理,比如下了訂單,商品的庫(kù)存就要減少,這里就涉及到了事務(wù),所以就用到innodb19 、sql語句的優(yōu)化答:首先我們得確定哪些sql語句需要優(yōu)化,一般在一個(gè)系統(tǒng)中,查詢語句最多,所以我們主要是針對(duì)查詢語句進(jìn)行優(yōu)化。主要采用兩種方式來確定要優(yōu)化的sql語句: 使用慢查詢?nèi)罩荆O(shè)置需要優(yōu)化的sql語句的執(zhí)行時(shí)間,記錄下超過該設(shè)置時(shí)間的語句,即為需要優(yōu)化的語句。 使用profiling機(jī)制,記錄下每條sql語句的執(zhí)行時(shí)間,找出執(zhí)行較慢的語句,即為需要優(yōu)化的語句。 我們主要通過給表字段添加索引的方式進(jìn)行優(yōu)化,加上索引后,sql語句的執(zhí)行時(shí)間顯著提高了,但并不是加上索引了這條sql語句就會(huì)用到索引,所以首先看執(zhí)行慢的語句后面是否有加索引,我們可以使用explain或者desc加在要執(zhí)行的sql語句前,查看是否使用到索引。有幾個(gè)地方需要注意的是: 為了避免建議索引而造成索引文件過大,有時(shí)候我們會(huì)使用復(fù)合索引,這時(shí)候要遵循最左原則。 like查詢,前%不會(huì)用到索引 如果條件中有or,則要求or的索引字段都必須有索引,否則不能用到索引。 如果列類型是字符串,一定要在條件中將數(shù)據(jù)使用引號(hào)引用起來,否則不使用索引。 優(yōu)化group by 語句 盡量避免模糊匹配,這樣會(huì)導(dǎo)致全盤掃描21、 索引有幾種歐4答:索引主要有: 主鍵索引:數(shù)據(jù)記錄里面不能有null,數(shù)據(jù)內(nèi)容不能重復(fù),在一張表里面不能有多個(gè)主鍵索引。 普通索引:使用字段關(guān)鍵字建立的索引,主要是提高查詢速度 唯一索引:字段數(shù)據(jù)是唯一的,數(shù)據(jù)內(nèi)容里面能否為null,在一張表里面,是可以添加多個(gè)唯一索引。 全文索引:在比較老的版本中,只有myisam引擎支持全文索引,在innodb5.6后引擎也支持全文索引,在mysql中全文索引不支持中文。我們一般使用sphinx集合coreseek來實(shí)現(xiàn)中文的全文索引。復(fù)合索引23 、左前索引原則答:左前索引主要指的是在復(fù)合索引中,給兩個(gè)或多個(gè)字段建立了復(fù)合索引后,在sql語句后的條件中,只有復(fù)合索引前面的字段在條件的前面時(shí),該索引才起作用,比如創(chuàng)建了個(gè)復(fù)合索引index (a,b),在使用where或者orderby條件時(shí),如果只有條件b的,該索引不會(huì)生效,必須有條件a且必須要在條件b的前面該索引才會(huì)生效。24 、分布式數(shù)據(jù)庫(kù)答:我所知道的分布式數(shù)據(jù)庫(kù)有memcache,主要是分布式的非關(guān)系型數(shù)據(jù)庫(kù),用于緩存處理。 分布式是指將不同的業(yè)務(wù)分布在不同的地方。 而集群指的是將幾臺(tái)服務(wù)器集中在一起,實(shí)現(xiàn)同一業(yè)務(wù)。分布式中的每一個(gè)節(jié)點(diǎn),都可以做集群。 而集群并不一定就是分布式的。舉例:就比如新浪網(wǎng),訪問的人多了,他可以做一個(gè)群集,前面放一個(gè)響應(yīng)服務(wù)器,后面幾臺(tái)服務(wù)器完成同一業(yè)務(wù),如果有業(yè)務(wù)訪問的時(shí)候,響應(yīng)服務(wù)器看哪臺(tái)服務(wù)器的負(fù)載不是很重,就將給哪一臺(tái)去完成。而分布式,從窄意上理解,也跟集群差不多, 但是它的組織比較松散,不像集群,有一個(gè)組織性,一臺(tái)服務(wù)器垮了,其它的服務(wù)器可以頂上來。 memcache的應(yīng)用場(chǎng)景1、適用memcached的業(yè)務(wù)場(chǎng)景?1)如果網(wǎng)站包含了訪問量很大的動(dòng)態(tài)網(wǎng)頁,因而數(shù)據(jù)庫(kù)的負(fù)載將會(huì)很高。由于大部分?jǐn)?shù)據(jù)庫(kù)請(qǐng)求都是讀操作,那么memcached可以顯著地減小數(shù)據(jù)庫(kù)負(fù)載。2)利用memcached可以緩存session數(shù)據(jù)、臨時(shí)數(shù)據(jù)以減少對(duì)他們的數(shù)據(jù)庫(kù)寫操作。4)緩存一些很小但是被頻繁訪問的文件。5)訪問比較頻繁,安全性不高,丟失無所謂,修改比較頻繁的數(shù)據(jù),比如一些用戶的在線狀態(tài)2 、不適用memcached的業(yè)務(wù)場(chǎng)景?1)緩存對(duì)象的大小大于1MBmemcache本身就不是為了處理龐大的多媒體(large media)和巨大的二進(jìn)制塊(streaming huge blobs)而設(shè)計(jì)的。2)key的長(zhǎng)度大于250字符3)應(yīng)用運(yùn)行在不安全的環(huán)境中4)業(yè)務(wù)本身需要的是持久化數(shù)據(jù)或者說需要的應(yīng)該是database25、nginx日志,怎么統(tǒng)計(jì)每個(gè)ip的訪問量(參考阿銘哥手冊(cè)) stub_status模塊主要用于查看Nginx的一些狀態(tài)信息,例如統(tǒng)計(jì)nginx的訪問量,首先我們得查看該模塊有沒有安裝,如果沒有安裝,得先安裝,安裝好后,修改nginx的配置文件,開啟該模塊,然后就可以使用以下命令來進(jìn)行統(tǒng)計(jì),如: 1.根據(jù)訪問IP統(tǒng)計(jì)UVawk print $1 access.log|sort | uniq -c |wc -l2.統(tǒng)計(jì)訪問URL統(tǒng)計(jì)PVawk print $7 access.log|wc -l3.查詢?cè)L問最頻繁的URLawk print $7 access.log|sort | uniq -c |sort -n -k 1 -r|more4.查詢?cè)L問最頻繁的IPawk print $1 access.log|sort | uniq -c |sort -n -k 1 -r|more統(tǒng)計(jì)nginx日志中訪問最多的100個(gè)ip及訪問次數(shù)awk print $1 access.log|sort | uniq -c |sort -n -k 1 -r| head -n 10026、http協(xié)議HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡(jiǎn)捷、快速的方式,適用于分布式超媒體信息系統(tǒng)HTTP協(xié)議的主要特點(diǎn)可概括如下:1.支持客戶/服務(wù)器模式。2.簡(jiǎn)單快速:客戶向服務(wù)器請(qǐng)求服務(wù)時(shí),只需傳送請(qǐng)求方法和路徑。請(qǐng)求方法常用的有GET、HEAD、POST。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同。由于HTTP協(xié)議簡(jiǎn)單,使得HTTP服務(wù)器的程序規(guī)模小,因而通信速度很快。3.靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對(duì)象。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記。4.無連接:無連接的含義是限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶的請(qǐng)求,并收到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時(shí)間。5.無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。27、cookie與session的區(qū)別1、cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上。2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙 考慮到安全應(yīng)當(dāng)使用session。3、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多,會(huì)比較占用你服務(wù)器的性能 考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。4、單個(gè)cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。5、所以個(gè)人建議: 將登陸信息等重要信息存放為SESSION 其他信息如果需要保留,可以放在COOKIE中28、php在儲(chǔ)存session以什么形式存在PHP為session的存儲(chǔ)提供了三種方式: 文件/ 內(nèi)存/ 自定義存儲(chǔ),默認(rèn)是使用文件存儲(chǔ).在訪問量大的網(wǎng)站上采用這種方式就不大合適,因?yàn)檫@樣會(huì)導(dǎo)致大量的輸入輸出的冗余.我們可以在php.ini更改配置文件或者php腳本中通過相應(yīng)的函數(shù)來設(shè)置session文件的存儲(chǔ)類型來改變session文件的存儲(chǔ)形式29、xss攻擊怎么防止XSS又稱CSS,全稱Cross SiteScript(跨站腳本攻擊), XSS攻擊類似于SQL注入攻擊,是Web程序中常見的漏洞,XSS屬于被動(dòng)式且用于客戶端的攻擊方式,所以容易被忽略其危害性。其原理是攻擊者向有XSS漏洞的網(wǎng)站中輸入(傳入)惡意的HTML代碼,當(dāng)用戶瀏覽該網(wǎng)站時(shí),這段HTML代碼會(huì)自動(dòng)執(zhí)行,從而達(dá)到攻擊的目的。如,盜取用戶Cookie信息、破壞頁面結(jié)常見的惡意字符XSS輸入:1. XSS 輸入通常包含 JavaScript 腳本,如彈出惡意警告框:alert(XSS);2. XSS 輸入也可能是 HTML 代碼段,譬如:(1) 網(wǎng)頁不停地刷新 (2) 嵌入其它網(wǎng)站的鏈接 構(gòu)、重定向到其它網(wǎng)站等。方法:利用php htmlentities()函數(shù)php防止XSS跨站腳本攻擊的方法:是針對(duì)非法的HTML代碼包括單雙引號(hào)等,使用htmlspecialchars()函數(shù)。在使用htmlspecialchars()函數(shù)的時(shí)候注意第二個(gè)參數(shù), 直接用htmlspecialchars($string)的話,第二個(gè)參數(shù)默認(rèn)是ENT_COMPAT,函數(shù)默認(rèn)只是轉(zhuǎn)化雙引號(hào)(),不對(duì)單引號(hào)()做轉(zhuǎn)義。所以,htmlspecialchars()函數(shù)更多的時(shí)候要加上第二個(gè)參數(shù),應(yīng)該這樣用: htmlspecialchars($string,ENT_QUOTES)。當(dāng)然,如果需要不轉(zhuǎn)化如何的引號(hào),用htmlspecialchars($string,ENT_NOQUOTES)。另外,盡量少用htmlentities(), 在全部英文的時(shí)候htmlentities()和htmlspecialchars()沒有區(qū)別,都可以達(dá)到目的。但是,中文情況下, htmlentities()卻會(huì)轉(zhuǎn)化所有的html代碼,連同里面的它無法識(shí)別的中文字符也給轉(zhuǎn)化了。htmlentities()和htmlspecialchars()這兩個(gè)函數(shù)對(duì)單引號(hào)()之類的字符串支持不好,都不能轉(zhuǎn)化, 所以用htmlentities()和htmlspecialchars()轉(zhuǎn)化的字符串只能防止XSS攻擊,不能防止SQL注入攻擊。所有有打印的語句如echo,print等,在打印前都要使用htmlentities()進(jìn)行過濾,這樣可以防止XSS,注意中文要寫出htmlentities($name,ENT_NOQUOTES,GB2312)。30、禁用cookie后,session還能用嗎?可以,在存儲(chǔ)session的文件中,生成sessionID,通過get傳參的方式將sessionID傳到要實(shí)現(xiàn)session共享的頁面,讀取sessionID,從而從session中獲取數(shù)據(jù)。31、mongodb基于什么開發(fā)的MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由C+語言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。32、mongodb是非范式還是范式數(shù)據(jù)表示的方式有很多種,其中最重要的問題之一就是在多大程度上對(duì)數(shù)據(jù)進(jìn)行范式化。范式化(normalization)是將數(shù)據(jù)分散到多個(gè)不同的集合,不同集合之間可以相互引用數(shù)據(jù)。雖然很多文檔可以引用某一塊數(shù)據(jù),但是這塊數(shù)據(jù)只存儲(chǔ)在一個(gè)集合中。所以,如果要修改這塊數(shù)據(jù),只需修改保存這塊數(shù)據(jù)的那一個(gè)文檔就行了。但是,MongoDB沒有提供連接(join)工具,所以在不同集合之間執(zhí)行連接查詢需要進(jìn)行多次查詢。反范式化(denormalization)與范式化相反:將每個(gè)文檔所需的數(shù)據(jù)都嵌入在文檔內(nèi)部。每個(gè)文檔都擁有自己的數(shù)據(jù)副本,而不是所有文檔共同引用同一個(gè)數(shù)據(jù)副本。這意味著,如果信息發(fā)生了變化,那么所有相關(guān)文檔都需要進(jìn)行更新,但是在執(zhí)行查詢時(shí),只需要一次查詢,就可以得到所有數(shù)據(jù)。決定何時(shí)采用范式化何時(shí)采用反范式化時(shí)比較困難的。范式化能夠提高數(shù)據(jù)寫入速度,反范式化能夠提高數(shù)據(jù)讀取速度。需要根據(jù)自己應(yīng)用程序的十幾需要仔細(xì)權(quán)衡。33、mongodb與mysql區(qū)別MySQL是關(guān)系型數(shù)據(jù)庫(kù)。 優(yōu)勢(shì):在不同的引擎上有不同 的存儲(chǔ)方式。查詢語句是使用傳統(tǒng)的sql語句,擁有較為成熟的體系,成熟度很高。開源數(shù)據(jù)庫(kù)的份額在不斷增加,mysql的份額頁在持續(xù)增長(zhǎng)。 缺點(diǎn):在海量數(shù)據(jù)處理的時(shí)候效率會(huì)顯著變慢。Mongodb是非關(guān)系型數(shù)據(jù)庫(kù)(nosql ),屬于文檔型數(shù)據(jù)庫(kù)。文檔是mongoDB中數(shù)據(jù)的基本單元,類似關(guān)系數(shù)據(jù)庫(kù)的行,多個(gè)鍵值對(duì)有序地放置在一起便是文檔,語法有點(diǎn)類似javascript面向?qū)ο蟮牟樵冋Z言,它是一個(gè)面向集合的,模式自由的文檔型數(shù)據(jù)庫(kù)。存儲(chǔ)方式:虛擬內(nèi)存+持久化。查詢語句:是獨(dú)特的Mongodb的查詢方式。適合場(chǎng)景:事件的記錄,內(nèi)容管理或者博客平臺(tái)等等。架構(gòu)特點(diǎn):可以通過副本集,以及分片來實(shí)現(xiàn)高可用。數(shù)據(jù)處理:數(shù)據(jù)是存儲(chǔ)在硬盤上的,只不過需要經(jīng)常讀取的數(shù)據(jù)會(huì)被加載到內(nèi)存中,將數(shù)據(jù)存儲(chǔ)在物理內(nèi)存中,從而達(dá)到高速讀寫。成熟度與廣泛度:新興數(shù)據(jù)庫(kù),成熟度較低,Nosql數(shù)據(jù)庫(kù)中最為接近關(guān)系型數(shù)據(jù)庫(kù),比較完善的DB之一,適用人群不斷在增長(zhǎng)。優(yōu)點(diǎn):快速!在適量級(jí)的內(nèi)存的Mongodb的性能是非常迅速的,它將熱數(shù)據(jù)存儲(chǔ)在物理內(nèi)存中,使得熱數(shù)據(jù)的讀寫變得十分快。高擴(kuò)展性,存儲(chǔ)的數(shù)據(jù)格式是json格式!缺點(diǎn):不支持事務(wù),而且開發(fā)文檔不是很完全,完善。 Mysql和Mongodb主要應(yīng)用場(chǎng)景(簡(jiǎn)單了解敘述下即可)1.如果需要將mongodb作為后端db來代替mysql使用,即這里mysql與mongodb 屬于平行級(jí)別,那么,這樣的使用可能有以下幾種情況的考量: (1)mongodb所負(fù)責(zé)部分以文檔形式存儲(chǔ),能夠有較好的代碼親和性,json格式的直接寫入方便。(如日志之類) (2)從data models設(shè)計(jì)階段就將原子性考慮于其中,無需事務(wù)之類的輔助。開發(fā)用如nodejs之類的語言來進(jìn)行開發(fā),對(duì)開發(fā)比較方便。 (3)mongodb本身的failover機(jī)制,無需使用如MHA之類的方式實(shí)現(xiàn)。2.將mongodb作為類似redis ,memcache來做緩存db,為mysql提供服務(wù),或是后端日志收集分析。 考慮到mongodb屬于nosql型數(shù)據(jù)庫(kù),sql語句與數(shù)據(jù)結(jié)構(gòu)不如mysql那么親和 ,也會(huì)有很多時(shí)候?qū)ongodb做為輔助mysql而使用的類redis memcache 之類的緩存db來使用。 亦或是僅作日志收集分析。34、寫一個(gè)函數(shù)統(tǒng)計(jì)每一個(gè)元素出現(xiàn)的次數(shù)PHP 中的 array_count_values() 函數(shù)可以實(shí)現(xiàn) array_count_values() 函數(shù)用于統(tǒng)計(jì)數(shù)組中所有值出現(xiàn)的次數(shù)。 本函數(shù)返回一個(gè)數(shù)組,其元素的鍵名是原數(shù)組的值,鍵值是該值在原數(shù)組中出現(xiàn)的次數(shù)。35、手寫排序主要從原理方面來說:重點(diǎn)介紹冒泡排序和選擇排序 / 冒泡排序functionBubbleSort($arr)/獲得數(shù)組總長(zhǎng)度$num=count($arr);/正向遍歷數(shù)組for($i=1;$i=$i;$j-)/相鄰兩個(gè)數(shù)比較if($arr$j$arr$j-1)/暫存較小的數(shù)$iTemp=$arr$j-1;/把較大的放前面$arr$j-1=$arr$j;/較小的放后面$arr$j=$iTemp;return$arr; / 交換法排序functionExchangeSort($arr)$num=count($arr);/遍歷數(shù)組for($i=0;$i$num-1;$i+)/獲得當(dāng)前索引的下一個(gè)索引for($j=$i+1;$j$num;$j+)/比較相鄰兩個(gè)的值大小if($arr$j$arr$i)/暫存較小的數(shù)$iTemp=$arr$i;/把較大的放前面$arr$i=$arr$j;/較小的放后面$arr$j=$iTemp;return$arr; / 選擇法排序functionSelectSort($arr)/獲得數(shù)組總長(zhǎng)度$num=count($arr);/遍歷數(shù)組for($i=0;$i$num-1;$i+)/暫存當(dāng)前值$iTemp=$arr$i;/暫存當(dāng)前位置$iPos=$i;/遍歷當(dāng)前位置以后的數(shù)據(jù)for($j=$i+1;$j$num;$j+)/如果有小于當(dāng)前值的if($arr$j$iTemp)/暫存最小值$iTemp=$arr$j;/暫存位置$iPos=$j;/把當(dāng)前值放到算好的位置$arr$iPos=$arr$i;/把當(dāng)前值換成算好的值$arr$i=$iTemp;return$arr; / 插入法排序functionInsertSort($arr)$num=count($arr);/遍歷數(shù)組for($i=1;$i=0)&($iTemp$arr$iPos)/把前一個(gè)的值往后放一位$arr$iPos+1=$arr$iPos;/位置遞減$iPos-;$arr$iPos+1=$iTemp;return$arr; / 快速排序functionQuickSort($arr)$num=count($arr);$l=$r=0;$left=$right=array();/從索引的第二個(gè)開始遍歷數(shù)組for($i=1;$i$num;$i+)/如果值小于索引1if($arr$i1)$left=QuickSort($left);/排序后的數(shù)組$new_arr=$left;/將當(dāng)前數(shù)組第一個(gè)放到最后$new_arr=$arr0;/如果又索引有值則對(duì)右索引排序if($r1)$right=QuickSort($right);/根據(jù)右索引的長(zhǎng)度再次增加數(shù)據(jù)for($i=0;$itest(); / 復(fù)制對(duì)象將導(dǎo)致一個(gè)E_USER_ERROR. $test_clone = clone $test; ?40、nosql和Mysql的區(qū)別 也即非關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)。目前世界上主流的存儲(chǔ)系統(tǒng)大部分還是采用了關(guān)系型數(shù)據(jù)庫(kù),其主要有一下優(yōu)點(diǎn):1.事務(wù)處理保持?jǐn)?shù)據(jù)的一致性;2.由于以標(biāo)準(zhǔn)化為前提,數(shù)據(jù)更新的開銷很小(相同的字段基本上只有一處);3.可以進(jìn)行Join等復(fù)雜查詢。nosql在優(yōu)勢(shì)方面,主要體現(xiàn)在下面這三點(diǎn):1. 簡(jiǎn)單的擴(kuò)展:典型例子是Cassandra,由于其架構(gòu)是類似于經(jīng)典的P2P,所以能通過輕松地添加新的節(jié)點(diǎn)來擴(kuò)展這個(gè)集群;2. 快速的讀寫:主要例子有Redis,由于其邏輯簡(jiǎn)單,而且純內(nèi)存操作,使得其性能非常出色,單節(jié)點(diǎn)每秒可以處理超過10萬次讀寫操作;3. 低廉的成本:這是大多數(shù)分布式數(shù)據(jù)庫(kù)共有的特點(diǎn),因?yàn)橹饕际情_源軟件,沒有昂貴的License成本;4.但瑕不掩瑜,NoSQL數(shù)據(jù)庫(kù)還存在著很多的不足,常見主要有下面這幾個(gè):1. 不提供對(duì)SQL的支持:如果不支持SQL這樣的工業(yè)標(biāo)準(zhǔn),將會(huì)對(duì)用戶產(chǎn)生一定的學(xué)習(xí)和應(yīng)用遷移成本;2. 支持的特性不夠豐富:現(xiàn)有產(chǎn)品所提供的功能都比較有限,大多數(shù)NoSQL數(shù)據(jù)庫(kù)都不支持事務(wù),也不像 SQL Server和Oracle那樣能提供各種附加功能,比如BI和報(bào)表等;3. 現(xiàn)有產(chǎn)品的不夠成熟:大多數(shù)產(chǎn)品都還處于初創(chuàng)期,和關(guān)系型數(shù)據(jù)庫(kù)幾十年的完善不可同日而語;41、在TP中M方法與D方法的區(qū)別雖然都是實(shí)例化模型對(duì)象,兩者還是有區(qū)別的D和M的區(qū)別主要在于M方法不需要?jiǎng)?chuàng)建模型類文件,M方法不會(huì)讀取模型類,所以默認(rèn)情況下自動(dòng)驗(yàn)證是無效的,但是可以通過動(dòng)態(tài)賦值的方式實(shí)現(xiàn)而D方法必須有創(chuàng)建模型類。我們可以用下面兩種方法去創(chuàng)建一個(gè)數(shù)據(jù)表的映射對(duì)象第一種:$Test = D(Test)第二種:$Test = new Model(Test)雖然這兩種都可以對(duì)數(shù)據(jù)進(jìn)行select,insert,delete,udpate操作,在數(shù)據(jù)驗(yàn)證上有很大的不同,用第一種方式實(shí)例一個(gè)模型就會(huì)有數(shù)據(jù)檢查功能,如果 title 沒有填寫的話就會(huì)提示 “請(qǐng)輸入標(biāo)題” (這個(gè)是tp提供的一個(gè)自動(dòng)驗(yàn)證功能,當(dāng)然也需要在相應(yīng)的model中定義好驗(yàn)證條件);如果用第二種就沒有了這個(gè)數(shù)據(jù)驗(yàn)證功能,需要手動(dòng)驗(yàn)證。D函數(shù)實(shí)例化的是你當(dāng)前項(xiàng)目的Lib/Model下面的模塊。如果該模塊不存在的話,直接返回實(shí)例化Model的對(duì)象(意義就與M()函數(shù)相同)。而M只返回,實(shí)例化Model的對(duì)象。它的$name參數(shù)作為數(shù)據(jù)庫(kù)的表名來處理對(duì)數(shù)據(jù)庫(kù)的操作。42、對(duì)網(wǎng)站大訪問量的優(yōu)化方案 提高訪問速度。從硬件,最好從網(wǎng)站程序等等方面考慮。我給出以下幾種方案:1.盡量使用靜態(tài)頁,不要老使用動(dòng)態(tài)信息調(diào)用。非常容易出問題2.圖片內(nèi)容與網(wǎng)站數(shù)據(jù)盡量放在同一個(gè)服務(wù)器或者機(jī)房?jī)?nèi)。大量外鏈圖片是會(huì)有問題的3.一次又一次,一遍又一遍的分析流量走向,然后縮短瀏覽者瀏覽距離,舉個(gè)例子,瀏覽者如果現(xiàn)在在你網(wǎng)站看一個(gè)新聞需要點(diǎn)5次鼠標(biāo),你就要縮短這個(gè)點(diǎn)擊數(shù)。4.一次又一次,一遍又一遍的分析,修改你的網(wǎng)站數(shù)據(jù)庫(kù)結(jié)構(gòu),使其更加簡(jiǎn)潔。5.提高網(wǎng)站的安防能力6.買個(gè)好服務(wù)器,托管在一個(gè)好的機(jī)房!43、網(wǎng)站高并發(fā) 大流量訪問的處理及解決方法 第一:確認(rèn)服務(wù)器硬件是否足夠支持當(dāng)前的流量。 普通的P4服務(wù)器一般最多能支持每天10萬獨(dú)立IP,如果訪問量比這個(gè)還要大,那么必須首先配置一臺(tái)更高性能的專用服務(wù)器才能解決問題,否則怎么優(yōu)化都不可能徹底解決性能問題。 第二:優(yōu)化數(shù)據(jù)庫(kù)訪問 前臺(tái)實(shí)現(xiàn)完全的靜態(tài)化當(dāng)然最好,可以完全不用訪問數(shù)據(jù)庫(kù),不過對(duì)于頻繁更新的網(wǎng)站,靜態(tài)化往往不能滿足某些功能。 緩存就是另一個(gè)解決方案,就是將動(dòng)態(tài)數(shù)據(jù)存儲(chǔ)到緩存文件中,動(dòng)態(tài)網(wǎng)頁直接調(diào)用這些文件,而不必再訪問數(shù)據(jù)庫(kù),技術(shù)如果確實(shí)無法避免對(duì)數(shù)據(jù)庫(kù)的訪問,那么可以嘗試優(yōu)化數(shù)據(jù)庫(kù)的查詢SQL.避免使用Select * from這樣的語句,每次查詢只返回自己需要的結(jié)果,避免短時(shí)間內(nèi)的大量SQL查詢。最好在相同字段進(jìn)行比較操作,在建立好的索引字段上盡量減少函數(shù)操作,如果要做到極致的話需要代碼的優(yōu)化; 第三,禁止外部的盜鏈。 外部網(wǎng)站的或者文件盜鏈往往會(huì)帶來大量的負(fù)載壓力,因此應(yīng)該嚴(yán)格限制外部對(duì)于自身的圖片或者文件盜鏈,好在目前可以簡(jiǎn)單地通過refer來控制盜鏈,自己就可以通過配置來禁止盜鏈。當(dāng)然,偽造refer也可以通過來實(shí)現(xiàn)盜鏈,不過目前蓄意偽造refer盜鏈的還不多,可以先不去考慮,或者使用非技術(shù)手段來解決,比如在圖

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論