Entdecken Sie die 20 wichtigsten Laravel-Interviewfragen, die Sie vor Ihrem nächsten technischen Interview kennen sollten.
F1: Was ist Laravel?
Thema: Laravel
Schwierigkeit: ⭐
Laravel ist ein kostenloses und Open-Source-PHP-Webframework, das von Taylor Otwell entwickelt wurde, um Webanwendungen nach dem Model-View-Controller (MVC)-Architekturmuster zu entwickeln.
Quelle: programmingcompiler.com
F2: Was sind die Vorteile von Laravel im Vergleich zu anderen PHP-Frameworks?
Thema: Laravel
Schwierigkeit: ⭐
- Der Einrichtungs- und Anpassungsprozess ist im Vergleich zu anderen Frameworks einfach und schnell.
- Eingebautes Authentifizierungssystem
- Unterstützt mehrere Dateisysteme
- Vorinstallierte Pakete wie Laravel Socialite, Laravel Cashier, Laravel Elixir, Passport, Laravel Scout
- Eloquent ORM (Object Relational Mapping), implementiert durch PHP Active Record
- Integriertes Befehlszeilentool „Artisan“ zum Erstellen von Code-Frameworks, Datenbankstrukturen und zum Erstellen ihrer Migrationen
Quelle: mytectra.com
F3: Erklärung von Migrationen in Laravel
Thema: Laravel
Schwierigkeit: ⭐⭐
Laravel-Migrationen Ähnlich der Datenbankversionskontrolle, sodass Teams das Datenbankschema der Anwendung einfach ändern und freigeben können. Migrationen werden häufig in Verbindung mit dem Schema-Builder von Laravel verwendet, um das Datenbankschema Ihrer Anwendung einfach zu erstellen.
Quelle: laravelinterviewquestions.com
F4: Wozu dient das Fassadenmuster?
Thema: Laravel
Schwierigkeit: ⭐⭐
Fassaden bieten eine statische Schnittstelle für Klassen, die im Servicecontainer einer Anwendung verfügbar sind. Als „statische Proxys“ für Basisklassen in Service-Containern bieten Laravel-Fassaden die Vorteile einer prägnanten und ausdrucksstarken Syntax und bieten gleichzeitig eine höhere Testbarkeit und Flexibilität als herkömmliche statische Methoden. Alle Laravel-Fassaden sind im
-Namespace definiert.Ansicht:IlluminateSupportFacades
use Illuminate\Support\Facades\Cache; Route::get('/cache', function () { return Cache::get('key'); });
Quelle:
laravel.comF5: Was ist ein Servicecontainer?
Thema:
LaravelSchwierigkeit: ⭐⭐Service Container
Laravel
ist ein Tool zum Verwalten von Klassenabhängigkeiten und zur Durchführung der Abhängigkeitsinjektion.
Quelle:laravel.comF6: Was sind eloquente Modelle?
Thema:
LaravelSchwierigkeit: ⭐⭐Modell
Das mit Laravel gelieferte Eloquent ORM bietet eine schöne, einfache ActiveRecord-Implementierung für die Arbeit mit Datenbanken. Jede Datenbanktabelle verfügt über ein entsprechendes
, das für die Interaktion mit dieser Tabelle verwendet wird. Mit Modellen können Sie Daten in einer Tabelle abfragen und neue Datensätze in die Tabelle einfügen.
Quelle:laravel.comF7: Was ist ein Laravel-Event?
Thema:
LaravelSchwierigkeit: ⭐⭐Observer Pattern
Laravel Events bietet eine einfache
Implementierung, die das Abonnieren und Abhören von Ereignissen in Ihrer Anwendung ermöglicht. Ein Ereignis ist ein Ereignis oder eine Sache, die ein Programm erkennt und verarbeitet. Hier sind einige Beispiele für Ereignisse in Laravel:
Neuer Benutzer registriert- Neuer Kommentar gepostet
- Benutzer angemeldet/abgemeldet
- Neues Produkt hinzugefügt.
mytectra.comF8: Wie viel wissen Sie über den Abfrage-Builder in Laravel?
Thema:
LaravelSchwierigkeit: ⭐⭐⭐
Der Datenbankabfrage-Builder von Laravel bietet eine praktische, reibungslose Schnittstelle zum Erstellen und Ausführen von Datenbankabfragen. Es kann zum Ausführen der meisten Datenbankoperationen innerhalb einer Anwendung verwendet werden und funktioniert auf allen unterstützten Datenbanksystemen.
Der Laravel-Abfrage-Builder verwendet die PDO-Parameterbindung, um Anwendungen vor SQL-Injection-Angriffen zu schützen. Es ist nicht erforderlich, die als Bindung übergebene Zeichenfolge zu löschen.
Einige Funktionen des Abfrage-Builders:
Chunking- Aggregation
- Wählt
- Native Methoden
- Joins
- Unions
- Where-Anweisung
- Reihenfolge, Gruppierung, Limit und Offset
laravel .comF9: Wie erstelle ich eine Migration?
Thema:
LaravelSchwierigkeit: ⭐⭐⭐Migration
ist wie eine Versionskontrolle Ihrer Datenbank und ermöglicht Ihrem Team, das Datenbankschema Ihrer Anwendung einfach zu ändern und zu teilen. Migrationen werden häufig in Verbindung mit dem Schema-Builder von Laravel verwendet, um das Datenbankschema Ihrer Anwendung einfach zu erstellen. 要创建迁移,使用 新的迁移将放置在您的 来源: laravel.com Facades 为应用程序的服务容器中可用的类提供“静态”接口。与传统的静态方法调用不同,Facades 是可被 mock 的。我们可以使用 来源: laravel.com 当访问 Eloquent 关系作为属性时,关系数据是 “Lazy Loaded” 的。这意味着直到您首次访问该属性,关系数据才被实际加载。但是,Eloquent 可以在查询父模型时 “Eager Load” 关系。 当我们有嵌套对象时(例如书本->作者),Eager Loading 减轻了 来源: FullStack.Cafe Scopes 允许您轻松地在模型中复用查询逻辑。要定义 scope,只需在模型方法的前面加上 scope: 用法: 有时您可能希望定义一个接受参数的 scope。Dynamic scopes 接受查询参数: 用法: 来源: laravel.com 路由命名使得在生成重定向或者 URL 的时候更加方便地引用路由。您可以通过将 name 方法加到路由定义上来指定命名路由: 您可以为控制器操作指定路由名称: 为路由分配名称后,您可以在生成 URL 或重定向时,通过全局路由功能使用路由名称: 来源: laravelinterviewquestions.com 闭包是一个匿名函数。闭包通常用作回调方法,并且可以用作函数中的参数 来源: stackoverflow.com 聚合函数是一种功能,能够将多行的值组合在一起,作为某些条件下的输入,以形成具有更重要含义或度量值(例如集合,包或列表)的单个值。 以下是 Laravel 查询构建器提供的一些聚合方法的列表: 来源: laravelinterviewquestions.com 在 Laravel 中,反向路由会根据路由声明生成 URL。反向路由使您的应用程序更加灵活。例如,下面的路由声明告诉 Laravel 当请求的 URI 为 “login” 时在 users 控制器中执行 “login” 操作。 http://mysite.com/login 使用反向路由,我们可以创建到它的链接并传递我们定义的任何参数。如果未提供可选参数,则会从生成的链接中删除。 它将在视图中创建类似 http://mysite.com/login 的链接。 来源: stackoverflow.com 如果我们的代码需要对枚举常量和值进行更多验证,该怎么办? 根据使用情况,我通常会使用类似以下的简单内容: 这是一个扩展的示例,可以更好地服务于更广泛的案例: 我们可以将其用作: 来源: stackoverflow.com 使用自动加载器,PHP 允许在由于错误而失败之前最后一次加载类或接口。 PHP中的 在上面的示例中,我们不需要包含 Class1.php 和 Class2.php。 来源: github.com/Bootsity 方法重载是使用具有不同签名的相同方法名称的现象。PHP 中函数签名仅基于它们的名称,并且不包含参数列表,因此不能有两个具有相同名称的函数,所以 PHP 不支持方法重载。 但是,您可以声明一个可变函数,它接受可变数量的参数。您可以使用 来源: github.com/Bootsity Traits 已被添加到 PHP 中,原因很简单s:PHP 不支持多重继承。简而言之,一个类不能一次性扩展至多个类。当你需要在其他类也使用的两个不同类中声明的功能时,这变得很费力,结果是你必须重复执行代码才能完成工作,而不会纠缠自己。 引入 Traits,它能使我们声明一种包含多个可复用方法的类。更好的是,它们的方法可以直接注入到你使用的任何类中,并且你可以在同一类中使用多个 Trait。让我们看一个简单的 Hello World 示例。 来源: conetix.com.au 自动加载器定义了自动在代码中包含 PHP 类的方法,而不必使用诸如 require 和 include 之类的语句。 来源: sitepoint.com 解释此代码以及 因此,问题中的函数与以下内容的函数几乎相同: 只有一个区别, 函数的生成器版本未分配完整的数组,因此对内存的需求较少。生成器可用于解决内存限制。由于生成器仅按需计算其 yielded 值,因此它们用于代替计算成本昂贵或无法一次性计算的序列很有用。 来源: stackoverflow.com 类似 让我们尝试 $$$: 这是输出: 来源: guru99.commake:migration
Artisan 命令:php artisan make:migration create_users_table
database/migrations
目录中。每个迁移文件名都包含一个时间戳,该时间戳使 Laravel 可以确定迁移的顺序。Q10:如何 mock 一个静态 facade 方法?
主题:Laravel
难度:⭐⭐⭐shouldReceive
方法 mock 对静态外观方法的调用,该方法将返回 Mockery
mock 的实例。// 实际代码
$value = Cache::get('key');
// 测试
Cache::shouldReceive('get')
->once()
->with('key')
->andReturn('value');
Q11:Eager Loading 有什么好处,何时使用?
主题: Laravel
难度: ⭐⭐⭐N + 1
查询的问题。我们可以使用 Eager Loading 将此操作减少为仅2个查询。Q12:本地作用域有何用?
主题: Laravel
难度: ⭐⭐⭐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();
class User extends Model {
public function scopeOfType($query, $type)
{
return $query->whereType($type);
}
}
$users = User::ofType('member')->get();
Q13:Laravel中的路由命名是什么?
Topic: Laravel
Difficulty: ⭐⭐⭐Route::get('user/profile', function () {
//
})->name('profile');
Route::get('user/profile', 'UserController@showProfile')->name('profile');
// Generating URLs...
$url = route('profile');
// Generating Redirects...
return redirect()->route('profile');
Q14:Laravel中的闭包是什么?
主题:Laravel
难度:⭐⭐⭐function handle(Closure $closure) {
$closure('Hello World!');
}
handle(function($value){
echo $value;
});
Q15:列出 Laravel 中查询构建器提供的一些聚合方法?
主题: Laravel
难度: ⭐⭐⭐$products = DB::table(‘products’)->count();
$price = DB::table(‘orders’)->max(‘price’);
$price = DB::table(‘orders’)->min(‘price’);
*$price = DB::table(‘orders’)->avg(‘price’);
$price = DB::table(‘orders’)->sum(‘price’);
Q16:什么是 Laravel 中的反向路由?
主题:Laravel
难度:⭐⭐⭐Route::get(‘login’, ‘users@login’);
{{ HTML::link_to_action('users@login') }}
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
Q18:什么是PHP自动加载类?
主题: PHP
难度: ⭐⭐⭐spl_autoload_register()
函数可以注册任意数量的自动加载器,即使未定义类和接口也可以自动加载。spl_autoload_register(function ($classname) {
include $classname . '.php';
});
$object = new Class1();
$object2 = new Class2();
spl_autoload_register()
函数将自动加载 Class1.php 和 Class2.php。Q19: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('a', 2, 3.5);
Q20:Laravel 中为什么需要 Traits?
主题: Laravel
难度: ⭐⭐⭐⭐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";
Q21:PHP 中的 Autoloader 是什么?
主题: Laravel
难度: ⭐⭐⭐⭐
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()
只是一个简单的 数组
。而且两者都可以被迭代。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