GitHub - colinlet/PHP-Interview-QA: PHP面试问答
source link: https://github.com/colinlet/PHP-Interview-QA
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
PHP面试问答
结合实际PHP面试,汇总自己遇到的问题,以及网上其他人遇到的问题,尝试提供简洁准确的答案
网络、数据结构与算法、PHP、Web、MySQL、Redis、Linux、安全、设计模式、架构、面试等部分
本仓库将持续更新,fork 无法看到最新内容,建议 Watch 或 Star ~~
面试流程
微信群
扫码加微信,备注:PIQA
,有时候可能在忙,稍等片刻
问题列表
网络协议篇
- 计算机网络体系结构
- UDP 的主要特点
- TCP 的主要特点
- 简述三报文握手建立 TCP 连接
- 建立 TCP 连接为什么最后还要发送确认
- 简述 TCP 连接的释放
- TIME-WAIT 是什么,为什么必须等待 2MLS
- TCP 粘包问题
- UDP、TCP 区别,适用场景
- 建立 socket 需要哪些步骤
- DNS 主要作用是什么
- HTTP 报文组成
- HTTP 状态码
- 常见的 HTTP 方法
- HTTP 优缺点
- HTTPS 通信原理
- HTTP 2.0
- IPv6 与 IPv4 有什么变化
- 什么是心跳机制
- 什么是长连接
数据结构与算法篇
PHP 篇
- echo、print、print_r、var_dump 区别
- 单引号和双引号的区别
- isset 和 empty 的区别
- static、self、$this 的区别
- include、require、include_once、require_once 的区别
- 数组处理函数
- Cookie 和 Session
- 预定义变量
- 传值和传引用的区别
- 构造函数和析构函数
- 魔术方法
- public、protected、private、final 区别
- 客户端/服务端 IP 获取,了解代理透传 实际IP 的概念
- 类的静态调用和实例化调用
- PHP 不实例化调用方法
- php.ini 配置选项,ini_set 动态设置
- 如何返回一个301重定向
- PHP 与 MySQL 连接方式
- MySQL、MySQLi、PDO 区别
- MySQL 连接池
- 代码执行过程
- base64 编码原理
- ip2long 实现
- MVC 的理解
- 主流 PHP 框架特点
- 对象关系映射/ORM
Web 篇
- SEO 有哪些需要注意的
- img 标签的 title 和 alt 有什么区别
- CSS 选择器的分类
- CSS sprite 是什么,有什么优缺点
- display: none 与 visibility: hidden 的区别
- display: block 和 display: inline 的区别
- CSS 文件、style 标签、行内 style 属性优先级
- link 与 @import 的区别
- 盒子模型
- 容器包含若干浮动元素时如何清理(包含)浮动
- 如何水平居中一个元素
- 如何竖直居中一个元素
- flex 与 CSS 盒子模型有什么区别
- Position 属性
- PNG,GIF,JPG 的区别及如何选
- 为什么把 JavaScript 文件放在 Html 底部
- JavaScript 数据类型
- JavaScript 操作 DOM 的方法有哪些
- JavaScript 字符串方法有哪些
- JavaScript 字符串截取方法有哪些?有什么区别
- setTimeout 和 setInterval 的区别
- 使用 new 操作符实例化一个对象的具体步骤
- 如何实现 ajax 请求
- 同源策略是什么
- 如何解决跨域问题
- 引起内存泄漏的操作有哪些
- 闭包理解及应用
- 对 JavaScript 原型的理解
- 对 JavaScript 模块化的理解
- 如何判断网页中图片加载成功或者失败
- 如何实现懒加载
- JSONP 原理
- Cookie 读写
- 从浏览器地址栏输入 URL 到显示页面的步骤
- Vue.js 双向绑定原理
- 如何进行网站性能优化
- 渐进增强
MySQL 篇
- 体系结构
- 基础操作
- 数据库设计范式
- 数据库设计原则
- CHAR 和 VARCHAR 数据类型区别
- LEFT JOIN 、RIGHT JOIN、INNER JOIN
- UNION、UNION ALL
- 常用 MySQL 函数
- 锁
- 事务
- 常见存储引擎
- 常见索引
- 聚族索引与非聚族索引的区别
- BTree 与 BTree-/BTree+ 索引原理
- 分表数量级
- EXPLAIN 输出格式
- my.cnf 配置
- 慢查询
Redis 篇
- Redis 介绍
- Redis 特点
- Redis 支持哪些数据结构
- Redis 与 Memcache 区别
- 发布订阅
- 持久化策略
- Redis 事务
- 如何实现分布式锁
- Redis 过期策略及内存淘汰机制
- 为什么 Redis 是单线程的
- 如何利用 CPU 多核心
- 集合命令的实现方法
- 有序集合命令的实现方法
- redis.conf 配置
- 慢查询
Linux 篇
安全篇
设计模式篇
架构篇
- OAuth 2.0
- 单点登录
- REST
- API 版本兼容
- JWT
- 画出 PHP 业务架构图
- LVS
- Ngnix
- 服务化
- 微服务
- 服务注册发现
- 数据库读写分离
- 数据库拆分
- 分布式事务
- ID 生成器
- 一致性哈希
- Redis 集群
- 消息队列
- 穿透、雪崩
- 限流(木桶、令牌桶)
- 服务降级
- 语言对比
为何要写这个
从事软件开发,已经接近五个年头了,去年面试中,发现自己依然处于尴尬的位置。简单重复,缺乏挑战的工作,已经没有多大吸引力了,优秀的平台,面试缺屡次碰壁。人上年纪之后,思维敏感度、记忆力都明显有所下滑。
程序开发不要被限制在语言层面,这是大家都懂的道理。但是作为一个 PHP 开发者,很多时候都是缠绕在业务的沟壑,理想和现实总是相差甚大。去年由于部门重组,本来将近十余人负责的项目,之后只剩两三人负责,各种坑只能靠人肉解决,深感无力。
工作可能只是你的一部分,你必须有自己的能力定位。以前总觉得学什么,做什么都无所谓,需要学习的技术,花点时间快速学习就行,有新的技术出来,赶紧紧跟了解下。但这些年下来,发现自己却没有一样能够拿的出手的,甚至连一个像样的作品也没有。其实 PHP 的技术栈还是比较广的,在对整个技术栈有一定的掌握之后,可能还需要深挖几个自己喜欢的领域,否则在现今的就业市场里面,没有任何的竞争力。所以可以看到很多招聘者都在感慨,中高级工程师都去哪里了。
面试或者面试他人,无法逃避,那就选择面对。撰写《PHP 面试问答》,构建一个面试体系,而不必慌张的临时准备,时时刻刻都充分准备好,对自己负责,也对别人负责。
结合实际 PHP 面试,系统的汇总面试中的各种各样的问题,尝试提供简洁准确的答案。如果你在 PHP 面试中遇到问题,欢迎提 Issues 交流。包含网络、数据结构与算法、PHP、Web、MySQL、Redis、Linux、安全、设计模式、架构、自我介绍、离职原因、职业规划、准备问题等部分。
最后,祝愿大家在日后的求职中,都能拿到满意的 offer~~
参考
术语对照表:顾名思义,帮助联想知识点
参考资料:站在巨人的肩膀上,你将能看的更远
声明
本资料仅供参考,水平有限,难免存在纰漏错误之处
欢迎转载,转载请标明来源出处,谢谢~~
作者:凌枫 Email:[email protected]
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK