如何面试 PHP 工程师?修改
写补充说明
举报1 条评论分享•邀请回答
按票数排序按时间排序
26 个回答
flamingtop
徐建兴、徐豪杰、肖龙亮 等人赞同
问一些日常的正常的PHP问题,主要是考察应聘者的认知:
一个包含中英文的字符串如何获得它的自然长度(看看ta是否有encoding的知识和意识)
问一问什么是ORM,有时候会问这个词的英文全称是什么,问问ta对于ORM有什么个人的看法?(看看ta学习细不细,有没有技术判断,PHP开发人员应该知道什么时候使用ORM)
问一问假如ta要自己去实现一个framework,ta会怎么设计。(看看ta对代码架构的理解,对MVC的理解)
问一问framework设计里的url dispatcher他会怎么考虑。(HTTP知识)
问一问ta对框架本身的看法
了解一下ta对Design Pattern的认知,比如Singleton,Observer,Factory等常用的设计模式,问一问ta对设计模式本身的看法。
问两三个数据库设计的问题
问几个前端的问题,哪怕ta的职位是PHP开发人员,好的PHP人员不可能不了解前端,而且很可能很了解前端
问一问ta对noSQL的了解情况(对与noSQL的认识是和传统Relational DB的认知是分不开的)
问一问ta碰到问题时候会如何去寻找答案
问一问ta习惯使用哪一个搜索引擎(如果是http://GOOGLE.COM就有加分)
问一问ta最近看的书
问一问ta的职业规划,喜欢做什么,对工作环境有什么要求
别出生僻的题,别为难人家,更不要变相的侮辱人家,正常交流为主,你要的是一个正常的人,优秀不优秀就看你的眼光和运气了。
很多公司的技术人员招聘会刻意追求刺激的问题,比如很著名的微软的“下水道的盖子为什么是圆的”,不是说这些考察毫无道理,但更多的是一种“marketing”的手段。
2011-06-2217 条评论
hilojack,linux
余旭东、刘易杰、Rocky 等人赞同
好吧,对于楼上众位的问题,我有一半以上的答不上来.
面试者向来很就主观,而且都喜欢以他所熟知的领域或者知识点来刁难对方.无论你怎么问,他的知识范围和你的知识范围并集定是少之又少(除了php基础).但是考基础的语法,又体现不出水平.除非他知识面极广,这样人早有成就了.
echo '1'.print(2)+3;//这种代码很多人平时都不会用到.但查手册便知
如果认为OOP,MVC,ORM,框架是没用的,直接毙掉 //可是连php大牛鸟哥都认为oop的c++没有用啊,因为他没有用到!
要把一个新人搞死太容易了:怎么用php正则匹配gbk.
preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str);//Oh,no.网上全是这种错误答案.面试官会很亢奋的将他pass
我一直觉得面试应该善于发现他所善长的东西,还有你得清楚你的项目具体需要哪些能力的人(比如在一个普通团队项目中,我非常看重一个人对一个需求解耦/框架/模式的理解,我可不愿意要一个进来把我的代码搞乱套的人).而不是他知道多少晦涩的语法和他不曾知道的技巧.
2013-05-183 条评论
冲浪,iOS&PHP工程师
张画虫、梁海涛、陶俊 等人赞同
解决实际问题的能力,比现有的能力更为重要。PHP 是一门简单的语言,关键还是在于对实际需求的解决能力。问一些你遇到过的或者经验性的问题更重要。考什么算法。。之类。。崩了~
2011-06-225 条评论
龚勇,曾经的创业者,现在的程序员
Rocky、袁不告诉你、姜焱 等人赞同
我对php工程师的面试一般有四个环节:
一,自我介绍
任何一个面试的开始,我都会先对公司、所面试的职位以及我自己进行自我介绍,这一点我觉得很重要,而且这个也是很多面试都忽略的一点,别人来面试,可能对你的公司完全不了解,如果你不是知名的互联网公司的话,这一点很正常,对于职位的信息,面试者可能知道的就更少,如果面试了一场,别人都不知道自己处于公司架构中的一个什么位置,我很怀疑这种公司是否招人,面试官也是否真诚。最后应聘者对面试官的信息的了解估计就更少了,可以说是一无所知,而面试官已经从简历上知道了应聘者的大部分信息了,所以这个自我介绍就显得很有必要,而且必须是在面试开始的时候传递给应聘者。
二,应聘者的自我介绍
因为简历中已经有应聘者的基本信息,所以这个介绍并不是为了得到更多的应聘者的基本信息,只是从第一个环节转换到第二个环节——开始对应聘者的提问。自我信息介绍完了以后,我会开始让应聘者介绍他的工作经历、离职原因和各个公司大概的项目经历,这个环节就基本上可以考察出这个人的能力处于一个什么位置了。一般优秀的人在介绍他的项目经历都会显得比较自信,这个很关键,这就是所谓的成就。优秀的面试官这个时候就应该给对方以肯定,然后再在后面的环节中重点考察,不过有些遗憾的是大多数面试官的第一反应是怀疑,而且特别喜欢找出别人的破绽,然后发表自以为是的高见。如果对方所描叙的每个工作的经历都差不多,也没有什么值得大书特书的项目经历;如果这个人工作了比较长的时间了,那可以说明这个人并不是一个很有进取心,能力也一般的人,当然这并不是说就可以把别人pass掉了,最后是否招聘,需要考虑的还有这个职位需要什么样的人,以及这个职位能够提供多少薪水,别指望花少的钱招好的人,即使这样招过来了,别人也干不久的;如果应聘者工作的时间并不长,那么就可以考察一下对方是否有潜力了,我个人觉得招聘到一个有潜力的人是最成功的面试,因为这种人的薪水不会很高,而且有潜力意味着肯学习、积极,这会给整个团队带来很多正能量,并且如果他可以跟公司一起成长,那么假以时日,对公司而言就会是一笔相当可观的财富,对于对方而言也是一样,这是一种双赢。
三、能力考察
这个环节是最关健的。通过第二个环节了解了应聘者大概处于一个什么位置,那么这一步就是要考察对方是否真正的具有我们所认为和所需要的技术能力、潜力,除此以为还要考察沟通能力和团队协作能力。所有这些能力都可以归结为一点,那就是解决问题的能力,因为程序员的日常工作就是不断的解决一个又一个的问题,那怎么考察呢?我一般会以下面几种方式来考察:
1 选取应聘者自认为所做的项目中最有价值、最有挑战性或者最有难度的部分,我首先会了解他是怎么解决这些问题的,然后在他的回答中进行互动,提出各种各样的问题和假设,考察对方如何应对。
2 跟对方探讨他所最熟悉的技术,框架啊或者数据库之类的东西,或者是一些他在简历提到的或者是在第二个环节中提到的,注意这里主要的目的是探讨,因为有些技术我自己也未必熟悉,不过如果应聘者可以把某个他熟悉而你不熟悉的技术的特点讲清楚,这就相当不错了。
3 我提出一个问题来探讨如何实现,然后在实现的过程中不断提出新的问题。
一般在一次面试过程中这几种方式都会用到,而且三个过程都会伴随着在纸上或者白板上画一些解题思路以及架构图,当然最重要的是,这里必然会有一个部分要求应聘者写代码。
对于上面的几种方式的结果,如果对方能够很好的理解我所提出的问题,以及对于各种问题都会有自己的见解和解决方案,并且对于某些问题还可以提出比较独到的见解,特别是可以对我所提出的问题进行批判,指出其中的不合理之处,那么很显然这会是一个很优秀的程序员,当然这并不是说招聘就应该招这种人,这需要面试官来判断,结合职位的要求和薪资水平来决定吧。
四、提问
一般面试的最后都会有这么一个环节,这个环节意义不大,不过我个人还是更喜欢应聘者会提出一些关于职位、团队和将来可能的工作相关的问题,不是很喜欢关于薪资、是否加班、以及福利的问题,这些都是跟人事相关的,至于加班,呵呵,做技术都会有一点,那些加班很多的公司估计也不会说得很明确吧。
最后说下我个人在面试中不是很关注的东西:
1 学历,我之前面试过一个还不错的人,但后来这个人学历造假,入职没有通过,人事告诉我的时候,我告诉她我都没有注意到他的学历。不过这不是说学历不重要,只是我觉得学历不应该成为关注点,特别是对于应聘者,自己搞不定,就别怪学历。
2 工作经历。这不是说工作经历好和工作经历坏都一样,很显然工作经历好的会加分,但这并不意味着工作经历坏就会减分,我们处于一个什么样的环境大家心里都清楚,一个人学历不好一毕业就很难进入那种知名的公司,去不知名的公司,碰到垃圾公司的概率很高,工资低、加班多、福利差,所以跳槽多一点,完全可以理解。
3 死记硬背的东西。例如前面几个人的回答所说的那些问题,这些问题只有在我实在找不出什么问题问,而且所问的问题都得不到满意的回答,而且说不了1-2句就断了的情况下才会问,不过这种情况出现了也基本上意味着面试就结束了。
好了,就写这么多了,面试是一个动态的过程,而且要在1-2个小时的时间内就考察出一个人的能力这基本上是不可能的,所以很多时候是否能够招聘到合适的人面试官的面试能力才是最重要的,特别是在公司时间和成本有限的情况下,面试官的一次面试就要做出是否招聘的决定的时候,面试官的面试能力就显得更重要。不过我个人还是觉得面试应该制定一个制度性的流程,通过几轮不同的人的面试来决定。关于这个我推荐大家一本书,名字叫做《打造Facebook》,这是一个facebook的华裔技术人员写的,里面说到的facebook对工程师的面试方式还是很有借鉴意义的。
2013-12-29添加评论
阿权,工程师 / 创业中 / 电商 / App
商文彬、zhaopeng liu、陈一七 等人赞同
基本技术了解
数据库的基本感觉,如何优化
熟悉的框架,MVC的理解,对象
代码安全因素
缓存技术的了解,memcached等
高访问量的解决方式
平时解决问题的方法
技术积累经验
错误经验分享
成功经验分享
对前台和服务器的了解程度
基本脚本和ajax的使用
lamp环境的了解
linux服务器
svn方面
2011-06-221 条评论
崇慕,游戏圈的加我! http://unitymanual.com
1.你做过哪些项目及数量及规模?
2.项目运行机制都是什么样的?
3.简单说下你理想化的快速开发是什么样的?
4.最后问下具有代表性的一些算法问题.
2011-06-22添加评论
向翔,pm
周彦君赞同
前端:
Doctype的作用。
如何隐藏超出对象部分的内容。
Name,ID有什么区别。
怎么使用jq,jq如果要是和其他类库冲突怎么办?
charset=utf-8一般写在html什么位置?
客户端的对象资源缓存问题。
如何隐藏一个对象。
Js url怎么传递中文?
http的header里面有哪些东西?
习惯使用什么工具作为前端调试?
举例说说IE和其他浏览器几个不兼容的地方。
Ajax的使用。
会不会SEO
PHP
PHP有什么东西可以提高运行效率的。
PHP如何防止注入
会使用哪些模板
如何防止一些关键php页面被下载
会不会memcached
如何防止XSS攻击?
正则表达式
Mysql
哪几种类型的存储引擎,各有什么优缺点
平时写sql语句要注意些什么
你认为的一般性系统瓶颈出现在哪些地方?缓存,数据库,php,前台。
如何优化他们。
额外:
SEO,网站分析,用户体验。
中级php程序员
2011-06-225 条评论
周攀(Henter),高级PHP攻城狮~
李倩云赞同
先一个笔试看下基础如何
然后重点看此人做过什么项目以及在项目中担任什么角色
最后聊点本公司的项目之类
2011-06-22添加评论
许春照,PHP资深人士,现任普派技术主管
朱智超、imlyj赞同
第一过去让做一份面试题
看看做的情况
然后根据他简历上的情况和做的题过去问下他的基本情况
像之前团队有多少人
,做的项目有多大规模
多少pv
在团队中自己是个什么位置之类的问题
看他怎么说
如果还想深入了解就问问有没有什么职业规划看看这人进取心和计划性怎么样
这是第一步
第二步就是专业知识的问答
如果是初级人员主要集中在编码和db的设计优化上
如果是三四年的中高级根据简历情况从 系统 编程
db cache 负载 大数据量 一路问下来根据回答情况决定聊的深浅
如果聊的不错
就开始第三步
给他介绍下这边公司情况,团队 项目
相关的东西
回答他想知道的一些提问
如果第二步答的实在太差这步就可以省略
下一步就是让公司高层来谈待遇了
如果谈的妥就ok
谈不妥就算吧
2011-06-22添加评论
江秀才,PHP.MYSQL.JAVASCRIPT.HTML
phpdragon赞同
1.看做过什么产品,产品优点、缺点、改进方向。
2.介绍自己公司要做的东西,让他评估多长时间能完成。其中哪些地方是比较有难度的,哪些地方是要特别注意的。
3.招人是为了能做事情,不是为了看到知道多少事情。能解决问题的人才是牛人,不是学习问题的人。
2011-06-222 条评论
bianlunlover,爱好宋词的会计专业毕业的光网络工程师
卿优赞同
其实很难,离开背景什么都很难谈。
看你们公司倾向于什么方面。
PHP易学难精
如果你倾向于用户界面,不妨给他一个网站进行结构分析和用户感知分析
如果你倾向于系统稳定,不妨给他一个加速的构想,看看他有什么想法
如果你倾向于结构,不妨问问他以前做过什么项目,或者给他一个系统分析一下
2011-06-22添加评论
龙小杨,诺贝尔奖得主,科学家,跆拳道黑带这些都…
阿混赞同
别问我 PHP 全称怎么写就行,我真的写不出来。
2012-09-035 条评论
齐迹,一个写php代码的业余安全工作者
袁不告诉你赞同
我一般在面试开发的时候会问以下几个问题。回答80分以上直接招来。HR都无视
仅供参考
1 你写代码有多长时间了,有没有做过开源项目
2 你如何理解的面向对象编程(什么是面向对象)
3 PHP为什么不安全。主要有那些安全问题
4 业务和性能冲突的时候你会怎么办
5 开发过程中你觉得最难的是什么
6 你觉得你和其他人比你的优势是什么
7 如何对一个亿级数据的表按照一个没有索引的字段进行统计
2014-02-211 条评论
包子,工程师,销售,程序员
郭毓琦赞同
作为公司的电面和初面的面试官,说说我个人的方式,在这之前有一个背景,就是我要招聘的人是什么人,不同的人不同的面试方法。
另外,个人觉得没有PHP工程师这一说法,PHP工程师意味着知识面一定是要比较广的。
技术线(偏深度):
1. 基础知识,比如数据结构,多线程,I/O,Http协议等
2. 语言深度,比如PHP的运行机制,性能优化,APC(以及其原理等)
3. 源码阅读,比如看过哪些框架,其中的机制是怎么样的,往细了问
4. 知识宽度,静态语言,比如C、Java等,我始终觉得只会一门语言不是什么好事情
5. 项目经验,做过什么,是否复杂,负责什么,做了什么
6. 设计,这一点和第五点比较类似
业务线(偏能力):
1. 业务能力,也就是之前做过的项目(担任的角色,负责的部分)
2. 沟通能力,这一点能从沟通中就看出来
3. 主动性,之前主动推动的事物等等,哪怕是一个小的点也可以
4. 抗压能力,之前做过的项目中去挖掘细节
5. 技术宽度,了解不一定要深入,我一般会问一些比较泛的,比如多语言,Linux操作,HTTP协议等
一定会问:
1. 有GitHub或者Blog(技术热情)
2. 离职原因和同事相处(你懂的)
3. 业余时间利用(技术热情)
2014-03-01添加评论
黄良懿,做做架构,写写代码
在另外一个问题中答过:面试php工程师出什么考题?
工程师能否胜任某个岗位很大程度上受专业程度、周边知识、沟通能力、主动工作的意愿等多方面因素影响,对每个Team来说需要考核的重点是有区别的,但总的来说都是基于上面问题里提到的几个方面根据对候选人的观察考量提出相应的问题并通过回答来确定他在这些方面的真实水准。
但短短的面试时间往往很难考察出,或者说让候选人体现出其全部的能力来,所以面试过程里除了佣人团队的Leader、Manager和HR外,最好能包括 和候选岗位同一个Team的其他工程师、主要合作的Team的Leader,但只是简短聊聊,从别的一些角度提供一些参考意见。
基本上面试过程就是找到成本在企业能承受的合理范围内,同时面试官也愿意与之一起工作的志同道合的人。我自己面试而言,会比较欣赏具备独立解决问题的能力、对常见事务和产品有自己的思考和看法的人。
2013-07-24添加评论
Edwy,自由思考
如果面试人不熟悉Php,那真的很困难,建议找个Php高手客串下面试考官。
2014-01-08添加评论
Mr.Gidot,排版助手 / 吉特盒子 / 隐私日记本(已挂)
1,解决问题的能力和掌握的知识,看你招聘的目的而决定其二者的平衡。了解流体力学的确会对通下水道有很大帮助,但流体力学专家未必都会疏通下水道。
2,创造力,一个没有自己作品的程序员不是好程序员。编程跟写作一样,最终的目的不是敲字,而是完成作品。有人用windows图画板画蒙娜丽莎,而有人用ps就只能调调颜色,画几条线。二者的区别就在于创造力,而不是各自都会什么工具(或者懂什么知识)。
3,自学能力。编程界每天都在产生新鲜的东西,愿意自学和主动寻求新东西,会在将来的工作上事半功倍。
4,人品。这点会大大影响后期的团队维护成本。
5,代码的优雅。不在乎大括号在上还是在下,不在乎等号左右是否有空格的程序员,一定是不够谨慎、粗枝大叶的程序员,而有代码洁癖的程序员会不断挑战自己的代码,让自己的代码日趋优雅。
6,文档习惯。喜欢查阅文档,喜欢记录文档。这是团队协作与后期维护必不可少的能力。
7,足够聪明,话少。表达能力强的人,一般都不适合当程序员(大脑神经通路的影响),除非是头脑特别好用的人,但这种人很难遇到。
下面再列些我认为比较糟糕的面试,如果面试的朋友遇到这类面试,可以考虑直接走掉:
1,出各种古怪刁钻的程序题,而且要求面试者徒手解答。人的大脑是有极限的,记了琐碎的东西,肯定就装不下更多重要的知识。原本需要查找手册和调试环境的东西,却让面试者把所有琐碎零星的命令都缓存到大脑里,并在大脑里建立一个运行环境。他们找的要么是绝顶人才,要么就是书呆子,要么就是狗屎运程序员。
2,考察的知识点凌乱繁杂。根据经验,这类公司最后的聘用薪资都低的可怜。
3,面试官盛气凌人、轻视、频繁质疑面试者所阐述的内容(确认)。物以类聚这个成语同样适用在职场,如果你不喜欢他或者他不喜欢你,直接放弃吧,不要为难对方和自己了。
ps: @GeekWho 的答案中提及到搜索引擎的问题,我个人的习惯是先百度,当百度出来的结果是胡言乱语时,再尝试谷歌。原因很简单,百度响应速度快、稳定。能用菜刀解决的,何必执着于屠龙刀。:)
2014-02-21添加评论
mckee ding
主要还是看项目经验吧 抽出其中一个 往细处聊:
安全方面;数据库方面;缓存方面;业务方面;设计模式方面。。。。
2014-03-08添加评论
鲍国枭,一个自得其乐的程序猿
我说点自己的经历,跟楼主的问题不太相关的。当我刚刚来到这个公司的时候,我投了简历,然后来面试了。结果,老板根本没有问我技术的问题,只是问了我一下学习经历的事情。我当时也很奇怪啊,后来在公司里面呆的时间一长,才发现,原来老板不懂技术。然后来了之后,刚开始三周,啥都没有干,没有人给我说任务。后来,就给我一个网站,然后给我一个参考网站,让我用thinkphp改造一下这个网站,中间都是我出现一个问题,然后解决不了,我就去找同事帮忙。老总说是有人带我的,结果最后还是我自己吭哧吭哧的把代码写完了。现在想来,我就是把代码熟悉了一遍,感觉有点囫囵吞枣,根本,有的代码是啥意思,我都还没有搞透。现在想来,是不是,我的基础太薄弱了。。。
2014-03-21添加评论
王海,主业PHP
新手重点笔试基础
中级重点问一些功能方案,效率,模式,算法之类的
高级重点谈谈经历 架构 负载的处理等等
然后就是相亲了,看缘分
2014-04-04添加评论
Jared,破
结合公司的项目而言来谈。
1,框架,模式这些是熟悉的。
2,互联网技术如ajax,js,dhtml这些是必备。
3,项目经验。
2011-04-271 条评论
李倩云,讨厌夏天的小黑,反应慢半拍的妹子.
1、是hr还是技术部面试——hr看人,技术部看技术。
2、面试的php工程师是初级程序员还是高手。
3、技术类的问题还得具体根据每个公司的标准有所增删。
完毕。不懂技术的菜鸟从侧面回答之~
2011-07-101 条评论
大强,一个迫于生计而沦落到互联网做产品的编剧.
是否了解php的运行机制
如果认为OOP,MVC,ORM,框架是没用的,直接毙掉
是否善于反范式设计数据库,知道简单的replication和partition
知道什么地方该用缓存
知道web server怎么做简单的负载均衡.
这样差不多就靠谱了.
2011-04-241 条评论
Roy Li,微信公众号 mintshow 人生如戏
张丁杰、王镇城、高一新赞同
以下题目是我面试时给php程序做的题目的基础编程部分(我个人认为是送分题),大部分我面试的php程序都做不出来, 看来时代不同了,也许是我思想太老了。
写出一下各段代码的输出结果:
1.
$a = (1 < < 0);
$b = (1 < < $a);
$c = (1 < < $b);
echo ($c
$b) < < 2 * $a
$a;
2. echo '1'.print(2)+3;
3.
$a = 0x01;
$b = 0x02;
echo $a===$b > > $a;
$foo = 5 + '10 things';
4. print (196*100) !== (double)1960;
5. echo 0500
6. $a = 0;
echo ~$a;
后来我取消了这类的题目因为对工作上没有太大的影响,主要还是看你对设计模式的理解,是否掌握MVC, OOP程度到多少,还有就是你是否喜欢学习,愿意学习。 代码维护和代码质量也很关键。
2011-06-2212 条评论
Vincent.Wei
1.运行机制
2.基本工
3.负载
4.安全
5.人品
2011-05-03添加评论
石宁,IT民工一枚
今天早上看了ITEYE上一篇文章。觉得有点意思“不聘用没有任何成就的人”
http://www.iteye.com/news/21721
有话要说