PHP 面試一戰到底
閆小坤
買這商品的人也買了...
-
$580$458 -
$594$564 -
$301精通 Nginx, 2/e ( Mastering NGINX, 2/e)
-
$505Nginx Lua開發實戰
-
$301PHP Web 安全開發實戰
-
$281PHP 程序員面試筆試真題與解析
-
$301PHP 程序員面試算法寶典
-
$654$621 -
$550$429 -
$980$774 -
$419$398 -
$556PHP 8 從入門到精通 (視頻教學版)
-
$780$616 -
$594$564 -
$556LAMP + LNMP 網站架構與運維實戰
-
$407深入淺出 Hyperscan:高性能正則表達式算法原理與設計
-
$659$626 -
$594$564 -
$600$468 -
$580$458 -
$714$678 -
$580$458 -
$359$341 -
$980$774 -
$620$490
相關主題
商品描述
本書基於PHP**版本撰寫,主要講解了以下四部分的內容:PHP的基礎知識和環境搭建;PHP語言層面的知識,包括數據類型、變量、函數、類和對象、字符串、數組、文件與目錄、PHP 7新特性等;其他必須要掌握的PHP語言之外的知識和技能,包括關系型數據庫、非關系型數據庫、常見的數據結構與算法、常見漏洞及其防範措施、電腦網絡、操作系統、設計模式、Nginx、PHP-FPM、高並發應對、Restful、日誌等;面試攻略和職業規劃。本書註重基礎知識,深入底層原理,以提高學習能力為道,以傳授面試技巧為術,希望面試者能夠發揮出自己的真才實學。 本書適合於即將或正在面試的PHP初級或中級程序員、對PHP開發感興趣的人員、有一定的PHP開發經驗,希望更深入瞭解的人員、有編程經驗,希望轉型做PHP開發的人員使用。
作者簡介
閆小坤
畢業於中國科學技術大學,計算機碩士。
服務端技術專家,10餘年PHP開發經驗。
曾就職於騰訊、滴滴等互聯網公司,有良好的架構能力和豐富的業務抽象經驗。
目錄大綱
目錄
第1章 PHP開發基礎知識 1
1.1 環境搭建 1
1.1.1 下載與安裝 2
1.1.2 CLI模式 2
1.1.3 CGI模式 3
1.1.4 開發工具 6
1.2 基本語法 10
1.2.1 基本規範 10
1.2.2 數據類型 10
1.2.3 變量 11
1.2.4 常量 12
1.2.5 運算符 13
1.2.6 流程控制 13
1.2.7 函數 15
1.2.8 字符串 16
1.2.9 數組 16
1.2.10 類與對象 17
1.2.11 異常處理 18
1.2.12 命名空間 19
1.3 本章小結 19
1.4 練習 19
第2章 數據類型 20
2.1 布爾類型 20
2.1.1 概念 20
2.1.2 面試題:冒泡排序 21
2.1.3 類型轉換 22
2.1.4 面試題:布爾數據比較 22
2.2 整型 23
2.2.1 概念 23
2.2.2 面試題:大數求和 23
2.3 浮點型 25
2.3.1 概念 25
2.3.2 面試題:浮點數的比較 25
2.3.3 面試題:證明題 26
2.3.4 面試題:比較兩個浮點數的大小 26
2.4 字符串 26
2.4.1 概念 26
2.4.2 面試題:從string中取其中的單個字符 27
2.4.3 面試題:求字符串表示的最大長度 27
2.4.4 面試題:反轉字符串 28
2.5 數組 29
2.6 對象 29
2.7 回調函數 29
2.7.1 概念 29
2.7.2 回調函數的使用 30
2.7.3 面試題:call_user_func()和call_user_func_array()的區別 32
2.8 迭代器 33
2.9 資源 33
2.10 NULL值 34
2.10.1 概念 34
2.10.2 面試題:NULL值比較 34
2.11 本章小結 34
2.12 練習 35
第3章 變量 36
3.1 變量引用 36
3.1.1 指針與引用 36
3.1.2 引用的取消 37
3.1.3 forech的引用陷阱 37
3.2 預定義變量 40
3.2.1 概念 40
3.2.2 面試題:執行腳本的位置 41
3.3.3 面試題:獲取當前訪問頁面的URL 42
3.3 垃圾回收機制 42
3.4 作用域 43
3.4.1 函數作用域 43
3.4.2 global關鍵字 44
3.4.3 引用文件的變量作用域 44
3.4.4 超全局變量 44
3.5 本章小結 45
3.6 練習 45
第4章 函數 47
4.1 匿名函數與閉包 47
4.1.1 匿名函數與閉包的概念 47
4.1.2 匿名函數里的變量作用域 48
4.1.3 面試題:匿名函數中$this的使用 49
4.1.4 面試題:閉包是什麽 49
4.2 遞歸 50
4.2.1 遞歸的原理 50
4.2.2 遞歸的優缺點 50
4.2.3 面試題:用遞歸實現斐波那契數列 51
4.2.4 面試題:二叉樹的中序遍歷 51
4.3 Lambda表達式 53
4.3.1 概念 53
4.3.2 匿名函數、閉包和Lambda表達式的關系 53
4.4 生成器(Generator)與 yield 54
4.4.1 生成器 54
4.4.2 yield 56
4.4.3 生成器的設計 56
4.4.4 面試題:用yield實現斐波那契數列 57
4.5 函數式編程 58
4.5.1 什麽是函數編程 58
4.5.2 函數編程的理念 59
4.5.3 函數式編程的優勢 60
4.6 本章小結 60
4.7 練習 60
第5章 類和對象 61
5.1 魔術方法 61
5.2 自動加載 62
5.2.1 __autoload 63
5.2.2 spl_autoload_register 64
5.2.3 spl_autoload 65
5.2.4 面試題:引用文件函數的區別 65
5.3 命名空間 66
5.3.1 命名空間的使用規範 66
5.3.2 面試題:命名空間 69
5.3.3 面試題:類名沖突的解決方法 69
5.4 PSR-4標準 69
5.5 本章小結 70
5.6 練習 71
第6章 字符串 73
6.1 字符串比較 73
6.2 類型轉換 74
6.2.1 字符串轉換為數字 74
6.2.2 面試題:表達式轉換為數字 75
6.2.3 其他類型轉換為字符串 75
6.3 字符集與字符編碼 76
6.3.1 字符集 76
6.3.2 UTF-8編碼規則 77
6.3.3 面試題:Unicode字符長度 78
6.3.4 Unicode與UTF-8的關系 78
6.4 字符串查找 78
6.5 關鍵詞搜索 81
6.6 子序列 83
6.7 字符串轉換操作 84
6.8 正則表達式 87
6.8.1 正則表達式基礎 87
6.8.2 面試中常見的正則表達式 91
6.9 本章小結 93
6.10 練習 93
第7章 數組 94
7.1 數組函數 94
7.1.1 count 94
7.1.2 natsort 95
7.1.3 array_merge 96
7.1.4 棧與隊列的操作 97
7.1.5 集合計算 98
7.2 數組排序 99
7.2.1 多維數組排序 99
7.2.2 多個數組排序 100
7.3 數組查找與搜索 102
7.3.1 面試題:找出缺失元素 102
7.3.2 面試題:刪除數組中的重復項 105
7.4 數組的遍歷操作 107
7.4.1 面試題:多維數組 107
7.4.2 面試題:螺旋訪問數組 107
7.5 本章小結 109
7.6 練習 109
第8章 文件與目錄 111
8.1 文件引用 111
8.1.1 文件引用方法 111
8.1.2 面試題:說明幾個文件引用函數的區別 113
8.2 BOM 頭 113
8.2.1 BOM的檢測 113
8.2.2 BOM文件的修改 114
8.3 上傳與下載 116
8.3.1 文件上傳 116
8.3.2 文件下載 118
8.3.3 面試題:文件上傳時的大小限制 119
8.4 文件操作 119
8.4.1 讀取文件函數對比 119
8.4.2 文件鎖 120
8.4.3 大文件讀寫 120
8.4.4 SPL文件處理 122
8.5 目錄操作 123
8.5.1 面試題:計算相對路徑 123
8.5.2 面試題:遍歷目錄 125
8.5.3 文件查找 126
8.6 硬連接和軟連接 126
8.6.1 概念 126
8.6.2 面試題:硬連接和軟連接 127
8.6.3 面試題:硬連接占用空間嗎 127
8.6.4 面試題:部署上線系統的原理 128
8.7 本章小結 129
8.8 練習 129
第9章 PHP 7新特性 130
9.1 PHP 7 的新變化 130
9.1.1 標量類型聲明 130
9.1.2 新增操作 131
9.1.3 太空船操作符(組合比較符) 131
9.1.4 通過define()定義常量數組 132
9.1.5 匿名類 132
9.1.6 Unicode codepoint 轉譯語法 132
9.1.7 Group use declarations 133
9.1.8 錯誤處理 133
9.2 PHP 7 的執行效率 133
9.2.1 內存優化 134
9.2.2 變量結構 134
9.2.3 字符串 134
9.2.4 數組 134
9.3 PHP 7變量在內核中的實現 135
9.3.1 PHP 5變量內部實現 135
9.3.2 PHP 5變量問題剖析 138
9.3.3 PHP 7 變量內部實現 139
9.3.4 PHP 7 與 PHP 5 變量內部實現的差別 142
9.3.5 面試題:檢測鏈表中的環 142
9.4 字符串的內核實現 144
9.4.1 字符串的結構 145
9.4.2 二進制安全 145
9.4.3 柔性數組 146
9.4.4 面試題:string 內部實現 149
9.4.5 面試題:內存對齊機制 150
9.4.6 面試題:內存對齊機制的規則 150
9.4.7 面試題:柔性數組 150
9.4.8 面試題:二進制安全 151
9.4.9 面試題:zend_string結構體 151
9.5 數組的內核實現 151
9.5.1 數組概述 151
9.5.2 PHP 5數組在內核中的實現 152
9.5.3 PHP 7數組在內核中的實現 153
9.6 從PHP 5遷移到PHP 7 154
9.7 本章小結 156
9.8 練習 156
第10章 RDS關系型數據庫 157
10.1 連接 157
10.2 執行SQL 160
10.3 表引擎 161
10.3.1 MyISAM和InnoDB的基本概念 161
10.3.2 面試題:MyISAM與InnoDB的區別 161
10.3.3 面試題:OLAP和OLTP 161
10.3.4 OLAP 的12條規則 162
10.4 索引 163
10.5 事務 165
10.6 PDO 167
10.7 慢SQL優化 169
10.7.1 發現慢SQL的方法 169
10.7.2 性能分析 170
10.7.3 性能優化 171
10.8 數據表設計 171
10.8.1 設計實務 171
10.8.2 面試題 172
10.9 隔離級別 173
10.10 MVCC機制 177
10.11 DDL操作 177
10.12 分庫分表 178
10.13 本章小結 179
10.14 練習 179
第11章 NoSQL數據庫 180
11.1 Memcache 180
11.1.1 內存管理 180
11.1.2 一致性哈希 181
11.2 Redis 182
11.2.1 數據結構 182
11.2.2 面試題 184
11.2.3 位圖應用 185
11.2.4 持久化策略 187
11.3 集群介紹 190
11.3.1 Codis 190
11.3.2 Twemproxy 191
11.3.3 Redis Cluster 191
11.3.4 面試題 192
11.4 本章小結 192
11.5 練習 192
第12章 數據結構與算法 193
12.1 棧和隊列 193
12.1.1 棧 193
12.1.2 棧的面試題 194
12.1.3 隊列 197
12.2 鏈表 198
12.2.1 鏈表的概念 198
12.2.2 面試題 198
12.3 樹的定義及分類 200
12.3.1 樹的定義 200
12.3.2 樹的分類 200
12.3.3 樹的遍歷 204
12.3.4 二叉樹面試知識點總結 209
12.4 樹的應用——字典樹 209
12.4.1 字典樹的原理 209
12.4.2 字典樹的應用 213
12.5 排序 215
12.5.1 選擇排序 215
12.5.2 冒泡排序 216
12.5.3 插入排序 217
12.5.4 堆排序 218
12.5.5 快速排序 221
12.5.6 歸並排序 223
12.5.7 桶排序 224
12.5.8 常見排序算法總結 226
12.6 分治法 226
12.6.1 分治法的概念 226
12.6.2 分治法的面試題 227
12.7 動態規劃 230
12.7.1 斐波那契數列的動態規劃解法 230
12.7.2 動態規劃方法的兩個經典問題 231
12.8 貪心算法 238
12.8.1 概念 238
12.8.2 面試題 239
12.8.3 霍夫曼樹 240
12.9 本章小結 242
12.10 練習 242
第13章 PHP安全知識 243
13.1 概述 243
13.2 輸入校驗 244
13.2.1 Register Globals 244
13.2.2 $_REQUEST 245
13.2.3 $_SERVER 246
13.2.4 數字校驗 246
13.2.5 字符串校驗 246
13.2.6 路徑校驗 247
13.3 XSS攻擊 248
13.3.1 屬性過濾 249
13.3.2 JSON與XSS 250
13.4 SQL註入 251
13.4.1 SQL Escaping 252
13.4.2 PDO的安全機制 253
13.5 CSRF攻擊 254
13.6 SSRF攻擊 257
13.7 短信轟炸 258
13.8 接口防刷 260
13.9 本章小結 261
13.10 練習 262
第14章 常見面試題 263
14.1 電腦網絡相關面試題 263
14.1.1 網絡7層協議 263
14.1.2 IP地址分類 264
14.1.3 HTTP狀態碼 265
14.1.4 POST和GET的區別 266
14.1.5 TCP 與 UDP 的區別 266
14.1.6 TCP 三次握手 267
14.1.7 Session和Cookie的區別 268
14.1.8 HTTP和HTTPS的區別 268
14.2 操作系統相關面試題 270
14.2.1 操作系統的作用是什麽 270
14.2.2 操作系統的特性是什麽 270
14.2.3 並發和並行的區別是什麽 270
14.2.4 進程和線程的區別是什麽 270
14.2.5 進程的狀態有哪些 271
14.2.6 常見存儲介質的訪問速度 272
14.2.7 操作系統管理內存的機制有哪些 272
14.2.8 什麽是虛擬內存,虛擬內存有什麽作用 274
14.2.9 什麽是死鎖,死鎖發生的條件是什麽 274
14.3 設計模式相關面試題 274
14.3.1 單例模式 274
14.3.2 抽象工廠 275
14.3.3 適配器模式 277
14.4 Nginx相關面試題 278
14.4.1 Nginx有哪些優點 278
14.4.2 Nginx架構如何 278
14.4.3 Nginx如何處理連接 280
14.4.4 Nginx與Apache有什麽差別 280
14.4.5 Nginx如何做負載均衡 281
14.4.6 什麽是反向代理 281
14.4.7 sites-available和sites-enabled有什麽區別 282
14.4.8 Nginx如何處理請求 282
14.4.9 Nginx的Worker數量如何設置 284
14.5 PHP-FPM相關面試題 284
14.5.1 CGI與FastCGI的區別是什麽 284
14.5.2 Nginx與PHP-FPM通信的方式有哪些 285
14.5.3 PHP-FPM的進程管理方式有哪幾種 285
14.5.4 PHP-FPM配置worker數量時,需要考慮哪些因素 285
14.5.5 PHP-FPM 事件驅動機制 286
14.6 Linux 287
14.6.1 一個文件設置為600,代表什麽權限 287
14.6.2 如何設置文件的權限 287
14.6.3 如何查找訪問次數最多的IP 288
14.6.4 請描述Linux的事件模型 289
14.7 關於高並發 290
14.8 Restful風格 292
14.8.1 Rest 如何做版本控制 292
14.8.2 如何評價RESTful風格 292
14.9 日誌 293
14.9.1 日誌級別 293
14.9.2 日誌最佳實踐 294
14.10 本章小結 294
14.11 練習 294
第15章 面試攻略 296
15.1 規劃階段 297
15.1.1 離職原因 297
15.1.2 自我定位 297
15.1.3 成長目標 298
15.1.4 行業選擇 298
15.2 準備階段 299
15.2.1 撰寫簡歷 299
15.2.2 瞭解目標 301
15.2.3 投遞簡歷 301
15.2.4 約定時間 302
15.3 面試階段 302
15.3.1 面試禮儀 302
15.3.2 技術面試 303
15.3.3 項目面試 303
15.3.4 HR面試 303
15.4 Offer選擇 303
15.5 入職階段 304
15.5.1 背景調查 304
15.5.2 薪資核驗 305
15.5.3 辦理離職手續 305
15.5.4 正式入職新公司 305
15.6 面試的其他問題 306
15.6.1 關於“面試造大炮,工作打蚊子” 306
15.6.2 感覺面試官刁難自己 306
15.7 本章小結 306
15.8 練習 306
第16章 職業漫談 307
16.1 職業發展 307
16.2 能力框架 308
16.3 工作與總結 309
16.4 技術晉升 309
16.5 技術儲備 310
16.6 PHP工程師的Plan B 311
16.7 本章小結 311
參考書目及資料 312