标签搜索

PHP常见面试题01

幻鹤
2023-12-01 / 0 评论 / 1,321 阅读 / 正在检测是否收录...

Composer功能与原理:

Composer是PHP的一个依赖管理工具,用于管理项目的库依赖关系。它通过一个composer.json文件来定义项目的依赖关系和其它配置信息,并通过运行composer install命令来安装这些依赖。

原理:

  1. composer.json文件: 项目根目录下的composer.json文件包含了项目的依赖关系、脚本、自动加载规则等信息。
  2. Packagist: Composer默认使用Packagist作为主要的包存储库,它包含了大量的PHP库。
  3. Autoloader: Composer生成一个自动加载器,根据composer.json中的配置,将类映射到文件路径,使得类在使用时能够被自动加载。

PHP如何实现静态化:

静态化是将动态生成的内容转化为静态HTML文件,以提高性能和减轻服务器负担。实现方式包括:

  1. 静态HTML文件生成: 使用PHP将动态内容生成HTML文件,保存在服务器上,然后直接访问这些静态文件。
  2. 缓存机制: 使用缓存机制,将动态生成的内容存储在缓存中,下一次请求时直接返回缓存的内容,而不重新生成。

最常用的设计模式:

常用设计模式包括:

  1. 单例模式(Singleton)
  2. 工厂模式(Factory)
  3. 观察者模式(Observer)
  4. 适配器模式(Adapter)
  5. 策略模式(Strategy)
  6. 装饰者模式(Decorator)
  7. 代理模式(Proxy)
  8. 命令模式(Command)

观察者、工厂、适配器模式代码:

观察者模式:

class Subject {
    private $observers = [];

    public function addObserver(Observer $observer) {
        $this->observers[] = $observer;
    }

    public function notify() {
        foreach ($this->observers as $observer) {
            $observer->update();
        }
    }
}

interface Observer {
    public function update();
}

class ConcreteObserver implements Observer {
    public function update() {
        // 实现更新逻辑
    }
}

工厂模式:

interface Product {
    public function getName();
}

class ConcreteProduct implements Product {
    public function getName() {
        return 'ConcreteProduct';
    }
}

class ProductFactory {
    public function createProduct() {
        return new ConcreteProduct();
    }
}

适配器模式:

interface Target {
    public function request();
}

class Adaptee {
    public function specificRequest() {
        // 具体请求逻辑
    }
}

class Adapter implements Target {
    private $adaptee;

    public function __construct(Adaptee $adaptee) {
        $this->adaptee = $adaptee;
    }

    public function request() {
        $this->adaptee->specificRequest();
    }
}

实现PHP的优化方案:

优化方案包括:

  1. 代码优化: 优化算法、避免重复计算、减少函数调用等。
  2. 数据库优化: 使用索引、合理设计数据库结构、避免全表查询等。
  3. 缓存: 使用缓存机制,如Memcached、Redis,减少数据库查询次数。
  4. CDN加速: 使用CDN服务,加速静态资源加载。
  5. 异步处理: 使用消息队列、异步任务等方式提高系统响应速度。
  6. 并发控制: 使用连接池、调整服务器配置,提高并发处理能力。

会话控制:Session和Cookie

  • Session: 在服务器端保存用户状态的机制,通过在服务器上存储一个会话文件或使用数据库等方式来保存用户数据。PHP使用$_SESSION超全局变量来访问会话数据。
  • Cookie: 在客户端保存用户状态的机制,将数据存储在用户的浏览器中。PHP使用setcookie()函数来设置Cookie,通过$_COOKIE超全局变量来访问Cookie数据。

不基于Session和Cookie的用户认证:

可以使用Token认证,通过在请求头中发送包含用户信息的Token来进行身份验证。这可以是JWT(JSON Web Token)等形式的Token,服务器验证Token的有效性,并从中获取用户信息。

主流MVC框架的核心概念:

主流MVC框架(如Laravel、Symfony、Yii等)的核心概念包括:

  1. 模型(Model): 数据层,负责处理数据的存储和检索。
  2. 视图(View): 用户界面层,负责显示数据和与用户交互。
  3. 控制器(Controller): 业务逻辑层,处理用户请求,调用模型和视图来完成具体的业务逻辑。

CSRF攻击、XSS攻击及防范:

  • CSRF攻击(Cross-Site Request Forgery): 攻击者通过伪装成受信任用户的请求来执行非法操作。防范措施包括使用CSRF令牌、验证Referer等方式。
  • XSS攻击(Cross-Site Scripting): 攻击者注入恶意脚本到用户浏览器,使其在用户端执行。防范措施包括输入验证、输出转义、使用HTTPOnly标志等。

RESTful API功能与实现:

RESTful API是一种设计风格,通过HTTP协议进行资源的增删改查。常用的HTTP方法包括GET、POST、PUT、DELETE。API的路径应该表达资源的层级结构,返回结果通常是JSON格式。实现可以使用框架如Laravel、Express等,

通过路由、控制器来处理API请求。

类的自动加载如何实现:

PHP类的自动加载可以通过注册自定义的自动加载函数来实现,使用spl_autoload_register函数。自动加载函数接收类名作为参数,根据类名找到对应的文件并包含进来。

function my_autoloader($class) {
    include 'classes/' . $class . '.class.php';
}

spl_autoload_register('my_autoloader');

PSR-4是什么:

PSR-4(PHP-FIG标准规范之一)定义了PHP类自动加载器的规范。它规定了命名空间和类名到文件路径的映射关系,使得符合规范的项目可以使用统一的自动加载方式。 PSR-4的实现使用了namespaceuse关键字和文件路径的映射规则,例如Vendor\Package\Class对应vendor/package/src/Class.php

1

评论 (0)

取消