1.什么是引用变量?

用不同的名字访问同一个变量内容:在PHP中引用意味着用不同的名字访问同一个变量内容,使用&符号
注:unset(),只会取消引用,不会销毁内存空间.
对象本身就是引用传递.

例题:

引用变量面试题


2.PHP中可以使用哪三种定义字符串的方法和各自的区别是什么?

单引号

  • 不能解析变量和转义字符,只能解析单引号和反斜线本身
  • 变量和变量,字符串和字符串之间可以使用.链接,效率高于双引号

双引号

  • 可以解析变量,变量可以使用{}包含,可以解析所有转义字符
  • 可以使用.链接

herdoc

  • 类似于双引号

newdoc

  • 类似于单引号

延伸:数据类型

  • 浮点类型:不能用于计算
  • 布尔类型:false情况
    0, 0.0, '', '0', false, array(), NULL
  • 数组类型:超全局数组
    $GLOBALS, $_GET, $_POST,$_REQUEST, $_SESSION, $COOKIE, $_SERVER, $_FILES, $_ENV
    $_SERVER['SERVER_ADDR']------服务器ip地址
    $_SERVER['SERVER_NAME']------服务器名称
    $_SERVER['SERVER_TIME']------服务器时间
    $_SERVER['HTTP_REFERER']-----上级请求地址
    $_SERVER['REMOTE_ADDR']------客户端ip地址
    $_SERVER['PATH_INFO']--------url地址路径
  • NULL:三种情况
    直接赋值为NULL,未定义的变量,unset销毁的变量
  • 常量
    定义方式:conset,define
    conset更快,是语言结构,define是函数
    conset可以定义累的常量,define不可以
    常量一经定义不能删除
    预定义常量:

      __FILE__      ---- 所在文件的路径和文件名
      __LINE__      ---- 所在行的行号
      __DIR__       ---- 所在目录
      __FUNCTION__  ---- 所在函数提的函数名称
      __CLASS__     ---- 所在的类名
      __TRAIT__     ---- trait名称
      __METHOD__    ---- 所在函数方法名
      __NAMESPACE__ ---- 命名空间名称
    

3.foo()和@foo()有什么区别?

@:php的运算符,放在表达式前面会忽略所有错误

延伸:

  • 运算符优先级:
    递增递减 --> ! --> 算术运算符 --> 大小比较运算符 --> 相等比较运算符 --> 引用 --> 位运算符(^) --> 位运算符(|) --> 逻辑与 --> 逻辑或 --> 三元 --> 赋值 --> and --> xor --> or
  • 比较运算符:
    == 和 === 的区别
if ('== false') {
    echo '';
} elseif ('0' == 0) {
    echo '';
} elseif (0.0 == 0) {
    echo '';
}
  • 等值判断(FALSE七种情况)
  • 递增递减运算符
    递增递减运算符不用想布尔值
    递减NULL值没有效果
    递增NULL的值为1
    递增递减在前就先运算后返回,反之就先返回后运算
  • 逻辑运算符

    • 短路作用
    • || 和 $$ or 和 and 的优先级不用

      $a = false || true; // true
      $a = false or true; // false


4.请列出3种PHP数组循环操作的语法,并注明各种循环的区别

  • for,foreac,while,list(),each()
  • for只能遍历索引数组,foreach可以遍历索引和关联数组,;先和使用,list(),each(),while()循环同样可以遍历索引和关联数组
  • while,list(),each()不会reset()
  • foreach会对数组进行reset()

    延伸:PHP分支

    • if....elseif
      只能有一个表达式喂true,即在elseif语句中只能有一个语句块被执行,多个elseif从句是排斥关系,使用elseif语句有一个基本原则,总把有限范围小的条件放在前面处理
    • switch...case...
      和 if 不同的是,switch后面的控制表达式的数据只能是整形,浮点型或者字符串
      continue语句作用到switch的作用类似于break
      跳出sswitch外的循环可以使用continue2
      会生成一个跳转表,会直接跳转到对应的case

5.写出如下程序的执行结果:

$count = 5;
function get_count()
{
    static $count; //NULL
    return $count++;
}

echo $count; // 5;
++$count;

echo get_count();// NULL
echo get_count();// 1

延伸

变量的作用域和静态变量
变量的作用域和静态变量

static关键字

  1. 仅初始化一次
  2. 初始化时需要赋值
  3. 每次执行函数该值会保留
  4. static修饰的变量是局部的,仅在函数内部有效
  5. 可以记录函数的调用次数,从而终止递归

函数的参数以及参数的引用传递
函数的返回值及引用返回
函数的返回值及引用返回
函数的返回值及引用返回
外部文件的导入
include/require语句包含并运行制定文件
如果给出路径名按照路径来找,负责从include_path查找,如过include_path也没有,则从当前露文件所在目录下寻找
加载过程中文件未找到include结构会发出一条警告,程序继续运行,require会发出一个error,程序停止运行
时间日期函数
date(),strtotime(),mktime(),time(),microtime(),
date_defaulet_timezone_set()
IP处理函数
ip2long(),long2ip()
打印函数
语言结构:

  • echo 可打印多个,用逗号隔开(效率好)
  • print() 只能打印一个

函数:

  • printf() 根据格式进行输出,直接输出到缓冲区
  • sprintf() 不会输出,会返回
  • print_r() 会将数组,对象格式化好打印出来
  • var_dump() 也会打印格式,但会打印各个类型

序列化和反序列化
serialize(),unserialize()
字符串处理函数

  • implode()
  • explode()
  • join()
  • strrev()
  • trim()
  • ltrim()
  • strstr()
  • number_format()

例题
例题


6.至少写出一种139开的11位手机号的正则表达式

$preg = '/^1[3|4|5|6|7|8|9]\d{9}%/';

延伸

正则表达式的作用
分割,查找,匹配,替换字符串
分隔符:正斜线(/)
通用原子:

  • \d 表示任意一个十进制的数字 [0-9]
  • \D 表示任意一个除数字这外的字符(除了0-9) [^0-9]
  • \s 表示任意一个空白字符,空格、\n\r\t\f [\n\r\t\f ]
  • \S 表示任意一个非空白 1
  • \w 表示任意一个字(数字字母下划线) a-zA-Z0-9_ [a-zA-Z0-9_]
  • \W 表示任意一个非字,除了(数字字母下划线)a-zA-Z0-9_以外的任意一个字符 [^a-zA-Z0-9_]

元字符:

  • . 除了换行符之外的任意字符
  • * 匹配前面的内容出现零次一次或多次
  • ? 零次或一次
  • ^ 开头
  • $ 结尾
  • + 一次或多次
  • {n} 正好出现n次
  • {n,m} n次到m次
  • [] 集合(或)
  • () 后向引用
  • [^] 取反
  • | 或者
  • [-] 范围

例题
例题


7.不断在文件 hello.txt 头部写入一行 "Hello World" 字符串,要求代码完整

<?php
    $file = './hello.txt';
    $handle = fopen($file, 'r');
    $content = fread($handle, filesize($file));
    $content = 'Hello World' . $content;
    fclose($handle);
    $handle = fopen($file, 'w');
    fwrite($handle, $content);
    fclose($handle);

延伸:目录的操作函数,其他文件操作

  • 文件读取写入操作

    • fopen() 用来打开一个文件,打开时需要制定打开模式
    • 打开模式
      r/r+ 只读-文件开头/读写-文件开头(替换写入)
      w/w+ 清空写入/清空读写(文件不存在则创建)
      a/a+ 追加写入-文件末尾/追加读写-文件末尾(文件不存在则创建)
      x/x+ 写入打开-文件开头/读写打开-文件开头(如果文件存在报错)

      • 写入函数:fwrite(),fputs()
      • 读取函数:fread(),fgets(),fgetc()
      • 关闭函数:fclose()
      • 不需要fopen()打开的函数
        file_get_contents()
        file_put_contents()
  • 目录操作函数

    • 名称相关:basename(),dirname(),pathinfo()
    • 目录读取:opendire(),readdir(),closedir(),rewinddir()
    • 目录删除:rmdir()
  • 其他函数

    • 文件大小:filesize()
    • 目录大小:disk_free_space(),disk_total_space()
    • 文件拷贝:copy()
    • 删除文件:unlink()
    • 文件类型:filetype()
    • 重命名文件或目录:rename()
    • 文件属性

    file_exists() 文件是否存在
    is_readable() 文件是否可读
    is_writable() 文件是否可写
    is_executable() 是否可执行
    filectime() 文件修改时间
    fileatime() 文件访问时间
    filemtime() 文件整个修改时间

    • 文件锁:flock()
    • 文件指针:ftell(),fseek(),rewind()

### 例题:通过函数的方式对目录进行遍历,写出程序

function loopDir ($dir)
  {
      // 打开目录
      $handle = opendir($dir);
      while(false !== ($file = readdir($handle))) {
          if ($file != '.' && $file != '..') {
              echo $file . "\n\r";
              if (filetype($dir . '/' . $file) == 'dir') {
                  loopDir($dir . '/' . $file);
              }
          }
      }
  }
  
  loopDir($dir);

8:简述cookie和session的区别及工作机制,储存位置等,件数cookie的优缺点

cookie存在客户端,不会占用服务器资源,但是数据不安全,如过用户禁止cookie则不能使用
session信息安全,但放在服务器端占用服务器资源

延伸

  • 会话控制
    GET参数传递:信息不安全,参数丢失
    Cookie: 存储在客户端的文件

    • Cookie操作

    设置:setcookie($name,$value,$expire,$path);
    读取:$_COOKIE:只读
    删除:setcookie($name, '', time() - 1000)
    Session:储存在服务器端

    • Session操作

    session_start();
    $_SESSION
    $_SESSION = []
    session_destroy

  • 配置(php,ini)
    session.auto_start 是否自动开启session
    session.cookie_domain 存储sessionid的有效域名
  • 传递Sessionid

     session_name()和session_id()
     <a href="1.php?PHPSESSIONID=<?php echo session_name() . '=' . session_id(); ?>"></a>
    <a href="1.php?PHPSESSIONID=<?php echo SID; ?>"></a>
  • session存储
    session_set_save_handler()
    MySql,Memcache,Redis等
    session存储

9:请写出PHP类权限控制修饰符

延伸

  • 面向对象:封装,继承,多态
  • 类权限修饰符
    public 可以在类的内部,外部,子类里使用
    protected 受保护的的,可以在类的内部使用,子类里使用
    private 只能在类的内部使用
  • 面向对象的继承
    单一继承
    方法重写
    方法重写
  • 魔术方法
    __constrouct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__clone()
  • 设计模式
    工厂模式,单例模式,注册树模式,策略者模式

**10:HTTP/1.1,状态码200 301 304 403 404 500 的含义

  • 200 请求成功
  • 301 永久重定向
  • 304 请求错误
  • 403 访问被拒绝
  • 404 页面丢失
  • 500 服务器错误

延伸

  • HTTP协议的状态吗

    • 1xx(信息类,表示请求正在处理)
    • 2xx(成功状态码,请求正常处理完毕)
    • 3xx(重定向,需要进行附加操作已完成请求)
    • 4xx(客户端错误,服务器无法处理请求)
    • 5xx(服务器错误)
    • 常见状态码
    • 200 请求成功
    • 204 请求已成功处理,但返回部分不含实体的主体部分
    • 206 成功执行部分内容
    • 301 永久性重定向
    • 302 临时性重定向
    • 303 存在另一个请求资源
    • 304 请求未满足条件
    • 400 badrequeset 请求错误
    • 401 发送请求需要有通过http认证的认证信息
    • 403 访问被拒绝
    • 404 服务器无法找到资源
    • 501 在执行请求时发生了错误
    • 503 服务器在维护
  • OSI七层模型

    • 第一层:物理层(建立,维护,断开物理连接)
    • 第二层:数据链路层(建立逻辑连接,进行硬件地址寻址,差错校验等功能)
    • 第三层:网络层(逻辑地址寻址,实现不同网络之间路径选择)
    • 第四层:传输层(定义传输数据的协议端口号,以及流控和差错校验)
    • 协议有:TCP UDP,数据一旦离开网卡即进入网络传输层

      • 第五层:会话层(建立,管理,终止会话)
      • 第六层:表示层(数据的表示安全和压缩)
      • 第七层:应用层(网络服务与最终用户的一个接口)
    • 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POPS DHCP
  • HTTP协议工作特点和原理

    • 工作特点:给予B/S模式,通信开销小,简单快速,传输成本低,使用灵活,可使用超文本传输协议,节省传输时间,无状态
    • 工作原理:客户端发送请求给服务器,创建一个TCP链接,指定端口号,默认80,链接到服务器,服务器监听浏览器请求,一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回状态信息和数据内容
  • HTTP协议常见的请求头/响应头
    Content-Type,Accept,Origin,Cookie,Cache-Control,User-Agent,Referrer,X-Forwarded-For,Access-Control-Allow-Origin,Last-Modified
  • HTTP协议请求方法

    • GET 主要用于数据的读取
    • POST 主要用于向服务器提交数据
    • HEAD 服务器响应时只会返回头信息
    • OPTIONS 测试服务器功能
    • PUT 向服务器传送制定资源内容
    • DELETE 删除资源
    • TRACE 用于HTTP请求的测试
  • GET和POST请求的区别

    • GET在做前进或后退以及刷新时是无害的,而POST会重新提交数据
    • GET可以收藏为书签,而POST不可以
    • GET可以被浏览器缓存,而POST不可以被缓存
    • GET在历史记录里参数会保留,而PSOT参数不回保留到历史记录
    • GET传输数据最大2048个字符,而POST没有限制
    • GET安全性比较差,而POST比较安全
  • 常见的网络协议函以及端口

    • FTP(21) 文件传输协议
    • Telnet(23) 用于远程登录端口
    • SMTP(25) 简单邮件传输协议
    • POP3(101) 用于接收邮件
    • HTTP(80) 超文本传输协议
    • DNS(53) 域名解析服务

11:是否使用过版本控制器,使用了什么

延伸

  • 版本控制软件

    • 集中式(CVS和SVN):只在中央服务器中存储
    • 分布式(Git):每个客户端都有一个完整的版本库信息
  • PHP的运行原理(Nginx + PHP-FPM)

    • CGI:解决PHP和webServer通信问题(效率低)
    • FastCGI:CGI改良版本,不用每次生成和杀死进程
    • PHP-FPM:FastCGI的进程管理器,提供进程(master/work)管理的功能
    • master进程:只有一个,负责监听端口,接受来自webServer的请求
    • worker进程:多个,每个进程内部都会的嵌入一个PHP解析器,用来处理PHP代码
  • PHP常见配置项

    • register_globals:注入变量
    • allow_url_fopen 是否允许远程打开文件
    • allow_url_include 是否允许远程包含
    • date.timezone 设置时区
    • display_errors 是否现实错误
    • error_reporting 设置错误级别
    • safe_mode 是否开启安全模式
    • upload_max_filesize 上传最大文件大小
    • max_file_uploads 上传最大文件数量
    • post_max_size 提交的POST最大数据限制

例题

  • 请简述CGI,FastCGI和PHP-FPM的

12:下列不适于javaScript语法关键/保留字的是(var,$,fucntion,while)

延伸

  • javaScript基本语法

    • 使用var声明变量
    • 创建对象:new Object()
  • DOM对象

    • Document,Element
  • jQuery基础

    • jQuery选择器
    • jQuery事件
    • jQuery效果
    • jQuery DOM操作

13:AJAX技术利用了什么协议?简述AJAX的工作机制

Ajax的核心技术是XMLHttpRequest,它是JavaScript的一个对象,通过在后台与服务器进行少量数据请求,AJAX可以使网页实现异步更新

延伸

  • AJAX基本概念:通过在后台与服务器进行少量数据请求,AJAX可以使网页实现异步更新

14:写出尽可能多的Linux命令**

ls,ll,rm -rf,cd,crontable -e,chmod,chwon,cp,mv,touch,mkdir,w,ps,kill,pkill,netstat -lmp|preg 80,shutdown,reboot,curl,telent,mail,elinks,ping,ifconfig,clear,yum,rpm,apt-get,find,cat,tree,pwd

延伸

  • Linux系统定时任务

    • crontable命令
    • crontable -e
              • (分 时 日 月 周)
      • at命令
    • at 2:00 tomorrow

      at>/home/job

  • vi/vim编辑器
  • shell基础

    • 编写基础
    • 开头用#!指定脚本解释器,例如:#!/bash/sh
    • 编写具体功能

例题

  • 如何实现每天0点重启服务器
  • crontable -e

    • 0 0 * * * reboot


  1. \n\r\t\f