php面試技巧及常見面試題答案

來自一個北京phper菜雞的面試心得分享甘改,面試的高級職位旅东,文章均為個人觀點,不喜勿噴十艾。去年抵代、前年都有大批量面試,當(dāng)然今年也有一些忘嫉,小本本上記錄了自己上百家公司面試情況荤牍,得出的結(jié)果是堅持才會勝利,主要介紹面試環(huán)節(jié)部分榄融。

面試有兩種情況 1.在職参淫,2.不在職。在職的話可以挑選自己滿意的公司投遞簡歷愧杯,一般做技術(shù)的還是比較看重工作和技術(shù)氛圍涎才。不在職就需要薪資之類的范圍篩選然后海投了,各個平臺都有簡歷力九。拉勾耍铜、boss直聘、智聯(lián)跌前、51job棕兼、獵聘等等。個人覺得在職去面試還是相對較好的抵乓,一方面面試不需要太過緊張伴挚,另一方面是因為面試也是很累的靶衍。

下面開始正題

第一個環(huán)節(jié):簡歷

簡歷至關(guān)重要,簡歷是塊敲門磚茎芋,需要勾起hr和技術(shù)部門的好奇和認(rèn)可颅眶。能不能約到面試就看你拋的是什么了,而且面試都是基于簡歷來圍繞回答的田弥,所以你需要對你的簡歷特別熟悉涛酗,在公司的時間段,做了哪些事偷厦。不會寫的可以參考這篇知乎問答 -- 程序員簡歷該怎么寫

第二個環(huán)節(jié):面試

部分公司有可能會筆試商叹,但是答與不答看你自己。有的筆試好幾頁只泼,什么手寫算法剖笙、方法之類的我一般都會委婉的回避,跟對方說一會還有事能不能直接跟技術(shù)聊聊辜妓,一般對方不會拒絕的枯途。

再次聲明,你需要對簡歷的技能點很熟籍滴,不是很熟最起碼也要會用酪夷。不然最好別往上寫,否則那只會坑了你自己孽惰。一般來說都是圍繞著聊晚岭,可能會有一些擴(kuò)展和深度提問,也有可能問一些基礎(chǔ)問題和面試官公司所用技術(shù)點勋功。下面會說一些常用的技術(shù)點和回答坦报,大部分答案來自google查找。

技術(shù)點有trait yield spl composer 閉包 框架 魔術(shù)方法 函數(shù)(字符串 數(shù)組 時間 數(shù)據(jù)庫)等等狂鞋。

1.file_get_contents和curl區(qū)別

curl支持很多協(xié)議片择,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP,也就是說骚揍,它能做到很多file_get_content做不到的事情字管。curl在php可以實現(xiàn)遠(yuǎn)程獲取和采集內(nèi)容;實現(xiàn)PHP網(wǎng)頁版的FTP上傳下載信不;實現(xiàn)模擬登陸嘲叔;實現(xiàn)接口對接,數(shù)據(jù)傳輸抽活;實現(xiàn)模擬Cookie硫戈;下載文件斷點續(xù)傳等等,最重要的一點是curl支持超時設(shè)置

2.PHP中傳值與引用傳值的區(qū)別

按值傳遞:函數(shù)范圍內(nèi)對值的任何改變在函數(shù)外部都會被忽略

按引用傳遞:函數(shù)范圍內(nèi)對值的任何改變在函數(shù)外部也能反映出這些修改

優(yōu)缺點:按值傳遞時,php必須復(fù)制值下硕。特別是對于大型的字符串和對象來說丁逝,這將會是一個代價很大的操作汁胆。按引用傳遞則不需要復(fù)制值,對于性能提高很有好處霜幼。

3.session和cookie區(qū)別

存儲位置:session存儲于服務(wù)器沦泌,cookie存儲于瀏覽器

安全性:session安全性比cookie高

session為‘會話服務(wù)’,在使用時需要開啟服務(wù)辛掠,cookie不需要開啟,可以直接用

4.include和require的區(qū)別

require是無條件包含释牺,也就是如果一個流程里加入require萝衩,無論條件成立與否都會先執(zhí)行require,當(dāng)文件不存在或者無法打開的時候没咙,會提示錯誤猩谊,并且會終止程序執(zhí)行

include有返回值,而require沒有(可能因為如此require的速度比include快)祭刚,如果被包含的文件不存在的話牌捷,那么會提示一個錯誤,但是程序會繼續(xù)執(zhí)行下去

5.抽象類和接口區(qū)別

接口是抽象類的變體涡驮,接口中所有的方法都是抽象的暗甥。而抽象類是聲明方法的存在而不去實現(xiàn)它的類。

接口可以多繼承捉捅,抽象類不行.

接口定義方法撤防,不能實現(xiàn),而抽象類可以實現(xiàn)部分方法棒口。

接口中基本數(shù)據(jù)類型為static 而抽類象不是的寄月。

6.什么是面向?qū)ο?/h4>

面向?qū)ο笫且环N編程思想,它利于提高程序的重用性无牵,使程序結(jié)構(gòu)更加清晰漾肮。主要特征:封裝、繼承茎毁、多態(tài)克懊。

7.對mvc的認(rèn)識

由模型M、視圖V充岛、控制器C完成的應(yīng)用程序保檐,由模型發(fā)出要實現(xiàn)的功能到控制器,控制器接收組織功能傳遞給視圖崔梗。mvc是一種軟件架構(gòu)夜只,優(yōu)點是:可以實現(xiàn)代碼的重用性,避免產(chǎn)生代碼冗余蒜魄;M和V的實現(xiàn)代碼分離扔亥,從而使同一個程序可以使用不同的表現(xiàn)形式

8.大流量網(wǎng)站如何解決訪問量問題

確認(rèn)服務(wù)器硬件是否能夠支持當(dāng)前的流量

數(shù)據(jù)庫讀寫分離场躯,優(yōu)化數(shù)據(jù)表

程序功能規(guī)則,禁止外部的盜鏈

控制大文件的下載

使用流量分析統(tǒng)計軟件

使用不同主機(jī)分流主要流量

盡量使用靜態(tài)頁旅挤,緩存

9.什么是SQL注入踢关?

SQL注入攻擊是黑客對數(shù)據(jù)庫進(jìn)行攻擊的常用手段之一。一部分程序員在編寫代碼的時候粘茄,沒有對用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷签舞,注入者可以在表單中輸入一段數(shù)據(jù)庫查詢代碼并提交,程序?qū)⑻峤坏男畔⑵礈惿梢粋€完整sql語句柒瓣,服務(wù)器被欺騙而執(zhí)行該條惡意的SQL命令儒搭。注入者根據(jù)程序返回的結(jié)果,成功獲取一些敏感數(shù)據(jù)芙贫,甚至控制整個服務(wù)器搂鲫。

10.如何防止SQL注入

1.開啟PHP安全模式Safe_mode=on;

2.打開magic_quotes_gpc來防止SQL注入,Magic_quotes_gpc=off;默認(rèn)是關(guān)閉的磺平,它打開后將自動把用戶提交的sql語句的查詢進(jìn)行轉(zhuǎn)換魂仍,把'轉(zhuǎn)為\',這對防止sql注入有重大作用拣挪。因此開啟:magic_quotes_gpc=on;

控制錯誤信息擦酌,關(guān)閉sql錯誤提示信息,將錯誤信息寫到系統(tǒng)日志媒吗。

3.使用mysqli或pdo預(yù)處理仑氛。

11.數(shù)據(jù)庫的常用存儲引擎以及它們的區(qū)別

MyISAM:不支持事務(wù),表鎖闸英,易產(chǎn)生碎片锯岖,要經(jīng)常優(yōu)化,讀寫速度較快甫何,支持全文索引出吹。

InnoDB:支持事務(wù),行鎖辙喂,有崩潰恢復(fù)能力捶牢。讀寫速度比MyISAM慢,5.6之后支持全文索引巍耗。

存儲引擎是基于表的秋麸,而不是數(shù)據(jù)庫

12.數(shù)據(jù)庫優(yōu)化

選取最適用的字段屬性,盡可能減少定義字段寬度炬太,盡量把字段設(shè)置NOTNULL灸蟆,例如'省份'、'性別'最好適用ENUM

使用連接(JOIN)來代替子查詢

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

事務(wù)處理

鎖定表亲族、優(yōu)化事務(wù)處理

適用外鍵炒考,優(yōu)化鎖定表

建立索引

優(yōu)化查詢語句

13.Mysql的讀寫分離如何實現(xiàn)

讀寫分離的實現(xiàn)原理就是在執(zhí)行SQL語句的時候可缚,判斷到底是讀操作還是寫操作,把讀的操作轉(zhuǎn)向到讀服務(wù)器上(從服務(wù)器斋枢,一般是多臺)帘靡,寫的操作轉(zhuǎn)到寫的服務(wù)器上(主服務(wù)器,一般是一臺瓤帚,視數(shù)據(jù)量來看)描姚。當(dāng)然為了保證多臺數(shù)據(jù)庫數(shù)據(jù)的一致性,需要主從復(fù)制戈次。

14.常見的HTTP狀態(tài)碼

200 - 請求成功

301 - 重定向到其他URL

404 - 請求的資源(網(wǎng)頁等)不存在

505 - 內(nèi)部服務(wù)器錯誤

15.什么是靜態(tài)化和偽靜態(tài)

1轰胁、 靜態(tài)化指的是頁面靜態(tài)化,也即生成實實在在的靜態(tài)文件朝扼,也即不需要查詢數(shù)據(jù)庫就可以直接從文件中獲取數(shù)據(jù),指的是真靜態(tài)霎肯。

實現(xiàn)方式主要有兩種:一種是我們在添加信息入庫的時候就生成的靜態(tài)文件擎颖,也稱為模板替換技術(shù)。另一種是用戶在訪問我們的頁面時先判斷是否有對應(yīng)的緩存文件存在观游,如果存在就讀緩存搂捧,不存在就讀數(shù)據(jù)庫,同時生成緩存文件懂缕。

2允跑、偽靜態(tài)不是真正意義上的靜態(tài)化,之所以使用偽靜態(tài)搪柑,主要是為了SEO推廣聋丝,搜索引擎對動態(tài)的文件獲取難度大,不利于網(wǎng)站的推廣工碾。實習(xí)原理是基于Apache或Nginx的rewrite機(jī)智

主要有兩種方式:一種是直接在配置虛擬機(jī)的位置配置偽靜態(tài)弱睦,這個每次修改完成后需要重啟web服務(wù)器。另一種采用分布式的渊额,可以在網(wǎng)站的根目錄上創(chuàng)建.htaccess的文件况木,在里面配置相應(yīng)的重寫規(guī)則來實現(xiàn)偽靜態(tài),這種每次重寫時不需要重啟web服務(wù)器旬迹,且結(jié)構(gòu)上比較清晰火惊。

16.redis和memache的區(qū)別

總結(jié)一:

1.數(shù)據(jù)類型

Redis數(shù)據(jù)類型豐富,支持set list等類型

memcache支持簡單k/v數(shù)據(jù)類型奔垦,需要客戶端自己處理復(fù)雜對象

2.持久性

redis支持?jǐn)?shù)據(jù)落地持久化存儲

memcache不支持?jǐn)?shù)據(jù)持久存儲

3.分布式存儲

redis支持master-slave復(fù)制模式

memcache可以使用一致性hash做分布式

value大小不同

memcache是一個內(nèi)存緩存屹耐,key的長度小于250字符,單個item存儲要小于1M宴倍,不適合虛擬機(jī)使用

4.數(shù)據(jù)一致性不同

redis使用的是單線程模型张症,保證了數(shù)據(jù)按順序提交仓技。

memcache需要使用cas保證數(shù)據(jù)一致性。CAS(Check and Set)是一個確保并發(fā)一致性的機(jī)制俗他,屬于“樂觀鎖”范疇脖捻;原理很簡單:拿版本號,操作兆衅,對比版本號地沮,如果一致就操作,不一致就放棄任何操作

5.cpu利用

redis單線程模型只能使用一個cpu羡亩,可以開啟多個redis進(jìn)程

總結(jié)二:

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

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

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

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

我個人認(rèn)為最本質(zhì)的不同是Redis在很多方面具備數(shù)據(jù)庫的特征刃泡,或者說就是一個數(shù)據(jù)庫系統(tǒng),而Memcached只是簡單的K/V緩存

總結(jié)三:

redis和memecache的不同在于:

1碉怔、存儲方式:

memecache 把數(shù)據(jù)全部存在內(nèi)存之中烘贴,斷電后會掛掉,數(shù)據(jù)不能超過內(nèi)存大小

redis有部份存在硬盤上撮胧,這樣能保證數(shù)據(jù)的持久性庙楚。

2、數(shù)據(jù)支持類型:

redis在數(shù)據(jù)支持上要比memecache多的多趴樱。

3馒闷、使用底層模型不同:

新版本的redis直接自己構(gòu)建了VM 機(jī)制 ,因為一般的系統(tǒng)調(diào)用系統(tǒng)函數(shù)的話叁征,會浪費一定的時間去移動和請求纳账。

4、運(yùn)行環(huán)境不同:

redis目前官方只支持Linux 上去行捺疼,從而省去了對于其它系統(tǒng)的支持疏虫,這樣的話可以更好的把精力用于本系統(tǒng) 環(huán)境上的優(yōu)化,雖然后來微軟有一個小組為其寫了補(bǔ)丁。但是沒有放到主干上

memcache只能當(dāng)做緩存卧秘,cache

redis的內(nèi)容是可以落地的呢袱,就是說跟MongoDB有些類似,然后redis也可以作為緩存翅敌,并且可以設(shè)置master-slave

php概率算法

function get_rand($proArr) {

? ? $result = '';

? ? //概率數(shù)組的總概率精度

? ? $proSum = array_sum($proArr);

? ? //概率數(shù)組循環(huán)

? ? foreach ($proArr as $key => $proCur) {

? ? ? ? $randNum = mt_rand(1, $proSum);

? ? ? ? if ($randNum <= $proCur) {

? ? ? ? ? ? $result = $key;

? ? ? ? ? ? break;

? ? ? ? } else {

? ? ? ? ? ? $proSum -= $proCur;

? ? ? ? }

? ? }

? ? unset ($proArr);

? ? return $result;

}

$prize_arr =array('a'=>20, 'c'=>80);

二分查找

function binary(&$arr,$low,$top,$target){

? ? while($low <= $top){

//由于php取商是有小數(shù)的羞福,所以向下取整,不過也可不加蚯涮,數(shù)組也會取整

? ? ? ? $mid = floor(($low+$top)/2);

? ? ? ? if($arr[$mid]==$target){

? ? ? ? ? ? return $mid;

? ? ? ? }elseif($arr[$mid]<$target){

? ? ? ? ? ? $low = $mid+1;? ? ? ? ? ? ? ?

? ? ? ? }else{

? ? ? ? ? ? $top = $mid-1;

? ? ? ? }

? ? }

? ? return -1;

}

$arr = array(1,3,9,23,54);

echo binary($arr, 0, sizeof($arr), 1);

冒泡排序

function fun($arr){

$len = count($arr);

for($i=1;$i<$len;$i++){

for($j=0;$j<($len-$i);$j++){

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

$tmp = $arr[$j];

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

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

}

}

}

return $arr;

}

遍歷文件夾下所有文件

function my_scandir($dir)

{

$files = array();

if($handle = opendir($dir)) {

while (($file = readdir($handle))!== false) {

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

if(is_dir($dir."/".$file)) {

$files[$file]=my_scandir($dir."/".$file);

} else {

$files[] = $file;

}

}

}

closedir($handle);

return $files;

}

}

關(guān)于面試先寫到這吧治专,還有很多運(yùn)氣和實力在里面呢,希望大家都能找到心儀的工作遭顶。后續(xù)也會寫一些類似的文章张峰,喜歡的點個贊,支持一下棒旗。在這里拜謝了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喘批,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子铣揉,更是在濱河造成了極大的恐慌谤祖,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件老速,死亡現(xiàn)場離奇詭異,居然都是意外死亡凸主,警方通過查閱死者的電腦和手機(jī)橘券,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卿吐,“玉大人旁舰,你說我怎么就攤上這事∥斯伲” “怎么了箭窜?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長衍腥。 經(jīng)常有香客問我磺樱,道長,這世上最難降的妖魔是什么婆咸? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任竹捉,我火速辦了婚禮,結(jié)果婚禮上尚骄,老公的妹妹穿的比我還像新娘块差。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布憨闰。 她就那樣靜靜地躺著状蜗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鹉动。 梳的紋絲不亂的頭發(fā)上轧坎,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音训裆,去河邊找鬼眶根。 笑死,一個胖子當(dāng)著我的面吹牛边琉,可吹牛的內(nèi)容都是我干的属百。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼变姨,長吁一口氣:“原來是場噩夢啊……” “哼族扰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起定欧,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤渔呵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后砍鸠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扩氢,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年爷辱,在試婚紗的時候發(fā)現(xiàn)自己被綠了录豺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡饭弓,死狀恐怖双饥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弟断,我是刑警寧澤咏花,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站阀趴,受9級特大地震影響昏翰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刘急,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一矩父、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧排霉,春花似錦窍株、人聲如沸民轴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽后裸。三九已至,卻和暖如春冒滩,著一層夾襖步出監(jiān)牢的瞬間微驶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工开睡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留因苹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓篇恒,卻偏偏與公主長得像扶檐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胁艰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法款筑,類相關(guān)的語法,內(nèi)部類的語法腾么,繼承相關(guān)的語法奈梳,異常的語法,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 1解虱、memcache的概念攘须? Memcache是一個高性能的分布式的內(nèi)存對象緩存系統(tǒng),通過在內(nèi)存里維護(hù)一個統(tǒng)一的巨...
    桖辶殤閱讀 2,230評論 2 12
  • 總有一天讓人感覺絢麗無比的霓虹讓人失落殴泰,想找個安靜的地方卻發(fā)現(xiàn)找不到黑暗于宙。
    A00Helen閱讀 154評論 0 0