作者: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
ACLon resource(由于资源上的ACL, 未授权)
-
401.4 Authorization failed by filter(由于筛选器, 授权失败)
-
401.5 Authorization failed by ISAPI/
CGIapplication (由于 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句法结构:
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
?>
在该提示符后面, 要定义个标识符, 然后是一个新行. 接下来是字符串 本身, 最后要用前面定义的标识符作为结束标志. 结束时所引用的标识符必须在一行的开始位置, 而且, 标识符的命名也要像其它标签一样遵守PHP的规则: 只能包含字母、数字和下划线, 并且不能用数字和下划线作为开头.
2).Heredoc结构就象是没有使用双引号的双引号字符串, 这就是说在heredoc结构中引号不用被替换, 但是上文中列出的字符 (\n等)也可使用. 变量将被替换, 但在heredoc结构中字符串表达复杂变量时, 要格外小心.
3).在PHP 5.3.0中还在Heredoc结构中用双引号来声明标志符
<?php
echo <<<"FOOBAR"
Hello World!
FOOBAR;
?>
问题: 写出一些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@linux-06bq:~> php -ini|grep configure
Configure Command => './configure'
'--prefix=/usr/local/services/php'
'--enable-fpm'
'--with-config-file-path=/usr/local/services/php/etc'
'--with-mysqli=/usr/local/services/mysql/bin/mysql_config'
'--with-mysql=/usr/local/services/mysql'
'--enable-mbstring'
'--disable-mbregex'
'--enable-sockets'
'--disable-phar'
'--with-mcrypt'
'--with-gd'
'--with-jpeg-dir=/usr/local'
'--with-freetype-dir'
'--with-curlwrappers'
'--with-curl=/usr/local/services/curl'
'--enable-soap'
'--with-oci8=instantclient,/usr/local/services/oracle11g'
'--with-zlib'
'--with-openssl=/usr/local/ssl'
'--with-xsl=/usr/local/'
'--with-tidy=/usr/local/'
'--with-pdo-mysql=/usr/local/services/mysql'
'--enable-pcntl'
问题: 向php传入参数的两种方法.
1).PHP的命令行模式
2).
zhanhailiang@linux-06bq:~> php -h|grep "args..."
Usage: php [options] [-f] <file> [--] [args...]
php [options] -r <code> [--] [args...]
php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
php [options] -- [args...]
args... Arguments passed to script. Use -- args when first argument
问题: (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 等调试函数使用.
以官方文档为便
<?php
// Turn off all error reporting
error_reporting(0);
// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL ^ E_NOTICE);
// Report all PHP errors (see changelog)
error_reporting(E_ALL);
// Report all PHP errors
error_reporting(-1);
// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
?>
问题: 您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
SVN,Git
问题: POSIX和PERL标准的正则表达式区别.
《posix和perl标准的正则表达式区别》
问题: safe_mode打开后哪些地方受限.
《安全模式》
问题: 写代码来解决多进程/线程同时读写一个文件的问题.
问题: 写一段上传文件的代码.
《文件上传处理》
问题: Mysql的存储引擎myisam和innodb的区别.
《InnoDB和MyISAM区别》
2. web架构, 安全,项目经验
问题: 介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验.
APC:《php安装加速扩展APC详解》
问题: 使用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数据库性能的工具,和找出瓶颈的方法.
问题: 正则提出一个网页中的所有链接.
<?php
$a = '<a href="test.html" title="#">test</a><a href="test.html" title="#">test</a>';
preg_match_all('|<a[^>]+href="([^\"]*)".*?'.'>|', $a, $b);
print_r($b);
问题: 介绍一下常见的SSO(单点登陆)方案(比如dedecms整合discuz的passport)的原理.
《单点登陆的技术实现机制分析》
问题: 您写过的PHP框架的特点, 主要解决什么问题, 与其他框架的不同点.
问题: 大型的论坛/新闻文章系统/SNS网站在性能优化上有什么区别?
问题: 相册类应用:要求在浏览器中能同时选中并上传多个文件, 图片要求能剪裁, 压缩包在服务器端解压. 能上传单个达50M的文件.
上传过程中有进度条显示. 每个图片能生成四种大小缩略图, 视频文件要转成flv供flash播放. 叙述要涉及的各类开源软
件和简单用途.
问题: 一群猴子排成一圈, 按1, 2, …, n依次编号. 然后从第1只开始数, 数到第m只,把它踢出圈, 从它后面再开始数, 再数到
第m只, 在把它踢出去…, 如此不停的进行下去, 直到最后只剩下一只猴子为止, 那只猴子就叫做大王. 要求编程模拟此过程, 输
入m、n, 输出最后那个大王的编号. 用程序模拟该过程.
3. unix/linux 基本使用
问题: linux下查看当前系统负载信息的一些方法.
zhanhailiang@linux-06bq:/usr/local/services/php/sbin> uptime
5:06pm up 12 days 8:12, 12 个用户,平均负载:0.09, 0.09, 0.10
zhanhailiang@linux-06bq:/usr/local/services/php/sbin> top
top - 17:06:09 up 12 days, 8:12, 12 users, load average: 0.09, 0.09, 0.10
Tasks: 182 total, 1 running, 181 sleeping, 0 stopped, 0 zombie
Cpu(s): 30.4%us, 0.3%sy, 0.0%ni, 65.3%id, 3.9%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3944840k total, 3848844k used, 95996k free, 565464k buffers
Swap: 0k total, 0k used, 0k free, 903548k cached
问题: vim的基本快捷键.
请自行按Vim自带的30分教程练习.
zhanhailiang@linux-06bq:~> 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的定义.
HTML4.01有3种DTD定义头,XHTML1.0有3种DTD定义头,HTML5只有1种DTD定义<!DOCTYPE
html>. 活在2013+年, 请直接使用<!DOCTYPE html>
问题: IE/firefox常用hack.
以《IE
CSS hack》为例.
#ml10 {
margin-left:10px;
margin-left:10px !important; /* Firefox、IE7+支持 */
_margin-left:10px /* IE6支持 */
*margin-left:10px /* IE6、IE7支持 */
*+margin-left:10px /* IE7支持 */
margin-left:10px\9; /* IE6、IE7、IE8支持 */
margin-left:10px\0; /* IE8支持 */
}
问题: FF,IE下的前端js/css调试工具.
-
FF: Firebug
-
IE: IE8+自带调试工具, 其它版本使用IEDebugbar
-
Chrome: 自带的开发工具
分享到:
相关推荐
Java作为一门广泛使用的编程语言,其高级工程师面试题往往涵盖了多方面的知识点,旨在考察候选人的技术深度、广度以及实际问题解决能力。2018年最全的Java高级工程师面试题集锦,包含了十几个文档,可以预见这些文档...
【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师...
java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助。java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助
### Java高级工程师面试知识点解析 #### JSP与Servlet的异同及联系 - **相同点**:JSP和Servlet都属于Java Web开发的核心技术之一,主要用于动态网页的生成。 - **不同点**: - **本质区别**:JSP本质上是简化版...
【高级前端工程师面试题整理1】 一、HTML 1. HTML5的新特性和移除的元素: HTML5引入了许多新特性,包括: - (1) `<canvas>`元素用于图形绘制; - (2) `<video>`和`<audio>`元素支持媒体播放; - (3) localStorage...
白金高级网络工程师面试题集锦,白金高级网络工程师面试题集锦白金高级网络工程师面试题集锦
包含各公司的面试题及部分笔试题,希望能给各位Java求职者带来帮助!
### 二、简述题解答 #### 1. 描述一下JVM加载class文件的原理机制? JVM通过类加载器(Class Loaders)来完成类文件的加载。这个过程主要包括以下几个步骤: - **加载(Loading)**:读取类的二进制字节码数据并将...
ERP工程师面试题ERP工程师面试题ERP工程师面试题ERP工程师面试题
Java作为一门广泛使用的编程语言,其高级工程师面试题涵盖了丰富的技术领域和实践经验。这份"2022最新最全java高级工程师面试题"资源旨在帮助求职者或开发者深入理解Java核心技术,提升自己的专业水平,以应对职场中...
C#高级程序员面试题知识点大全 本文档总结了C#高级程序员面试题相关的知识点,涵盖了从.Net编译过程到WebService使用的协议等多个方面。 一、.Net编译过程 * .Net编译过程将代码翻译成Microsoft中间语言(MSIL) ...
Java高级工程师面试题涵盖了许多关键领域,旨在评估候选人在编程、设计模式、并发处理、内存管理、性能优化、框架理解及应用等方面的专业能力。以下是一些可能出现在面试中的主题和相关知识点: 1. **Java基础知识*...
java高级软件工程师面试题.pdf
云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备云计算面试题之ELK面试题,运维工程师必备...
在给定文件的标题和描述中,我们可以看到这是关于2019...总之,这部分面试题汇总覆盖了从基础的编程概念到实际编程技巧,再到网络编程、数据结构和算法等多个方面的知识点,是高级PHP工程师面试时需要掌握的核心技能。
"硬件工程师面试题集(DSP,嵌入式系统,电子线路,通讯,微电子,半导体)" 通过对给定的文件信息,我们可以生成以下知识点: 1. 硬件工程师面试题集 * Setup 和 Hold 时间:Setup Time 用于测试芯片对输入信号...
运维工程师面试题及答案.pdf
### Android高级开发面试题——Handler相关知识 #### 一、HandlerLooperMessage关系 **1. Handler、Looper与Message之间的关系** - **Handler**: 主要用于发送消息和处理消息。它作为一个桥梁,使得主线程和子...
以下是对2019年高级安卓工程师面试题中提到的知识点的详细解释: 1. **Activity 生命周期**: Activity 的生命周期主要由一系列回调方法构成,包括 onCreate(), onStart(), onResume(), onPause(), onStop(), ...