设为首页 收藏本站
查看: 629|回复: 0

[经验分享] PHP软件工程师的面试题

[复制链接]

尚未签到

发表于 2017-4-2 11:14:47 | 显示全部楼层 |阅读模式
  PHP软件工程师的面试题
  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有什么区别;
  答案:略
  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


  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359051-1-1.html 上篇帖子: PHP相似度计算函数:levenshtein 下篇帖子: PHP uniqid函数执行缓慢的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表