1. 程式人生 > >我的新書——《PHP程式設計師面試筆試寶典》

我的新書——《PHP程式設計師面試筆試寶典》

你好,是我琉憶。

一個文藝的PHP開發工程師。

很榮幸能夠在這裡帶來我的第一本新書——《PHP程式設計師面試筆試寶典》。

一、創作過程

《PHP程式設計師面試筆試寶典》是我的第一本書,從寫作到出來總共經歷了一整年的時間。它就像我的孩子一樣,十分的努力去創作,也十分的愛惜,創作實際用了3個月的時間,但是在長達審稿修改的時間卻也用了3個月,剩餘的3個月時間是出版社幾個編輯在幫我審稿修改,對裡面的字句進行斟酌跟我討論修改。在此對他們的付出抱以誠摯真誠的感謝,謝謝你們的付出。

這本書是自己第一本出版的書,所以自己格外的愛惜它,也很怕這本書的內容不能滿足大眾,生怕被PHPer所嫌棄。在創作這本書的過程中,時常從讀者的角度去審查它,它是否能夠切實的在解答每道面試題上提供幫助,所涉及的知識點是否切實際的回答完善並且正確。並且我也知道自己的能力會有所欠缺,可能做得不夠盡善盡美,但我也已經在此貢獻了自己所能夠達到最極致的能力去做好他。如果本書有所欠缺在此希望讀者能夠諒解,並可以對書中有所遺漏或不足之處給我寫郵件進行指點,我將不斷地對《PHP程式設計師面試筆試寶典》不斷迭代完善,不斷追求極致,幫助更多的PHPer面試成功。我的郵箱:

[email protected](我的QQ:330168885),如果有什麼事情也可以給我聯絡,我都願意解答並且交流。感謝你,dear 讀者。

二、我的書籍簡介

本書主要針對 PHP 常考的知識點進行了梳理和整理,通過這些知識點,以點為面、全面系統地幫助讀者發現自己的知識盲點,從而查漏補缺,幫助他們快速構建屬於自己的 PHP 知識架構。由於這些知識點都是在筆試或面試的過程中經常遇到的,因此為了讓讀者能夠更深入地理解這些相關的知識點,本書還在知識點的後面配上了相關的真題與解析,通過真題與解析加深讀者的理解。

編者花費了幾個月的時間,對 PHP 的知識點和各大網際網路公司應用的技術和麵試的問題

進行了深入瞭解。針對面試 PHP 崗位的常考考點,整理出這本《PHP 程式設計師面試筆試寶典》。

三、章節介紹

上篇:面試筆試經驗技巧篇

想找到一份程式設計師的工作,一點技術都沒有顯然是不行的,但是,只有技術也是不夠的。面試筆試經驗技巧篇主要提供PHP程式設計師面試筆試經驗、面試筆試問題方法討論等。通過本篇的學習,求職者必將獲取到豐富的應試技巧與方法。

下篇:面試筆試技術攻克篇

面試筆試技術攻克篇主要針對近3年以來近百家頂級IT企業的面試筆試真題而設計,這些企業涉及面非常廣泛,面試筆試真題難易適中,非常具有代表性與參考性。本篇對這些真題以及其背後的知識點進行了深度剖析,並且對部分真題進行了庖丁解牛式的分析與講解,針對真題中涉及的部分重難點問題,本篇都進行了適當的擴充套件與延伸,力求對知識點的講解清晰而不紊亂,全面而不囉嗦,使得讀者能夠通過本書不僅獲取到求職的知識,同時更有針對性地進行求職準備,最終能夠收穫一份滿意的工作。

第1章 PHP基礎知識

PHP也稱為超文字前處理器,是一種開源的服務端指令碼語言。目前,在全球擁有的100萬站點中,有70%左右的站點是使用PHP開發的,PHP被廣泛地應用於各種服務端前端及應用的開發。在面試筆試中PHP基礎知識經常被考到,通過基礎知識可以瞭解一個PHP程式設計師的功底如何。如果連PHP基礎都沒能掌握的人,那麼很難在筆試中勝出。所以熟練地掌握PHP基礎知識顯得非常重要。這一章節將詳細地介紹所有可能考到的PHP基礎知識。

第2章PHP Web與框架

因為PHP是內嵌在Web的指令碼語言,所以PHP和Web是分不開的。而為了避免因為PHP與Web程式碼的高度混雜在一起導致閱讀性和維護性問題而產生了框架,合理地分開了前後端開發人員的工作。由於web和框架都是PHP開發中必不可少的東西,所以在面試中也是重要考點,作為開發者是必須熟練掌握各種主流的MVC框架的,因為在實際開發中經常用到。

第3章PHP進階知識

本章主要針對PHP的時間和日期管理、快取、檔案、驗證碼等部分進行講解。在一個專案的實際開發中,都需要涉及這些知識,它會穿插在整個專案中。在面試中問得比較多的是時間和快取相關的問題,只要是涉及資料的儲存都需要和時間打交道,而快取是為了提高網站的開啟速度而一定要使用的技術。

第4章 設計模式

無論是PHP還是Java,都時常會考到設計模式,瞭解透設計模式的人可以很快知道在什麼場景下采用哪種程式碼的設計是合理的、穩定的、可擴充套件的,這樣可以幫助團隊在設計的前期減少問題的產生。而熟練掌握面向物件開發的人不一定懂得設計模式,但懂得設計模式的人可以熟練懂得面向物件,所以通過設計模式可以看出一個人對面向物件的掌握熟練程度,並且懂得設計模式的人還可以開發出一套模板或框架。對PHP程式設計師來說,因為設計模式是非常重要的,所以在面試中經常考到。

第5章 資料庫

資料庫是按照資料結構來組織、儲存和管理資料的倉庫。從最簡單的儲存各種資料的表格資料到如今進行海量資料儲存都要用到資料庫。PHP主要負責客戶端和資料庫的互動,隨著使用者訪問一個網站的量的增加,PHP每次請求一次資料庫都需要耗費記憶體和訪問時間,從而加大伺服器的壓力和降低網頁的訪問速度。所以如今的公司都要求每個PHP開發人員需要懂得資料庫的合理設計、優化。高併發訪問的網站對資料庫的設計維護要求更高,需要引入Memcache或Redis快取來減少對資料庫的請求,從而提高使用者的訪問速度。本章詳細介紹MySQL的知識、優化和常考題目。

第6章 操 作 系 統

對於計算機系統而言,作業系統充當著基石的作用,它是連線計算機底層硬體與上層應用軟體的橋樑,控制其他程式的執行,並且管理系統相關資源,同時提供配套的系統軟體支援。對於專業的程式設計師而言,掌握一定的作業系統知識必不可少,因為不管面對的是底層嵌入式開發,還是上層的雲端計算開發,都需要使用到一定的作業系統相關知識。所以,對作業系統相關知識的考查是程式設計師面試筆試必考項之一。

第7章 網 絡

在20世紀80年代,計算機網路誕生,它能夠將一臺臺獨立的計算機互相連線,使得位於不同地理位置的計算機之間可以進行通訊,實現資訊傳遞和資源共享,形成一組規模大、功能強的計算機系統。不過,計算機要想在網路中正常通訊,必須遵守相關網路協議的規則,常用的網路協議有TCP、UDP、IP和HTTP等。

第8章 大資料

計算機硬體的擴容確實可以極大地提高程式的處理速度,但考慮到其技術、成本等方面的因素,它並非一條放之四海而皆準的途徑。而隨著網際網路技術的發展,雲端計算、物聯網、移動通訊技術的興起,每時每刻,數以億計的使用者產生著數量巨大的資訊,海量資料時代已經來臨。由於通過對海量資料的挖掘能有效地揭示使用者的行為模式,加深對使用者需求的理解,提取使用者的集體智慧,從而為研發人員決策提供依據,提升產品使用者體驗,進而佔領市場,所以當前各大網際網路公司都將研究重點放在了海量資料分析上,但是,只寄希望於硬體擴容是很難滿足海量資料分析需要的,如何利用現有條件進行海量資訊處理已經成為各大網際網路公司亟待解決的問題。所以,海量資訊處理正日益成為當前程式設計師筆試面試中一個新的亮點。

四、寶典的目錄

《PHP 程式設計師面試筆試寶典》整本書涵蓋的知識目錄包括:面試經驗技巧、PHP常考基礎知識、PHP面向物件和設計模式的知識點、PHP進階知識、資料庫常考的MySQL的知識點、計算機網路相關的知識點,除此之外還額外增加了作業系統的常考知識,和常考的大資料知識點等。幫助每個PHP程式設計師面試更順利。

整本書的目錄:

上篇:面試筆試經驗技巧篇

經驗技巧1 如何巧妙地回答面試官的問題······································································· 2

經驗技巧2 如何回答技術性的問題················································································· 3

經驗技巧3 如何回答非技術性問題················································································· 4

經驗技巧4 如何回答快速估算類問題·············································································· 5

經驗技巧5 如何回答演算法設計問題················································································· 6

經驗技巧6 如何回答系統設計題···················································································· 8

經驗技巧7 如何解決求職中的時間衝突問題·································································· 11

經驗技巧8 如果面試問題曾經遇見過,是否要告知面試官·············································· 12

經驗技巧9 在被企業拒絕後是否可以再申請·································································· 12

經驗技巧10 如何應對自己不會回答的問題··································································· 13

經驗技巧11 如何應對面試官的“激將法”語言····························································· 13

經驗技巧12 如何處理與面試官持不同觀點這個問題······················································ 14

經驗技巧13 什麼是職場暗語······················································································· 14

經驗技巧14 如何進行自我介紹?················································································· 18

經驗技巧15 如何克服面試中緊張的情緒?··································································· 19

經驗技巧16 如何準備集體面試?················································································· 21

經驗技巧17 如何準備電話面試?················································································· 23

經驗技巧18 簽約和違約需要注意哪些事情?································································ 24

下篇:面試筆試技術攻克篇

第1章 PHP基礎知識································································································· 29

1.1 PHP語言········································································································· 29

1.1.1 PHP與ASP、JSP有什麼區別?···································································· 29

1.1.2 PHP與HTML有什麼區別?········································································· 31

1.1.3 PHP的優點是什麼?··················································································· 32

1.1.4 PHP的輸出語句有哪些?············································································· 33

1.1.5 如何區分單引號與雙引號?·········································································· 35

1.1.6 什麼是XML?··························································································· 37

1.2 面向物件技術··································································································· 40

1.2.1 面向物件與面向過程有什麼區別?································································· 40

1.2.2 面向物件的特徵是什麼?············································································· 41

1.2.3 面向物件的開發方式有什麼優點?································································· 41

1.2.4 類與物件的區別是什麼?············································································· 41

1.2.5 PHP5 中魔術方法有哪些?··········································································· 43

1.2.6 值傳遞與引用傳遞有什麼區別?···································································· 51

1.2.7 什麼是物件克隆?······················································································ 52

1.2.8 什麼是延遲靜態繫結?················································································ 56

1.2.9 作用域範圍有哪幾種?················································································ 57

1.2.10 什麼是建構函式?什麼是解構函式?···························································· 58

1.2.11 什麼是繼承?·························································································· 60

1.2.12 抽象類與介面有什麼區別與聯絡?································································ 63

1.2.13 什麼是多型?·························································································· 65

1.3 關鍵字············································································································· 67

1.3.1 final有什麼作用?······················································································ 67

1.3.2 finally有什麼作用?··················································································· 68

1.3.3 assert有什麼作用?···················································································· 69

1.3.4 static有什麼作用?····················································································· 70

1.3.5 global有什麼作用?···················································································· 72

1.3.6 this、self和parent的區別是什麼?································································· 73

1.3.7 include與require有什麼區別?······································································ 75

1.3.8 break、continue與return有什麼區別與聯絡?··················································· 77

1.3.9 switch有什麼作用?··················································································· 79

1.4 常量與變數······································································································ 81

1.4.1 什麼是常量?···························································································· 81

1.4.2 什麼是變數?···························································································· 84

1.4.3 如何判斷變數是否存在、是否為非空字元或非零?············································ 87

1.4.4 變數的作用域範圍有哪幾種?······································································· 87

1.4.5 如何對變數進行引用?················································································ 89

1.5 資料型別········································································································· 90

1.5.1 基本資料型別有哪些?················································································ 90

1.5.2 如何進行型別轉換?··················································································· 92

1.6 運算子············································································································· 93

1.6.1 運算子的種類有哪些?················································································ 93

1.6.2 ++與—的含義是什麼?·············································································· 100

1.7 字串··········································································································· 101

1.7.1 字串處理函式有哪些?··········································································· 101

1.7.2 ==與===有什麼區別?··············································································· 106

1.8 正則表示式···································································································· 106

1.9 函式·············································································································· 111

1.9.1 傳值和引用的區別是什麼?········································································ 111

1.9.2 什麼是預設引數?···················································································· 114

1.9.3 什麼是函式返回值?················································································· 114

1.9.4 如何進行函式呼叫?················································································· 115

1.10 陣列············································································································ 117

1.10.1 如何進行陣列的定義與宣告?···································································· 117

1.10.2 什麼是多維陣列?··················································································· 121

1.10.3 陣列函式有哪些?··················································································· 124

1.11 檔案管理······································································································ 130

1.11.1 有哪些檔案操作?···················································································· 130

1.11.2 涉及檔案操作的函式有哪些?···································································· 134

1.12 異常處理與錯誤處理····················································································· 137

1.12.1 什麼是異常處理與錯誤處理?···································································· 137

1.12.2 error_reporting()的作用是什麼?································································· 138

1.12.3 如何進行異常捕捉與處理?······································································· 139

1.12.4 如何實現自定義的異常類?······································································· 141

1.13 記憶體管理······································································································ 141

1.13.1 什麼是記憶體管理?··················································································· 141

1.13.2 什麼是垃圾回收?··················································································· 142

1.14 Redis············································································································ 143

1.14.1 什麼是Redis?······················································································· 143

1.14.2 Redis的常見問題有哪些?········································································ 145

1.15 Memcache····································································································· 147

第2章 PHP Web與框架··························································································· 153

2.1 PHP Web········································································································ 153

2.1.1 Session與Cookie的區別是什麼?································································ 153

2.1.2 GET和POST有什麼區別?········································································ 158

2.1.3 如何預防各類安全性問題?········································································ 160

2.1.4 HTTP狀態碼的含義是什麼?······································································ 161

2.1.5 utf-8編碼需要注意哪些問題?····································································· 164

2.1.6 如何進行網站的優化?·············································································· 165

2.2 模板·············································································································· 166

2.3 框架·············································································································· 167

2.3.1 什麼是MVC?························································································· 167

2.3.2 PHP的開發框架有哪些?··········································································· 168

2.3.3 什麼是CI框架?······················································································ 168

2.4 JavaScript、HTML、CSS等············································································· 171

第3章 PHP進階知識······························································································· 173

3.1 時間和日期管理······························································································ 173

3.1.1 如何輸出年-月-日?················································································· 173

3.1.2 如何輸出時-分-秒?················································································· 174

3.1.3 如何輸出閏年-星期-天?··········································································· 175

3.1.4 PHP相關的日期函式有哪些?····································································· 176

3.2 快取·············································································································· 179

3.3 檔案管理········································································································ 180

3.3.1 PHP中檔案操作函式有哪些?····································································· 180

3.3.2 如何進行檔案上傳?················································································· 183

3.3.3 如何進行檔案下載?················································································· 185

3.3.4 如何進行版本管理?················································································· 186

3.4 驗證碼··········································································································· 187

第4章 設計模式········································································································· 188

4.1 常見的設計模式有哪些?················································································ 188

4.2 什麼是單例模式?·························································································· 190

4.3 什麼是工廠模式?·························································································· 191

4.4 什麼是觀察者模式?······················································································· 192

第5章 資料庫············································································································ 196

5.1 資料庫基礎知識······························································································ 196

5.1.1 SQL語言的功能有哪些?··········································································· 197

5.1.2 內連線與外連線有什麼區別?····································································· 199

5.1.3 什麼是事務?·························································································· 200

5.1.4 什麼是儲存過程?它與函式有什麼區別與聯絡?·············································· 202

5.1.5 一二三四正規化有何區別?··········································································· 202

5.1.6 什麼是觸發器?······················································································· 204

5.1.7 什麼是遊標?·························································································· 205

5.1.8 如果資料庫日誌滿了,那麼會出現什麼情況?················································· 206

5.1.9 UNION和UNION ALL有什麼區別?··························································· 206

5.1.10 什麼是檢視?························································································· 207

5.1.11 什麼是資料庫三級封鎖協議?···································································· 207

5.1.12 索引的優缺點························································································· 208

5.2 MySQL基礎知識···························································································· 209

5.2.1 PHP操作MySQL的函式有哪些?································································ 210

5.2.2 PHP連線MySQL的方法是什麼?································································ 211

5.2.3 MySQLi訪問資料庫的方法········································································· 214

5.2.4 如何進行MySQL操作?············································································ 218

5.2.5 MySQL支援哪些欄位型別?······································································· 227

5.2.6 什麼是索引?·························································································· 230

5.2.7 什麼是資料庫引擎?················································································· 232

5.2.8 如何進行資料庫分頁?·············································································· 233

5.2.9 什麼是資料庫許可權?················································································· 237

5.2.10 PHP Web訪問MySQL方法是什麼?··························································· 238

5.2.11 如何高效操作MySQL?··········································································· 240

5.3 MySQL高階管理···························································································· 240

5.3.1 如何對MySQL進行優化?········································································· 240

5.3.2 如何進行資料庫優化?·············································································· 244

5.3.3 如何進行資料庫操作優化?········································································ 247

5.3.4 如何進行資料庫表優化?··········································································· 249

第6章 作業系統······································································································· 255

6.1 程序管理········································································································ 255

6.1.1 程序與執行緒有什麼區別?··········································································· 255

6.1.2 執行緒同步有哪些機制?·············································································· 256

6.1.3 核心執行緒和使用者執行緒的區別········································································ 256

6.2 記憶體管理········································································································ 257

6.2.1 記憶體管理有哪幾種方式?··········································································· 257

6.2.2 什麼是虛擬記憶體?···················································································· 258

6.2.3 什麼是記憶體碎片?什麼是內碎片?什麼是外碎片?··········································· 258

6.2.4 虛擬地址、邏輯地址、線性地址、實體地址有什麼區別?·································· 259

6.2.5 Cache替換演算法有哪些?············································································ 259

6.3 使用者程式設計介面································································································· 261

6.3.1 庫函式呼叫與系統呼叫有什麼不同?····························································· 261

6.3.2 靜態連結與動態連結有什麼區別?······························································· 261

6.3.3 靜態連結庫與動態連結庫有什麼區別?·························································· 262

6.3.4 使用者態和核心態有什麼區別?····································································· 262

6.3.5 使用者棧與核心棧有什麼區別?····································································· 263

第7章 網路·············································································································· 264

7.1 TCP/IP··········································································································· 264

7.1.1 協議······································································································ 264

7.1.2 TCP/IP··································································································· 265

7.1.3 常見筆試題····························································································· 265

7.2 RESTful架構風格··························································································· 266

7.2.1 REST····································································································· 266

7.2.2 約束條件································································································ 267

7.2.3 常見筆試題····························································································· 267

7.3 HTTP············································································································ 268

7.3.1 URI和URL···························································································· 268

7.3.2 HTTP協議······························································································ 269

7.3.3 HTTP報文······························································································ 271

7.3.4 HTTP首部······························································································ 272

7.3.5 快取······································································································ 273

7.3.6 常見筆試題····························································································· 275

7.4 TCP··············································································································· 276

7.4.1 連線管理································································································ 276

7.4.2 確認應答································································································ 278

7.4.3 視窗控制································································································ 280

7.4.4 重傳控制································································································ 281

7.4.5 常見筆試題····························································································· 281

7.5 HTTPS··········································································································· 282

7.5.1 加密······································································································ 283

7.5.2 數字簽名································································································ 283

7.5.3 數字證書································································································ 284

7.5.4 安全通訊機制·························································································· 284

7.5.5 常見筆試題····························································································· 286

7.6 HTTP/2.0······································································································· 286

7.6.1 二進位制分幀層·························································································· 287

7.6.2 多路通訊································································································ 288

7.6.3 請求優先順序····························································································· 288

7.6.4 伺服器推送····························································································· 289

7.6.5 首部壓縮································································································ 289

7.6.6 常見筆試題····························································································· 289

第8章 大資料·········································································································· 290

8.1 從大量的URL中找出相同的URL···································································· 290

8.2 求高頻詞········································································································ 290

8.3 找出訪問百度最多的IP··················································································· 291

8.4 在大量的資料中找出不重複的整數··································································· 292

8.5 在大量的資料中判斷一個數是否存在································································ 292

8.6 如何查詢最熱門的查詢串················································································ 293

8.7 統計不同電話號碼的個數················································································ 294

8.8 從5億個數中找出中位數················································································ 295

8.9 按照query的頻度排序···················································································· 296

8.10 找出排名前500的數····················································································· 297

附錄 真題及答案······································································································· 298

真題1··················································································································· 298

真題2··················································································································· 300

真題3··················································································································· 303

真題1答案············································································································ 305

真題2答案············································································································ 306

真題3答案············································································································ 308

五、由衷的感謝

作者本名劉恆春,筆名琉憶,在這裡最先感謝的是大神何昊和薛鵬給予的這個機會,讓我有機會參與PHP相關的面試書籍的創作,其次感謝機械工業出版社給予的出版機會。最後由衷的感謝支援我的父母、哥哥姐姐,還有我的朋友,是你們的支援才讓我最終得以完成這本書。還有為了這本寶典默默付出審稿的幕後工作者們,非常感謝你們,你們辛苦了。

在此對以上幫助過我得以出版PHP面試寶典的人說聲謝謝,非常感謝。

 

最後由衷的感謝每一位讀者,謝謝你們對本書的支援。