PHP软件工程师的面试题

来源:互联网 发布:餐饮软件全国排名 编辑:程序博客网 时间:2024/05/17 13:46

  1. 基本知识点

HTTP协议中几个状态码的含义:503 500 401 200 301 302。。。

答案:200——交易成功
          301——删除请求数据
          302——在其他地址发现了请求数据

          401——请求授权失败
          500——服务器产生内部错误
          503——服务器过载或暂停维修

Include require include_once require_once 的区别.

答案:
    
require和include之间有两点重要的区别。
     (1)无论require的位置如何,制定文件都将包含到出现require的脚本中。例如,即使require放在计算结果为假的if语句中,依然会包含指定文件。

(2)require出错时,脚本将停止运行,而在使用include的情况下,脚本将继续执行。
     include_once、require_once的作用分别与include、require相同。

不同点是会首先验证是否已经包含了该文件,如果已经包含,则不再执行include_once;否则,包含该文件。

 

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

  HEREDOC介绍

答案:

1.以<<<End开始标记开始,以End结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。开始标记和开始标记相同,比如常用大写的EOT、EOD、EOF来表示,但是不只限于那几个,只要保证开始标记和结束标记不在正文中出现即可(出现在注释里面也不行)。

2.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以(会被当作普通字符串)。在heredoc中,变量不需要用连接符.或,来拼接,

3.heredoc常用在输出包含大量HTML语法的文档的时候。

补充同nowdoc的区别:

简单来说:
1
、heredoc是动态的 nowdoc是静态的
2、heredoc类似多行的双引号 newdoc类似多行的单引号
3、heredoc是一种专门处理大段字符串的通用处理方案,而nowdoc是php为了弥补动态实现“heredoc”的效率问题而实现的“高效率”的静态版本
heredoc是从PHP4.0开始引进的,而nowdoc语法则需要5.3版本

 

写出一些php魔幻方法;

答案:

__construct()_destruct()、__get()、__set()、__call()、__sleep()、__wakeup()、__clone()、__toString()

 

一些编译php时的configure参数

答案:

–prefix=/usr/local/php   php安装目录

–with-config-file-path=/usr/local/php/etc指定php.ini位置

–with-mysql=/usr/local/mysqlmysql安装目录,对mysql的支持

–with-mysqli=/usr/local/mysql/bin/mysql_configmysqli文件目录,优化支持

–enable-safe-mode打开安全模式

–enable-ftp打开ftp的支持

–enable-zip打开对zip的支持

–with-bz2打开对bz2文件的支持

–with-jpeg-dir打开对jpeg图片的支持

–with-png-dir打开对png图片的支持

–with-freetype-dir打开对freetype字体库的支持

–without-iconv关闭iconv函数,种字符集间的转换

–with-libxml-dir打开libxml2库的支持

–with-xmlrpc打开xml-rpc的c语言

–with-zlib-dir打开zlib库的支持

–with-gd打开gd库的支持

向php传入参数的两种方法。
答案:方法一 使用$argc $argv
 方法二 使用getopt函数()

  方法三 提示用户输入,然后获取输入的参数。有点像C语言

Mysql请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别;

答案:

1、Int?整形

2、Char字符型

3、Varchar?可变长度字符型

4、Datetime?时间日期内省

5、Text?文本类型

6、Varchar?是可变长度类型,占用的空间是字符串的长度+1,而char是固定长度字符串类型,定义了多少空间就占用多少空间。

varchar是可变长字符,插入字符的长短是根据字符的实际长度来存储,char是不可变成字符,插入任何字符都是char本身规定的长短

error_reporting 等调试函数使用

答案:php的配置函数就是几个ini_*的函数,主要是针对配置文件的操作,其实就四个函数:ini_get、ini_set、ini_get_all、ini_restore。个人感觉最有用的就是ini_set和ini_get。

您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
答案:svn
  posix和perl标准的正则表达式区别;
答案:OSIX兼容正则没有定界符,函数的相应参数会被认为是正则。

PERL兼容正则可以使用任何不是字母、数字或反斜线(\)的字符作为定界符,如果作为定界符的字符必须被用在表达式本身中,则需要用反斜线转义。也可以使用(),{},[] 和 <> 作为定界符
POSIX兼容正则没有修正符。
PERL兼容正则中可能使用的修正符(修正符中的空格和换行被忽略,其它字符会导致错误)

Safe_mode 打开后哪些地方受限.    答案:system,passthru,exec,shell_exec,popen,phpinfo等等大部分的文件操作函数。因为Safe_mode是php非常重要的内嵌的安全机制。默认是关闭的

如果 PHP打开了save model,system() 和其它程序执行函数将拒绝启动不在此目录中的程序。必须使用 / 作为目录分隔符,包括 Windows 中 safe_mode_allowed_env_varsstring

被安全模式限制或屏蔽的函数

函数名                        限制

dbmopen()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。

dbase_open()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。

filepro()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。

filepro_rowcount()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。

filepro_retrieve()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。

ifx_* sql_safe_mode限制, (!= safe mode)

ingres_* sql_safe_mode限制, (!= safe mode)

mysql_* sql_safe_mode限制, (!= safe mode)

pg_loimport()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。

posix_mkfifo()检查被操作的目录是否与被执行的脚本有相同的UID(所有者)。

putenv()遵循 ini设置的safe_mode_protected_env_vars 和safe_mode_allowed_env_vars 选项。请参考 putenv() 函数的有关文档。

move_uploaded_file()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。

chdir()检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。

dl()当 PHP运行在 安全模式 时,不能使用此函数。

backtick operator当 PHP 运行在 安全模式 时,不能使用此函数。

shell_exec()(在功能上和 backticks函数相同)当 PHP 运行在 安全模式 时,不能使用此函数。

exec()只能在 safe_mode_exec_dir设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。

system()只能在 safe_mode_exec_dir设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。

passthru()只能在 safe_mode_exec_dir设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。

popen()只能在 safe_mode_exec_dir设置的目录下进行执行操作。基于某些原因,目前不能在可执行对象的路径中使用 ..。escapeshellcmd() 将被作用于此函数的参数上。

fopen()检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。

mkdir()检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。

rmdir()检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。

rename()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。

unlink()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。

copy()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (onsource and target)

chgrp()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。

chown()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。

chmod()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。另外,不能设置 SUID、SGID 和 sticky bits

touch()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。

symlink()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (注意:仅测试 target)

link()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。 (注意:仅测试 target)

apache_request_headers()在安全模式下,以“authorization”(区分大小写)开头的标头将不会被返回。

header()在安全模式下,如果设置了 WWW-Authenticate,当前脚本的 uid 将被添加到该标头的 realm 部分。

PHP_AUTH变量 在安全模式下,变量 PHP_AUTH_USER、PHP_AUTH_PW 和 PHP_AUTH_TYPE 在 $_SERVER 中不可用。但无论如何,您仍然可以使用 REMOTE_USER 来获取用户名称(USER)。(注意:仅 PHP 4.3.0 以后有效)

highlight_file(), show_source()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。(注意,仅在 4.2.1 版本后有效)

parse_ini_file()检查被操作的文件或目录是否与被执行的脚本有相同的 UID(所有者)。 检查被操作的目录是否与被执行的脚本有相同的 UID(所有者)。(注意,仅在 4.2.1 版本后有效)

set_time_limit()在安全模式下不起作用。

max_execution_time在安全模式下不起作用。

mail()在安全模式下,第五个参数被屏蔽。(注意,仅自 PHP 4.2.3起受影响)

写代码来解决多进程/线程同时读写一个文件的问题。
参考答案:
   
<?php

 $fp = fopen("/tmp/lock.txt","w+");

  if (flock($fp, LOCK_EX)) { //进行排它型锁定

       fwrite($fp, "Writesomething here\n");

       flock($fp, LOCK_UN); //释放锁定

   } else {

       echo "Couldn'tlock the file !";

   }

   fclose($fp);

?>

写一段上传文件的代码。
参考答案:
$uploaddir.="uploadfiles/".date("Y")."/".date("m")."/".date("d")."";

if (!is_dir($uploaddir))

{

if (!mkdir($uploaddir,0777,TRUE) || !chmod($uploaddir, 0777))

{

 exit("创建上传目录失败");

}

}

if($_FILES["filename"])

{

$filename =addslashes($_FILES['filename']["name"]);//客户端文件名

$arrTemp =explode(".",$filename);//取后缀

$filename_sever =date("his").rand(100,999);

$filename_sever .=".".$arrTemp[count($arrTemp)-1];

if(move_uploaded_file($_FILES['s_photo']['tmp_name'],$uploaddir."/".$filename_sever)){

}else{

    exit("上传失败");

 }

}

Mysql 的存储引擎,myisam和innodb的区别。
参考答案:
1、两者在文件构成上有区别;
2
、InnoDB支持事务处理,MyISAM不支持;
3、对无WHERE子句的COUNT(*)操作的不同:MyISAM中保存了该值,直接读取,InnoDB需要作全表扫描;
4、锁的区别:InnoDB支持表级锁和行级锁,MyISAM只支持表级锁;

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

  介绍xdebug,apc,eAccelerator,Xcache,Zendopt的使用经验。

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

  MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

  写出一种排序算法(原理),并说出优化它的方法。

  请简单阐述您最得意的开发之作

  对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
参考:

   数据库延迟插入。性能有改善但是可能还是无法应付高并发

   浏览数据写入缓存,统一更新。统计数据比较滞后,还要运行一个负责更新的消息队列

   分析系统Log。需要有服务器的配置权限,与系统整合工作量比较大。

  您是否用过模板引擎? 如果有您用的模板引擎的名字是?

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

  测试php性能和mysql数据库性能的工具,和找出瓶颈的方法。
参考:
三个MySQL性能测试工具:The MySQL Benchmark Suite、MySQL super-smack、MyBench。除了第一个为MySQL性能测试工具,其他两个都为压力测试工具。

xhprof是facebook开源出来的一个php性能测试工具,也可以称之为profile工具xdebug

  正则提出一个网页中的所有链接.
参考:

<?

if(isset($url)){

 echo "$url有下列裢接:<br>";

 $fcontents = file($url);

 while(list(,$line)=each($fcontents)){

 while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-]+"?)(.*)',$line,$regs)){

  $regs[1] =eregi_replace('(href[[:space:]]*=[[:space:]]*"?)([[:alnum:]:@/._-]+)("?)',"\\2",$regs[1]);

  echo"&nbsp;&nbsp;&nbsp;&nbsp;$regs[1]<br>";

  $line = $regs[2];

 }

 }

}

?>

  介绍一下常见的SSO(单点登陆)方案(比如dedecms整合discuz的passport)的原理。

  您写过的PHP框架的特点,主要解决什么问题,与其他框架的不同点。

  大型的论坛/新闻文章系统/SNS网站在性能优化上有什么区别?

  相册类应用:要求在浏览器中能同时选中并上传多个文件,图片要求能剪裁,压缩包在服务器端解压。能上传单个达50M的文件。上传过程中有进度条显示。每个图片能生成四种大小缩略图,视频文件要转成flv供flash播放。叙述要涉及的各类开源软件和简单用途。

  一 群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…, 如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。

  3. unix/linux 基本使用

  linux下查看当前系统负载信息的一些方法。
参考:
uptime

  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事件冒泡的不同。

  什么是怪异模式、标准模式,近标准模式?

  DTD的定义

  IE/firefox常用hack.

  firefox,IE下的前端js/css调试工具。
   参考: FireFox浏览器上面的FireBug的工具
    IE 调试工具IETester+DebugBar
0 0
原创粉丝点击