Laravel の面接で知っておくべき 23 の質問!

藏色散人
リリース: 2021-04-19 09:02:21
転載
3698 人が閲覧しました

次のチュートリアル コラムでは、知っておくべき Laravel の面接の質問 23 個を紹介します。困っている友人のお役に立てれば幸いです。 知っておくべきLaravel面接の質問23件

次の技術面接の前に知っておくべきLaravel面接の質問トップ20を調べてみましょう。 Q1: Laravel とは何ですか?

テーマ:

Laravel

難易度: ⭐
Laravel
は、Taylor Otwell によって作成された無料のオープンソース PHP Web フレームワークです。 Model-View-Controller (MVC) アーキテクチャ パターンに従って Web アプリケーションを開発します。

出典:codingcompiler.com

Q2: 他の Php フレームワークと比較した Laravel の利点は何ですか? テーマ:

Laravel

難易度: ⭐
セットアップとカスタマイズのプロセスは、他のフレームワークと比べて簡単かつ迅速です。
組み込みの認証システム
  • 複数のファイル システムをサポート
  • Laravel Socialite、Laravel Cashier、Laravel elixir、Passport、Laravel Scoutなどのプリインストールされたパッケージ
  • PHP アクティブ レコードによって実装された Eloquent ORM (オブジェクト リレーショナル マッピング)
  • #コード フレームワーク、データベース構造を作成し、その移行を構築するための組み込みコマンド ライン ツール「Artisan」
  • #出典:
  • mytectra.com
  • Q3: Laravel での移行の説明

トピック: Laravel

難易度: ⭐⭐

Laravel の移行 データベースのようなバージョン管理により、チームはアプリケーションのデータベース スキーマを簡単に変更して共有できます。移行は、アプリケーションのデータベース スキーマを簡単に構築するために、Laravel のスキーマ ビルダーと組み合わせて使用​​されることがよくあります。
出典:

laravelinterviewquestions.comQ4: ファサード パターンの用途は何ですか?

テーマ: Laravel

難易度: ⭐⭐

Facades アプリケーションのサービス コンテナで利用可能なクラスに ## を提供します #static# ## インターフェース。 Laravel ファサードは、サービスコンテナ内の基本クラスの 静的プロキシ
として機能し、従来の静的メソッドよりも高いテスト容易性と柔軟性を維持しながら、簡潔で表現力豊かな構文の利点を提供します。

すべての Laravel ファサードは、Illuminate\Support\Facades 名前空間で定義されます。 View:

use Illuminate\Support\Facades\Cache;

Route::get('/cache', function () {
    return Cache::get('key');
});
ログイン後にコピー
Source: laravel.com

Q5: サービスコンテナとは何ですか?
トピック:

Laravel

難易度: ⭐⭐

Laravel

サービスコンテナ

は、クラスの依存関係を管理し、依存関係注入ツールを実行するために使用されます。
出典:
laravel.com

Q6: Eloquent モデルとは何ですか? テーマ:

Laravel

難易度: ⭐⭐

Laravel に付属の Eloquent ORM は、データベースを操作するための美しくシンプルな ActiveRecord 実装を提供します。各データベース テーブルには、テーブルと対話するために使用される対応する

Model

があります。モデルを使用すると、テーブル内のデータをクエリし、テーブルに新しいレコードを挿入できます。
出典:
laravel.com

Q7: Laravel イベントとは何ですか? トピック:

Laravel

難易度: ⭐⭐

Laravel イベントは、イベントのサブスクライブとリスニングを可能にするシンプルな

Observer Pattern

実装を提供します。応用。イベントとは、プログラムが検出して処理する出来事または物事です。
Laravel でのイベントの例をいくつか示します:
新規ユーザー登録

新しいコメントを投稿

ユーザーのログイン/ログアウト

新商品を追加しました。
  • 出典:
  • mytectra.com
  • Q8: Laravel のクエリ ビルダーについてどのくらい知っていますか?
  • テーマ:
Laravel

難易度: ⭐⭐⭐

Laravel のデータベース クエリ ビルダーは、データベース クエリを作成および実行するための便利でスムーズなインターフェイスを提供します。これを使用すると、アプリケーション内でほとんどのデータベース操作を実行でき、サポートされているすべてのデータベース システムで動作します。

Laravel クエリ ビルダーは、PDO パラメーター バインディングを使用して、SQL インジェクション攻撃からアプリケーションを保護します。バインディングとして渡された文字列をクリアする必要はありません。
クエリ ビルダーのいくつかの機能:
ブロッキング

集計

選択

ネイティブ メソッド
  • Joins
  • Unions
  • Where ステートメント
  • 順序付け、グループ化、制限、オフセット
  • 出典:
  • laravel .com
  • Q9: 移行を生成するにはどうすればよいですか?
  • テーマ:
Laravel

難易度: ⭐⭐⭐

移行

はデータベースのバージョン管理のようなもので、チームが簡単に変更や変更を行うことができます。アプリケーションのデータベース スキーマを共有します。移行は、アプリケーションのデータベース スキーマを簡単に構築するために、Laravel のスキーマ ビルダーと組み合わせて使用​​されることがよくあります。

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

php artisan make:migration create_users_table
ログイン後にコピー

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

来源: laravel.com

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

主题:Laravel
难度:⭐⭐⭐

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

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

// 测试
Cache::shouldReceive('get')
                    ->once()
                    ->with('key')
                    ->andReturn('value');
ログイン後にコピー

来源: laravel.com

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

主题: Laravel
难度: ⭐⭐⭐

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

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

来源: FullStack.Cafe

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();
ログイン後にコピー

有时您可能希望定义一个接受参数的 scope。Dynamic scopes 接受查询参数:

class User extends Model {
    public function scopeOfType($query, $type)
    {
        return $query->whereType($type);
    }
}
ログイン後にコピー

用法:

$users = User::ofType('member')->get();
ログイン後にコピー

来源: laravel.com

Q13:Laravel中的路由命名是什么?

Topic: Laravel
Difficulty: ⭐⭐⭐

路由命名使得在生成重定向或者 URL 的时候更加方便地引用路由。您可以通过将 name 方法加到路由定义上来指定命名路由:

Route::get('user/profile', function () {
    //
})->name('profile');
ログイン後にコピー

您可以为控制器操作指定路由名称:

Route::get('user/profile', 'UserController@showProfile')->name('profile');
ログイン後にコピー

为路由分配名称后,您可以在生成 URL 或重定向时,通过全局路由功能使用路由名称:

// Generating URLs...
$url = route('profile');

// Generating Redirects...
return redirect()->route('profile');
ログイン後にコピー

来源: laravelinterviewquestions.com

Q14:Laravel中的闭包是什么?

主题:Laravel
难度:⭐⭐⭐

闭包是一个匿名函数。闭包通常用作回调方法,并且可以用作函数中的参数

function handle(Closure $closure) {
    $closure('Hello World!');
}

handle(function($value){
    echo $value;
});
ログイン後にコピー

来源: stackoverflow.com

Q15:列出 Laravel 中查询构建器提供的一些聚合方法?

主题: Laravel
难度: ⭐⭐⭐

聚合函数是一种功能,能够将多行的值组合在一起,作为某些条件下的输入,以形成具有更重要含义或度量值(例如集合,包或列表)的单个值。

以下是 Laravel 查询构建器提供的一些聚合方法的列表:

  • count()
$products = DB::table(‘products’)->count();
ログイン後にコピー
  • max()
    $price = DB::table(‘orders’)->max(‘price’);
ログイン後にコピー
  • min()
    $price = DB::table(‘orders’)->min(‘price’);
ログイン後にコピー
  • avg()
    *$price = DB::table(‘orders’)->avg(‘price’);
ログイン後にコピー
  • sum()
    $price = DB::table(‘orders’)->sum(‘price’);
ログイン後にコピー

来源: laravelinterviewquestions.com

Q16:什么是 Laravel 中的反向路由?

主题:Laravel
难度:⭐⭐⭐

在 Laravel 中,反向路由会根据路由声明生成 URL。反向路由使您的应用程序更加灵活。例如,下面的路由声明告诉 Laravel 当请求的 URI 为 “login” 时在 users 控制器中执行 “login” 操作。

http://mysite.com/login

Route::get(‘login’, ‘users@login’);
ログイン後にコピー

使用反向路由,我们可以创建到它的链接并传递我们定义的任何参数。如果未提供可选参数,则会从生成的链接中删除。

{{ HTML::link_to_action('users@login') }}
ログイン後にコピー

它将在视图中创建类似 http://mysite.com/login 的链接。

来源: stackoverflow.com

Q17: :让我们为 PHP 创建枚举,提供一些代码示例。

主题: PHP
难度: ⭐⭐⭐

如果我们的代码需要对枚举常量和值进行更多验证,该怎么办?


根据使用情况,我通常会使用类似以下的简单内容:

abstract class DaysOfWeek
{
    const Sunday = 0;
    const Monday = 1;
    // etc.
}

$today = DaysOfWeek::Sunday;
ログイン後にコピー

这是一个扩展的示例,可以更好地服务于更广泛的案例:

abstract class BasicEnum {
    private static $constCacheArray = NULL;

    private static function getConstants() {
        if (self::$constCacheArray == NULL) {
            self::$constCacheArray = [];
        }
        $calledClass = get_called_class();
        if (!array_key_exists($calledClass, self::$constCacheArray)) {
            $reflect = new ReflectionClass($calledClass);
            self::$constCacheArray[$calledClass] = $reflect - > getConstants();
        }
        return self::$constCacheArray[$calledClass];
    }

    public static function isValidName($name, $strict = false) {
        $constants = self::getConstants();

        if ($strict) {
            return array_key_exists($name, $constants);
        }

        $keys = array_map('strtolower', array_keys($constants));
        return in_array(strtolower($name), $keys);
    }

    public static function isValidValue($value, $strict = true) {
        $values = array_values(self::getConstants());
        return in_array($value, $values, $strict);
    }
}
ログイン後にコピー

我们可以将其用作:

abstract class DaysOfWeek extends BasicEnum {
    const Sunday = 0;
    const Monday = 1;
    const Tuesday = 2;
    const Wednesday = 3;
    const Thursday = 4;
    const Friday = 5;
    const Saturday = 6;
}

DaysOfWeek::isValidName('Humpday');                  // false
DaysOfWeek::isValidName('Monday');                   // true
DaysOfWeek::isValidName('monday');                   // true
DaysOfWeek::isValidName('monday', $strict = true);   // false
DaysOfWeek::isValidName(0);                          // false

DaysOfWeek::isValidValue(0);                         // true
DaysOfWeek::isValidValue(5);                         // true
DaysOfWeek::isValidValue(7);                         // false
DaysOfWeek::isValidValue('Friday');                  // false
ログイン後にコピー

来源: stackoverflow.com

Q18:什么是PHP自动加载类?

主题: PHP
难度: ⭐⭐⭐

使用自动加载器,PHP 允许在由于错误而失败之前最后一次加载类或接口。

PHP中的 spl_autoload_register() 函数可以注册任意数量的自动加载器,即使未定义类和接口也可以自动加载。

spl_autoload_register(function ($classname) {
    include  $classname . '.php';
});
$object  = new Class1();
$object2 = new Class2();
ログイン後にコピー

在上面的示例中,我们不需要包含 Class1.php 和 Class2.php。spl_autoload_register() 函数将自动加载 Class1.php 和 Class2.php。

来源: github.com/Bootsity

Q19:PHP是否支持方法重载?

主题:PHP
难度:⭐⭐⭐

方法重载是使用具有不同签名的相同方法名称的现象。PHP 中函数签名仅基于它们的名称,并且不包含参数列表,因此不能有两个具有相同名称的函数,所以 PHP 不支持方法重载。

但是,您可以声明一个可变函数,它接受可变数量的参数。您可以使用 func_num_args()func_get_arg() 来传递参数并正常使用它们。

function myFunc() {
    for ($i = 0; $i < func_num_args(); $i++) {
        printf("Argument %d: %s\n", $i, func_get_arg($i));
    }
}

/*
Argument 0: a
Argument 1: 2
Argument 2: 3.5
*/
myFunc(&#39;a&#39;, 2, 3.5);
ログイン後にコピー

来源: github.com/Bootsity

Q20:Laravel 中为什么需要 Traits?

主题: Laravel
难度: ⭐⭐⭐⭐

Traits 已被添加到 PHP 中,原因很简单s:PHP 不支持多重继承。简而言之,一个类不能一次性扩展至多个类。当你需要在其他类也使用的两个不同类中声明的功能时,这变得很费力,结果是你必须重复执行代码才能完成工作,而不会纠缠自己。

引入 Traits,它能使我们声明一种包含多个可复用方法的类。更好的是,它们的方法可以直接注入到你使用的任何类中,并且你可以在同一类中使用多个 Trait。让我们看一个简单的 Hello World 示例。

trait SayHello
{
    private function hello()
    {
        return "Hello ";
    }

    private function world()
    {
        return "World";
    }
}

trait Talk
{
    private function speak()
    {
        echo $this->hello() . $this->world();
    }
}

class HelloWorld
{
    use SayHello;
    use Talk;

    public function __construct()
    {
        $this->speak();
    }
}

$message = new HelloWorld(); // returns "Hello World";
ログイン後にコピー

来源: conetix.com.au

Q21:PHP 中的 Autoloader 是什么?

主题: Laravel
难度: ⭐⭐⭐⭐

自动加载器定义了自动在代码中包含 PHP 类的方法,而不必使用诸如 require 和 include 之类的语句。

  • PSR-4 将支持更简单的文件夹结构,但是将使我们仅通过查看完全限定的名称就无法知道类的确切路径。
  • PSR-0 在硬盘驱动器上比较混乱,但是支持恋旧的开发人员(类名下划线用户),并帮助我们通过以下方式辨别类的位置:看它的名字。

来源: sitepoint.com

Q22:在 PHP 中 yield 是什么意思?

主题: PHP
难度: ⭐⭐⭐⭐

解释此代码以及 yield 的作用:

function a($items) {
    foreach ($items as $item) {
        yield $item + 1;
    }
}
ログイン後にコピー

yield 关键字从生成器函数返回数据。生成器函数实际上是编写 Iterator 的更紧凑和有效的方式。它允许您定义一个函数,该函数将在您遍历该函数时计算并返回值。

因此,问题中的函数与以下内容的函数几乎相同:

function b($items) {
    $result = [];
    foreach ($items as $item) {
        $result[] = $item + 1;
    }
    return $result;
}
ログイン後にコピー

只有一个区别,a() 返回一个 generator,而 b() 只是一个简单的 数组。而且两者都可以被迭代。

函数的生成器版本未分配完整的数组,因此对内存的需求较少。生成器可用于解决内存限制。由于生成器仅按需计算其 yielded 值,因此它们用于代替计算成本昂贵或无法一次性计算的序列很有用。

来源: stackoverflow.com

Q23:$$$ 在 PHP 中是什么意思?

主题: PHP
难度: ⭐⭐⭐⭐⭐

类似 $$variable 的语法称为可变变量。

让我们尝试 $$$:

$real_variable = 'test';
$name = 'real_variable'; // variable variable for real variable
$name_of_name = 'name'; // variable variable for variable variable

echo $name_of_name . '<br />';
echo $$name_of_name . '<br />';
echo $$$name_of_name . '<br />';
ログイン後にコピー

这是输出:

name
real_variable
test
ログイン後にコピー

来源: guru99.com

原文链接:https://learnku.com/laravel/t/41264

以上がLaravel の面接で知っておくべき 23 の質問!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート