۶۵ سوال برای مصاحبه کاری لاراول - (23-44)

۶۵ سوال برای مصاحبه کاری لاراول - (23-44)

توی قسمت قبلی ۲۲ تا سوال رو مطرح کردیم و بهشون پاسخ دادیم. همون فرمون رو حفظ می‌کنیم و ۲۲ تا سوال متداول دیگه رو پوشش می‌دیم. برای دسترسی به باقی سوالات هم می‌تونید از لینک‌های زیر استفاده کنید:

خب بریم سراغ سوالات 🤓:

۲۳. Facade ها در کجا تعریف می‌شوند؟

تمام facade های لاراول در Illuminate\Support\Facades تعریف می‌شوند.

۲۴. مزایای facade چیست؟

facade ها مزایای زیادی دارند و باعث می‌شوند ما برای استفاده از قابلیت‌های لاراول از یک سینتکس ساده که به سادگی در خاطر می‌ماند استفاده کنیم و نیازی نباشد نام طولانی کلاس‌هایی که باید به عنوان وابستگی تزریق شوند یا به صورت دستی پیکربندی شوند را حفظ کنیم. علاوه بر این، چون facade ها از متد‌های پویای PHP استفاده می‌کنند، تست‌نویسی برای آن‌ها راحت است.

۲۵. تفاوت بین facade ها و تزریق وابستگی (dependency injection) چیست؟

یکی از مزایای اصلی استفاده از تزریق وابستگی‌ها، سادگی تغییر پیاده‌سازی کلاس تزریق شده است. این قابلیت در تست‌نویسی مفید است، زیرا می‌توانیم وابستگی را mock کنیم و اینکه یک متد خاص از این کلاس صدا زده شده است یا خیر را صحت‌سنجی کنیم.

به طور معمول امکان mock کردن یک متد استاتیک کلاس وجود ندارد. اما به لطف اینکه facade ها از متد‌های داینامیک برای صدازدن متد اصلی استفاده می‌کنند، تست کردن facade ها به راحتی تست کردن یک وابستگی تزریق شده است.

۲۶. تفاوت بین facade ها و توابع کمکی (helper functions) چیست؟

لاراول علاوه بر facade ها یکسری توابع کمکی هم ارائه می‌دهد که وظایف رایجی مثل ساختن view ها، fire کردن ایونت‌ها، dispatch کردن جاب‌ها یا ارسال پاسخ‌های HTTP را انجام می‌دهند. بسیاری از این توابع کمکی عملکردی مشابه با facade متناظر خود را دارند.

۲۷. Contract ها در لاراول چیستند؟

قرارداد‌ها (Contracts) در لاراول یکسری اینترفیس هستند که سرویس‌های هسته‌ای لاراول را تعریف می‌کنند. برای مثال قرارداد Illuminate\Contracts\Queue\Queue متد‌هایی که برای در صف قرار دادن جاب‌ها نیاز است را تعریف می‌کند در صورتی که قرارداد Illuminate\Contracts\Mail\Mailer متد‌های مورد نیاز برای ارسال یک ایمیل را تعریف می‌کند.

۲۸. تفاوت بین Contract ها و facade ها چیست؟

Facade ها و توابع کمکی در لاراول یک راه ساده برای استفاده از سرویس‌های لاراول را در اختیار ما قرار می‌دهند. در اکثر موارد هر facade، یک قرارداد (contract) متناظر با خود دارد.

بر خلاف facade ها که نیازی نیست آن‌ها را در constructor کلاس خود به عنوان ورودی بگیرید، قرارداد‌ها این امکان را به شما می‌دهند که وابستگی‌های کلاس‌هایتان را به صورت صریح مشخص کنید. برخی از توسعه‌دهندگان تعریف صریح وابستگی‌ها را بیشتر می‌پسندند، درحالی‌که برخی دیگر راحتی استفاده از facade ها را ترجیح می‌دهند.

۲۹. Routing در لاراول چیست؟

Route (مسیر) ها در لاراول یک URI و یک Callable قبول می‌کنند که یک شیوه‌ی شیوا و ساده برای تعریف route های پروژه‌تان را در اختیارتان قرار می‌دهد. تکه کد زیر ساده‌ترین حالت تعریف یک route در پروژه لاراولی را نشان می‌دهد:

Route::get('foo', function () {
  return 'Hello World';
});

۳۰. فایل‌های route را در کجا قرار می‌دهید؟

در لاراول تمام route ها در فایل‌هایی درون پوشه‌ی routes تعریف می‌شوند.

۳۱. چه متد‌هایی برای تعریف یک route در دسترس است؟

تمام متد‌های درخواست HTTP را می‌توان برای تعریف route استفاده کرد.

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

۳۲. مقابله با CSRF در لاراول چگونه است؟

لاراول مقابله با حمله‌های CSRF (جعل درخواست میان‌وب‌گاهی) را بسیار راحت کرده است و این کار را برای ما انجام می‌دهد. CSRF به صورت خلاصه، یک رفتار مخرب است که دستوراتی را به نیابت از یک کاربر احراز هویت شده اجرا می‌کند.

۳۳. توکن مقابله با CSRF چیست؟

هرگونه فورمی (form) که به یک مسیر با متد POST، PUT یا DELETE اشاره می‌کند، باید شامل یک پارامتر توکن CSRF باشد. در غیر این صورت درخواست مردود می‌شود.

<form method="POST" action="/profile">
@csrf
…
</form>

۳۴. مسیر‌های redirect چه کار می‌کنند؟

اگر شما یک مسیر دارید که باید کاربر را به یک URI دیگر هدایت کند، در لاراول به راحتی می‌توانید از متد redirect استفاده کنید:

Route::redirect('/here', '/there', 301);

۳۵. مسیر‌های view چه کار می‌کنند؟

اگر تمام آنچه مسیر شما نیاز دارد این است که یک view برگرداند، شما می‌توانید از متد view استفاده کنید. این متد یک URI به عنوان پارامتر اول و نام یک view را به عنوان پارامتر دوم دریافت می‌کند. همچنین شما می‌توانید به عنوان پارامتر سوم یک آرایه از داده‌های دلخواهتان را به view پاس دهید.

Route::view('/welcome', 'welcome');
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

۳۶. مسیر‌های نامگذاری شده (named routes) چه هستند؟

مسیر‌های نامگذاری شده به شما این امکان را می‌دهد که به سادگی URI مسیر‌های پروژه‌تان را بسازید و از آن استفاده کنید. برای نامگذاری یک مسیر کافیست از متد name در هنگام تعریف کردن مسیرتان استفاده کنید:

Route::get('user/profile', function () {
  //
})->name('profile');

۳۷. دسته مسیر‌ها (route groups) چه هستند؟

قابلیت گروه کردن مسیر‌ها این امکان را می‌دهد که ویژگی‌های مشترک بین مسیر‌ها را به جای اینکه روی هر مسیر تعریف کنیم، یکبار بنویسیم. مواردی مثل namespace و middleware مثال‌هایی از این دست هستند.

۳۸. Route Model Binding چیست؟

به طور معمول وقتی شما id یک model را به کنترلر خود پاس می‌دهید، می‌خواهید تا آن model را از دیتابیس بگیرید. Route model binding در لاراول این کار را برای ما انجام می‌دهد و به صورت خودکار می‌تواند model مطلوب ما را به کنترلر ما تزریق کند.

۳۹. Rate Limiting چیست؟

لاراول یک میدلویر (middleware) برای محدود کردن نرخ دسترسی به یک مسیر از اپلیکیشن را برای ما فراهم کرده است. با استفاده از این میدلویر می‌توانید مشخص کنید که هر سیستم (بخوانید هر ip مشخص) در یک بازه زمانی مشخص چه تعداد درخواست می تواند به اپلیکیشن ما ارسال کند.

برای مثال ما در کد زیر یک دسته مسیر را مشخص می‌کنیم و می‌گوییم کاربر برای دسترسی به این مسیر‌ها باید login کرده باشد و می‌تواند در هر یک دقیقه شصت درخواست ارسال کند. همینطور که می‌بینید میدلویر throttle دو پارامتر دریافت می‌کند. اولی تعداد درخواست مجاز و دومی بازه‌ی زمانی مدنظر بر حسب دقیقه است:

Route::middleware('auth:api', 'throttle:60,1')->group(function () {
  Route::get('/user', function () {
    //
  });
});

۴۰. میدلیور (middleware) چیست؟

میدلویر یک شیوه‌ی راحت برای فیلتر کردن درخواست‌های ورودی به اپلیکیشنمان را فراهم می‌کند.

۴۱. چگونه یک میدلویر را تعریف می‌کنید؟

برای ساخت یک میدلویر می‌توانیم از دستور آرتیسان make:middleware استفاده کنیم. مثلا برای ساخت یک میدلویر با نام CheckAge دستور زیر را اجرا می‌کنیم:

php artisan make:middleware CheckAge

این دستور کلاس CheckAge را در پوشه‌ی app/Http/Middleware می‌سازد.

۴۲. دسته میدلویر‌ها (Middleware Groups) چیستند؟

بعضی اوقات شما می‌خواهید بتوانید چند میدلویر را به صورت یکجا به مسیر‌های خود نسبت دهید. برای این کار می‌توانید از فیلد middlewareGroups$ در HTTP kernel استفاده کنید.

۴۳. X-CSRF-TOKEN چیست؟

میدلویر VerifyCsrfToken علاوه‌بر چک کردن توکن CSRF در یک درخواست POST، مقدار X-CSRF-TOKEN را در header درخواست بررسی می‌کند. برای مثال شما می‌توانید این توکن را در یک متا‌تگ HTML ذخیره کنید:

<meta name="csrf-token" content="{{csrf_token()}}">

۴۴. X-XSRF-TOKEN چیست؟

لاراول مقدار توکن CSRF فعلی را در کوکی XSRF-TOKEN ذخیره می‌کند که در هر پاسخ از سمت فریمورک وجود دارد. شما می‌توانید از مقدار این کوکی برای مقدار‌دهی به پارامتر X-XSRF-TOKEN در header درخواست استفاده کنید.


امیدوارم تا اینجای کار از این مقاله‌ها استفاده برده باشین. توی مقاله‌ی بعدی لیست سوالات رو کامل می‌کنیم و شما می‌تونید برای مرور اطلاعاتتون قبل از مصاحبه یا حتی به صورت دوره‌ای برای یادآوری از این سری مقاله استفاده کنید. خوشحال می‌شم نظراتتون رو با من به اشتراک بذارید. 🤓

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس