2019春招PHP面试题(附答案)

一. 基础

1, session和cookie的区别

Session是在服务端保存的一个数据结构,用来跟踪用户 的状态,这个数据可以保存在集群、数据库、文件中

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的 一种方式。

2, PHP7用了吗,了解哪些新特性

PHP7在性能方面实现跨越式的提升,新的操作符,统一变量语法等等

3, 魔术变量

问了__dir__代表的含意,这个是回答文件所在的目录

4, 魔术方法

这算是经常会问到的一个题目了,常用的都记得,忽然问到__invoke()就懵了

__construct(), __destruct(), __call(), __callStatic() , __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo()

二. 数据结构和算法

1, 栈数据结构

只要能用代码实现出栈数据结构即可

2, 冒泡排序

只要能用代码实现出冒泡排序即可

3, 完全二叉树和满二叉树的区别

只有最下面的两层结点度能够小于2,并且最下面一层的结点都集中在该层最左边的 若干位置的二叉树才为完全二叉树

而一棵深度为h且有 2^h-1个结点的二叉树即为 满二叉树

三. 架构相关

1, Laravel和ThinkPHP有什么区别,对于laravel有什么要吐槽的

我从路由,中间件到控制器,数据访问,视图等层面上介绍了不同

吐槽的话可能相对于一些项目,laravel有点‘重’

2, 有用composer发布过自己的包吗? (基于 Composer 的 PHP 模块化开发)

我回答没有,只是了解过

面试官就说他们的框架是自己在 Discuz的基础上二次开发的框架,在他优秀的基础上把composer依赖管理也都引进blabla

3, 谈谈对于MVC的理解

结合项目说明模板,视图,控制器之间的关系和基本的构成

四. 防护

1, XSS 跨站脚本攻击

2, DDOS 流量攻击

3, CSRF 跨站请求伪造攻击

4, SQL注入

在前端表单用户输入进行控制或限制

有后端传参数和数据时进行过滤等等

五. 项目

1, 在项目中如何解决并发的问题

我的解决办法先是前端控制有效请求,例如一分钟才正常请求一次

接着 后端同样过虑无效请求,接着接操作放进队列中实现

有个面试官问,你这个队列是阻塞的吗,如果真的同时两个用户购买,两个用户等待 完成,他们还是用同一个线程完成,有没有考虑 用其它方式实现

我说无,他就说可 以用锁的机制,第二个等待第一个完成,一个接一个

2, 微信支付具体实现流程

1. H5页面发起支付请求,请求生成支付订单

2. 调用统一下单API,生成预付单

3. 生成JSAPI页面调用的支付参数并签名

4. 微信浏览器自动调起支付 JSAPI接口支付

5. 确认支付

6. 异步通 知商户支付结果,商户收到通知返回确认信息

7. 返回支付结果,展 示支付信息给用户

3, 简单实现登录注册功能

各个框架考虑的方面不一样,这就按自己的理解写出相应的代码就好

4, 如何设计一个商城

我是先给自己限定了一个B2C的商城,然后从数据表开始,接着简单 介绍前端和后端实现逻辑

MYSQL

mysql优化基本是重中之重了,尤其考验技术

一. 基础

1, InnoDB和MyISAM有什么区别

InnoDB提供事务处理,行级锁,支持外键,支持多种行格式

MyISAM只支持表级锁,全文索引,堆表

2, 事务有哪几个特性

原子性、一致性、隔离性、持久性

3, 事务的隔离级别

未提交读、已提交读、可重复读、可串行化

4, 有个表字段的O_Id,OrderDate,OrderPrice,Customer这几个,我们希望查找订单总 金额少于 2000 的客户

SELECT Customer,SUM(OrderPrice) FROM

Orders

GROUP BY Customer

HAVING SUM(OrderPrice)<2000

5, 查询学生表的数据,大于六十的为及格,反之不及格

select 分数,类别=Case

WHEN 分数 >=60 THEN '及格'

ELSE '不及格 '

END

from 成绩表

6, 查询没有学完所有课程的学生学号、姓名

SELECT a.SNO ,a.SNAME

FROM student a

WHERE a.`SNO` NOT IN

( SELECT b.`SNO` FROM SC b

GROUP BY b.`SNO` HAVING COUNT(*) =

( SELECT COUNT(*) FROM course)

);

二. 优化

1, "select * from student where name='red'","select * from student where name='blue'",优化语句

select name from student where

name='red'

union

select

name from student where name='blue'

如果用or条件, myisam表能用到索引, innodb不行。

innodb用UNION替换OR (适用于索引列)

2, 你一般都会怎么优化数据库

查询缓存、EXPLAIN、(联合)索引、使用固定长度静态表

服务器

一. 防护

服务器怎么做防护

仅开放有限端口,限制登录IP,限制登录帐号

也是可以定一本书的问题,可以根据项目回答

二. 协议

Get和Post有什么区别

Get的参数包含在URL,GET请求会被浏览器主动cache,是url编码, 有字符限制参数为ASCII字符

Post 通过request body传递参数,且 有多种编码方式

三. NginX

设置nginx时php脚本请求是让什么处理

默认配置的是转发到FastCGI处理

四. Redis

1、你用redis来缓存什么数据

跟据项目来说自己缓存的一些经常要用到的数据

2、Redis怎么做持久化,配置哪种刷新频率

配置aof持久化,用默认的每秒刷新aof文件

3、Redis是多线程吗

单线程(我竟然回答是多线程,233)

4、Redis怎么配置一主多从,要多久

可以用Redis官方集群方案,具体没有实践过,可能要花几周时间来 完成

五. 代码管理

有用过git吗?当两个人提交了错误代码后,怎么解决

用过git提交代码,发生这种情况可以先将远程的代码git pull到本 地,然后将冲突的代码或Git标记内容修改正确,然后重新提交代码

相关推荐