您的位置:首页 > 职场人生

一份招PHP高级工程师的面试题

2014-02-03 14:22 573 查看
1. 基本知识点
 HTTP协议中几个状态码的含义:503 500 401 200 301 302。。。

2.   500——服务器产生内部错误
    501——服务器不支持请求的函数
    502——服务器暂时不可用,有时是为了防止发生系统过载
    503——服务器过载或暂停维修

    400——错误请求,如语法错误
    401——请求授权失败
    403——请求不允许

    200——交易成功
    201——提示知道新文件的URL
    202——接受和处理、但处理未完成
    203——返回信息不确定或不完整
    204——请求收到,但返回信息为空
    205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
    206——服务器已经完成了部分用户的GET请求

    300——请求的资源可在多处得到
    301——删除请求数据
    302——在其他地址发现了请求数据
Include require include_once require_once 的区别.

3.   include() 、require()语句包含并运行指定文件。这两结构在包含文件上完全一样,唯一的区别是对于错误的处理。require()语句在遇到包含文件不存在,或是出错的时候,就停止即行,并报错。include()则继续即行。
    include_once()和require_once()一样,应该用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一 次以避免函数重定义,变量重新赋值等问题。这就是include_once()和require_once()与include() 和require()的主要区别。 

PHP/Mysql中几个版本的进化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改进等等。

Php5  支持完善于类于对像 

Mysql 5 支持视图 事务等
HEREDOC介绍

4.  heredoc 是可以让我们在php代码内实现一大段的html代码,并且可以在其中,使用php变量。
    1.以<<开始标记开始,以End结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号。开始标记 和开始标记相同,比如常用大写的EOT、EOD、EOF来表示,但是不只限于那几个,只要保证开始标记和结束标记不在正文中出现即可。
    2.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。
    3.heredoc常用在输出包含大量HTML语法d文档的时候。比如:函数outputhtml()要输出HTML的主页。可以有两种写法。很明显第二种写法比较简单和易于阅读。
写出一些php魔幻方法;

5. __construct 初始化 构造函数
__destruct 卸载 析构函数
__autoload 自动加载函数
__call   调用不存在的类的函数的时候得处理方法,__call 失败,就调用父类方法,依此类推
__get   获取属性值
__set()   设置属性值
__isset() 测定变量是否设定用的函数,传入一个变量作为参数,如果传入的变量存在则传回true,否则传回false
__unset() 删除指定的变量且传回true,参数为要删除的变量。
__clone();   克隆对象
__toString(); 进行对象的类型转换
__sleep();    
__wakeup();
当一个对象被串行化,PHP会调用__sleep方法(如果存在的话). 在反串行化一个对象后,PHP 会调用__wakeup方法. 这两个方法都不接受参数. __sleep方法必须返回一个数组,包含需要串行化的属性.
一些编译php时的configure 参数

6. 
向php传入参数的两种方法。

7. 在调用函数时,需要向函数传递参数,被传入的参数称为实参,而函数定义的参数为形参。参数传递的方式有两种。
    1.传值方式:将实参的值复制到对应的形参中,在函数内部的操作针对形参进行,操作的结果不会影响到实参,即函数返回后,实参的值不会改变。
    2.传址方式:实参的内存地址传递到形参中,在函数内部的所有操作都会影响到实参的值,即返回后,实参的值会相应发生变化。传址时只需要在形参前加&号即可。
Eg : function   method($a){

Return $a;
}
$a = 0;

Method($a);
method(&$a);
(mysql)请写出数据类型(int char varchar datetime text)的意思;

答:在mysql 当中 int 是数字类型、

 char是字符类型、

Varchar 是字符类型是、

Text是文本类型、 

datetime  在mysql数据库不一般不用 ,mysql一般用时间戳

请问varchar和 char有什么区别;

答:varchar与char的区别是:固定长度 (char) 或可变长度 (varchar) 字符数据类型。

相同点:都是字符数据类型

不同点: char 是定长   varchar是变长
error_reporting 等调试函数使用

  error_reporting()函数是用来重新定义页面显示错误等级的函数,这个函数可以覆盖掉PHP.ini针对程序运行时错误报告等级的配置。
error_reporting()函数能够使用的参数列表和这些参数的数字值:

值 常量
1 E_ERROR

2 E_WARNING

4 E_PARSE

8 E_NOTICE

16 E_CORE_ERROR

32 E_CORE_WARNING

64 E_COMPILE_ERROR

128 E_COMPILE_WARNING

256 E_USER_ERROR

512 E_USER_WARNING

1024 E_USER_NOTICE

2047 E_ALL

2048 E_STRICT

您是否用过版本控制软件? ?*****

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

答:POSIX兼容正则没有定界符,函数的相应参数会被认为是正则。

PERL兼容正则可以使用任何不是字母、数字或反斜线(\)的字符作为定界符,如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。也可以使用(),{},[] 和 <> 作为定界符

Safe_mode 打开后哪些地方受限.

大家都知道,PHP是没有多线程概念的,尽管如此我们仍然可以用“不完美”的方法来模拟多线程。简单的说,就是队列处理。通过对 文件进行加锁和解锁,来实现。当一个文件被一个用户操作时,该文件是被锁定的,其他用户只能等待,确实不够完美,但是也可以满足一些要求不高的应用。  

写代码来解决多进程/线程同时读写一个文件的问题。

· function T_put($filename,$string){  

· $fp = fopen($filename,’a'); //追加方式打开  

· if (flock($fp, LOCK_EX)){ //加写锁  

· fputs($fp,$string); //写文件  

· flock($fp, LOCK_UN); //解锁  

· }  

· fclose($fp);  

· }  

· function T_get($filename,$length){  

· $fp = fopen($filename,’r'); //追加方式打开  

· if (flock($fp, LOCK_SH)){ //加读锁  

· $result = fgets($fp,$length); //读取文件  

· flock($fp, LOCK_UN); //解锁  

· }  

· fclose($fp);  

· return $result;  

· }  

 

function add_num( $file_path , $messageid , $num){
         $file_path_user = $file_path . '/' . $messageid;//把路径加上被投人ID,去往被投人的文件夹
         while(file_exists($file_path_user . '/NO_WRITABLE')){}
           //为防止并发写入文件错误,判断一个文件是否存在,若存在证明正在插入,进入死循环,否则直接插入
         touch($file_path_user . '/NO_WRITABLE');//新建验证文件
         file_put_contents( $file_path_user.'/num.txt', 
                   intval(file_get_contents($file_path_user.'/num.txt')) + $num
         ); //增加票数
         unlink($file_path_user. '/NO_WRITABLE');//删除验证文件
}
写一段上传文件的代码。

move_uploaded_file(“filename”,”fileurl’);

Mysql 的存储引擎,myisam和innodb的区别。

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。下面是已知的两者之间的差别,仅供参考。

innodb
InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。

InnoDB 的设计目标是处理大容量数据库系统,它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,一般为 2 GB。
InnoDB所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。

MyISAM
MyISAM 是MySQL缺省存贮引擎 .

每张MyISAM 表被存放在三个文件 。frm 文件存放表格定义。 数据文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引伸。

因为MyISAM相对简单所以在效率上要优于InnoDB..小型应用使用MyISAM是不错的选择.

MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦

以下是细小和具体不同

1.InnoDB不支持FULLTEXT类型的索引。
2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

2.另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “�a%” 

2. web 架构,安全,项目经验
 介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验。
使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时,重定向到
 index.php?id=567 ,请先打开mod_rewrite.
MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
写出一种排序算法(原理),并说出优化它的方法。
请简单阐述您最得意的开发之作
对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
您是否用过模板引擎? ?*****心玫哪0逡娴拿质??
请介绍Session的原理,大型网站中Session方面应注意什么?
测试php性能和mysql数据库性能的工具,和找出瓶颈的方法。
正则提出一个网页中的所有链接.
介绍一下常见的SSO(单点登陆)方案(比如dedecms整合discuz的passport)的原理。
您写过的PHP框架的特点,主要解决什么问题,与其他框架的不同点。
大型的论坛/新闻文章系统/SNS网站在性能优化上有什么区别?
相册类应用:要求在浏览器中能同时选中并上传多个文件,图片要求能剪裁,压缩包在
 服务器端解压。能上传单个达50M的文件。上传过程中有进度条显示。每个图片能生成
 四种大小缩略图,视频文件要转成flv供flash播放。叙述要涉及的各类开源软件和简单
 用途。
一 群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它
 踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…, 如此不停的进行下去,
 直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、
 n, 输出最后那个大王的编号。用程序模拟该过程。

3. unix/linux 基本使用
 linux下查看当前系统负载信息的一些方法。
vim的基本快捷键。
ssh 安全增强方法;密码方式和rsa key 方式的配置。
rpm/apt/yum/ports 装包,查询,删除的基本命令。
Makefile的基本格式,gcc 编译,连接的命令,-O0 和-O3区别。
gdb,strace,valgrind的基本使用.

4. 前端,HTML,JS
 css盒模型。
javascript中的prototype。
javascript中this对象的作用域。
IE和firefox事件冒泡的不同。
什么?*****忠炷J?,标准模式,近标准模式。
DTD的定义
IE/firefox常用hack.
firefox,IE下的前端js/css调试工具。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: