php面试题

RESTful 是什么

RESTFUL 是一种网络应用程序的设计风格和开发方式,RESTFIL是基于http的。

主要适用于接口业务开发。

常见 API 的 APP_ID APP_SECRET 主要作用是什么?阐述下流程

app_id, app_key, app_secret:我的身份证,银行卡号,银行卡密码

JSON 和 JSONP 的区别

JSON来传数据,靠JSONP来跨域。

加密 签名 签密 区别

加密是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。

签名(又称公钥数字签名、电子签章

是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。

数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。

签密

在信息安全中,为了能够同时保证信息的机密性、完整性、真实性和不可否认性等安全要素, 传统的方法是对消息“先签名后加密” , 这种方法的计算量和通信成本是加密和签名的代价之和,因此效率低下。

为此,近年来人们开始研究数字签密体制。即在一个逻辑步骤内, 对信息同时进行签名和加密。 其核 心价值在于减少加密与签名的总计算量与通信成本。

RSA

RSA是目前最有影响力的公钥加密算法。。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥

RESTful API版本控制策略

API的版本控制策略通常有3种模式:

第一种:The Knot:无版本,即平台的API永远只有一个版本,所有的用户都必须使用最新的API,任何API的修改都会影响到平台所有的用户。甚至平台的整个生态系统。

第二种:Point-to-Point:点对点,即平台的API版本自带版本号,用户根据自己的需求选择使用对应的API,需要使用新的API特性,用户必须自己升级。

第三种:Compatible Versioning:兼容性版本控制,和The Knot一样,平台只有一个版本,但是最新版本需要兼容以前版本的API行为。

OAuth 2.0 的一个简单解释

OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。

简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。

php单例模式

然而在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了,所以PHP单例模式我觉得只是针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时是非常有意义的。

单例模式的三个要点:

(1). 需要一个保存类的唯一实例的静态成员变量:

private static $_instance; 

(2). 构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义:

private function __construct() 
{ 
    $this->_db = pg_connect('xxxx');
} 
private function __clone()
{
}//覆盖__clone()方法,禁止克隆

(3). 必须提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用

    public static function getInstance()  
    {  
        if(! (self::$_instance instanceof self) ) 
        {  
            self::$_instance = new self();  
        }
        return self::$_instance;  
 
    } 

实现单例模式

class Singleton
{
    //创建静态私有的变量保存该类对象
    static private $instance;

    //防止使用new直接创建对象
    private function __construct(){}

    //防止使用clone克隆对象
    private function __clone(){}

    static public function getInstance()
    {
        //判断$instance是否是Singleton的对象,不是则创建
        if (!self::$instance instanceof self) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function test()
    {
        echo "我是一个单例模式";
    }
}

$sing = Singleton::getInstance();
$sing->test();
$sing2 = new Singleton(); //Fatal error: Uncaught Error: Call to private Singleton::__construct() from invalid context in
$sing3 = clone $sing; //Fatal error: Uncaught Error: Call to private Singleton::__clone() from context

你可能感兴趣的:(php面试)