php 面试考点 - 持续更新

百分之九十五php面试考点归类:

  1、php基础知识

  2、javaScript 、jQuery、Ajax基础知识  

  3、Linux 基础知识

  4、MySQL 数据库的基础与优化

  5、程序设计题

  6、php框架基础知识

  7、算法、逻辑思维

  8、高并发解决方案

1、php基础知识考点:

  引用变量、常量及数据类型、运算符及流程控制、自定义函数及内部函数、正则表达式、文件目录处理、回话控制、面向对象、网络协议、开发环境相关

4、MySQL 数据库的基础与优化  

  MySQL基础知识考点、MySQL如何创建高性能的索引、MySQL的SQL语句编写和优化、MySQL的高可扩展和高可用及安全性

7、算法、逻辑思维

  常见数据结构特征、算法的工作原理、时间复杂度、空间复杂度、其他逻辑算法、php内置函数实现

8、高并发解决方案

  如何理解高并发:pv、uv、qps  、 优化时机:QPS阶段性优化、防盗链、减少http请求、浏览器缓存、CDN、数据库缓存、mysql的读写分离、分区以及分库分表、LVS负载均衡 

常见经典面试题:

1.什么是引用变量?在php当中,用什么符号定义引用变量?

2.要求写出jQuery中,可以处理AJAX的几种方法。

3.写出尽可能多的Linux命令

4.写出三种以上Mysql数据库存储引擎的名称

5.编写一个在线留言本,实现用户的在线留言功能

6.谈谈你对mvc的认识,介绍几种目前比较流行的mvc框架

7.写出常见的排序算法

8.php如何解决网站大流量与高并发的问题

 问题回答:

1.什么是引用变量?在php当中,用什么符号定义引用变量?

  一. PHP引用变量考察点

    1. PHP的引用变量的概念及定义方式:

    概念:在PHP中,引用意味着用不同的名字访问同一个变量内容;

    定义方式:使用 & 符号;

  二. 延伸:PHP引用变量的原理

    1)赋值:将一个变量的值赋值给另一个变量,其中一个变量的值进行改变,会重新进行拷贝,此时会再开辟一个新的内存空间;

        原理:实例使用了 COW(Copy On Write)机制 : 对 $a 或 $b 其中一个进行改变,内存空间才会发生改变。

  // 1. 定义一个变量
  $a = range(0, 1000); // 在内存中开辟一片空间,存储变量a
  var_dump(memory_get_usage()); //memory_get_usage — 返回分配给 PHP 的内存量

  // 2. 定义变量 b,将 a变量的值赋值给 b
  $b = $a; // 将变量b 指向 变量a开辟的空间中
  var_dump(memory_get_usage());

  // 3. 对 a进行修改(对a进行写操作),此时会再开辟一片内存空间存储a和a和a和b(原来的a和a和a和b被改变)
  $a = range(0, 1000);   var_dump(memory_get_usage());   

    2)引用:两个变量无论何时都共用一个内存空间(对其中一个的值进行更改的时候,不会开辟新的内存空间)

    // 1. 定义一个变量
    $a = range(0, 1000); //定义一个变量a(开辟一个内存空间存储变量a);
    var_dump(memory_get_usage());

    // 2. 此处的&符号是将a变量的值赋值给b
    $b = &$a;
    var_dump(memory_get_usage());//定义变量b,将a的地址给了b,此时b与$a指向同一个内存空间,且永远指向该内存空间(不会再重新拷贝,改掉的只是该内存空间的值);
    
    // 3. 对a进行修改
    $a = range(0, 1000); //对a进行修改(不会再开辟内存空间),此时a和b的值,都是修改后的值;
    var_dump(memory_get_usage()); 

    3)unset 只会取消引用,不会销毁内存空间

  $a = 1; // 开辟一个内存空间存储变量a,并赋值为1
  $b =& $a; // 将$a的引用赋值给$b,此时$a和$b指向同一个内存空间
  unset($b); // 取消的是$a和$b的引用,不会取消内存空间
  echo $a; // 结果还是1

    4) 对象本身就是引用传递,因此,在修改的时候,不会再重新开辟内存空间

  class Animal{
      public $name = 'cat';
  }
  $a = new Animal(); //开辟一个内存空间存储$a
  $a1 = $a;  //将$a和$a1存入同一个内存空间(内存空间会变大)同以上例子:$b = $a;
  $a1->name = 'dog'; // $a,$a1都为dog,指向的是同一个内存空间
  echo $a->name; // dog

    5) xdebug扩展

    说明:php当中php变量都是通过zend引擎处理 zend引擎里面有个zval(变量容器)结构体【 查看zval结构体方法(需要装xdebug扩展):xdebug_debug_zval('查看变量') 】

    打印结构:(refcount=1, is_ref=0)    

    refcount表示现在有一个内存空间,有一个变量在使用这个内存空间。

    is_ref 表示引用变量的个数  

  面试题实例:

  $data = ['a','b','c'];
  foreach($data as $key=>$val){
    $val = &$data[$key];
    var_dump($data); // 结果:a b c        b b c       b c c
  }  
  var_dump($val); //结果: b c c

面试题: PHP中字符串可以使用哪三种定义方式以及各自的区别是什么?               

定义方式: 单引号,双引号,heredoc和newdoc   

单引号区别:

    单引号不能解析变量

      单引号不能解析转义字符,只能解析单引号和反斜线本身

      变量和变量、变量和字符串,字符串和字符串之间可以用 . 链接

双引号区别:

   双引号可以解析变量,变量可以使用特殊字符和{}包含

   双引号可以解析所有转义字符

      也可以使用.来链接

总结区别:单引号效率高

例子:$sql = "select * from user where name = '$name'";

      $sql = 'select * from user where name = \''.$username.'\'';

用于大文本:

Heredoc 类似于双引号  $str = <<<  EoT   xxxxxx  Eot

Newdoc 类似于单引号  $str = <<<  'EoT'   xxxxxx  Eot

数据类型:

  三大数据类型(标量,复合,特殊)

  标量:浮点,整型,字符串,布尔

  复合:数组,对象

  特殊:null,资源(resource)

注意点: 浮点型: 

$a = 0.1;
$b = 0.7;
$c = $a + $b;
if($a + $b == 0.8){
  echo '不等于true'; // 原因是0.1+0.7 运算需要cpu二进制去运算中间会有损耗
}

判断体为false的有:0 , 0.0,' ' ,'0',false,array(),NULL 

数组类型:

  超全局数组:$GLOBALS 、$_GET、$_POST、$_REQUEST、$_SESSION、$_COOKIE、$_SERVER、$FILE、$_ENV

  $_REQUEST 能获取 $_GET $_POST $_COOKIE 版本5.3以上,php.ini中有request_order属性来设置$_REQUEST。查了下php.ini, request_order设置成为了GP(Get and Post) 详细链接:http://www.cnblogs.com/yjf512/archive/2012/10/12/2720967.html

      $_ENV:你可以修改php.ini文件的variables_order值为你想要的顺序,如:"EGPCS"。这时,$_ENV的值就可以取得了phperz.com

    $_SERVER:

  $_SERVER['SERVER_ADDR'] - 服务器端的ip地址
  $_SERVER['SERVER_NAME'] - 服务端名称
  $_SERVER['REQUEST_TIME'] - 请求时间
  $_SERVER['QUERY_STRING'] - 问号后面的一大串有可能为空
  $_SERVER['HTTP_REFERER'] - 上级请求的页面
  $_SERVER['HTTP_USER_AGENT'] - 头信息中的AGENT
  $_SERVER['REMOTE_ADDR'] - 客户端ip地址
  $_SERVER['REQUEST_URI'] - 请求域名后面的如 www.xxx.com/index.php 结果:index.php
  $_SERVER['PATH_INFO'] - 实例: localhost/curl/index.php/user/index?aa=1 标红处

  NULL 三种情况
  直接赋值为null、未定义的变量、unset销毁的变量

  常量:
  定义:const 、define
  const 更快,是语言结构,define是函数
  define 不能用于类常量的定义,const可以
  常量一经定义,不能被修改,不能被删除
  预定义常量:
  __FILE__ 文件路径和文件的名称
  __LINE__ 所在的行号
  __DIR__ 所在的目录
  __FUNCTION__ 所在的函数体,函数体名称
  __CLASS__ 所在类名
  __TRAIT__ 返回当前的trait名称(包括该trait的作用区域或命名空间)
  __METHOD__ 返回当前的方法名(包括类名)
  __NAMESPACE__ 返回当前文件的命名空间的名称。

 

  

猜你喜欢

转载自www.cnblogs.com/xchengwei/p/9044059.html