PHP面试手册

PHP面试手册

薪资7~15k
岗位职责:
  1. 在现有源码的基础上二次开发和维护 PHP 项目,保证代码质量和稳定性;
  2. 设计和实现数据模型,并编写相应的 SQL 语句进行操作;
  3. 优化服务器资源并处理高并发访问;
  4. 参与前端技术选型、接口开发和数据传输等工作;
岗位要求
  1. 专科及以上学历,计算机、信息科学及相关专业毕业;
  2. 熟练掌握 PHP 开发语言及其框架(如 Laravel/Yii/ThinkPHP等);
  3. 熟悉 MySQL 数据库及其优化技巧,了解 Redis/MongoDB 等 NoSQL 数据库;
  4. 熟悉 HTML/CSS/JavaScript/jQuery 等前端技术,了解Vue/React/Angular 等前端框架;
  5. 了解Inmp环境部署.维护.了解rabbitmq队列优先.
  6. 具备良好的编码习惯和团队协作能力,具有高度责任心和自我驱动力。

  • 基础
  1. 什么事面向对象?主要特征是什么?

面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。

  1. SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明?

http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户;SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全;Session依赖于cookie进行传递。禁用cookie后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。Session文件是公有的

  1. HTTP 状态中302、403、 500代码含义?

一二三四五原则:(即一:消息系列;二:成功系列;三:重定向系列;四:请求错误系列;五:服务器端错误系列。)302:临时转移成功,请求的内容已转移到新位置403:禁止访问 500:服务器内部错误 401:代表未授权

  1. MyISAM和 InnoDB 的基本区别?索引结构如何实现?
    1. MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,适合用于频繁查询的应用;
    2. InnoDB类型支持事务,行锁,有崩溃恢复能力,读写速度比MyISAM慢,适合于插入和更新操作比较多的应用,空间占用大,不支持全文索引等。创建索引:alert table tablename add index 索引名 (`字段名`)
  2. 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?

按值传递:函数范围内对值的任何改变在函数外部都会被忽略按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。

  1. 说说你对缓存技术的了解?

缓存技术是将动态内容缓存到文件中,在一定时间内访问动态页面直接调用缓存文件,而不必重新访问数据库。

  1. 现在编程中经常采取MVC三层结构,请问MVC分别指哪三层,有什么优点?

MVC三层分别指:业务模型、视图、控制器,由控制器层调用模型处理数据,然后将数据映射到视图层进行显示,优点是:①可以实现代码的重用性,避免产生代码冗余;②M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式

  1. AJAX的优势是什么?

ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验。

  1. 在程序的开发中,如何提高程序的运行效率?
    1. 优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;
    2. 少用子查询可用表连接代替;少用模糊查询;
    3. 数据表中创建索引;
    4. 对程序中经常用到的数据生成缓存。
  2. 对于大流量的网站,您采用什么样的方法来解决访问量问题?
    1. 有效使用缓存,增加缓存命中率;
    2. 使用负载均衡;
    3. 对静态文件使用cdn进行存储和加速;
    4. 想法减少数据库的使用
    5. 查看出现统计的瓶颈在哪里
    6. 反向代理
  3. include和require的区别? 为避免多次包含同一文件,可用什么语句代替它们

区别:在失败的时候:include产生一个warning,而require产生直接产生错误中断require在运行前载入include在运行时载入代替:require_onceinclude_once;

  1. 简述php的垃圾收集机制

php中的变量存储在变量容器zval中,zval中除了存储变量类型和值外,还有is_ref和refcount字段。refcount表示指向变量的元素个数,is_ref表示变量是否有别名。如果refcount为0时,就回收该变量容器。如果一个zval的refcount减1之后大于0,它就会进入垃圾缓冲区。当缓冲区达到最大值后,回收算法会循环遍历zval,判断其是否为垃圾,并进行释放处理

  1. 如何实现PHP的安全最大化?怎样避免SQL注入漏洞和XSS跨站脚本攻击漏洞?

基本原则:不对外界展示服务器或程序设计细节(屏蔽错误),不相信任何用户提交的数据(过滤用户提交)。

  1. 什么是 CSRF 攻击 ?XSS 攻击?如何防范?

CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。讲述基本原理:用户访问A网站登陆并生成了cookie,再访问B网站,如果A网站存在CSRF漏洞,此时B网站给A网站的请求(此时相当于是用户访问),A网站会认为是用户发的请求,从而B网站就成功伪装了你的身份,因此叫跨站脚本攻击。

CSRF防范:A、合理规范api请求方式,GET,POSTB、对POST请求加token令牌验证,生成一个随机码并存入session,表单中带上这个随机码,提交的时候服务端进行验证随机码是否相同。

XSS,跨站脚本攻击。

防范:不相信任何输入,过滤输入

  1. 安全对一套程序来说至关重要,请说说在开发中应该注意哪些安全机制
    1. 防远程提交;
    2. 防SQL注入,对特殊代码进行过滤;
    3. 防止注册机灌水,使用验证码。
  2. 什么是事务?及其特性?

事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。

事务特性:A、原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。B、一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态C、隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,D、持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

  1. 索引的作用?和它的优点缺点是什么?

索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

  1. 主键、外键和索引的区别?

定义:主键--唯一标识一条记录,不能有重复的,不允许为空外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值索引--该字段没有重复值,但可以有一个空值;

作用:主键--用来保证数据完整性外键--用来和其他表建立联系用的索引--是提高查询排序的速度;

个数:主键--主键只能有一个外键--一个表可以有多个外键索引--一个表可以有多个唯一索引

  1. 堆和栈的区别?
    1. 堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小;
    2. 栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义。
  2. 常用的魔术方法有哪些?举例说明

php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。

    1. __construct() 实例化类时自动调用;
    2. __destruct() 类对象使用结束时自动调用;
    3. __set() 在给未定义的属性赋值的时候调用;
    4. __get() 调用未定义的属性时候调用;
    5. __isset() 使用isset()或empty()函数时候会调用;
    6. __unset() 使用unset()时候会调用;
    7. __sleep() 使用serialize序列化时候调用;
    8. __wakeup() 使用unserialize反序列化的时候调用;
    9. __call() 调用一个不存在的方法的时候调用;
    10. __callStatic()调用一个不存在的静态方法是调用;
    11. __toString() 把对象转换成字符串的时候会调用。
  1. 简述高并发网站解决方案
    1. 前端优化(CND加速、建立独立图片服务器);
    2. 服务端优化(页面静态化、并发处理[异步|多线程]、队列处理);
    3. 数据库优化(数据库缓存[Memcachaed|Redis]、读写分离、分库分表、分区);
    4. Web服务器优化(负载均衡、反向代理)。
  2. PHP中的默认会话时间是什么?

php中的默认会话时间是直到浏览器关闭为止。

  1. TCP 和 UDP 的特点和区别?

都是属于传输层协议

    1. TCP面向连接,所以只能一对一;面向字节流传输;数据可靠,不丢失;全双工通信;
    2. UDP(根据TCP特点反记);无连接,支持一对一,一对多,多对多;面向保温传输;首部开销小,数据不一定可靠但是速度更快。
  1. 502 的原因及解决方法
    1. fastcgi 缓冲区设置过小;
    2. php-cgi的进程数设置过少;
    3. max_requests(内存溢出或频繁重启);
    4. php执行时间超过nginx等待时间;
    5. fastcgi执行时间;
  2. nginx 负载均衡

三种方式:DNS轮询、IP负债均衡、CDN。

  1. 限流机制

方式:ip限流、接口令牌限流、用户限流、header动态token(前端加密,后端解密)。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚安08

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值