内容简介
本书基于PHP版本撰写,主要讲解了以下四部分的内容:PHP的基础知识和环境搭建;PHP语言层面的知识括数据类型、变量、函数、类和对象、字符串、数组、文件与目录、PHP 7新特等;其他必须要掌握的PHP语言之外的知识和技能括关系型数据库、非关系型数据库、常见的数据结构与算法、常见漏洞及其防范措施、计算机网络、操作系统、设计模式、Nginx、PHP-FPM、高并发应对、Restful、日志等;面试攻略和职业规划。本书注重基础知识,深入底层原理,以提高学习能力为道,以传授面试技巧为术,希望面试者能够发挥出自己的真才实学。 本书适合于即将或正在面试的PHP初级或中级程序员、对PHP开发感兴趣的人员、有的PHP开发经验,希望更深入了解的人员、有编程经验,希望转型做PHP开发的人员使用。
目录
第1章 PHP开发基础知识 11.1 环境搭建 11.1.1 下载与安装 21.1.2 CLI模式 21.1.3 CGI模式 31.1.4 开发工具 61.2 基本语法 101.2.1 基本规范 101.2.2 数据类型 101.2.3 变量 111.2.4 常量 121.2.5 运算符 131.2.6 流程控制 131.2.7 函数 151.2.8 字符串 161.2.9 数组 161.2.10 类与对象 171.2.11 异常处理 181.2.12 命名空间 191.3 本章小结 191.4 练习 19第2章 数据类型 202.1 布尔类型 202.1.1 概念 202.1.2 面试题:冒泡排序 212.1.3 类型转换 222.1.4 面试题:布尔数据比较 222.2 整型 232.2.1 概念 232.2.2 面试题:大数求和 232.3 浮点型 252.3.1 概念 252.3.2 面试题:浮点数的比较 252.3.3 面试题:证明题 262.3.4 面试题:比较两个浮点数的大小 262.4 字符串 262.4.1 概念 262.4.2 面试题:从string中取其中的单个字符 272.4.3 面试题:求字符串表示的长度 272.4.4 面试题:反转字符串 282.5 数组 292.6 对象 292.7 回调函数 292.7.1 概念 292.7.2 回调函数的使用 302.7.3 面试题:call_user_func()和call_user_func_array()的区别 322.8 迭代器 332.9 资源 332.10 NULL值 342.10.1 概念 342.10.2 面试题:NULL值比较 342.11 本章小结 342.12 练习 35第3章 变量 363.1 变量引用 363.1.1 指针与引用 363.1.2 引用的取消 373.1.3 forech的引用陷阱 373.2 预定义变量 403.2.1 概念 403.2.2 面试题:执行脚本的位置 413.3.3 面试题:获取当前访问页面的URL 423.3 垃圾回收机制 423.4 作用域 433.4.1 函数作用域 433.4.2 global关键字 443.4.3 引用文件的变量作用域 443.4.4 超全局变量 443.5 本章小结 453.6 练习 45第4章 函数 474.1 匿名函数与 474.1.1 匿名函数与的概念 474.1.2 匿名函数里的变量作用域 484.1.3 面试题:匿名函数中$this的使用 494.1.4 面试题:是什么 494.2 递归 504.2.1 递归的原理 504.2.2 递归的优缺点 504.2.3 面递归实现斐波那契数列 514.2.4 面试题:二叉树的中序遍历 514.3 Lambda表达式 534.3.1 概念 534.3.2 匿名函数、和Lambda表达式的关系 534.4 生成器(Generator)与 yield 544.4.1 生成器 544.4.2 yield 564.4.3 生成器的设计 564.4.4 面yield实现斐波那契数列 574.5 函数式编程 584.5.1 什么是函数编程 584.5.2 函数编程的理念 594.5.3 函数式编程的优势 604.6 本章小结 604.7 练习 60第5章 类和对象 615.1 魔术方法 615.2 自动加载 625.2.1 __autoload 635.2.2 spl_autoload_register 645.2.3 spl_autoload 655.2.4 面试题:引用文件函数的区别 655.3 命名空间 665.3.1 命名空间的使用规范 665.3.2 面试题:命名空间 695.3.3 面试题:类名冲突的解决方法 695.4 PSR-4标准 695.5 本章小结 705.6 练习 71第6章 字符串 736.1 字符串比较 736.2 类型转换 746.2.1 字符串转换为数字 746.2.2 面试题:表达式转换为数字 756.2.3 其他类型转换为字符串 756.3 字符集与字符编码 766.3.1 字符集 766.3.2 UTF-8编码规则 776.3.3 面试题:Unicode字符长度 786.3.4 Unicode与UTF-8的关系 786.4 字符串查找 786.5 关键词搜索 816.6 子序列 836.7 字符串转换操作 846.8 正则表达式 876.8.1 正则表达式基础 876.8.2 面试中常见的正则表达式 916.9 本章小结 936.10 练习 93第7章 数组 947.1 数组函数 947.1.1 count 947.1.2 natsort 957.1.3 array_merge 967.1.4 栈与队列的操作 977.1.5 集合计算 987.2 数组排序 997.2.1 多维数组排序 997.2.2 多个数组排序 1007.3 数组查找与搜索 1027.3.1 面试题:找出缺失元素 1027.3.2 面试题:删除数组中的重复项 1057.4 数组的遍历操作 1077.4.1 面试题:多维数组 1077.4.2 面试题:螺旋访问数组 1077.5 本章小结 1097.6 练习 109第8章 文件与目录 1118.1 文件引用 1118.1.1 文件引用方法 1118.1.2 面试题:说明几个文件引用函数的区别 1138.2 BOM 头 1138.2.1 BOM的检测 1138.2.2 BOM文件的修改 1148.3 上传与下载 1168.3.1 文件上传 1168.3.2 文件下载 1188.3.3 面试题:文件上传时的大小限制 1198.4 文件操作 1198.4.1 读取文件函数对比 1198.4.2 文件锁 1208.4.3 大文件读写 1208.4.4 SPL文件处理 1228.5 目录操作 1238.5.1 面试题:计算相对路径 1238.5.2 面试题:遍历目录 1258.5.3 文件查找 1268.6 硬连接和软连接 1268.6.1 概念 1268.6.2 面试题:硬连接和软连接 1278.6.3 面试题:硬连接占用空间吗 1278.6.4 面试题:部署上线系统的原理 1288.7 本章小结 1298.8 练习 129第9章 PHP 7新特 1309.1 PHP 7 的新变化 1309.1.1 标量类型声明 1309.1.2 新增操作 1319.1.3 太空船操作符(组合比较符) 1319.1.4 通过define()定义常量数组 1329.1.5 匿名类 1329.1.6 Unicode codepoint 转译语法 1329.1.7 Group use declarations 1339.1.8 错误处理 1339.2 PHP 7 的执行效率 1339.2.1 内存优化 1349.2.2 变量结构 1349.2.3 字符串 1349.2.4 数组 1349.3 PHP 7变量在内核中的实现 1359.3.1 PHP 5变量内部实现 1359.3.2 PHP 5变量问题剖析 1389.3.3 PHP 7 变量内部实现 1399.3.4 PHP 7 与 PHP 5 变量内部实现的差别 1429.3.5 面试题:检测链表中的环 1429.4 字符串的内核实现 1449.4.1 字符串的结构 1459.4.2 二进制 1459.4.3 柔数组 1469.4.4 面试题:string 内部实现 1499.4.5 面试题:内存对齐机制 1509.4.6 面试题:内存对齐机制的规则 1509.4.7 面试题:柔数组 1509.4.8 面试题:二进制 1519.4.9 面试题:zend_string结构体 1519.5 数组的内核实现 1519.5.1 数组概述 1519.5.2 PHP 5数组在内核中的实现 1529.5.3 PHP 7数组在内核中的实现 1539.6 从PHP 5迁移到PHP 7 1549.7 本章小结 1569.8 练习 156第10章 RDS关系型数据库 15710.1 连接 15710.2 执行SQL 16010.3 表引擎 16110.3.1 MyISAM和InnoDB的基本概念 16110.3.2 面试题:MyISAM与InnoDB的区别 16110.3.3 面试题:OLAP和OLTP 16110.3.4 OLAP 的12条规则 16210.4 索引 16310.5 事务 16510.6 PDO 16710.7 慢SQL优化 16910.7.1 发现慢SQL的方法 16910.7.2 能分析 17010.7.3 能优化 17110.8 数据表设计 17110.8.1 设计实务 17110.8.2 面试题 17210.9 隔离级别 17310.10 MVCC机制 17710.11 DDL操作 17710.12 分库分表 17810.13 本章小结 17910.14 练习 179第11章 NoSQL数据库 18011.1 Memcache 18011.1.1 内存管理 18011.1.2 一致哈希 18111.2 Redis 18211.2.1 数据结构 18211.2.2 面试题 18411.2.3 位图应用 18511.2.4 持久化策略 18711.3 集群介绍 19011.3.1 Codis 19011.3.2 Twemproxy 19111.3.3 Redis Cluster 19111.3.4 面试题 19211.4 本章小结 19211.5 练习 192第12章 数据结构与算法 19312.1 栈和队列 19312.1.1 栈 19312.1.2 栈的面试题 19412.1.3 队列 19712.2 链表 19812.2.1 链表的概念 19812.2.2 面试题 19812.3 树的定义及分类 20012.3.1 树的定义 20012.3.2 树的分类 20012.3.3 树的遍历 20412.3.4 二叉树面试知识结 20912.4 树的应用——字典树 20912.4.1 字典树的原理 20912.4.2 字典树的应用 21312.5 排序 21512.5.1 选择排序 21512.5.2 冒泡排序 21612.5.3 插入排序 21712.5.4 堆排序 21812.5.5 快速排序 22112.5.6 归并排序 22312.5.7 桶排序 22412.5.8 常见排序算结 22612.6 分治法 22612.6.1 分治法的概念 22612.6.2 分治法的面试题 22712.7 动态规划 23012.7.1 斐波那契数列的动态规划解法 23012.7.2 动态规划方法的两个经典问题 23112.8 贪心算法 23812.8.1 概念 23812.8.2 面试题 23912.8.3 霍夫曼树 24012.9 本章小结 24212.10 练习 242第13章 PHP知识 24313.1 概述 24313.2 输入校验 24413.2.1 Register Globals 24413.2.2 $_REQUEST 24513.2.3 $_SERVER 24613.2.4 数字校验 24613.2.5 字符串校验 24613.2.6 路径校验 24713.3 XSS攻击 24813.3.1 属过滤 24913.3.2 JSON与XSS 25013.4 SQL注入 25113.4.1 SQL Escaping 25213.4.2 PDO的机制 25313.5 CSRF攻击 25413.6 SSRF攻击 25713.7 短信轰炸 25813.8 接口防刷 26013.9 本章小结 26113.10 练习 262第14章 常见面试题 26314.1 计算机网络相关面试题 26314.1.1 网络7层协议 26314.1.2 IP地址分类 26414.1.3 状态码 26514.1.4 POST和GET的区别 26614.1.5 TCP 与 UDP 的区别 26614.1.6 TCP 三次握手 26714.1.7 Session和cookie的区别 26814.1.8 和S的区别 26814.2 操作系统相关面试题 27014.2.1 操作系统的作用是什么 27014.2.2 操作系统的特是什么 27014.2.3 并发和并行的区别是什么 27014.2.4 进程和线程的区别是什么 27014.2.5 进程的状态有哪些 27114.2.6 常见存储介质的访问速度 27214.2.7 操作系统管理内存的机制有哪些 27214.2.8 什么是虚拟内存,虚拟内存有什么作用 27414.2.9 什么是死锁,死锁发生的条件是什么 27414.3 设计模式相关面试题 27414.3.1 单例模式 27414.3.2 抽象工厂 27514.3.3 适配器模式 27714.4 Nginx相关面试题 27814.4.1 Nginx有哪些优点 27814.4.2 Nginx架构如何 27814.4.3 Nginx如何处理连接 28014.4.4 Nginx与Apache有什么差别 28014.4.5 Nginx如何做负载均衡 28114.4.6 什么是反向代理 28114.4.7 sites-available和sites-enabled有什么区别 28214.4.8 Nginx如何处理请求 28214.4.9 Nginx的Worker数量如何设置 28414.5 PHP-FPM相关面试题 28414.5.1 CGI与FastCGI的区别是什么 28414.5.2 Nginx与PHP-FPM通信的方式有哪些 28514.5.3 PHP-FPM的进程管理方式有哪几种 28514.5.4 PHP-FPM配置worker数量时,需要考虑哪些因素 28514.5.5 PHP-FPM 事件驱动机制 28614.6 Linux 28714.6.1 一个文件设置为600,代表什么权限 28714.6.2 如何设置文件的权限 28714.6.3 如何查找访问次数多的IP 28814.6.4 请描述Linux的事件模型 28914.7 关于高并发 29014.8 Restful风格 29214.8.1 Rest 如何做版本控制 29214.8.2 如何评价RESTful风格 29214.9 日志 29314.9.1 日志级别 29314.9.2 日志实践 29414.10 本章小结 29414.11 练习 294第15章 面试攻略 29615.1 规划阶段 29715.1.1 离职原因 29715.1.2 自我定位 29715.1.3 成长目标 29815.1.4 行业选择 29815.2 准备阶段 29915.2.1 撰写简历 29915.2.2 了解目标 30115.2.3 投递简历 30115.2.4 约定时间 30215.3 面试阶段 30215.3.1 面试礼仪 30215.3.2 技术面试 30315.3.3 项目面试 30315.3.4 HR面试 30315.4 Offer选择 30315.5 入职阶段 30415.5.1 背景调查 30415.5.2 薪资核验 30515.5.3 办理离职手续 30515.5.4 正式入职新公司 30515.6 面试的其他问题 30615.6.1 关于“面试造大炮,工作打蚊子” 30615.6.2 感觉面试官刁难自己 30615.7 本章小结 30615.8 练习 306第16章 职业漫谈 30716.1 职业发展 30716.2 能力框架 30816.3 工作结 30916.4 技术晋升 30916.5 技术储备 31016.6 PHP工程师的Plan B 31116.7 本章小结 311参考书目及资料 312



VIP会员