真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php數(shù)據(jù)庫優(yōu)化面試 php面試mysql優(yōu)化

面試高級php工程師,一般會問到哪些問題

高并發(fā)大訪問量的mysql優(yōu)化,服務(wù)器優(yōu)化?

網(wǎng)站設(shè)計制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺管理系統(tǒng);成都網(wǎng)站制作、成都網(wǎng)站設(shè)計收費合理;免費進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運營了十年的成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司。

字段建索引、主從數(shù)據(jù)庫、讀寫分離、表分區(qū)、負(fù)載均衡。

linux的慢查詢?nèi)罩緯涗沵ysql的超時查詢sql語句,定期察看進(jìn)行優(yōu)化。

2.大訪問量下秒殺模塊程序怎么設(shè)計,如果使用mysql會有多賣的情況,就是訂單超過庫存。

將訂單數(shù)據(jù)緩存到內(nèi)存,如果用數(shù)據(jù)庫直接崩掉,毫無懸念的。

3.緩存的使用

能用靜態(tài)的用靜態(tài),不能靜態(tài)的用內(nèi)存緩存,例如memcache、redis,不能緩存的用數(shù)據(jù)庫。

4.session可不可以跨域?怎么跨域?

將PHP session機制重寫(PHP提供),將session存儲在memcache或者數(shù)據(jù)庫就可以跨域了。

另外session能以三種方式存儲,文件、數(shù)據(jù)庫、緩存。

5.了不了解非關(guān)系型數(shù)據(jù)庫?

mongodb

6.會不會寫shell腳本以及l(fā)inux的操作

還會問一下時下流行的東西,比如做沒做過微信開發(fā),例如微信支付開發(fā)、APP移動開發(fā),等等問題。

問的核心東西都是圍繞這些轉(zhuǎn)的,如果有筆試會讓你寫sql,php功能(例如冒泡排序等排序),還有邏輯題。

我當(dāng)初面試了很多,這是一個我的面試經(jīng)驗的總結(jié),純手打忘采納。

PHP面試都會問什么?

簡單的列出10點供你參考吧

1、php基礎(chǔ)知識

2、常用函數(shù)使用

3、排序算法

4、引用變量的理解

5、session cookie 的理解

6、http請求 get post php://input 使用

7、mysql數(shù)據(jù)庫鏈表查詢,索引優(yōu)化方案等

8、linux基本命名的使用 crontab,grep ,tail等

9、緩存 redis,memcached等的使用

10、市場上常用的流行PHP框架掌握,熟悉情況

php 面試必考題 mysql的MyISAM 和 InnoDB 的區(qū)別

1.InnoDB不支持FULLTEXT類型的索引。

2.InnoDB 中不保存表的具體行數(shù),也就是說,執(zhí)行select count(*) from

table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(*)語句包含

where條件時,兩種表的操作是一樣的。

3.對于AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。

4.DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。MyISAM 是表所

innodb是行鎖

5.LOAD TABLE FROM MASTER(從主負(fù)載表)操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導(dǎo)入數(shù)據(jù)后再改成InnoDB表,但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用。

另外,InnoDB表的行鎖也不是絕對的,如果在執(zhí)行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表,例如update

table set num=1 where name like “"2%”

6.InnoDB 支持事物

選擇存儲引擎 根據(jù)實際情況選擇。

一般情況下如果查詢多建議使用myIsam 。

如果你需要事務(wù)處理或是外鍵,那么InnoDB 可能是比較好的方式。

優(yōu)化MYSQL數(shù)據(jù)庫的方法:

1,選取最適用的字段屬性,盡可能減少定義字段長度,盡量把字段設(shè)置NOT NULL,例如'省份,性別',最好設(shè)置為ENUM

2,使用join代替子查詢

3,使用聯(lián)合(UNION)來代替手動創(chuàng)建的臨時表

4,事務(wù)處理(保證數(shù)據(jù)完整性,例如添加和修改同時,兩者成立則都執(zhí)行,一者失敗都失?。?/p>

5,適當(dāng)建立索引(如何建立索引?索引的利與弊?)

6,優(yōu)化sql語句

7,explain可以看到mysql執(zhí)行計劃

8,分表(垂直分表,水平分表?)

9,數(shù)據(jù)庫主從

求職常見面試問題的回答技巧

求職常見面試問題的回答技巧

1、 請你做一下自我介紹?

回答提示:一般人回答這個問題過于平常,只說姓名、年齡、愛好、工作經(jīng)驗,這些在簡歷上都有。其實,企業(yè)最希望知道的是求職者能否勝任工作,包括:最強的技能、最深入研究的知識領(lǐng)域、性格中最積極的部分、做過的最成功的事,主要的成就等,這些回答關(guān)于學(xué)習(xí)或者生活都可以,但要突出積極的個性和做事的能力,說得合情合理企業(yè)才會相信。企業(yè)很重視一個人的禮貌,求職者要尊重考官,要在自我介紹結(jié)束后說一句“謝謝”。

2、 你覺得你最大的優(yōu)點是什么?

回答提示:沉著冷靜、條理清楚、立場堅定、頑強向上、樂于助人和關(guān)心他人、適應(yīng)能力和幽默感、樂觀和友愛。我在LAMP兄弟連經(jīng)過五個月的高強度培訓(xùn)及項目實戰(zhàn),使我適合這份工作。要例舉具體的優(yōu)點,如:做事認(rèn)真、抗壓能力強、樂于助人、學(xué)習(xí)能力強等,然后要舉實例證明這也是最重要的一點。

3、 說說你最大的缺點?

回答提示:這個問題企業(yè)問的概率很大,通常不希望聽到直接回答的缺點是什么,如果求職者說自己有強迫癥、愛忌妒人、非常懶、脾氣大、工作效率低,那么肯定不會被企業(yè)錄用。絕對不要自作聰明地回答“我最大的缺點是過于追求完美”,有的人以為這樣回答會顯得自己比較出色,但事實上,他已經(jīng)岌岌可危了。企業(yè)喜歡求職者從自己的優(yōu)點說起,中間加一些小缺點,最后再把問題轉(zhuǎn)回到優(yōu)點上,突出優(yōu)點的部分?;卮饦颖荆何移綍r比較愛忘事,然后我通過寫便條來提醒我自己什么時候該做什么事。

4、 你對加班的看法?

回答提示:實際上好多公司問這個問題,并不證明一定要加班,只是想測試你是否愿意為公司奉獻(xiàn)。

回答樣本:如果是工作需要我會義不容辭加班,我現(xiàn)在單身,沒有任何家庭負(fù)擔(dān),可以全身心的投入工作。但同時,我也會提高工作效率,減少不必要的加班。

5、 如何安排自己的時間?會不會排斥加班?

回答提示:基本上,如果上班工作有效率,工作量合理的話,應(yīng)該不太需要加班??墒俏乙仓烙袝r候很難避免加班,加上現(xiàn)在工作都采用責(zé)任制,所以我會調(diào)配自己的時間,全力配合。

分析:雖然不會有人心甘情愿的加班,但依舊要表現(xiàn)出高配合度的誠意。

6、 在五年的時間內(nèi),你的職業(yè)規(guī)劃?

回答提示:一般公司高管或者副總喜歡問個人職業(yè)規(guī)劃方面的問題。當(dāng)然,說出其他一些你感興趣的職位也是可以的,比如產(chǎn)品銷售部經(jīng)理,生產(chǎn)部經(jīng)理等一些與你的專業(yè)有相關(guān)背景的工作。要知道,考官總是喜歡有進(jìn)取心的應(yīng)聘者,此時如果說“不知道”,或許就會使你喪失一個好機會。最普通的回答應(yīng)該是“我準(zhǔn)備在技術(shù)領(lǐng)域有所作為”或“我希望能按照公司的管理思路發(fā)展”。能把職業(yè)規(guī)劃分成幾部分去完成,比如1個月、三個月、半年、1年以至3年的具體發(fā)展目標(biāo)和實施方案。

7、 你的朋友是如何評價你的?

回答提示: 面試官想從側(cè)面了解一下你的性格及與人相處的問題。

回答樣本一:我的朋友都說我是一個可以信賴的人。因為,我一旦答應(yīng)別人的事情,就一定會做到。如果我做不到,我就不會輕易許諾。

回答樣本二:我覺的我是一個比較隨和的人,與不同的人都可以友好相處。在我與人相處時,我總是能站在別人的角度考慮問題。

8、 你還有什么要問我的嗎?

回答提示:企業(yè)的這個問題看上去可有可無,其實很關(guān)鍵,企業(yè)不喜歡說“沒問題”的人,因為其很注重員工的個性和創(chuàng)新能力。企業(yè)不喜歡求職者問個人福利之類的問題,如果有人這樣問:咱公司對新入公司的員工有沒有什么培訓(xùn)項目,我可以參加嗎?或者說咱公司的晉升機制是什么樣的?公司希望我以后向什么方向發(fā)展?企業(yè)將很歡迎,因為體現(xiàn)出你對學(xué)習(xí)的熱情和對公司的忠誠度以及你的上進(jìn)心。

9、 你對薪資的要求?

回答提示:如果你對薪酬的要求太低,那顯然貶低自己的能力;如果你對薪酬的要求太高,那又會顯得你分量過重,公司受用不起。一些雇主通常都事先對求聘的職位定下開支預(yù)算,因而他們第一次提出的價錢往往是他們所能給予的最高價錢,他們問你只不過想證實一下這筆錢是否足以引起你對該工作的興趣。

回答樣本一:我對工資沒有硬性要求,我相信貴公司在處理我的問題上會友善合理。我注重的是找對工作機會,所以只要條件公平,我則不會計較太多。

回答樣本二:我受過系統(tǒng)的軟件編程的訓(xùn)練,不需要進(jìn)行大量的培訓(xùn),而且我本人也對編程特別感興趣。因此,我希望公司能根據(jù)我的情況和市場標(biāo)準(zhǔn)的水平,給我合理的薪水。

回答樣本三:如果你必須自己說出具體數(shù)目,請不要說一個寬泛的范圍,那樣你將只能得到最低限度的數(shù)字。最好給出一個具體的數(shù)字,這樣表明你已經(jīng)對當(dāng)今的人才市場作了調(diào)查,而且自己具有這方面的價值。

10、 為什么選擇我們這家公司?

回答提示:曾經(jīng)在報章雜志看過關(guān)于公司的報道,與自己所追求的理念有志一同。而貴公司在業(yè)界的成績也是有目共睹的,而且對員工的教育訓(xùn)練、升遷等也都很有制度。并具體詳談你調(diào)查到的內(nèi)容會讓面試官覺得你很用心。

分析:去面試前先做功課,了解一下該公司的背景,讓對方覺得你真的很有心想得到這份工作,而不只是探探路。

11、 談?wù)勀銓μ鄣目捶?

回答提示:①我認(rèn)為跳槽應(yīng)該是進(jìn)入到更好的企業(yè)和更大的平臺,而不是在公司待幾個月就認(rèn)為公司同事關(guān)系不好,自己發(fā)展有瓶頸就跳槽,這樣換工作是無意義的。②頻繁的'跳槽對單位和個人雙方都不利,應(yīng)該反對。

12、 談?wù)勅绾芜m應(yīng)新的工作環(huán)境?

回答提示①辦公室里每個人有各自的崗位與職責(zé),不得擅離崗位。②根據(jù)領(lǐng)導(dǎo)指示和工作安排,制定工作計劃,提前預(yù)備,并按計劃完成。③多請示并及時匯報,遇到不明白的要虛心請教。④抓間隙時間,多學(xué)習(xí),努力提高自己代碼質(zhì)量和代碼規(guī)范性。

13、 你來我們公司做前端可以嗎?

回答提示:面試者在考驗面試者是否對所述職位專一時,如果面試者過多表現(xiàn)在前端上的技能,那面試官就會用這個問題問你,如果你回答可以,那么面試官會認(rèn)為你求職目標(biāo)不明確,從而不會要你繼續(xù)面試。

14、 假設(shè)你在某單位工作,成績比較突出,得到領(lǐng)導(dǎo)的肯定。但同時你發(fā)現(xiàn)同事們越來越孤立你,你怎么看這個問題?你準(zhǔn)備怎么辦?

回答提示:①成績比較突出,得到領(lǐng)導(dǎo)的肯定是件好事情,以后更加努力。②檢討一下自己是不是對工作的熱心度超過同事間交往的熱心了,加強同事間的交往及共同的興趣愛好。③工作中,切勿傷害別人的自尊心④不再領(lǐng)導(dǎo)前撥弄是非。

15、 請說說你對我們公司了解多少?

回答提示:在去公司面試前上網(wǎng)查一下該公司主營業(yè)務(wù)(公司官網(wǎng)、百度-新聞、招聘網(wǎng)站)或者向公司內(nèi)的學(xué)長咨詢(向就業(yè)專員要電話)。如回答:貴公司有意改變策略,加強與國外大廠的OEM合作,自有品牌的部分則透過海外經(jīng)銷商。

16、 請說出你選擇這份工作的目的?

回答提示:這是想知道面試者對這份工作的熱忱及理解度,并篩選因一時興起而來應(yīng)試的人,如果是無經(jīng)驗者,可以強調(diào)“就算職種不同,也希望有機會發(fā)揮之前的經(jīng)驗”。包括對面試官的了解和團(tuán)隊的了解都是面試之前應(yīng)該了解的。

17、 你能為我們公司帶來什么呢?

回答提示:①假如你可以的話,試著告訴他們你可以減低他們的培養(yǎng)費用——“我已經(jīng)接受過LAMP兄弟連五個月的高強度培訓(xùn),立刻就可以上崗工作”。② 企業(yè)很想知道未來的員工能為企業(yè)做什么,求職者應(yīng)再次重復(fù)自己的優(yōu)勢,然后說:“就我的能力,我可以做一個優(yōu)秀的員工在組織中發(fā)揮能力,給組織帶來高效率和更多的收益”。③給公司帶來活力,“我更加積極、更加努力、更加有朝氣?!?/p>

18、 怎樣看待學(xué)歷和能力?

回答提示:學(xué)歷不一定完全代表能力,雖然我的學(xué)歷不夠硬但是我會在技術(shù)上更努力更認(rèn)真,并在短期內(nèi)發(fā)揮自己的優(yōu)勢,把公司項目做的更好。

19、 你的業(yè)余愛好是什么?

回答提示:找一些富于團(tuán)體合作精神的,這里有一個真實的故事:有人被否決掉,因為他的愛好是深海潛水。主考官說:因為這是一項單人活動,我不敢肯定他能否適應(yīng)團(tuán)體工作?;蛘呖醇夹g(shù)論壇,會給工作帶來新的思路,或者看關(guān)于數(shù)據(jù)庫優(yōu)化/數(shù)據(jù)原理的書籍。

20、 作為被面試者請你給我打一下分?

回答提示:試著列出四個優(yōu)點和一個非常非常非常小的缺點(可以抱怨一下設(shè)施,沒有明確責(zé)任人的缺點是不會有人介意的)。

21、 你怎么理解PHP這個職位?

回答提示:把崗位職責(zé)和任務(wù)及工作態(tài)度闡述一下,更多的說PHP發(fā)展和優(yōu)勢以及你學(xué)習(xí)PHP的原因。比如:PHP語言上的應(yīng)用發(fā)展,PHP最大特點就是語法靈活,開發(fā)速度快, 開發(fā)成本低,最適合開發(fā)業(yè)務(wù)流程,所以互聯(lián)中使用PHP開發(fā)動態(tài)網(wǎng)站將成為主流。

22、 喜歡這份工作的哪一點?

回答提示:每個人的價值觀不同,自然評斷的標(biāo)準(zhǔn)也會不同,但是,在回答面試官這個問題時可不能太直接就把自己心理的話說出來,尤其是薪資方面的問題,不過一些無傷大雅的回答是不錯的考慮,如交通方便,工作性質(zhì)及內(nèi)容頗能符合自己的興趣等等都是不錯的答案,不過如果這時自己能仔細(xì)思考出這份工作的與眾不同之處,相信在面試上會大大加分。

23、 說說你對PHP行業(yè)和發(fā)展趨勢的看法?

回答提示:

第一、語言本身的發(fā)展上,PHP從5版本之后將面向過程轉(zhuǎn)變到面向?qū)ο笏枷敕矫?,做出過一次重大的改變, PHP以后的技術(shù)方展,除了在基本語法上保持開發(fā)高效之外,需要將部分模塊不段升級和優(yōu)化。 也要從運行效率上有大的提高,以及多提供一些針對不同企業(yè)擴(kuò)展的第三方類庫進(jìn)行豐富。

第二、PHP語言上的應(yīng)用發(fā)展,PHP最大特點就是語法靈活,開發(fā)速度快, 開發(fā)成本低,最適合開發(fā)業(yè)務(wù)流程,所以互聯(lián)中使用PHP開發(fā)動態(tài)網(wǎng)站將成為主流。

24、 對工作的期望與目標(biāo)何在?

回答提示:就是職業(yè)規(guī)劃的另一種問法,也是公司在以后培養(yǎng)你的方向上的選擇??梢蕴嵋恍┚唧w的想法和做法。讓上級認(rèn)為你之前考慮過這個事,而且重視自己的職業(yè)發(fā)展。

25、 就你申請的這個職位,你認(rèn)為你還欠缺什么?

回答提示:企業(yè)喜歡問求職者弱點,他們希望看到這樣的求職者:繼續(xù)重復(fù)自己的優(yōu)勢,然后說:“對于這個職位和我的能力來說,我相信自己是可以勝任的,只是缺乏經(jīng)驗,這個問題我想我可以進(jìn)入公司以后以最短的時間來解決,我的學(xué)習(xí)能力很強,我相信可以很快融入公司的企業(yè)文化,進(jìn)入工作狀態(tài)。”企業(yè)喜歡能夠巧妙地躲過難題的求職者。

26、 你通常如何處理別人的批評?

回答提示:①沈默是金,不必說什么,否則情況更糟,不過我會接受建設(shè)性的批評。②我會等大家冷靜下來再討論,反思自己是否有這方面問題并進(jìn)行完善。

27、 怎樣對待自己的失敗?

回答提示:我認(rèn)為失敗不是壞事,一件事情沒有成功肯定是我做的地方有不是,我覺得能積極面對失敗并總結(jié)經(jīng)驗成功就指日可待。

28、 什么會讓你有成就感?

回答提示:為公司竭力效勞,盡我所能,完成一個項目,并且能提出自己的創(chuàng)新想法。

29、 眼下你生活中最重要的是什么?

回答提示:對我來說,能在這個領(lǐng)域找到工作是最重要的,能在公司任職對我說最重要。

30、 你為什么愿意到我們公司來工作?

回答提示:對于這個問題,你要格外小心,如果你已經(jīng)對該單位作了研究,你可以回答一些詳細(xì)的原因,像“公司本身的高技術(shù)開發(fā)環(huán)境很吸引我。”我希望能夠進(jìn)入一家與我共同成長的公司”,“你們公司一直都穩(wěn)定發(fā)展,在近幾年來在市場上很有競爭力”,“我認(rèn)為公司能夠給我提供一個與眾不同的發(fā)展道路。”這都顯示出你已經(jīng)做了一些調(diào)查,也說明你對自己的未來有了較為具體的遠(yuǎn)景規(guī)劃。

php面試題 memcache和redis的區(qū)別

Redis與Memcached的區(qū)別

傳統(tǒng)MySQL+ Memcached架構(gòu)遇到的問題

實際MySQL是適合進(jìn)行海量數(shù)據(jù)存儲的,通過Memcached將熱點數(shù)據(jù)加載到cache,加速訪問,很多公司都曾經(jīng)使用過這樣的架構(gòu),但隨著業(yè)務(wù)數(shù)據(jù)量的不斷增加,和訪問量的持續(xù)增長,我們遇到了很多問題:

1.MySQL需要不斷進(jìn)行拆庫拆表,Memcached也需不斷跟著擴(kuò)容,擴(kuò)容和維護(hù)工作占據(jù)大量開發(fā)時間。

2.Memcached與MySQL數(shù)據(jù)庫數(shù)據(jù)一致性問題。

3.Memcached數(shù)據(jù)命中率低或down機,大量訪問直接穿透到DB,MySQL無法支撐。

4.跨機房cache同步問題。

眾多NoSQL百花齊放,如何選擇

最近幾年,業(yè)界不斷涌現(xiàn)出很多各種各樣的NoSQL產(chǎn)品,那么如何才能正確地使用好這些產(chǎn)品,最大化地發(fā)揮其長處,是我們需要深入研究和思考的

問題,實際歸根結(jié)底最重要的是了解這些產(chǎn)品的定位,并且了解到每款產(chǎn)品的tradeoffs,在實際應(yīng)用中做到揚長避短,總體上這些NoSQL主要用于解

決以下幾種問題

1.少量數(shù)據(jù)存儲,高速讀寫訪問。此類產(chǎn)品通過數(shù)據(jù)全部in-momery 的方式來保證高速訪問,同時提供數(shù)據(jù)落地的功能,實際這正是Redis最主要的適用場景。

2.海量數(shù)據(jù)存儲,分布式系統(tǒng)支持,數(shù)據(jù)一致性保證,方便的集群節(jié)點添加/刪除。

3.這方面最具代表性的是dynamo和bigtable 2篇論文所闡述的思路。前者是一個完全無中心的設(shè)計,節(jié)點之間通過gossip方式傳遞集群信息,數(shù)據(jù)保證最終一致性,后者是一個中心化的方案設(shè)計,通過類似一個分布式鎖服務(wù)來保證強一致性,數(shù)據(jù)寫入先寫內(nèi)存和redo log,然后定期compat歸并到磁盤上,將隨機寫優(yōu)化為順序?qū)?,提高寫入性能?/p>

4.Schema free,auto-sharding等。比如目前常見的一些文檔數(shù)據(jù)庫都是支持schema-free的,直接存儲json格式數(shù)據(jù),并且支持auto-sharding等功能,比如mongodb。

面對這些不同類型的NoSQL產(chǎn)品,我們需要根據(jù)我們的業(yè)務(wù)場景選擇最合適的產(chǎn)品。

Redis適用場景,如何正確的使用

前面已經(jīng)分析過,Redis最適合所有數(shù)據(jù)in-momory的場景,雖然Redis也提供持久化功能,但實際更多的是一個disk-

backed的功能,跟傳統(tǒng)意義上的持久化有比較大的差別,那么可能大家就會有疑問,似乎Redis更像一個加強版的Memcached,那么何時使用

Memcached,何時使用Redis呢?

如果簡單地比較Redis與Memcached的區(qū)別,大多數(shù)都會得到以下觀點:

1 Redis不僅僅支持簡單的k/v類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。

2 Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。

3 Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中,重啟的時候可以再次加載進(jìn)行使用。

拋開這些,可以深入到Redis內(nèi)部構(gòu)造去觀察更加本質(zhì)的區(qū)別,理解Redis的設(shè)計。

Redis中,并不是所有的數(shù)據(jù)都一直存儲在內(nèi)存中的。這是和Memcached相比一個最大的區(qū)別。Redis只會緩存所有的

key的信息,如果Redis發(fā)現(xiàn)內(nèi)存的使用量超過了某一個閥值,將觸發(fā)swap的操作,Redis根據(jù)“swappability =

age*log(size_in_memory)”計

算出哪些key對應(yīng)的value需要swap到磁盤。然后再將這些key對應(yīng)的value持久化到磁盤中,同時在內(nèi)存中清除。這種特性使得Redis可以

保持超過其機器本身內(nèi)存大小的數(shù)據(jù)。當(dāng)然,機器本身的內(nèi)存必須要能夠保持所有的key,畢竟這些數(shù)據(jù)是不會進(jìn)行swap操作的。同時由于Redis將內(nèi)存

中的數(shù)據(jù)swap到磁盤中的時候,提供服務(wù)的主線程和進(jìn)行swap操作的子線程會共享這部分內(nèi)存,所以如果更新需要swap的數(shù)據(jù),Redis將阻塞這個

操作,直到子線程完成swap操作后才可以進(jìn)行修改。

使用Redis特有內(nèi)存模型前后的情況對比:

VM off: 300k keys, 4096 bytes values: 1.3G used

VM on: 300k keys, 4096 bytes values: 73M used

VM off: 1 million keys, 256 bytes values: 430.12M used

VM on: 1 million keys, 256 bytes values: 160.09M used

VM on: 1 million keys, values as large as you want, still: 160.09M used

當(dāng)

從Redis中讀取數(shù)據(jù)的時候,如果讀取的key對應(yīng)的value不在內(nèi)存中,那么Redis就需要從swap文件中加載相應(yīng)數(shù)據(jù),然后再返回給請求方。

這里就存在一個I/O線程池的問題。在默認(rèn)的情況下,Redis會出現(xiàn)阻塞,即完成所有的swap文件加載后才會相應(yīng)。這種策略在客戶端的數(shù)量較小,進(jìn)行

批量操作的時候比較合適。但是如果將Redis應(yīng)用在一個大型的網(wǎng)站應(yīng)用程序中,這顯然是無法滿足大并發(fā)的情況的。所以Redis運行我們設(shè)置I/O線程

池的大小,對需要從swap文件中加載相應(yīng)數(shù)據(jù)的讀取請求進(jìn)行并發(fā)操作,減少阻塞的時間。

如果希望在海量數(shù)據(jù)的環(huán)境中使用好Redis,我相信理解Redis的內(nèi)存設(shè)計和阻塞的情況是不可缺少的。

補充的知識點:

memcached和redis的比較

1 網(wǎng)絡(luò)IO模型

Memcached是多線程,非阻塞IO復(fù)用的網(wǎng)絡(luò)模型,分為監(jiān)聽主線程和worker子線程,監(jiān)聽線程監(jiān)聽網(wǎng)絡(luò)連接,接受請求后,將連接描述

字pipe 傳遞給worker線程,進(jìn)行讀寫IO, 網(wǎng)絡(luò)層使用libevent封裝的事件庫,多線程模型可以發(fā)揮多核作用,但是引入了cache

coherency和鎖的問題,比如,Memcached最常用的stats

命令,實際Memcached所有操作都要對這個全局變量加鎖,進(jìn)行計數(shù)等工作,帶來了性能損耗。

(Memcached網(wǎng)絡(luò)IO模型)

Redis使用單線程的IO復(fù)用模型,自己封裝了一個簡單的AeEvent事件處理框架,主要實現(xiàn)了epoll、kqueue和select,

對于單純只有IO操作來說,單線程可以將速度優(yōu)勢發(fā)揮到最大,但是Redis也提供了一些簡單的計算功能,比如排序、聚合等,對于這些操作,單線程模型實

際會嚴(yán)重影響整體吞吐量,CPU計算過程中,整個IO調(diào)度都是被阻塞住的。

2.內(nèi)存管理方面

Memcached使用預(yù)分配的內(nèi)存池的方式,使用slab和大小不同的chunk來管理內(nèi)存,Item根據(jù)大小選擇合適的chunk存儲,內(nèi)

存池的方式可以省去申請/釋放內(nèi)存的開銷,并且能減小內(nèi)存碎片產(chǎn)生,但這種方式也會帶來一定程度上的空間浪費,并且在內(nèi)存仍然有很大空間時,新的數(shù)據(jù)也可

能會被剔除,原因可以參考Timyang的文章:

Redis使用現(xiàn)場申請內(nèi)存的方式來存儲數(shù)據(jù),并且很少使用free-list等方式來優(yōu)化內(nèi)存分配,會在一定程度上存在內(nèi)存碎片,Redis

跟據(jù)存儲命令參數(shù),會把帶過期時間的數(shù)據(jù)單獨存放在一起,并把它們稱為臨時數(shù)據(jù),非臨時數(shù)據(jù)是永遠(yuǎn)不會被剔除的,即便物理內(nèi)存不夠,導(dǎo)致swap也不會剔

除任何非臨時數(shù)據(jù)(但會嘗試剔除部分臨時數(shù)據(jù)),這點上Redis更適合作為存儲而不是cache。

3.數(shù)據(jù)一致性問題

Memcached提供了cas命令,可以保證多個并發(fā)訪問操作同一份數(shù)據(jù)的一致性問題。 Redis沒有提供cas 命令,并不能保證這點,不過Redis提供了事務(wù)的功能,可以保證一串 命令的原子性,中間不會被任何操作打斷。

4.存儲方式及其它方面

Memcached基本只支持簡單的key-value存儲,不支持枚舉,不支持持久化和復(fù)制等功能

Redis除key/value之外,還支持list,set,sorted set,hash等眾多數(shù)據(jù)結(jié)構(gòu),提供了KEYS

進(jìn)行枚舉操作,但不能在線上使用,如果需要枚舉線上數(shù)據(jù),Redis提供了工具可以直接掃描其dump文件,枚舉出所有數(shù)據(jù),Redis還同時提供了持久化和復(fù)制等功能。

5.關(guān)于不同語言的客戶端支持

在不同語言的客戶端方面,Memcached和Redis都有豐富的第三方客戶端可供選擇,不過因為Memcached發(fā)展的時間更久一些,目

前看在客戶端支持方面,Memcached的很多客戶端更加成熟穩(wěn)定,而Redis由于其協(xié)議本身就比Memcached復(fù)雜,加上作者不斷增加新的功能

等,對應(yīng)第三方客戶端跟進(jìn)速度可能會趕不上,有時可能需要自己在第三方客戶端基礎(chǔ)上做些修改才能更好的使用。

根據(jù)以上比較不難看出,當(dāng)我們不希望數(shù)據(jù)被踢出,或者需要除key/value之外的更多數(shù)據(jù)類型時,或者需要落地功能時,使用Redis比使用Memcached更合適。

關(guān)于Redis的一些周邊功能

Redis除了作為存儲之外還提供了一些其它方面的功能,比如聚合計算、pubsub、scripting等,對于此類功能需要了解其實現(xiàn)原

理,清楚地了解到它的局限性后,才能正確的使用,比如pubsub功能,這個實際是沒有任何持久化支持的,消費方連接閃斷或重連之間過來的消息是會全部丟

失的,又比如聚合計算和scripting等功能受Redis單線程模型所限,是不可能達(dá)到很高的吞吐量的,需要謹(jǐn)慎使用。

總的來說Redis作者是一位非常勤奮的開發(fā)者,可以經(jīng)??吹阶髡咴趪L試著各種不同的新鮮想法和思路,針對這些方面的功能就要求我們需要深入了解后再使用。

總結(jié):

1.Redis使用最佳方式是全部數(shù)據(jù)in-memory。

2.Redis更多場景是作為Memcached的替代者來使用。

3.當(dāng)需要除key/value之外的更多數(shù)據(jù)類型支持時,使用Redis更合適。

4.當(dāng)存儲的數(shù)據(jù)不能被剔除時,使用Redis更合適。

談?wù)凪emcached與Redis(一)

1. Memcached簡介

Memcached是以LiveJurnal旗下Danga Interactive公司的Bard

Fitzpatric為首開發(fā)的高性能分布式內(nèi)存緩存服務(wù)器。其本質(zhì)上就是一個內(nèi)存key-value數(shù)據(jù)庫,但是不支持?jǐn)?shù)據(jù)的持久化,服務(wù)器關(guān)閉之后數(shù)

據(jù)全部丟失。Memcached使用C語言開發(fā),在大多數(shù)像Linux、BSD和Solaris等POSIX系統(tǒng)上,只要安裝了libevent即可使

用。在Windows下,它也有一個可用的非官方版本()。Memcached

的客戶端軟件實現(xiàn)非常多,包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang,

Lua等。當(dāng)前Memcached使用廣泛,除了LiveJournal以外還有Wikipedia、Flickr、Twitter、Youtube和

WordPress等。

在Window系統(tǒng)下,Memcached的安裝非常方便,只需從以上給出的地址下載可執(zhí)行軟件然后運行memcached.exe –d

install即可完成安裝。在Linux等系統(tǒng)下,我們首先需要安裝libevent,然后從獲取源碼,make make

install即可。默認(rèn)情況下,Memcached的服務(wù)器啟動程序會安裝到/usr/local/bin目錄下。在啟動Memcached時,我們可

以為其配置不同的啟動參數(shù)。

1.1 Memcache配置

Memcached服務(wù)器在啟動時需要對關(guān)鍵的參數(shù)進(jìn)行配置,下面我們就看一看Memcached在啟動時需要設(shè)定哪些關(guān)鍵參數(shù)以及這些參數(shù)的作用。

1)-p num Memcached的TCP監(jiān)聽端口,缺省配置為11211;

2)-U num Memcached的UDP監(jiān)聽端口,缺省配置為11211,為0時表示關(guān)閉UDP監(jiān)聽;

3)-s file Memcached監(jiān)聽的UNIX套接字路徑;

4)-a mask 訪問UNIX套接字的八進(jìn)制掩碼,缺省配置為0700;

5)-l addr 監(jiān)聽的服務(wù)器IP地址,默認(rèn)為所有網(wǎng)卡;

6)-d 為Memcached服務(wù)器啟動守護(hù)進(jìn)程;

7)-r 最大core文件大?。?/p>

8)-u username 運行Memcached的用戶,如果當(dāng)前為root的話需要使用此參數(shù)指定用戶;

9)-m num 分配給Memcached使用的內(nèi)存數(shù)量,單位是MB;

10)-M 指示Memcached在內(nèi)存用光的時候返回錯誤而不是使用LRU算法移除數(shù)據(jù)記錄;

11)-c num 最大并發(fā)連數(shù),缺省配置為1024;

12)-v –vv –vvv 設(shè)定服務(wù)器端打印的消息的詳細(xì)程度,其中-v僅打印錯誤和警告信息,-vv在-v的基礎(chǔ)上還會打印客戶端的命令和相應(yīng),-vvv在-vv的基礎(chǔ)上還會打印內(nèi)存狀態(tài)轉(zhuǎn)換信息;

13)-f factor 用于設(shè)置chunk大小的遞增因子;

14)-n bytes 最小的chunk大小,缺省配置為48個字節(jié);

15)-t num Memcached服務(wù)器使用的線程數(shù),缺省配置為4個;

16)-L 嘗試使用大內(nèi)存頁;

17)-R 每個事件的最大請求數(shù),缺省配置為20個;

18)-C 禁用CAS,CAS模式會帶來8個字節(jié)的冗余;

2. Redis簡介

Redis是一個開源的key-value存儲系統(tǒng)。與Memcached類似,Redis將大部分?jǐn)?shù)據(jù)存儲在內(nèi)存中,支持的數(shù)據(jù)類型包括:字

符串、哈希表、鏈表、集合、有序集合以及基于這些數(shù)據(jù)類型的相關(guān)操作。Redis使用C語言開發(fā),在大多數(shù)像Linux、BSD和Solaris等

POSIX系統(tǒng)上無需任何外部依賴就可以使用。Redis支持的客戶端語言也非常豐富,常用的計算機語言如C、C#、C++、Object-C、PHP、

Python、Java、Perl、Lua、Erlang等均有可用的客戶端來訪問Redis服務(wù)器。當(dāng)前Redis的應(yīng)用已經(jīng)非常廣泛,國內(nèi)像新浪、淘

寶,國外像Flickr、Github等均在使用Redis的緩存服務(wù)。

Redis的安裝非常方便,只需從獲取源碼,然后make make

install即可。默認(rèn)情況下,Redis的服務(wù)器啟動程序和客戶端程序會安裝到/usr/local/bin目錄下。在啟動Redis服務(wù)器時,我們

需要為其指定一個配置文件,缺省情況下配置文件在Redis的源碼目錄下,文件名為redis.conf。

PHP程序員上機面試題(并附答案,回答好的加分)

某大公司的PHP面試題

管理提醒: 本帖被 haowubai 執(zhí)行取消置頂操作(2009-07-30)

1. 如何用php的環(huán)境變量得到一個網(wǎng)頁地址的內(nèi)容?ip地址又要怎樣得到?

[php]

echo $_SERVER ['PHP_SELF'];

echo $_SERVER ['SERVER_ADDR'];

[/php]

2. 求兩個日期的差數(shù),例如2007-2-5 ~ 2007-3-6 的日期差數(shù)

[php]

$begin=strtotime('2007-2-5');

$end=strtotime('2007-3-6');

echo ($end-$begin)/(24*3600);

[/php]

3. 請寫一個函數(shù),實現(xiàn)以下功能:

字符串“open_door” 轉(zhuǎn)換成 “OpenDoor”、”make_by_id” 轉(zhuǎn)換成 ”MakeById”。

[php]

function changeStyle( $str) {

/*$str = str_replace ( "_", " ", $str );

$str = ucwords ( $str );

$str = str_replace ( " ", "", $str );

return $str;*/

$arrStr=explode('_',$str);

foreach($arrStr as $key=$value){

$arrStr[$key]=strtoupper(substr($value,0,1)).substr($value,1);

}

return implode('',$arrStr);

}

$s = "open_door";

echo changeStyle ( $s );

[/php]

4. 要求寫一段程序,實現(xiàn)以下數(shù)組$arr1轉(zhuǎn)換成數(shù)組$arr2:

[php]$arr1 = array (

'0' = array ('fid' = 1, 'tid' = 1, 'name' ='Name1' ),

'1' = array ('fid' = 1, 'tid' = 2 , 'name' ='Name2' ),

'2' = array ('fid' = 1, 'tid' = 5 , 'name' ='Name3' ),

'3' = array ('fid' = 1, 'tid' = 7 , 'name' ='Name4' ),

'4' = array ('fid' = 3, 'tid' = 9, 'name' ='Name5' )

);

$arr2 = array (

'0' = array (

'0' = array ( 'tid' = 1, 'name' = 'Name1'),

'1' = array ( 'tid' = 2, 'name' = 'Name2'),

'2' = array ( 'tid' = 5, 'name' = 'Name3'),

'3' = array ( 'tid' = 7, 'name' = 'Name4')

),

'1' = array (

'0' = array ( 'tid' = 9, 'name' = 'Name5' )

)

);

?php

$arr1 = array (

'0' = array ('fid' = 1, 'tid' = 1, 'name' ='Name1' ),

'1' = array ('fid' = 1, 'tid' = 2 , 'name' ='Name2' ),

'2' = array ('fid' = 1, 'tid' = 5 , 'name' ='Name3' ),

'3' = array ('fid' = 1, 'tid' = 7 , 'name' ='Name4' ),

'4' = array ('fid' = 3, 'tid' = 9, 'name' ='Name5' )

);

function changeArrayStyle($arr){

foreach($arr as $key=$value){

$result[$value['fid']][]=$value;

}

return array_values($result);

}

$arr2=changeArrayStyle($arr1);

echo "pre";

var_dump($arr2);

[/php]

5. 請簡述數(shù)據(jù)庫設(shè)計的范式及應(yīng)用。

一般第3范式就足以,用于表結(jié)構(gòu)的優(yōu)化,這樣做既可以避免應(yīng)用程序過于復(fù)雜同時也避免了SQL語句過于龐大所造成系統(tǒng)效率低下。

ANSWER:

第一范式:若關(guān)系模式R的每一個屬性是不可再分解的,再屬于第一范式。

第二范式:若R屬于第一范式,且所有的非碼屬性都完全函數(shù)依賴于碼屬性,則為第二范式。

第三范式:若R屬于第二范式,且所有的非碼屬性沒有一個是傳遞函數(shù)依賴于候選碼,則屬于第三范式。

6.一個表中的Id有多個記錄,把所有這個id的記錄查出來,并顯示共有多少條記錄數(shù),用SQL語句及視圖、存儲過程分別實現(xiàn)。

存儲過程:

[php]

DELIMITER //

create procedure proc_countNum(in columnId int,out rowsNo int)

begin

select count(*) into rowsNo from member where member_id=columnId;

end

call proc_countNum(1,@no);

select @no;

[/php]

視圖:

create view v_countNum as select member_id,count(*) as countNum from member group by member_id

select countNum from v_countNum where member_id=1

7 表中有A B C三列,用SQL語句實現(xiàn):當(dāng)A列大于B列時選擇A列否則選擇B列,當(dāng)B列大于C列時選擇B列否則選擇C列。

[php]select

case

when first_namemiddle_name then

case when first_namelast_name then first_name

else last_name end

else

case when middle_namelast_name then middle_name else last_name

end

end as name

from member

[/php]

8請簡述項目中優(yōu)化sql語句執(zhí)行效率的方法,從哪些方面,sql語句性能如何分析?

ANSWER: sql優(yōu)化有鳥用,不如直接加索引。

9 如果模板是用smarty模板。怎樣用section語句來顯示一個名為$data的數(shù)組。比如:

[php]$data = array(

[0] = array( [id]=8 [name]=’name1′)

[1] = array( [id]=10 [name]=’name2′)

[2] = array( [id]=15 [name]=’name3′)

……

)[/php]

寫出在模板頁的代碼? 若用foreach語句又要怎樣顯示呢?

占無答案.

10 寫一個函數(shù),能夠遍歷一個文件夾下的所有文件和子文件夾。(目錄操作)

[php] ?php

$d = dir(dirname(__file__));

//echo "Handle: " . $d-handle . "\n";

//echo "Path: " . $d-path . "\n";

while ( false !== ($entry = $d-read ()) ) {

echo $entry . "br /";

}

$d-close ();

[/php]

11 兩張表 city表和province表。分別為城市與省份的關(guān)系表。

city:

id City Provinceid

1 廣州 1

2 深圳 1

3 惠州 1

4 長沙 2

5 武漢 3

………. 廣州

province:

id Province

1 廣東

2 湖南

3 湖北

……….

(1) 寫一條sql語句關(guān)系兩個表,實現(xiàn):顯示城市的基本信息。?

(2) 顯示字段:城市id ,城市名, 所屬省份 。

如:

Id(城市id) Cityname(城市名) Privence(所屬省份)

。。。。。。。。。

。。。。。。。。。

(2)如果要統(tǒng)計每個省份有多少個城市,請用group by 查詢出來。?

顯示字段:省份id ,省份名,包含多少個城市。

ANSWER:

1.select A.id,A.Cityname,B.Province from city A,province B where A.provinceid=B.id

2.select B.id,B.Province,count(*) as num from city A,province B where A.provinceid=B.id group by B.id

12. 按照你的經(jīng)驗請簡述軟件工程進(jìn)行軟件開發(fā)的步驟。以下工具Rational Rose、PowerDesigner、Project、VSS或CVS、TestDirector使用過那種,有缺點是什么?

公司用dbdesigner及cvs,測試管理工具用的是Mantis

13. 請簡述操作系統(tǒng)的線程與進(jìn)程的區(qū)別。列舉LINUX下面你使用過的軟件?

14. 請使用偽語言結(jié)合數(shù)據(jù)結(jié)構(gòu)冒泡排序法對以下一組數(shù)據(jù)進(jìn)行排序 10 2 36 14 10 25 23 85 99 45。

[php]function bubble_sort( $arr){

$number=count($arr);

for($i=0;$i$number-1;$i++){

for($j=0;$j$number-1-$i;$j++){

if($arr[$j]$arr[$j+1]){

$tmp=$arr[$j];

$arr[$j]=$arr[$j+1];

$arr[$j+1]=$tmp;

}

}

}

}

$str="10 2 36 14 10 25 23 85 99 45";

$arr=explode(" ",$str);

bubble_sort($arr);

echo "pre";

var_dump($arr);

[/php]


本文標(biāo)題:php數(shù)據(jù)庫優(yōu)化面試 php面試mysql優(yōu)化
分享路徑:http://weahome.cn/article/hijesc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部