【PHP】23 个你应该知道的 Laravel 面试问题

探索下一次技术面试之前应该了解的前20个 Laravel 面试问题。

Q1:什么是Laravel?

主题: Laravel
难度: ⭐

Laravel 是一个免费的开放源代码 PHP Web 框架,由 Taylor Otwell 创建,旨在遵循模型-视图-控制器(MVC)架构模式开发 Web 应用程序。

Q2: Laravel 与其他 Php 框架相比有哪些好处?

主题: Laravel
难度: ⭐

  • 与其他框架相比,设置和自定义过程既简单又快速。

  • 内置认证系统

  • 支持多个文件系统

  • 预装软件包,例如 Laravel Socialite,Laravel cashier,Laravel elixir,Passport,Laravel Scout

  • PHP active record 实现的 Eloquent ORM (对象关系映射)

  • 内置命令行工具 “Artisan”,用于创建代码框架,数据库结构并构建其迁移

Q3:解释 Laravel 中的迁移

主题: Laravel
难度: ⭐⭐

Laravel Migrations 类似于数据库的版本控制,使团队可以轻松地修改和共享应用程序的数据库架构。迁移通常与 Laravel 的架构生成器搭配使用,以轻松构建应用程序的数据库架构。

Q4:Facade Pattern 有什么用?

主题: Laravel
难度: ⭐⭐

Facades 为应用程序的服务容器中可用的类提供了一个 静态 接口。Laravel facades 作为服务容器中基础类的静态代理,提供了简洁、表达性强的语法的优势,同时保持了比传统静态方法更高的可测试性和灵活性。

所有的 Laravel facades 都是在 Illuminate\Support\Facades 命名空间中定义。

查看:

use Illuminate\Support\Facades\Cache;

Route::get('/cache', function () {
   
    return Cache::get('key');
});

Q5:什么是服务容器?

主题: Laravel
难度: ⭐⭐

Laravel 服务容器 是用于管理类依赖性和执行依赖性注入的工具。

Q6:什么是 Eloquent Models?

主题: Laravel
难度: ⭐⭐

Laravel 附带的 Eloquent ORM 提供了一个漂亮、简单的 ActiveRecord 实现,用于处理数据库。每个数据库表都有一个对应的模型,用于与该表进行交互。通过模型,您可以查询表中的数据,以及将新记录插入表中。

Q7:什么是Laravel事件?

主题: Laravel
难度: ⭐⭐

Laravel 事件提供了一个简单的观察者模式实现,允许订阅和监听应用程序中的事件。事件是程序检测并处理的事故或事情。

以下是 Laravel 中的一些事件示例:

  • 新用户注册

  • 发布新评论

  • 用户登录/注销

  • 添加了新产品。

Q8:你对 Laravel 中的查询生成器了解多少?

主题: Laravel
难度: ⭐⭐⭐

Laravel 的数据库查询构建器为创建和运行数据库查询提供了方便,流畅的接口。它可以用于在应用程序中执行大多数数据库操作,并且可以在所有支持的数据库系统上工作。

Laravel 查询构建器使用 PDO 参数绑定来保护应用程序免受 SQL 注入攻击。无需清除作为绑定传递的字符串。

查询生成器的一些功能:

  • 分块

  • 聚合

  • Selects

  • 原生方法

  • Joins

  • Unions

  • Where 语句

  • Ordering,Grouping,Limit,& Offset

Q9:如何生成迁移?

主题: Laravel
难度: ⭐⭐⭐

迁移就像您数据库的版本控制一样,使您的团队可以轻松地修改和共享应用程序的数据库架构。迁移通常与 Laravel 的架构构建器搭配使用,以轻松构建应用程序的数据库架构。

要创建迁移,使用 make:migration Artisan 命令:

php artisan make:migration create_users_table

新的迁移将放置在您的 database/migrations 目录中。每个迁移文件名都包含一个时间戳,该时间戳使 Laravel 可以确定迁移的顺序。

Q10:如何 mock 一个静态 facade 方法?

主题:Laravel
难度:⭐⭐⭐

Facades 为应用程序的服务容器中可用的类提供“静态”接口。与传统的静态方法调用不同,Facades 是可被 mock 的。我们可以使用 shouldReceive 方法 mock 对静态外观方法的调用,该方法将返回 Mockery mock 的实例。

// 实际代码
$value = Cache::get('key');

// 测试
Cache::shouldReceive('get')
                    ->once()
                    ->with('key')
                    ->andReturn('value');

Q11:Eager Loading 有什么好处,何时使用?

主题: Laravel
难度: ⭐⭐⭐

当访问 Eloquent 关系作为属性时,关系数据是 “Lazy Loaded” 的。这意味着直到您首次访问该属性,关系数据才被实际加载。但是,Eloquent 可以在查询父模型时 “Eager Load” 关系。

当我们有嵌套对象时(例如书本->作者),Eager Loading 减轻了 N + 1 查询的问题。我们可以使用 Eager Loading 将此操作减少为仅2个查询。

Q12:本地作用域有何用?

主题: Laravel
难度: ⭐⭐⭐

Scopes 允许您轻松地在模型中复用查询逻辑。要定义 scope,只需在模型方法的前面加上 scope:

class User extends Model {
   
    public function scopePopular($query)
    {
   
        return $query->where('votes', '>', 100);
    }

    public function scopeWomen($query)
    {
   
        return $query->whereGender('W');
    }
}

用法:

$users = User::popular()->women()->orderBy('created_at')->get

你可能感兴趣的:(进阶PHP月薪30k,php,laravel,面试)