PHP面试总结

page_img_url

前言

面试是你进入公司的第一个关卡,如同高考通常,可是面试不是高考,高考只有一次,而面试则能够有N次,只要有合适的面试邀请,你就能够继续尝试,不要惧怕失败;假如公司没有选择你,不是你不优秀,只是你不符合他们的要求罢了,结束后总结下面试中不足的地方,及时调整好心态,准备下个面试才是你最正确的作法。php

面试准备

俗话说:“将军不打没准备的仗”,参加高考也是须要寒窗苦读12年甚至更久,而求职面试呢,也是须要提早准备的,主要分以下几个方面来准备:html

  1. 自我介绍,这个不用我说了吧,几乎每场面试都会遇到
  2. PHP基础语法和函数
  3. 提早准备好怎么在面试官面前表述本身的项目(体现用到的技术与亮点/难点)
  4. 简历上本身的列出的专业技能,要看一下相关知识点,由于面试官会从你的这些技能中问你问题
  5. MySQL数据库方面,好比事务处理、索引、锁、查询优化、表结构设计等
  6. PHP进阶方面,例如MVC、OOP、算法、设计模式、redis等
  7. Javascript、Ajax、jQuery等前端知识,会Vue或者Node.js通常会有加分呢
  8. 丰富GitHub项目、博客以及本身活跃的社区主页信息等
  9. 准备好你的我的简历
  10. ……

技术面试知识点

MySQL索引

索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就能够获得索引的本质:索引是数据结构。

MySQL索引的创建对于MySQL的高效运行是很重要的,索引能够大大提升MySQL的检索速度,从而提升性能,是MySQL查询优化之一。前端

更多索引相关详见 http://www.javashuo.com/article/p-auvdsifi-bd.html程序员

MySQL优化

现现在,各类大数据、高并发的时代,数据库的操做愈来愈成为整个架构的性能瓶颈了,这点对于Web应用尤为明显。关于数据库的性能,这并不仅是DBA才须要担忧的事,而这更是咱们程序员须要去关注的事情。当咱们去设计数据库表结构,对操做数据库时,咱们都须要注意数据操做的性能。而在面试过程当中,也是常常会遇到的,因此,不管是面试准备仍是平常开发,咱们都应该关注这方面的东西。web

更多优化方法和技巧详见 https://coolshell.cn/articles/1846.html面试

MySQL事务

咱们都知道,事务是一个序列操做,其中的操做要么都执行,要么都不执行,它是一个不可分割的工做单位;因此MySQL事务主要用于处理操做量大,复杂度高的数据。redis

MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务;通常来讲,事务都具有4个特性(ACID)::原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。算法

更多MySQL事务详见 https://www.jianshu.com/p/bcc614524024sql

MyISAN与InnoDB的区别

MyISAN与InnoDB都是MySQL的数据库引擎之一,在5.5版以前MyISAM是MySQL的默认数据库引擎;MyISAN虽然性能极佳,但却有一个缺点:不支持事务处理(transaction),而偏偏相反,InnoDB的最大特点就是支持了ACID兼容的事务(Transaction)功能,因此,若是在平常开发中,若是遇到不知道选择哪一种表类型的,那么就选择InnoDB吧。shell

更多MyISAN与InnoDB的的比较详见 https://www.jianshu.com/p/a95...

HTTP协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW: World Wide Web)服务器传输超文本到本地浏览器的传送协议。

HTTP是一个基于TCP/IP通讯协议来传递数据,HTTP是一个属于应用层的面向对象的协议,因为其简捷、快速的方式,适用于分布式超媒体信息系统,他的主要特色是:简单快速、灵活、无链接、无状态、支持B/S及C/S模式等。

HTTP协议工做于客户端-服务端架构为上。浏览器做为HTTP客户端经过URL向HTTP服务端即WEB服务器发送全部请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

更多有关HTTP协议详见 https://www.jianshu.com/p/80e25cb1d81a

TCP/IP协议

从字面意义上讲,有人可能会认为TCP/IP是指TCP和IP两种协议。实际生活当中有时也确实就是指这两种协议。然而在不少状况下,它只是利用IP进行通讯时所必须用到的协议群的统称。具体来讲,IP或ICMP、TCP或UDP、TELNET或FTP、以及HTTP等都属于TCP/IP协议。他们与TCP或IP的关系紧密,是互联网必不可少的组成部分。TCP/IP一词泛指这些协议,所以,有时也称TCP/IP为网际协议群。

更多内容详见 http://www.javashuo.com/article/p-urwnohvc-bu.html

四大基础算法

虽然工做中,你以为本身并无涉及到算法这方面的东西,可是算法是程序的核心,一个程序的好与差,关键是这个程序算法的优劣,因此对于冒泡排序、插入排序、选择排序、快速排序这四种基本算法,我想仍是要掌握的。

一般,一个需求能够有多种算法实现,因此除了理解算法的实现以外,咱们还须要关注算法的执行时间以及性能评估,这样,才能找到最优算法,而时间复杂度和空间复杂度就是衡量一个算法的优劣。

更多算法知识点详见 https://www.jianshu.com/p/a8cd6cbf733d
更多时间和空间复杂度详见 http://www.javashuo.com/article/p-awbjfjnb-hb.html

二分算法/二分查找

这个算法经常使用于在一个有序数组中查找某个值第一次出现的位置、最后出现的位置、或者是一段区间。用二分法后,因为每次能够去掉一半无用的区间,会将时间复杂度减小到O(logn),而一般,二分算法能够用递归以及不递归实现,这两种建议都了解下。

二分法的基本作法是:一、肯定要查找的区间。二、肯定要二分时的参照点。二、区间内选取二分点。三、根据二分点的值,综合左右区间状况以及求解的目的,舍去一半无用的区间。

更多二分算法解析详见 https://juejin.im/entry/585917c661ff4b006cba47cf

PHP7的新特性

PHP7将在2015年10月正式发布,PHP7,将会是PHP脚本语言的重大版本更新,同时将带来大幅的性能改进和新的特性,以及改进一些过期功能。该发布版本将会专一在性能增强,源自PHP版本树中的phpng分支。在硅谷公司的ZendCon会议,PHP工具厂商Zend技术官方讨论phpng和PHP7的进度。“(本次升级)真正专一于帮助业界的应用程序显著增强执行速度,再加上,咱们在PHP中的其余改进,”Zend的首席执行官安迪特曼斯 (曾参与了PHP语言的持续开发和发展)表示。

PHP7的新特性主要有:标量类型声明、返回值类型声明、null合并运算符、太空船操做符、经过define()定义常量数组、匿名类等。

PHP7新特性详见 http://php.net/manual/zh/migration70.new-features.php

Nginx和Php-fpm的工做原理

咱们知道Nginx (engine x)是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务器。而Php-fpm是FastCGI的实现,并提供了进程管理的功能。由于Nginx不仅有处理http请求的功能,还能作反向代理;因此Nginx经过反向代理功能将动态请求转向后端Php-fpm。

更多原理详见 https://segmentfault.com/a/11...

ThinkPHP5/Lavavel的执行流程分析

例如从入口到控制器都干了啥、一个URL请求到达路由这里是怎么再到相应的控制器等,这可能涉及框架的源码分析,这个在面试过程当中,我相信有很多人遇到过,具体的我就很少说了,须要在本身多去研究和分析了。

ThinkPHP5/Lavavel的比较

你们都知道,ThinkPHP5是国人开发的,各类参考文档都比较全,适合快速入门,而Laravel则是比较优雅的框架,也号称是最艺术的。这两种框架,都有本身很大的用户群体,有网友说:“ThinkPHP5的优点在于好用,Laravel的优点在于装逼。”具体的比较,请你们能够Google或者Baidu查询更多比较详情。

项目的攻坚点/架构

攻坚点这个就须要读者结合本身的项目经验进行总结概括了,主要包括工做中遇到的问题和解决方案,也就是,这个项目中你的特长之处,作的比较好的方面以及攻克的技术难点。

架构的话呢,这个也会有问到的,我就在面试过程当中,被遇到过不少次,你能够说一下本身最近这个项目的一个架构就行,后者,说一下你最熟悉的一个项目的架构也行,具体的能够本身查找相关资料深刻了解。

Linux知识

Linux是开源的、免费的操做系统,稳定性、安全性与并发性获得业界公认,是一个统称,常见的CentOS、Ubuntu、Rethat……

Linux的特色主要有:开源、免费、多线程、多用户、安全性好、对内存和文件管理优越等;面试中,通常会问到一些你对于Linux的命令和用法的熟悉程度,若是你平常开发中,常常用到,那么我相信面试应该也不成问题,可是也还须要多了解一点。

OOP和MVC的理解

面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具备对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象做为程序的基本单元,将程序和数据封装其中,以提升软件的重用性、灵活性和扩展性,对象里的程序能够访问及常常修改对象相关连的数据。

PHP面向对象的三大特性是:封装、继承、多态;同时OOP软件的三个目标是:重用性、拓展性、灵活性。因此,采用OOP这种编程思想和技术为编程人员敞开了一扇大门,使其编程的代码更简洁、更易于维护,而且具备更强的可重用性。

MVC模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,而且使程序某一部分的重复利用成为可能。除此以外,此模式经过对复杂度的简化,使程序结构更加直观。软件系统经过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。

关于OOP的更多详见 http://www.runoob.com/php/php-oop.html
关于MVC的更多详见 http://www.manongjc.com/article/1864.html

设计模式

在软件工程中,设计模式(Design Pattern)是对软件设计中广泛存在(反复出现)的各类问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。

设计模式并不直接用来完成代码的编写,而是描述在各类不一样状况下,要怎么解决问题的一种方案。面向对象设计模式一般以类或对象来描述其中的关系和相互做用,但不涉及用来完成应用程序的特定类或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引发麻烦的紧耦合,以加强软件设计面对并适应变化的能力。其中,常见的设计模式有:工厂模式、单例模式等。

有关设计模式的更多请详见 http://larabase.com/collection/5/post/143

Redis和Memcache

Redis和Memcache都属于内存(memory)键-值(key-value)数据库,在设计和思想上有许多相同之处,功能和应用在不少场合(如分布式缓存服务)也类似。它们都从属于数据库解决方案中的nosql家族,因为二者都将数据存储在内存中,天然而然,它们都是很是理想的缓存实现方案。

Memcache最初是由Brad Fitzpatrick于2003年开发而成。而Redis则由Salvatore Sanfilippo于2009年建立,它自己也从Memcache上吸收借鉴大量宝贵经验教训,被称为“强化版Memcache”。确实,Redis在功能多样性方面要赛过Memcache,虽然强大且更具灵活性,但复杂程度也比Memcache更甚。而Redis和Memcache的不一样点主要体如今:数据类型支持不一样、内存管理机制不一样、数据持久化支持、集群管理的不一样等。

有关比较详情查看 https://www.biaodianfu.com/re...

前端技术

也许有的人会说,我做为一名后端开发人员,我须要学习前端技术吗?答案是确定的,无论是对于工做仍是本身的职业发展规划,前端技术都是须要学习和掌握的,例如Javascript、Jquery、Ajax都要了解的,若是会Vue或者Node.js等更好。在面试中,偶尔会涉及到一些。

Jsonp跨域的使用和原理

PHP处理跨域通常有三种方法:服务器代理、Jsonp、服务器脚本增长支持;有些网站处于安全考虑, 不会设置容许跨域, 而咱们又恰好会用到一次跨域请求, 那么, Jsonp就派上用场了。

Jsonp如何实现跨域:因为同源策略的限制,XmlHttpRequest只容许请求当前源(域名、协议、端口)的资源,为了实现跨域请求,能够经过script标签实现跨域请求,而后在服务端输出JSON数据并执行回调函数,从而解决了跨域的数据请求。

其余更多有关Jsonp的用法,能够自行百度。

API的数据安全传输

先后端分离的开发方式,咱们以接口为标准来进行推进,定义好接口,各自开发本身的功能,最后进行联调整合。不管是开发原生的APP仍是webapp仍是PC端的软件,只要是先后端分离的模式,就避免不了调用后端提供的接口来进行业务交互,这个时候,数据信息就很是重要了。

咱们经常使用到的尽可能保证数据安全的方法主要方式有:使用https、请求签名(防止参数被篡改)、身份确认机制(每次请求都要验证是否合法)、APP中使用ssl pinning防止抓包操做、对全部请求和响应都进行加解密操做等;这里我想说一下,能够了解一下jwt。

什么是JWT https://www.jianshu.com/p/576dbf44b2ae

分析URL的组成部分

这个,主要采用PHP函数parse_url()来解析,本函数解析一个URL并返回一个关联数组,包含在URL中出现的各类组成部分,并了解URL的各个组成部分的含义和所在位置;一个URL,通常都包括:协议、域名、端口(web的不少80默认)、文件名、参数等。

有关parse_url的用法和返回值详见 http://www.php.net/manual/zh/function.parse-url.php

人事面试点

  • 你以前所在公司的离职缘由
  • 谈谈你对加班的见解
  • 你为何会选择来咱们公司
  • 你将来的职业规划以及发展方向
  • 对本身的一个评价
  • 你的业余爱好,最近在看什么书
  • 对你的经历提出一些问题
  • 你还有什么问题要问我
  • 你在以前,有去过那些公司面试?接下来还约了其余的面试吗
  • 你的指望薪资以及要求
  • ……

最后

这是我结合本身面试过程当中,总结的一些经验,但愿能帮助到你们,若是有说的不对或者不到位的地方,欢迎指正和交流。在此,祝愿你们都能找到一份满意的工做。

相关文章
相关标签/搜索