金三银四,金九银十,2020年PHP面试知识点,让涨薪成为现实

  • 获取客服端的IP地址: $_SERVER['REMOTE_ADDR']

  • Header函数跳转页面: Header('location:index.php');

  • 正则表达式去除HTML文本中的JS脚本: preg_replace('/\.+<\/script>/');

  • 将数组中的空值去掉: preg_grep('/\S+/i', $array); 或者 array_filter($array, 回调函数);

  • PHP进行编码转换的函数: iconv('utf-8', 'gb2312', $string);

  • include()和require()的区别:

    * include()是有条件包含函数,而 require()则是无条件包含函数。
    	if(FALSE){
    		include 'file.php'; //file.php不会被引入
    	}
    	if(FALSE){
    		require 'file.php'; //file.php将会被引入
    	}
    * include()在引入不存文件时产生一个警告且脚本还会继续执行,require()则会导致一个致命性错误且脚本停止执行。
    	
    	如果hello.php不存在,echo ‘world’这句是可以继续执行的。
    	
    * 文件引用方式 include()有返回值,而require()没有。
    	$retVal = include(’somefile.php’);
    		if(!empty($retVal)){
    		echo "文件包含成功";
    	}else{
    		echo "文件包含失败";
    	}
    	
    include()执行时需要引用的文件每次都要进行读取和评估,
    require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句)
    
    可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高,
    若每次执行代码时相读取不同的文件或者有通过一组文件叠代的循环,就使用include(),
    
    require通常使用方法,这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
    include通常使用方法,这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化
    
    被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误
    
    
  • 数组的排序函数:

    * sort() 	-	以升序对数组排序
    * rsort() 	-	以降序对数组排序
    * asort() 	-	根据值,以升序对关联数组进行排序 键名不变
    * ksort() 	-	根据键,以升序对关联数组进行排序
    * arsort() -	根据值,以降序对关联数组进行排序 键名不变
    * krsort() -	根据键,以降序对关联数组进行排序
    
  • select count(*)和select count(1)以及select count(column)区别:

    * count(1) 中的 1 并不是表示为第一个 column
    * count(*) 跟 count(1) 的结果一样,包括对NULL的统计
    * count(column) 是不包括对NULL的统计
    * 如果表沒有主键(Primary key), 那么count(1)比count(*)快
    * 如果表没有主键,只建了索引,那么count(*),count(1)是一样的,都是TABLE ACCESS FULL ,而count(索引)则是INDEX FULL SCAN
    * 如果有主键的話,那count(主键)最快,那么count(*),count(1),以及count(主键)是一样的,都是INDEX FULL SCAN 
    * 如果你的表只有一个字段的话那count(*)就是最快的
    
  • Linux操作系统下,Mysql大小写问题:

    * lower_case_table_names的参数详解
    	lower_case_table_names = 0	0:区分大小写 1:不区分大小写
    * Mysql在Linux下数据库名、表名、列名、别名大小写规则
    	* 数据库名和表名是严格区分大小写的
    	* 表的别名是严格区分大小写的
    	* 列名与列的别名在所有情况下均忽略大小写的
    	* 变量名也是严格区分大小写的
    
  • serialize()/unsericlize()函数的作用:

    * serialize -- 产生一个可存储的值的表示,返回值为字符串,此字符串包含了表示value的字节流,不丢失其类型和结构,可以存储于任何地方。
    * unseralize -- 从已存储的表示中创建PHP的值。
    
  • 获取文件的扩展名:

    $arr = pathinfo("文件名")
    substr($arr['basename'], strpos($arr['basename'], '.'));
    
  • MVC是什么: MVC是一种开发模式,主要分为三个部分

    M(model) -- 也就是模式,负责数据的操作。
    V(view) -- 也就是视图层,负责前后端的显示。
    C(control) -- 也就是控制器,负责业务逻辑。
    
    相互之间的关系:客服端请求项目的控制器,如果执行的过程中需要用到数据,控制器就会到模型中获取数据,再将获取到的数据通过视图层显示出来。
    
  • OOP是什么: OOP是面向对象编程,面向对象编程是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或者对象组合而成。

    OOP的三大特性:
    * 封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。于是开发人员只需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就实现了MVC分工合作,也能有效避免程序间的相互依赖,实现代码模块间松耦合。
    * 继承性:就是子类自动继承其父级类中的属性与方法,并可以添加新的属性和方法或者对部分属性和方法重写。继承增加了代码的可重用性。PHP只支持单继承,也就是说一个子类只能有一个父类。
    * 多态性:子类继承了来自父级类中的属性和方法,并对其中·部分方法进行重写。于是多个子类中虽然都就有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这些技术就是多态性。
    	** 多态性增强了软件的灵活性。
    		*** 易维护:采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模式,所以维护起来是非常方便和较低成本的。
    		*** 质量高:在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足需求并具有较高的质量。
    		*** 效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
    		*** 易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更加灵活、更容易扩展,而且成本低。
    
  • HTTP状态码含义: 一二三四五原则:(一:消息系列,二:成功系列, 三:重定向系列,四:请求错误系列,五:服务器端错误系列)

    302:临时转移成功,请求的内容已转移到新的位置
    304/Not Modified: 页面未修改
    401:代表未授权
    403:禁止访问
    500:服务器内部错误
    
  • Memcache和Redis区别:

    * Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过Memcache还可用于缓存其他东西,例如图片、视频等。
    * Redis不仅仅支持简单的K/V类型的数据,同时还提供list、set、hash等数据结构存储。
    * 虚拟内存 -- Redis当物理内存用完时,可以将一些很久没有用到的value交换到磁盘。
    * 过期策略 -- Memcache在set时就指定,例如set key 1008,即永不过期。Redis可以通过例如expire设定,例如expire name 10。
    * 分布式 -- 设定Memcache集群,利用magent做一主多从;Redis可以做一主多从。都可以做一主多从。
    * 存储数据安全 -- Memcache挂掉后,数据没了;Redis可以定期保存到磁盘(持久化)
    * 灾难恢复 -- Memcache挂掉后,数据不可恢复;Redis数据丢失后可以通过aof恢复
    * Redis支持数据备份,即master-slave模式的数据备份
    

你可能感兴趣的:(技术文档)