2018春招PHP面试总结
这次的面试,不仅仅希望能开启一个新的征程,了解世界,也是一个发现自身不足的一个过程,借由此确定将来的发展(学习)方向的一次机会。
面试准备
一份能让面试官了解你的简历,一份对于自己的自信,就出发吧
PHP
php是世界上最好的语言!
基础
-
123Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
PHP7用了吗,了解哪些新特性
123PHP7在性能方面实现跨越式的提升,新的操作符,统一变量语法等等参考[PHP7的文章](https://blog.csdn.net/u011957758/article/details/73320083)-
123问了__dir__代表的含意,这个是回答文件所在的目录参考[PHP 手册之魔术常量](http://php.net/manual/zh/language.constants.predefined.php)
-
1234这算是经常会问到的一个题目了,常用的都记得,忽然问到__invoke()就懵了__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo()参考[PHP 手册之魔术方法](http://www.php.net/manual/zh/language.oop5.magic.php)
数据结构和算法
-
123只要能用代码实现出栈数据结构即可参考[栈数据结构文章](http://www.jb51.net/article/130272.htm)
-
123只要能用代码实现出冒泡排序即可参考[冒泡排序文章](http://www.jb51.net/article/24497.htm)
-
1234只有最下面的两层结点度能够小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树才为完全二叉树而一棵深度为h且有 2^h-1个结点的二叉树即为满二叉树参考[完美二叉树, 完全二叉树和完满二叉树](https://blog.csdn.net/HaoDaWang/article/details/78065162)
架构相关
Laravel和ThinkPHP有什么区别,对于laravel有什么要吐槽的
1234我从路由,中间件到控制器,数据访问,视图等层面上介绍了不同吐槽的话可能相对于一些项目,laravel有点‘重’参考[tp3.2和tp5,以及laravel的区别](https://blog.csdn.net/qq1690194137/article/details/79794944)-
1234我回答没有,只是了解过面试官就说他们的框架是自己在Discuz的基础上二次开发的框架,在他优秀的基础上把composer依赖管理也都引进blabla参考[基于 Composer 的 PHP 模块化开发](https://zhuanlan.zhihu.com/p/27943241)
-
123结合项目说明模板,视图,控制器之间的关系和基本的构成参考[MVC](https://baike.sogou.com/v25227.htm)
防护
- XSS 跨站脚本攻击
- DDOS 流量攻击
- CSRF 跨站请求伪造攻击
- SQL注入1234在前端表单用户输入进行控制或限制有后端传参数和数据时进行过滤等等参考[常见的 CSRF、XSS、sql注入、DDOS流量攻击](https://blog.csdn.net/echo_laodong/article/details/79254552)
项目
在项目中如何解决并发的问题
12345678我的解决办法先是前端控制有效请求,例如一分钟才正常请求一次接着后端同样过虑无效请求,接着接操作放进队列中实现有个面试官问,你这个队列是阻塞的吗,如果真的同时两个用户购买,两个用户等待完成,他们还是用同一个线程完成,有没有考虑用其它方式实现我说无,他就说可以用锁的机制,第二个等待第一个完成,一个接一个参考[php高并发解决的一点思路](https://blog.csdn.net/mkbug/article/details/71455725)相关的还有swoole扩展,可以了解下微信支付具体实现流程
1234567891. H5页面发起支付请求,请求生成支付订单2. 调用统一下单API,生成预付单3. 生成JSAPI页面调用的支付参数并签名4. 微信浏览器自动调起支付JSAPI接口支付5. 确认支付6. 异步通知商户支付结果,商户收到通知返回确认信息7. 返回支付结果,展示支付信息给用户参考[微信支付时序图](https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4)简单实现登录注册功能
1各个框架考虑的方面不一样,这就按自己的理解写出相应的代码就好如何设计一个商城
123我是先给自己限定了一个B2C的商城,然后从数据表开始,接着简单介绍前端和后端实现逻辑参考[PHP网上商城网站的设计与实现](http://www.docin.com/p-190062065.html)
MYSQL
mysql优化基本是重中之重了,尤其考验技术
基础
-
1234InnoDB提供事务处理,行级锁,支持外键,支持多种行格式MyISAM只支持表级锁,全文索引,堆表参考[MyISAM与InnoDB区别](https://blog.csdn.net/xifeijian/article/details/20316775)
事务有哪几个特性
1原子性、一致性、隔离性、持久性事务的隔离级别
123未提交读、已提交读、可重复读、可串行化参考[Innodb中的事务隔离级别和锁的关系](https://tech.meituan.com/innodb-lock.html)有个表字段的O_Id,OrderDate,OrderPrice,Customer这几个,我们希望查找订单总金额少于 2000 的客户
123SELECT Customer,SUM(OrderPrice) FROM OrdersGROUP BY CustomerHAVING SUM(OrderPrice)<2000查询学生表的数据,大于六十的为及格,反之不及格
12345select 分数,类别=CaseWHEN 分数>=60 THEN '及格'ELSE '不及格'ENDfrom 成绩表查询没有学完所有课程的学生学号、姓名
1234567SELECT a.SNO ,a.SNAMEFROM student aWHERE a.`SNO` NOT IN( SELECT b.`SNO` FROM SC bGROUP BY b.`SNO` HAVING COUNT(*) =( SELECT COUNT(*) FROM course));
优化
“select from student where name=’red’”,”select from student where name=’blue’”,优化语句
123456select name from student where name='red'unionselect name from student where name='blue'如果用or条件, myisam表能用到索引, innodb不行。innodb用UNION替换OR (适用于索引列)你一般都会怎么优化数据库
123查询缓存、EXPLAIN、(联合)索引、使用固定长度静态表这问题都能写一本书了,参考[MySQL性能优化的最佳21条经验](https://blog.csdn.net/kaka1121/article/details/53395587)
服务器
防护
服务器怎么做防护
协议
Get和Post有什么区别
NginX
设置nginx时php脚本请求是让什么处理
Redis
你用redis来缓存什么数据
1跟据项目来说自己缓存的一些经常要用到的数据Redis怎么做持久化,配置哪种刷新频率
123配置aof持久化,用默认的每秒刷新aof文件参考[redis 的两种持久化方式及原理](https://blog.csdn.net/yinxiangbing/article/details/48627997)Redis是多线程吗
123单线程(我竟然回答是多线程,233)参考[Redis单进程](http://www.cnblogs.com/syyong/p/6231326.html)Redis怎么配置一主多从,要多久
123可以用Redis官方集群方案,具体没有实践过,可能要花几周时间来完成参考[Redis集群方案](https://www.zhihu.com/question/21419897)
代码管理
有用过git吗?当两个人提交了错误代码后,怎么解决
其它
为什么离职
|
|
你理想的团队
|
|
职业规划
|
|
想问的问题
|
|
后记
5天9家7offer,感觉还行,面试时大多公司都会根据简历上的项目进行详细的提问,.
面试时能看出技术上的广度(经历项目或技能多少),和技术的深度(数据优化,框架理解制作,服务器攻防渗透),希望大家也能够随着项目的发展,不断实践学习技术,就酱。
\(•ㅂ•)/♥ 共勉~