搜索
首页php教程php手册PHP高级工程师的面试题【部分解答】

作者:zhanhailiang 日期:2013-01-16 问题集来源《整理了一份招PHP高级工程师的面试题》. 1. 基本知识点 问题: HTTP协议中几个状态码的含义: 503 500 401 200 301 302. 503 Service Unavailable 由于临时的服务器维护或者过载, 服务器当前无法处理请求, 这个

  作者:zhanhailiang 日期:2013-01-16

问题集来源《整理了一份招PHP高级工程师的面试题》.

1. 基本知识点

问题: HTTP协议中几个状态码的含义: 503 500 401 200 301 302.
  • 503 Service Unavailable 由于临时的服务器维护或者过载, 服务器当前无法处理请求, 这个状况是临时的, 并且将在一段时间以后恢复

  • 500 SERVER ERROR 服务器端出错

  • 401.1 Logon failed(登录失败)

  • 401.2 Logon failed due to server configuration(由于服务器配置,登录失败)

  • 401.3 Unauthorized due to ACL on resource(由于资源上的ACL, 未授权)

  • 401.4 Authorization failed by filter(由于筛选器, 授权失败)

  • 401.5 Authorization failed by ISAPI/CGI application (由于 ISAPI/CGI 应用程序, 授权失败)

  • 200 OK

  • 301 页面永久性跳转 一般出现更新域名

  • 302 页面临时性跳转

总结:

  • 2XX 成功

  • 3XX 重定向

  • 4XX 客户端出错

  • 5XX 服务器端出错

问题: include, require, include_once, require_once的区别.

1).include()产生一个警告而require()则导致一个致命错误. 换句话说, 如果想在遇到丢失文件时停止处理页面就用 require().include()就不是这样, 脚本会继续运行. 同时也要确认设置了合适的include_path. 注意在PHP 4.3.5之前, 包含文件中的语法错误不会导致程序停止, 但从此版本之后会.

2).include_once()语句在脚本执行期间包含并运行指定文件. 此行为和include()语句类似, 唯一区别是如果该文件中的代码已经被包含了, 则不会再次包含. 如同此语句名字暗示的那样, 只会包含一次. include_once()应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下, 想确保它只被包含一次以避免函数重定义, 变量重新赋值等问题. 返回值和include()相同.如果文件已被包含, 本函数返回TRUE.

问题: PHP/Mysql中几个版本的进化史, 比如mysql4.0到4.1, PHP 4.x到5.1的重大改进等等.
问题: HEREDOC介绍

1).第三种定义字符串的方法是用heredoc句法结构:

<span><?php </span>
<span>$str</span> <span>=</span> <span><span>;</span>
<span>?></span></span></span>

2).Heredoc结构就象是没有使用双引号的双引号字符串, 这就是说在heredoc结构中引号不用被替换, 但是上文中列出的字符 (\n等)也可使用. 变量将被替换, 但在heredoc结构中字符串表达复杂变量时, 要格外小心.

3).在PHP 5.3.0中还在Heredoc结构中用双引号来声明标志符

<span><?php </span>
<span>echo</span> <span><span>"FOOBAR"</span>
Hello World<span>!</span>
FOOBAR<span>;</span>
<span>?></span> </span></span>
问题: 写出一些php魔术方法.

1).魔术方法:

__construct(), 
__destruct(), 
__call(), 
__callStatic(), 
__get(), 
__set(), 
__isset(), 
__unset(), 
__sleep(), 
__wakeup(), 
__toString(), 
__invoke(), 
__set_state(),
__clone()

2).魔术常量:

__LINE__, 
__FILE__, 
__DIR__, 
__FUNCTION__, 
__CLASS__, 
__METHOD__, 
__NAMESPACE__
问题: 一些编译php时的configure参数.

以我的编译参数为例:

zhanhailiang<span>@</span>linux-06bq:~<span>></span> php <span>-i</span><span>|</span><span>grep</span> configure
Configure Command =<span>></span>  <span>'./configure'</span>  
<span>'--prefix=/usr/local/services/php'</span> 
<span>'--enable-fpm'</span> 
<span>'--with-config-file-path=/usr/local/services/php/etc'</span> 
<span>'--with-mysqli=/usr/local/services/mysql/bin/mysql_config'</span> 
<span>'--with-mysql=/usr/local/services/mysql'</span> 
<span>'--enable-mbstring'</span> 
<span>'--disable-mbregex'</span> 
<span>'--enable-sockets'</span> 
<span>'--disable-phar'</span> 
<span>'--with-mcrypt'</span> 
<span>'--with-gd'</span> 
<span>'--with-jpeg-dir=/usr/local'</span> 
<span>'--with-freetype-dir'</span> 
<span>'--with-curlwrappers'</span> 
<span>'--with-curl=/usr/local/services/curl'</span> 
<span>'--enable-soap'</span> 
<span>'--with-oci8=instantclient,/usr/local/services/oracle11g'</span> 
<span>'--with-zlib'</span> 
<span>'--with-openssl=/usr/local/ssl'</span> 
<span>'--with-xsl=/usr/local/'</span> 
<span>'--with-tidy=/usr/local/'</span> 
<span>'--with-pdo-mysql=/usr/local/services/mysql'</span> 
<span>'--enable-pcntl'</span>
问题: 向php传入参数的两种方法. 

1).HTTP $_GET|$_POST|$_SERVER|$_COOKIE|$_ENV|$_SESSION

2).PHP 的命令行模式

zhanhailiang<span>@</span>linux-06bq:~<span>></span> php <span>-h</span><span>|</span><span>grep</span> <span>"args..."</span>
Usage: php <span>[</span>options<span>]</span> <span>[</span>-f<span>]</span> <span><span>file</span><span>></span> <span>[</span>--<span>]</span> <span>[</span>args...<span>]</span>
       php <span>[</span>options<span>]</span> <span>-r</span> <span>code<span>></span> <span>[</span>--<span>]</span> <span>[</span>args...<span>]</span>
       php <span>[</span>options<span>]</span> <span>[</span>-B <span>begin_code<span>></span><span>]</span> <span>-R</span> <span>code<span>></span> <span>[</span>-E <span>end_code<span>></span><span>]</span> <span>[</span>--<span>]</span> <span>[</span>args...<span>]</span>
       php <span>[</span>options<span>]</span> <span>[</span>-B <span>begin_code<span>></span><span>]</span> <span>-F</span> <span><span>file</span><span>></span> <span>[</span>-E <span>end_code<span>></span><span>]</span> <span>[</span>--<span>]</span> <span>[</span>args...<span>]</span>
       php <span>[</span>options<span>]</span> <span>--</span> <span>[</span>args...<span>]</span>
  args...          Arguments passed to script. Use <span>--</span> args when first argument</span></span></span></span></span></span></span></span>
问题: (mysql)请写出数据类型(INT CHAR VARCHAR DATETIME TEXT)的意思; 请问VARCHAR和CHAR有什么区别.

1).INT在MySQL中支持的5个主要整数类型是TINYINT, SMALLINT, MEDIUMINT, INT和BIGINT. 这些类型在很大程度上是相同的, 只有它们存储的值的大小是不相同的. (其它略.)

2).CHAR和VARCHAR类型

  CHAR类型用于定长字符串, 并且必须在圆括号内用一个大小修饰符来定义. 这个大小修饰符的范围从0-255. 比指定长度大的值将被截短, 而比指定长度小的值将会用空格作填补. CHAR类型可以使用BINARY修饰符. 当用于比较运算时, 这个修饰符使CHAR以二进制方式参于运算, 而不是以传统的区分大小写的方式.

  CHAR类型的一个变体是VARCHAR类型. 它是一种可变长度的字符串类型, 并且也必须带有一个范围在0-255之间的指示器. CHAR和VARCHGAR不同之处在于MySQL数据库处理这个指示器的方式: CHAR把这个大小视为值的大小, 不长度不足的情况下就用空格补足. 而VARCHAR类型把它视为最大值并且只使用存储字符串实际需要的长度(增加一个额外字节来存储字符串本身的长度)来存储值. 所以短于指示器长度的VARCHAR类型不会被空格填补, 但长于指示器的值仍然会被截短. 因为 VARCHAR 类型可以根据实际内容动态改变存储值的长度, 所以在不能确定字段需要多少字符时使用 VARCHAR 类型可以大大地节约磁盘空间、提高存储效率. VARCHAR 类型在使用 BINARY 修饰符时与 CHAR 类型完全相同.

问题: error_reporting 等调试函数使用.

以官方文档为便

<span><?php </span>
 
<span>// Turn off all error reporting</span>
<span>error_reporting</span><span>(</span><span>0</span><span>)</span><span>;</span>
 
<span>// Report simple running errors</span>
<span>error_reporting</span><span>(</span><span>E_ERROR</span> <span>|</span> <span>E_WARNING</span> <span>|</span> <span>E_PARSE</span><span>)</span><span>;</span>
 
<span>// Reporting E_NOTICE can be good too (to report uninitialized</span>
<span>// variables or catch variable name misspellings ...)</span>
<span>error_reporting</span><span>(</span><span>E_ERROR</span> <span>|</span> <span>E_WARNING</span> <span>|</span> <span>E_PARSE</span> <span>|</span> <span>E_NOTICE</span><span>)</span><span>;</span>
 
<span>// Report all errors except E_NOTICE</span>
<span>// This is the default value set in php.ini</span>
<span>error_reporting</span><span>(</span><span>E_ALL</span> ^ <span>E_NOTICE</span><span>)</span><span>;</span>
 
<span>// Report all PHP errors (see changelog)</span>
<span>error_reporting</span><span>(</span><span>E_ALL</span><span>)</span><span>;</span>
 
<span>// Report all PHP errors</span>
<span>error_reporting</span><span>(</span><span>-</span><span>1</span><span>)</span><span>;</span>
 
<span>// Same as error_reporting(E_ALL);</span>
<span>ini_set</span><span>(</span><span>'error_reporting'</span><span>,</span> <span>E_ALL</span><span>)</span><span>;</span>
 
<span>?></span> </span>
问题: 您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?

SVN,Git

问题: POSIX和PERL标准的正则表达式区别.

《posix和perl标准的正则表达式区别》

问题: safe_mode打开后哪些地方受限.

《安全模式》

PHP 的安全模式是为了试图解决共享服务器(shared-server)安全问题而设立的。在结构上,试图在 PHP 层上解决这个问题是不合理的,但修改 web 服务器层和操作系统层显得非常不现实。因此许多人,特别是 ISP,目前使用安全模式。

问题: 写代码来解决多进程/线程同时读写一个文件的问题. 
问题: 写一段上传文件的代码.

《文件上传处理》

问题: Mysql的存储引擎myisam和innodb的区别. 

《InnoDB和MyISAM区别》

MyISAM:不支持事务,不支持外键,支持表锁,支持全文索引;

InnoDB:支持事务,支持外键,支持行级锁

2. web架构, 安全,项目经验

问题: 介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验. 

APC:《PHP安装加速扩展APC详解》

Xdebug:《PHP调试利器Xdebug安装配置教程》

问题: 使用mod_rewrite在服务器上没有/archivers/567.html这个物理文件时, 重定向到index.php?id=567,请先打开mod_rewrite.

rewrite ^/archivers/(\d+)\.html$ /index.php?id=$1;

问题: MySQL数据库作发布系统的存储, 一天五万条以上的增量, 预计运维三年,怎么优化?
问题: 写出一种排序算法(原理), 并说出优化它的方法. 

【算法】快速排序【JS实现】 【算法】随机化快速排序【JS实现】

问题: 请简单阐述您最得意的开发之作.
问题: 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题.
问题: 您是否用过模板引擎? 如果有您用的模板引擎的名字是?

Smarty

问题: 请介绍Session的原理,大型网站中Session方面应注意什么?

《session》

问题: 测试php性能和mysql数据库性能的工具,和找出瓶颈的方法. 

xhprof,xdebug,SHOW PROFILE,EXPLAIN,mysqldumpslow,...

问题: 正则提出一个网页中的所有链接.
<span><?php </span><span>
 
</span><span>$a</span><span>=</span><span>'<a href="test.html" title="#">test</a><a href="test.html" title="#">test</a>'</span><span>;</span><span>preg_match_all</span><span>(</span><span><span>'|<a>]+href="([^\"]*)".*</a></span><span><strong>?'.'></strong></span><span>|'</span></span><span>,</span><span>$a</span><span>,</span><span>$b</span><span>)</span><span>;</span><span>print_r</span><span>(</span><span>$b</span><span>)</span><span>;</span></span>
问题: 介绍一下常见的SSO(单点登陆)方案(比如dedecms整合discuz的passport)的原理. 

《单点登陆的技术实现机制分析》

问题: 您写过的PHP框架的特点, 主要解决什么问题, 与其他框架的不同点. 
问题: 大型的论坛/新闻文章系统/SNS网站在性能优化上有什么区别?
问题: 相册类应用:要求在浏览器中能同时选中并上传多个文件, 图片要求能剪裁, 压缩包在服务器端解压. 能上传单个达50M的文件. 
上传过程中有进度条显示. 每个图片能生成四种大小缩略图, 视频文件要转成flv供flash播放. 叙述要涉及的各类开源软
件和简单用途. 
问题: 一群猴子排成一圈, 按1, 2, …, n依次编号. 然后从第1只开始数, 数到第m只,把它踢出圈, 从它后面再开始数, 再数到
第m只, 在把它踢出去…, 如此不停的进行下去, 直到最后只剩下一只猴子为止, 那只猴子就叫做大王. 要求编程模拟此过程, 输
入m、n, 输出最后那个大王的编号. 用程序模拟该过程. 

3. unix/linux 基本使用

问题: linux下查看当前系统负载信息的一些方法.
zhanhailiang<span>@</span>linux-06bq:<span>/</span>usr<span>/</span>local<span>/</span>services<span>/</span>php<span>/</span>sbin<span>></span> <span>uptime</span> 
  <span>5</span>:06pm  up <span>12</span> days  <span>8</span>:<span>12</span>,  <span>12</span> 个用户,平均负载:<span>0.09</span>, <span>0.09</span>, <span>0.10</span>
zhanhailiang<span>@</span>linux-06bq:<span>/</span>usr<span>/</span>local<span>/</span>services<span>/</span>php<span>/</span>sbin<span>></span> top
 
top - <span>17</span>:06:09 up <span>12</span> days,  <span>8</span>:<span>12</span>, <span>12</span> <span>users</span>,  load average: <span>0.09</span>, <span>0.09</span>, <span>0.10</span>
Tasks: <span>182</span> total,   <span>1</span> running, <span>181</span> sleeping,   <span>0</span> stopped,   <span>0</span> zombie
Cpu<span>(</span>s<span>)</span>: <span>30.4</span><span>%</span>us,  <span>0.3</span><span>%</span>sy,  <span>0.0</span><span>%</span>ni, <span>65.3</span><span>%</span><span>id</span>,  <span>3.9</span><span>%</span>wa,  <span>0.0</span><span>%</span>hi,  <span>0.0</span><span>%</span>si,  <span>0.0</span><span>%</span>st
Mem:   3944840k total,  3848844k used,    95996k <span>free</span>,   565464k buffers
Swap:        0k total,        0k used,        0k <span>free</span>,   903548k cached
问题: vim的基本快捷键. 

请自行按Vim自带的30分教程练习.

zhanhailiang<span>@</span>linux-06bq:~<span>></span> vimtutor 
问题: ssh安全增强方法; 密码方式和rsa key方式的配置. 

以我之前的博客《git/github教程》为例.

问题: rpm/apt/yum/ports装包, 查询, 删除的基本命令. 
问题: Makefile的基本格式, gcc编译, 连接的命令,-O0 和-O3区别. 
问题: gdb, strace, valgrind的基本使用.

4. 前端,HTML,JS

问题: css盒模型. 

《CSS盒模型》

问题: javascript中的原型链prototype. 

《JavaScript. The core.》

问题: javascript中this对象分析. 

以我之前的博客《深入理解JS之this进阶篇》为例. 其中归纳了所有的this场景.

问题: IE和FF事件冒泡的不同. 

1).IE中事件从最低层冒泡到最顶层的window, 事件对象从window.event中获取;

2).FF先采取事件传播机制, 从最顶层的window到最底层的element, 再冒泡回到最顶层的window. 事件对象也不是全局的, 而是单独作为事件处理函数的参数传值.

问题: 什么是怪异模式, 标准模式, 近标准模式. 

《doctype声明、浏览器的标准、怪异等模式》,这篇博客总结的很详细.

问题: DTD的定义.

HTML 4.01有3种DTD定义头, XHTML 1.0有3种DTD定义头, HTML 5只有1种DTD定义. 活在2013+年, 请直接使用

问题: IE/firefox常用hack.

以《IE CSS hack》为例.

<span>#ml10</span> <span>{</span>
    <span>margin-left</span><span>:</span><span>10px</span><span>;</span>
    <span>margin-left</span><span>:</span><span>10px</span> !important<span>;</span> <span>/* Firefox、IE7+支持 */</span>
    _margin-left<span>:</span><span>10px</span>           <span>/* IE6支持 */</span>
    <span>*</span><span>margin-left</span><span>:</span><span>10px</span>           <span>/* IE6、IE7支持 */</span>
    <span>*+</span><span>margin-left</span><span>:</span><span>10px</span>          <span>/* IE7支持 */</span>
    <span>margin-left</span><span>:</span><span>10px</span>\<span>9</span><span>;</span>         <span>/* IE6、IE7、IE8支持 */</span>
    <span>margin-left</span><span>:</span><span>10px</span>\<span>0</span><span>;</span>         <span>/* IE8支持 */</span>
<span>}</span>
问题: FF,IE下的前端js/css调试工具. 
  • FF: Firebug

  • IE: IE8+自带调试工具, 其它版本使用IEDebugbar

  • Chrome: 自带的开发工具

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。