几道坑人的PHPdubbo面试题题 试试看看你会不会也中

2017PHP都有哪些常见面试题?_面试技巧_中公优就业
IT培训学院
400-650-7353
> 2017PHP都有哪些常见面试题?
2017PHP都有哪些常见面试题?
18:59:59 来源:
2017PHP都有哪些常见面试题?下面优就业的老师给大家介绍一下。
1、双引号和单引号的区别
双引号解释变量,单引号不解释变量
双引号里插入单引号,其中单引号里如果有变量的话,变量解释
双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误
双引号解释转义字符,单引号不解释转义字符,但是解释'\和\\
能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)
2、HTTP中POST、GET、PUT、DELETE方式的区别
HTTP定义了与服务器交互的不同的方法,最基本的是POST、GET、PUT、DELETE,与其比不可少的URL的全称是资源描述符,我们可以这样理解:url描述了一个网络上资源,而post、get、put、delegate就是对这个资源进行增、删、改、查的操作!
2.1表单中get和post提交方式的区别
get是把参数数据队列加到提交表单的action属性所指的url中,值和表单内各个字段一一对应,从url中可以看到;post是通过HTTPPOST机制,将表单内各个字段与其内容防止在HTML的head中一起传送到action属性所指的url地址,用户看不到这个过程
对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据
get传送的数据量较小,post传送的数据量较大,一般被默认不受限制,但在理论上,IIS4中最大量为80kb,IIS5中为1000k,get安全性非常低,post安全性较高
GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。
与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。
POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。
DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。
3、PHP介绍
Hypertext Preprocessor----超文本预处理器
Personal Home Page 原始名称
目标用途: 允许web开发人员快速编写动态生成的web页面,与其他页面相比,PHP是将程序嵌入到HTML文档中去执行,效率比完全生成HTML编辑的CGI高很多
HTML: Hypertext Markup Language
创始人: 拉姆斯勒&勒多夫Rasmus Lerdorf,1968年生,加拿大滑铁卢大学
勒多夫最开始是为了维护个人网页,用prel语言写了维护程序,之后又用c进行了重写,最终衍生出php/fi
将PHP/FI公开释出
1995 php2.0,加入了对MySQL的支持
1997 php3.0
2000 php4.0
2008 php5.0
由于php6.0没有完全解决Unicode编码,所以基本没有生产线上的应用,基本只是一款概念产品,很多功能已经在php5.3.3和php5.3.4上实现
常见的IDE(Intergrated Development Environment): 集成开发环境
Adobe Dreamweaver
常见文本编辑器,具备代码高亮:
SublimeText
php独特混合了C,Java,Prel以及PHP自创的语法
可以比CGI或者Prel更快速去执行动态网页,与其他变成语言相比,PHP是讲程序嵌入到HTML文档中去执行,执行效率比完全生成HTML编辑的CGI要高很多,所有的CGI都能实现
支持几乎所有流行的数据库以及操作系统
PHP可以使用C,C++进行程序的扩展
开放源代码
PHP技术应用:
静态页面生成
数据库缓存
div+css w3c标准
Smarty模块引擎
PHP认证级别
初级 IFE:Index Front Engineer 前端工程师
中级 IPE:Index PHP Engineer PHP工程师
高级 IAE:Index Architecture Engineer 架构工程师
4、echo、print_r、print、var_dump之间的区别
* echo、print是php语句,var_dump和print_r是函数
* echo 输出一个或多个字符串,中间以逗号隔开,没有返回值是语言结构而不是真正的函数,因此不能作为表达式的一部分使用
* print也是php的一个关键字,有返回值 只能打印出简单类型变量的值(如int,string),如果字符串显示成功则返回true,否则返回false
* print_r 可以打印出复杂类型变量的值(如数组、对象)以列表的形式显示,并以array、object开头,但print_r输出布尔值和NULL的结果没有意义,因为都是打印&\n&,因此var_dump()函数更适合调试
* var_dump() 判断一个变量的类型和长度,并输出变量的数值
5、HTTP状态码
点击这儿查看HTTP状态码详解
常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转义到其他URL
404 - 请求的资源(网页等)不存在
505 - 内部服务器错误
6、什么是魔术引号
魔术引号是一个将自动将进入PHP脚本的数据进行转义的过程,最好在编码时不要转义而在运行时根据需要而转义
7、如何获取客户端的ip(要求取得一个int)和服务器ip的代码
客户端:$_SERVER[&REMOTE_ADDR&];或者getenv('REMOTE_ADDR')
ip2long进行转换
服务器端:gethostbyname('www.baidu.com')
8、使用那些工具进行版本控制
cvs、svn、vss、git
9、优化数据库的方法
MySQL数据库优化的八大方式(经典必看)点击获取
选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL,例如'省份'、'性别'最好适用ENUM
使用连接(JOIN)来代替子查询
适用联合()来代替手动创建的临时表
锁定表、优化事务处理
适用外键,优化锁定表
优化查询语句
10、是否使用过模板引擎?使用的模板引擎的名字是?
Smarty:Smarty算是一种很老的PHP模板引擎了,它曾是我使用这门语言模板的最初选择。虽然它的更新已经不算频繁了,并且缺少新一代模板引擎所具有的部分特性,但是它仍然值得一看。
微信二维码
QQ群二维码
微博二维码
免责声明:本文来源于网络,由网友提供或网络搜集,仅供个人交流学习参考使用,不涉及商业盈利目的。如有版权问题,请联系本站管理员予以更改或删除。谢谢合作!
热门标签:
在线学习 ● APP下载
微信扫一扫
400-650-73536.3k 人阅读
标签:至少1个,最多5个
之前我在面试的时候,遇到许多年轻人都声称自己精通php,有过许多项目经验等等。然而,当真正笔试的时候,我问到
$result=1;
$result=2;
中,$result最终结果的时候,许多人信誓旦旦的告诉我是1。 试想,这样一个连基本算法都搞不清楚的人,即使有过再多的项目经验,你敢用吗?
对于算法的一些问题,我个人一向是非常较真的,我招人的时候也是非常侧重此方面,因此我对php的关注也是在这方面多些。故事得从一个知乎上的问题开始。
function test(){
echo (++$a)+(++$a);
//执行的值为6
function test(){
echo (++$a)+(++$a)+(++$a);
//执行的值为10
这个问题非常的有意思,也是一个大坑,许多人都算错了,包括很多我认识的大牛。在这里就不点名字,以免其羞愧。 然而你以为我一开始算对了吗?我算对了第一题,第二题却是百思不得其解。最后用调试工具一番调试才算理清头绪。索性发出来与大家一起分享这个有意思的问题。
php语言解释
这个其实非常简单,++a这种单目运算符的运算结果还是自身。 所以
echo (++$a)+(++$a);
//换种写法就等同于
$a=++$a; //2
$a=++$a; //3
$a=$a+$a;//3+3=6
哈,很多人肯定以为是等于5,然而这个是操作的同一个变量,等同于改变了两次$a的值,最后相加的时候,自然就是改变后的值相加,所以等于6。
然而在php中,为了照顾人类的逻辑,默认情况下,即使名字相同的基本类型的变量,也不会使用同一个变量地址,因此,以上代码会被解析为
echo (++$a)+(++$a);
//换种写法就等同于
$a=++$a; //2
$b=++$a; //3
$a=$a+$b;//2+3=5
的存在,使得下面的第一个$a的计算方式变成了传统的c语言计算方式,所以输出了_看起来错误的结果_。
然而实际上,这个结果反而是正确的。PHP中的糖语法宠坏了那些基础本来不扎实的孩子,对这种加法做了特别的运算处理而已。
为什么说等于6才是正确结果呢?我们知道现行高级语言大多来自c语言,php也不例外,我们这里用c语言来写一遍上述代码,然后通过反汇编来看看机器到底是怎么执行的。
其实无论是否注释下面的取地址,结果都是6。 我们看汇编代码
这里更清晰的看到a的值的变化。 即是
mov edx,dword ptr [a] ;a的值为3
add edx,dword ptr [a] ; 3+3
由问题一的结论来分析问题二,反而陷入了一个更大的舞曲,为什么呢?
echo (++$a)+(++$a)+(++$a);
按照问题一的分析,此处的结果应为
a=a+a+a //12
然而输出的结果却是10.
这里我们用一个工具phpdebug.exe来调试下看看。
可以看到的a的值的变化:
1-&2-&3-&4
然后我们再来调试一下注释掉
这里在第二步的时候重新给了变量$a一个地址,实际上同是叫$a,其实他们已经不是同一个变量了。 所以他输出的结果为9。
但是为什么上面的结果为10呢? 这其实是因为
这个取地址运算只起效了一句运算指令,就是只管事了第一回合,对于以后的运算,php还是用了平常的算法。 即:
echo (++$a)+(++$a)+(++$a);
这段实际上是
$a=++$a; //2
$a=++$a; //3
//注意了,前两个已经得到结果了,第三个我们用一个新的变量$c。
$c=++$a; //4
$a=$a+$a; //3+3=6
$a=$a+$c; //6+4=10
我认为出现这种诡异的结果应该算是php的bug,同时,这也说明了此种问题不太容易被发现和暴露,这要求我们平常写代码的时候尽量使用常用的语法,和精干的语句,让代码和逻辑达到最佳的平衡点。 此BUG我已经反馈到php官方。
最新的php7中已经修复了此bug。
10 收藏&&|&&62
你可能感兴趣的文章
这种面试题的确很鸡肋,实际意义不大,要考倒一个人太简单了,哪怕这个人经验再多
这种面试题的确很鸡肋,实际意义不大,要考倒一个人太简单了,哪怕这个人经验再多
我不精通 C ,但我至少知道 C 标准里面并没有定义 (++i)+(++i) 的执行顺序和理论实现结果。
我不精通 C ,但我至少知道 C 标准里面并没有定义 (++i)+(++i) 的执行顺序和理论实现结果。
感觉很受启发,总结了一下自增和运算符顺序,有以下三点必须知识:
1. ++$a 是自己加1,之后的都要加1;如果是指针引用,有些版本会导致 ++$a 的临时值为自身,让之前的计算结果也改变。
2. $a++ 是自己不用增1的结果,但是这个操作符之后的都要加1,不管有没有指针引用。
3. 编译器每一次都要把表达式组合成两元组:((($a++ + $a) + $a) + $a);但是在 ($a + $a++) 的情况下,会改变顺序为 ($a++ + $a),所以 $a++ + $a 的结果是3.
感觉很受启发,总结了一下自增和运算符顺序,有以下三点必须知识:
1. ++$a 是自己加1,之后的都要加1;如果是指针引用,有些版本会导致 ++$a 的临时值为自身,让之前的计算结果也改变。
2. $a++ 是自己不用增1的结果,但是这个操作符之后的都要加1,不管有没有指针引用。
3. 编译器每一次都要把表达式组合成两元组:((($a++ + $a) + $a) + $a);但是在 ($a + $a++) 的情况下,会改变顺序为 ($a++ + $a),所以 $a++ + $a 的结果是3.
[详细的参考](https://gist.github.com/yantze/981ab48d4e7cc4a111f616)
作者只是想找一个和自己气味相投的人,从这例子以及最后说的所谓bug,看出水平也就是一般的程序员水平,只是喜欢研究的点和别人不一样。类似这样的点不要太多。来我这里面试,有一千种方法让你答不出问题:)
作者只是想找一个和自己气味相投的人,从这例子以及最后说的所谓bug,看出水平也就是一般的程序员水平,只是喜欢研究的点和别人不一样。类似这样的点不要太多。来我这里面试,有一千种方法让你答不出问题:)
为什么我的
PHP7.1得到的是5和9啊。。。
为什么我的
PHP7.1得到的是5和9啊。。。
这么爱钻牛角尖。实际中不会做么搞吧,这样的代码也不利于维护。
这么爱钻牛角尖。实际中不会做么搞吧,这样的代码也不利于维护。
赞,学习了。个人觉得不懂底层原理永远是浮于表面
赞,学习了。个人觉得不懂底层原理永远是浮于表面
也就是说并不是你朋友算错了,而这是一个BUG
也就是说并不是你朋友算错了,而这是一个BUG
如果是我我绝对不会那么写程序,你是懂了,其他人维护的时候就懵逼了,如果要写了一堆这样程序估计公司分分钟开了我
如果是我我绝对不会那么写程序,你是懂了,其他人维护的时候就懵逼了,如果要写了一堆这样程序估计公司分分钟开了我
php本来就是浮于表面上的,如果想了解底层,去看C和zend引擎吧
php本来就是浮于表面上的,如果想了解底层,去看C和zend引擎吧
我觉得这里的问题不在于是否使用这种风格写程序,而是在于对于php的基础知识了解多少。实际项目开发中别说这样写别人看不懂,写完之后隔一段时间可能自己都看着费劲,开发的时候应该都会使用通俗易懂的方式实现功能。
我觉得这里的问题不在于是否使用这种风格写程序,而是在于对于php的基础知识了解多少。实际项目开发中别说这样写别人看不懂,写完之后隔一段时间可能自己都看着费劲,开发的时候应该都会使用通俗易懂的方式实现功能。
就知识点而言,这部分确实得了解,那个a++的和-1的都属于基础,不过代码那样写就没必要了,这只能做试题就像高考题一样
就知识点而言,这部分确实得了解,那个a++的和-1的都属于基础,不过代码那样写就没必要了,这只能做试题就像高考题一样
看了下评论,大家争议较大。发表下我的观点:如果是仅仅是写代码,则小心避开这些坑即可。如果是要精通php,则必须要不入虎穴,焉得虎子?所谓精通php,不仅要会写php代码,还要了解php内核,懂得php底层的实现。php代码都是一些表层的,被封装的脚本而已。至于招聘,我要招的是一个精通php的人,所以这些细节都不懂的人,明显是不符合我的需求的。
看了下评论,大家争议较大。发表下我的观点:如果是仅仅是写代码,则小心避开这些坑即可。如果是要精通`php`,则必须要*不入虎穴,焉得虎子*?所谓精通`php`,不仅要会写`php`代码,还要了解`php`内核,懂得`php`底层的实现。`php`代码都是一些表层的,被封装的脚本而已。至于招聘,我要招的是一个精通`php`的人,所以这些细节都不懂的人,明显是不符合我的需求的。
c语言里面(++i)+(++i)是未定义行为吧,代码不符合语言规范,整个程序的运行是完全不确定的。
c语言里面(++i)+(++i)是未定义行为吧,代码不符合语言规范,整个程序的运行是完全不确定的。
怎么不符合语言规范?从算法的角度来说,结果本来就是等于6。只不过php强行修改了结果而已。
怎么不符合语言规范?从算法的角度来说,结果本来就是等于6。只不过php强行修改了结果而已。
当时学的时候我也记得c里面(++i)+(++i)是未定义行为, 也就是说各个编译器最终的结果并不一定都是一样的! 好像有一个编译器的结果是不一致的!
当时学的时候我也记得c里面(++i)+(++i)是未定义行为, 也就是说各个编译器最终的结果并不一定都是一样的! 好像有一个编译器的结果是不一致的!
开头PHP明明是基础问题,怎么就成算法了?
开头PHP明明是基础问题,怎么就成算法了?
第二题应该不是PHP的BUG,C语言也是一样的结果如果改下题先算后面两个++a的话结果就是12了:`echo (++$a) + ((++$a) + (++$a));`跟C的结果一致
所以应该就是运算符优先级的问题:PHP先算前面两个++a,再算第一个加号,此时a=3,第一个加法运算结果是6再算最后一个++a,再算最后的加号,这样结果就是10
第二题应该不是PHP的BUG,C语言也是一样的结果
如果改下题先算后面两个++a的话结果就是12了:
echo (++$a) + ((++$a) + (++$a));
跟C的结果一致
所以应该就是运算符优先级的问题:PHP先算前面两个++a,再算第一个加号,此时a=3,第一个加法运算结果是6
再算最后一个++a,再算最后的加号,这样结果就是10
也许你使用的gcc?我在用windows下的vs编译器进行测试,c语言无论如何都是12,而php7.0之前都是10,随着+(++a)的增多,差异越来越大。php中,如果没有$b=&$a;这句,每次运算完之后,都会把结果放置到另外一个变量中。有这句,除前两个外,会把结果放到另外一个变量中。即:3+3+4+5+6+7....而在c中,每次都把这个变量当作值类型,所以运算是
即使在php7中,php的运算结果已经修正为依次+1了。即:
修复bug即不会受$b=&$a;所影响。
也许你使用的gcc?我在用windows下的vs编译器进行测试,c语言无论如何都是12,而php7.0之前都是10,随着+(++a)的增多,差异越来越大。
php中,如果没有`$b=&$a;`这句,每次运算完之后,都会把结果放置到另外一个变量中。有这句,除前两个外,会把结果放到另外一个变量中。即:3+3+4+5+6+7....
而在c中,每次都把这个变量当作值类型,所以运算是
即使在php7中,php的运算结果已经修正为依次+1了。即:
修复bug即不会受`$b=&$a;`所影响。
你可能感兴趣的文章
分享到微博?
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。拒绝访问 | www.ggdoc.com | 百度云加速
请打开cookies.
此网站 (www.ggdoc.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(b4382-ua98).
重新安装浏览器,或使用别的浏览器400-650-7353
360PHP开发工程师面试经典题目
小编寄语:你是否正在准备寻找一份PHP开发的工作,并且也在寻找一些关于PHP的面试题及答案?优就业小编为大家分享了一些被提问频率最高的11个PHP面试题,以及对应的常规回答,每个公司都有自己的面试标准,面试和问题是完全取决于你在工作中所扮演的角色,当然也和你的编程技能息息相关。
问题:请用最简单的语言告诉我PHP是什么?
回答:PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言。
问题:什么是MVC?
回答:MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。
Model:数据信息存取层。
View:view层负责将应用的数据以特定的方式展现在界面上。
Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
问题:在页面中引用CSS有几种方式?
回答:在页面中使用CSS有3中方式:
引用外部CSS文件
内部定义Style样式
问题:PHP支持多继承吗?
回答:不可以。PHP类只能继承一个父类,并用关键字&extended&标识。
问题:请问PHP中echo和print有什么区别?
这两个看起来很相似,因为它们都是将一些值打印在屏幕上。但是echo和print的本质区别在于:echo用来输出字符串,显示多个值的时候可以用逗号隔开。只支持基本类型,print不仅可以打印字符串值,而且可以打印函数的返回值。
问题:请问GET和POST方法有什么区别?
回答:我们再网页上填写的表单信息都可以通过这两个方法将数据传递到服务器上,当我们使用GET方法是,所有的信息都会出现在URL地址中,并且使用GET方法最多只能传递1024个字符,所以如果在传输量小或者安全性不那么重要的情况下可以使用GET方法。说到POST方法,最多可以传输2MB字节的数据,而且可以根据需要调节。
问题:PHP中获取图像尺寸大小的方法是什么?
回答:getimagesize () 获取图片的尺寸
Imagesx () 获取图片的宽度
Imagesy () 获取图片的高度
问题:PHP中的PEAR是什么?
回答:PEAR也就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库。
问题:如何用PHP和MySQL上传视频?
回答:我们可以在数据库中存放视频的地址,而不需要将真正的视频数据存在数据库中。可以将视频数据存放在服务器的指定文件夹下,上传的默认大小是2MB,但是我们也可以在php.ini文件中修改max_file size选项来改变。
问题:PHP中的错误类型有哪些?
回答:PHP中遇到的错误类型大致有3类。
提示:这都是一些非常正常的信息,而非重大的错误,有些甚至不会展示给用户。比如访问不存在的变量。
警告:这是有点严重的错误,将会把警告信息展示给用户,但不会影响代码的输出,比如包含一些不存在的文件。
错误:这是真正的严重错误,比如访问不存在的PHP类。
问题:如何在PHP中定义常量?
回答:PHP中使用Define () 来定义常量。
define (&Newconstant&, 30);
问题:如何不使用submit按钮来提交表单?
如果我们不想用submit按钮来提交表单,我们也可以用超链接来提交,我们可以这样写代码:
官方微信更多精彩,扫码关注 或微信搜索:ujiuye
官方微博更多精彩,扫码关注 或微博搜索:优就业
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。
(责任编辑:changj)
关键词阅读
[免责声明]本文来源于网络转载,仅供学习交流使用,不构成商业目的。版权归原作者所有,如涉及作品内容、版权和其它问题请在30日内与本网联系,我们将在第一时进行处理
(点击一键加群)如何面试 PHP 工程师? - 知乎<strong class="NumberBoard-itemValue" title="被浏览<strong class="NumberBoard-itemValue" title="5,493分享邀请回答18045 条评论分享收藏感谢收起GOOGLE.COM就有加分)问一问ta最近看的书问一问ta的职业规划,喜欢做什么,对工作环境有什么要求别出生僻的题,别为难人家,更不要变相的侮辱人家,正常交流为主,你要的是一个正常的人,优秀不优秀就看你的眼光和运气了。很多公司的技术人员招聘会刻意追求刺激的问题,比如很著名的微软的“下水道的盖子为什么是圆的”,不是说这些考察毫无道理,但更多的是一种“marketing”的手段。
/ 29351 条评论分享收藏感谢收起}

我要回帖

更多关于 前端面试题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信