php常见面试题及答案
PHP程序员面试的时候会面临很多专业性问题,你的专业水平决定了企业对你的评价和你的薪资水准,今天小编整理了php常见面试题及答案供大家参考,一起来看看吧!
php常见面试题及答案
1 说出常用的10个数组方法
我觉得数组比较最能体现PHP基础语法的一个数据结构了,下面给大家列一下常用的10个关于操作数组的函数
in_array(判断数组中是否有某个元素)
implode(将数组按照一定规律分解)
json_encode(将数组转化成json)
sort(排序,有很多排序的函数这里就说一个)
array_push(将一个活多个单元压入数组的末尾)
array_merge(合并数组)
array_key_exists(检查键名是否存在于数组中)
array_unique(去除数组中重复的值,只能对一位数组起作用)
array_shift(移除数组中第一个单元)
php有很多关于数组的函数,但常用的就是这几个了,可能我说的还不是很合适,但没什么大问题。需要注意的是,不要为了应付面试而盲目的死记硬背php的数组函数,你像array_pop这样的函数,你倒是知道这样的函数,笔试的时候也打出来了,但当面试官问你,你平时怎么用这个方法,你不就噎菜了吗?!所以要写平时常用的
2 说出平时常用的操作字符串的方法,并解决具体问题
同上,字符串操作也是php的基础用法,下面尽可能全的罗列一下平时常用的字符串操作
substr(截取字符串)
strlen(获取字符串长度)
strpos(查找字符串首次出现的位置)
str_replace(字符串替换)
explode(将字符串按照规律转化成数组)
strtoupper(将所有字母变成大写)
strtolower
ucfirst(将字符串的首字母变成大写)
ucwords(将字符串中每个单词的首字母变成大写)
strrev(反转字符串,其实不是很常用)
substr_replace(替换字符串的子串,注意与str_replace的区别)
strip_tags(去除html和php标记,可以选择保留想要的标签)
trim(去除空格)
explode(分割成数组)
这些是比较常用的了,肯定还有一些我没有列举出来,毕竟php的字符串函数比较多又或者其他的函数我用的不多。另外,记住这个函数并不是目的,目的是会用,笔试的时候可不是简单的问你这些函数的名字,那都是要做具体的例子的。现在时间比较紧,有时间一定会举出10个例子来分析的
3 恒等于 貌似不应该把这个当做一个单独的知识点来说,但这确实是笔试题中经常考到的
反正我平时没有主动用过这个东西一次。“==”相比于"==="不同的是,前者之比较值的大小,后者会比较数据类型。举例说明
if(1 == '1'){echo "it's right";}
if(1 === '1'){}
很明显,前者是正确的。因为这两个变量的类型不同
4 三元运算符
它的一般定义谁都会有,$a = 1 ? 'one' :0;但是有一次笔试我见了一个比较变态的题目,多个三元运算符和其他运算符联合在一起,让我不知道先执行哪一个,举例说明
echo (true?'true':false?'t':'f');这个问题曾一段让我很郁闷,到底先执行哪一个呢?首先,肯定是从左到右的,echo ((true ? 'true' : 'false') ? 't' : 'f');这样就够清晰了吧,哈哈
记住这一原则就可
5 require和include的异同
这应该是让我们比较恶心的问题了,但这却也是经常考的问题
我们都知道的是require在执行出错时不会继续执行,include会继续执行,还有就是require一般放在文件的头部包含一个初始化文件之类的东西,而include一般是在语句中用到了那些文件包含过来
6 session和cookie
这也是面试中常问到的问题,最简单的回答常是session保存在服务端,大量的session会增大服务器的压力,cookie因为保存在客户端所以没有这些问题,但cookie因为这个特点所以相对来说不安全,这是我初学php的时候知道的
后来我知道了,session与cookie联系在一起是通过session_id联系起来的,而seesion_id是保存在cookie中的,这也就是为什么我清了cookie,session会失效的原因。当然我们也可以不将session_id保存在cookie里,一般大型网站不会将用户信息保存在session里,正如上面所说的因为会占资源,这时会将session保存在DB中,当然这也和集群有关,因为你如果使用了集群的话,会有多台服务器,你seesion保存在这台服务器上而处理的操作却通过另一台服务器的话就找不到session了。另外,session的过期时间,很多人都以为在php的配置文件中配置了就可以,其实这不是最好的方式,因为这个过期时间还取决于另一个参数,也就是过了这个你设置的时间session可能不会马上被清掉。所以我们将session保存在DB中。
7 面对对象
这几乎是每次面试都会问到的问题,而面试官又有几个能明白的呢?这里不详细介绍这个问题
8 对mvc的理解
这道是个不难理解的概念,现在只要是框架都用这种模式来处理问题了,mvc和smarty还不一样。smarty没有将m和c分开,也就是业务逻辑和控制器还是混在一起的,比较典型的例子就是ecshop。控制器controller负责调度数据,接受请求,具体处理数据的操作让模板model来完成,然后再通过控制器将值传给试图view
PHP程序员面试注意事项
PHP程序员在面试的时候一般应该抓住以下几个点
一、应该介绍自己掌握的开发一种,主要介绍PHP语言的独特语法以及如何使用,比如PHP语言会比CGI更快的执行动态页面。
二、必须熟悉Oracle、Mysql等数据库,并能简单的介绍自己掌握的程度。由于php做出的动态页面比用其他语言做出来的页面在执行效率以及CGI方面高得多,所以你还需要在面试中说出自己的文档撰写能力很强。
三、PHP程序员应该具备独立分析和解决问题的能力,可以在自我介绍中讲讲自己曾经遇到过的问题是如何解决的。让面试官看到你的能力,这将会直接影响到你自我介绍的成功与否。
四、一个PHP程序员必须有良好的职业道德和工作态度,所以在面试中应该尽量讲自己在做项目时的认真态度以及今后的工作规划,表现出自己的进取心。
五、还有关于沟通能力和理解能力的体现,这个在与HR的交谈中就可以表现出来,所以需要做的工作就是从容的有条理的把自我介绍说完,回答每一个问题时都应该简洁明了,关于自我介绍可以提前做个草稿,背一下。
六、团队合作能力也是企业非常看重的,在培训中老师一般都会带领大家做项目,大的项目一般会分小组,每个人都有相对应的任务,这就模拟了公司中的团队合作,在自我介绍过程中要把做项目的具体流程以及相互协作的过程说出来,让HR看到自己具备团队合作的能力。
七、最后就是执行力,每当任务分配下来的时候该如何执行,还有自己讲过职业规划后该如何执行,还有在学习的过程中是如何人字形的,遇到困难又是如何执行的,这些都可以体现出php程序员的执行力,回答的时候抓住发现及时寻找原因,快速展开行动的这个主线即可。
八、最重要的是你的能力、技术以及自己的项目。
PHP语言特点
开源免费
PHP是一个受众大并且拥有众多开发者的开源软件项目,Linux + Nginx + Mysql + PHP是它的经典安装部署方式,相关的软件全部都是开源免费的,所以使用PHP可以节约大量的正版授权费用。不过PHP作为一个开源软件,它缺乏大型科技公司的支持背景,网络上对它的唱衰也是经久不衰,不过它的持续迭代和性能持续增强的现实却是鼓舞人心的,PHP社区用实际行动给予各种质疑强有力的回击。
快捷高效
PHP的内核是C语言编写的基础好效率高,可以用C语言开发高性能的扩展组件;PHP的核心包含了数量超过1000的内置函数,功能应有尽有很全面,开箱即用程序代码简洁; PHP数组支持动态扩容,支持以数字、字符串或者混合键名的关联数组,能大幅提高开发效率; PHP是一门弱类型语言,程序编译通过率高,相对其他强类型语言开发效率快;PHP天然热部署,在php-fpm运行模式下代码文件覆盖即完成热部署;PHP经过20多年的发展,在互联网上可以搜到海量的参考资料供参考学习。
性能提升
PHP版本越高它的整体性能越高,根据官方介绍,PHP7.0.0 对比PHP5.6性能就提升了2倍,PHP7.4已经比PHP7.0快了约30%,PHP8.0在性能上又相对PHP7.4大约改进了10%。PHP 8.0 引入了 JIT编译器特性,同时加入多种新的语言功能,例如命名参数、联合类型、注解、Constructor Property Promotion、match 表达式、nullsafe 运算符以及对类型系统、错误处理和一致性的改进。PHP拥有自己的核心开发团队,保持5年发布一个大版本、1个月发布2个小版本的频率,最新的版本是PHP8.08 。PHP 7.0.0 发布于2015-12-03,此版本下最新版本是PHP 7.4.21 (发布日期:2021-07-01),PHP 8.0.0 发布于2020-11-26,此版本下最新版本是PHP 8.0.8(发布日期:2021-07-01)。
跨平台
每个平台都有对应的php解释器版本,指针对不同平台均编译出目标平台的二进制码(PHP解释器),php开发的程序可以不经修改运行在windows、linux、unix等多个操作系统上。
常驻内存
php-cli模式下可以实现程序常驻内存,各种变量和数据库连接都能长久保存在内存 实现资源复用,比较常用的做法是结合swoole 组件编写cli框架。
页面生命周期
在php-fpm模式下,所有的变量都是页面级的,无论是全局变量还是类的静态成员,都会在页面执行完毕后被清空,对程序员水平要求低,占用内存非常少,特别适合中小型系统的开发。