عادةً ما تقدم المقالات من هذا النوع إجابات كاملة على الأسئلة ، ولكن إذا كنت تجري مقابلة لوظيفة جادة إلى حد ما ، فمن الواضح أن الملخص الموجز لن يكون كافيًا وتحتاج إلى فهم السؤال نفسه بعمق إلى حد ما ، لذلك قمت بشكل أساسي بإدراج روابط إلى الوثائق أو المقالات حول القضايا الموضحة.
بي أتش بي
- ما الجديد في PHP 7. *
- أنواع البيانات
- اكتب تلميحًا + وضع صارم
- مقارنة قوية مقابل فضفاضة
- العمل مع الروابط
- نسخ عند الكتابة
- تشغيل معالجة خطأ وقت
- عمليات الإغلاق
- وظائف المصفوفة
- وظيفة List ()
- نطاق متغير
- نطاق خاصية / طريقة / فئة ثابت
- الفصول والأساليب النهائية
- الربط الثابت المتأخر
- طرق السحر
- المتغيرات الديناميكية
- مولدات كهرباء
- انعكاس API
- اللودر التلقائي
- SPL
- APC / APCu
- OPcache
- معايير PSR
- ملحن
- XDebug
- بقية API
- الاختبارات
عفوا
- التغليف / الوراثة / تعدد الأشكال
- فئات / طرق مجردة
- واجهات
- سمات
- قوالب GRASP
- عصابة من أربعة أنماط
- صلب
- قبلة
- جاف
قواعد البيانات
Docker
HTTP والبروتوكولات الأخرى JS
التفويض والمصادقة
بي أتش بي
ما الجديد في PHP 7. *
إيه ، أتذكر الأوقات التي كنت أقول فيها الفرق بين الإصدارين 4 و 5 ، ولا أرى مطلقًا الرابع في عيني ، يجب مراعاة التقاليد القديمة ، ويحدث السؤال في جميع المقابلات تقريبًا ، وعلى الرغم من أن لا أحد يتوقع منك أن تتذكر حرفيًا الإصدار الذي حدثت تغييرات ، بشكل عام ، هذه المعلومات جديرة بالمعرفة:
- الجديد في PHP 7.0 ( habr / التوثيق )
- الجديد في php 7.1 ( habr / documents )
- الجديد في php 7.2 ( habr / documents )
- الجديد في php 7.3 ( habr / documents )
- الجديد في php 7.4 ( habr / documents )
- ومنذ أن بدأنا ، الجديد في php 8.0 habr
أنواع البيانات
بالرغم من أن PHP هي لغة ديناميكية ، إلا أن جميع البيانات الموجودة فيها من أنواع متميزة:
الأنواع العددية:
- منطقي
- int
- تعويم (أحيانًا يتم استخدام الاسم double والذي لا يحدث فرقًا مع php)
- خيط
أنواع مختلطة:
- مجموعة مصفوفة
- موضوع
- قابل للاستدعاء
- متوقعة
أنواع خاصة:
- الموارد
- لا شيء
اقرأ المزيد عن الأنواع والأنواع الزائفة في الوثائق .
اكتب تلميحًا + وضع صارم
كاستمرار منطقي لموضوع الأنواع والكتابة القوية ، والتي تأتي مع php 7. * ، تحتاج إلى معرفة الفرق بين الكتابة القوية والضعيفة ، راجع الوثائق للحصول على التفاصيل .
مقارنة قوية مقابل فضفاضة
أنت بحاجة إلى فهم الفرق بين المقارنة غير المكتملة (مقارنة القيم دون مراعاة نوع البيانات) والمقارنة الصارمة (مع مراعاة نوع البيانات) ، والتي يعكسها هذا الجدول جيدًا . يجب أن نسلط الضوء أيضًا على المقارنة الصارمة والسائبة للأشياء .
العمل مع الروابط
المراجع في PHP هي طريقة للوصول إلى نفس المتغير (منطقة الذاكرة) تحت أسماء مختلفة.
العمليات الرئيسية التي يمكن إجراؤها بواسطة الروابط:
- نقل عن طريق الارتباط
- التنازل عن طريق الإحالة
- العودة عن طريق الارتباط
- الاستخدام الضمني لآلية الارتباط
من المهم أن نفهم تفاصيل الأشياء المارة. ربما قرأت أنه في php يتم تمرير جميع الكائنات من خلال المرجع.
كان هذا صحيحًا قبل php5 ، ولكن الآن يتم تمرير معرف الكائن فقط ( التوثيق ).
باختصار ، إذا قمت بإنشاء كائن ، وقمت بتمريره إلى وظيفة ، قمت بداخلها
$object = null;هذا لا يعني أنه سيتم أيضًا إعادة تعيين الكائن الأصلي إلى الصفر ، فلا يزال بإمكانك العمل معه. ولكن إذا قمت بتمرير كائن بشكل صريح عن طريق المرجع ، فإن هذا الإجراء سوف "يصفر" الكائن الأصلي أيضًا.
نسخ عند الكتابة
في كل مرة يتم فيها تمرير متغير إلى دالة ، يجب نسخ قيمتها (نظريًا). قد لا تكون هذه مشكلة بالنسبة للأعداد الصحيحة أو البيانات العائمة ، لكن تخيل أنك تقوم بتمرير مصفوفة تحتوي على عشرة ملايين قيمة إلى دالة. لتجنب ذلك ، تستخدم PHP نموذج النسخ عند الكتابة. لذلك ، في الواقع ، عندما تمرر مصفوفة ، لا يتم نسخها حتى اللحظة التي تريد فيها تغيير شيء ما في هذه المصفوفة. مقال مع شرح أكثر تفصيلا.
تشغيل معالجة خطأ وقت
في الإصدار السابع من php ، كان هناك عدد من التغييرات المتعلقة بالتسلسل الهرمي للخطأ (مزيد من المعلومات حول التسلسل الهرمي ) ، وإلا فمن المتوقع أن يعرف مقدم الطلب كيفية اكتشاف الاستثناءات ، أو حتى أن يكون قادرًا على كتابة معالج الأخطاء الخاص به .
عمليات الإغلاق
وهي أيضًا وظائف مجهولة المصدر ، وأكثرها فائدة كقيم لمعلمات رد الاتصال والتوثيق . هناك مقال جيد ، وإن كان قديمًا بعض الشيء ، عن التعامل مع عمليات الإغلاق في حبري .
وظائف المصفوفة
كثيرًا ما يُطلب منك تسمية جميع وظائف العمل مع المصفوفات التي تتذكرها من الذاكرة. وعلى الرغم من أن هذا السؤال ، في رأيي ، أكثر قليلاً من كونه لا معنى له ، إلا أنه يمكن تكرار قائمة الوظائف من الوثائق .
وظيفة List ()
بفضل التغييرات في PHP 7.1 ، أصبحت الوظيفة أكثر ملاءمة للاستخدام ، ونتيجة لذلك ، يتم استخدامها في كثير من الأحيان ، ويمكن العثور على جميع المعلومات في الوثائق .
نطاق متغير
في معظم الحالات ، يكون لجميع المتغيرات نطاق واحد فقط ، باستثناء global / superglobals ، والتي ، كما يوحي الاسم ، متوفرة في كل مكان ، بالإضافة إلى ثابتة / ثوابت.
نطاق خاصية / طريقة / فئة ثابت
يتم تعريفها باستخدام الكلمات الرئيسية عام (مرئية للجميع) ، محمية (متاحة فقط للفئة الحالية أو سلالاتها) أو خاصة (متاحة فقط للفئة الحالية) ، ويمكن استخدامها لكل من الخصائص / الطرق ، ومنذ PHP 7.1 لثوابت الفئة. اقرأ المزيد في الوثائق .
الفصول والأساليب النهائية
من خلال وضع الكلمة الأساسية النهائية أمام إعلانات طريقة الفئة ، يمكنك منع تجاوزها في الفئات الفرعية ، وإذا تم إعلان الفئة نفسها نهائية ، فلا يمكن توريثها. تم تصميم هذه الفئات والطرق لحماية التعليمات البرمجية الحساسة من التغييرات ، ويصبح من السهل الحفاظ على الكود نفسه.
اقرأ المزيد في الوثائق .
الربط الثابت المتأخر
يتم التعبير عنها بالفرق بين استدعاء self :: و static ::. يعني "الربط المتأخر" أن static :: سيتم تقييمه في وقت التشغيل ويمكن إعادة تعريفه في الفئات المشتقة. اقرأ المزيد في الوثائق .
طرق السحر
في PHP ، لا يوجد مكان خالٍ تمامًا من السحر ، لذلك لدينا طرق تتيح لنا تنفيذ وظائف إضافية لكائن ، أو تجاوز السلوك القياسي لكائن (على سبيل المثال ، __serialize () / __ unserialize ()) ، أو سلوك كائن في مواقف غير نمطية (__toString ()) و الآخرين.
التوثيق ، ومقال جيد ، وإن كان قديمًا بعض الشيء عن habr .
المتغيرات الديناميكية
يمكنك تمرير اسم متغير إلى آخر ثم استخدام هذا المتغير "ديناميكيًا".
يجب استخدامها بحذر شديد ، لأنها يمكن أن تعقد بشكل كبير قراءة الكود وصيانته (غالبًا ما يكون من المستحيل فهم ما هو موجود في متغير دون تشغيل الكود) ، ولكن يمكن أن تكون مفيدة جدًا في التجريدات. اقرأ المزيد في الوثائق .
مولدات كهرباء
تُنشئ المولدات (الكلمات الرئيسية المنتجة ) مكررات بسيطة لحفظ الذاكرة في المواقف التي تحتاج فيها إلى التكرار على كمية كبيرة من البيانات. قد يكون من الصعب بعض الشيء فهمها قبل كتابة المولد الخاص بك.
الوصف موجود في الوثائق ، وهناك وصف قديم نوعًا ما (ومع ذلك ، لم يتغير تركيب المولدات منذ تلك اللحظة) ومقال جيد عن حبري .
انعكاس API
باختصار ، إنها القدرة على النظر داخل الكود الخاص بك (أو رمز شخص آخر) ، ومعرفة المتغيرات ، والطرق ، والثوابت الموجودة في الفصل ، وجعلها عامة إذا رغبت في ذلك. يتم استخدام هذه القدرة بشكل نشط بواسطة أطر العمل (على سبيل المثال ، في سيمفونية للإنشاء التلقائي لحقن التبعية) والمكتبات. وصف في التوثيق وبالطبع مقال عن حبري .
اللودر التلقائي
عادة ، نادرًا ما يكون من الضروري في المشاريع تنفيذ التحميل التلقائي للفئات بنفسك ، ولكن بالنسبة للشركات التي تكتب جميع الحلول بمفردها (على سبيل المثال ، الشركات الكبيرة التي لا ترغب في العمل بمصادر مفتوحة) ، أو بعض المشاريع الخاصة ، فهذا مناسب. قد يكون من المفيد أيضًا فهم كيفية عملها.
- github.com/codedokode/pasta/blob/master/php/autoload.md
- www.php.net/manual/ru/function.spl-autoload-register.php
- www.php.net/manual/ru/language.oop5.autoload.php
SPL
أو Standart PHP Library - مجموعة من الفئات (هياكل البيانات ، التكرارات ، الاستثناءات ، فئات معالجة الملفات) ، واجهات ووظائف لحل المشكلات القياسية. وكقاعدة عامة ، فإن معرفة المكتبة عن ظهر قلب ليس مطلوبًا ، ولكن فهم ما تتكون منه يستحق على الأقل التطور الشخصي. مزيد من التفاصيل في الوثائق - www.php.net/manual/ru/book.spl.php
APC / APCu
ذاكرة التخزين المؤقت البديلة PHP (APC) أو ذاكرة التخزين المؤقت البديلة بدون كود التشغيل (APCu) هي ذاكرة تخزين مؤقت مجانية مفتوحة المصدر مصممة للتخزين المؤقت وتحسين كود PHP الوسيط. يتم استخدامه بشكل أساسي للحفاظ على الحسابات بين الطلبات. توثيق:
OPcache
يحسن أداء PHP من خلال تخزين كود نص برمجي مترجم في الذاكرة المشتركة ، وبالتالي يلغي الحاجة إلى PHP لتحميل وتحليل النصوص عند كل طلب. وثائق رسمية ، بالإضافة إلى مقال جيد جدًا حول كيفية عمل كل شيء على حبري .
معايير PSR
توصيات معايير PHP - معايير الترميز ، وكذلك واجهات المهام الشائعة. تُستخدم هذه المعايير في جميع الأطر (المعروفة لي) ، وتسهل التفاعلات بين المكتبات المختلفة. توثيق رسمي بالإضافة إلى مقال جيد عن حبري .
ملحن
مدير التبعية ، بالإضافة إلى أداة تنفذ التحميل التلقائي لرمز المكتبة والتطبيق نفسه. يمكن أن تساعد في تحسين وتسريع تطبيق الإنتاج الخاص بك .
XDebug
يستخدم معظم المطورين هذا الامتداد لتسهيل العمل مع الكود أو لتحسينه ، والمعرفة الأساسية هنا هي كيفية تكوينه وتشغيله ، وستساعد المقالة التالية blog.denisbondar.com/post/phpstorm_docker_xdebug في ذلك .
بقية API
REpresentational State Transfer هو أسلوب معماري يسمح لك بتنظيم التفاعل بين التطبيقات باستخدام جميع إمكانيات HTTP. مقالة جيدة حول هذا الموضوع وكذلك الاختلافات بين REST و SOAP .
في سياق واجهة برمجة التطبيقات ، تحتاج إلى فهم تنسيقات تبادل البيانات الأساسية ، غالبًا XML و JSON .
الاختبارات
تعتمد جميع اختبارات الوحدة على PHPUnit (على حد علمي) ، واليوم ، تعد القدرة ومعرفة كيفية كتابة الاختبارات جزءًا إلزاميًا من التطوير. تقدم العديد من الأطر (مثل Symfony) أغلفة خاصة بها وحلول اختبار. هذه مقالة جيدة عن أفضل أدوات الاختبار .
عفوا
التغليف / الوراثة / تعدد الأشكال
- . , , , . , . .. . ( ) . , , .
- . , , , .
- تعدد الأشكال . هذه خاصية تسمح باستخدام نفس الاسم لحل العديد من المشكلات المختلفة تقنيًا. بعبارات بسيطة ، فإن مفهوم تعدد الأشكال هو فكرة "واجهة واحدة ، العديد من التطبيقات". هذا يعني أنه يمكنك إنشاء واجهة مشتركة لمجموعة من الإجراءات ذات الصلة.
فئات / طرق مجردة
- لا يتضمن إنشاء مثيل.
- ينفذون في الممارسة العملية أحد مبادئ OOP - تعدد الأشكال.
- قد تحتوي على طرق وخصائص مجردة. لا يتم تطبيق طريقة مجردة للفصل الذي يتم وصفه فيه ، ولكن يجب تطبيقه لأحفاده غير المجردة.
- إنها تمثل التجريدات الأكثر عمومية ، أي التي تحتوي على أكبر حجم وأقل محتوى.
الفروق الدقيقة في التنفيذ في الوثائق .
واجهات
لا يمكن للواجهة ، على عكس فئة مجردة ، أن تحتوي على حقول وطرق لها تنفيذ - فهي تصف فقط تواقيع الطريقة التي يجب أن ينفذها وراثوها. على عكس نفس الفئة المجردة ، يمكن للفصل تنفيذ العديد من الواجهات في وقت واحد. توثيق
رسمي ، ومقال جيد عن حبري .
سمات
تشبه السمة إلى حد كبير فئة ، ولكنها مخصصة لتجميع الوظائف وإعادة استخدامها مرة أخرى في مجموعة من الفئات التي لا يمكن ربطها بفئة مجردة واحدة. يُقال أحيانًا أن السمة هي طريقة لتنفيذ الوراثة المتعددة في PHP.
نظرًا لأن كل فئة يمكنها تنفيذ العديد من السمات ، يمكن أن تنشأ التعارضات عندما يتم تنفيذ نفس الطريقة في سمات مختلفة و / أو في الفصل نفسه. اقرأ المزيد عن السمات في الوثائق .
قوالب GRASP
أنماط برامج تعيين المسؤولية العامة - أنماط تصميم لحل المشكلات الشائعة. على عكس الأنماط من عصابة الأربعة ، فإن أنماط GRAPS ليس لها هيكل واضح ونطاق واضح ومشكلة محددة يجب حلها ، ولكنها تمثل فقط الأساليب / التوصيات / المبادئ المعممة المستخدمة في تصميم النظام.
مقال جيد حول هذا الموضوع - habr.com/ru/post/92570
عصابة من أربعة أنماط
موضوع الأنماط واسع ، وقد تمت كتابة العديد من المقالات عليه بالفعل ، ومن المستحيل ببساطة محاولة وصفه في بضع جمل. أحب هذا المورد - refactoring.guru/ru/design-patterns/catalog ، ولكن يمكنك استخدام هذا الرابط إذا لزم الأمر .
صلب
يسأله الجميع ، لكنهم يسألونه بشكل مختلف.
خيار سيء - يُطلب منك قراءة المبادئ وتعريفاتها من الذاكرة.
جيد - يخبرونك بمبدأ ، ويطلبون منك شرحه ، ووصف أمثلة للاستخدام ، والتوصل إلى موقف حقيقي عندما يساعد هذا المبدأ أو ذاك بطريقة ما. هذا الخيار ، في رأيي ، يجعل فهم مستوى المرشح وفهمه الحقيقي للمبادئ أفضل بكثير.
يمكنك العثور في Habré على عشرات المقالات الجيدة حقًا حول هذه المبادئ ، لذا فأنا أربطها بالمتوسط .
قبلة
اجعل الأمر بسيطًا ، فالغباء هو مبدأ جيد ، والغرض منه موجود بالفعل في العنوان ، يمكنك معرفة المزيد هنا .
جاف
لا تكرر نفسك - مبدأ أنه يجب عليك إعادة استخدام الكود الخاص بك كلما أمكن ذلك. مزيد من التفاصيل هنا .
قواعد بيانات
يمكن العثور على مقالة جيدة عن قواعد بيانات SQL هنا . عادة ما توجد أسئلة حول قواعد بيانات NoSql في حالتي في مثال MongoDB . في حالة ElasticSearch ، عادةً ما يتم استخدام مكتبات مجمّعة ، ويمكن الحصول على معلومات عامة من المقالة على Habré .
في ذاكرة تخزين (تلك التي تخزين القيم في RAM) و أعطها و / أو رديس (في معظم الأحيان)، وكقاعدة عامة، ويتم العمل معهم من خلال المكتبات المجمع، إذا أردت أن تفهم هذه المسألة بمزيد من التفصيل، وبطبيعة الحال هناك مقال عن حبري .
عامل ميناء
أداة مهمة للغاية تم استخدامها في جميع المشاريع تقريبًا (في حالتي). وعلى الرغم من أنه غالبًا ما يتم تكوينه مرة واحدة لكل مشروع ، إلا أنك تحتاج إلى معرفة المفاهيم الأساسية ومبدأ العمل معه. أنا شخصياً أحب هذا المقال لمقابلة عمل .
HTTP والبروتوكولات الأخرى
بالطبع ، يجب أن يعرف أي مطور ويب ويفهم كيفية عمل بروتوكولات نقل البيانات (على الأقل بروتوكولات المستوى الأعلى). الموضوع كبير ويصعب ملاءمته في عدة جمل ، وهناك مقال مستفيض حول هذا الموضوع عن حبري .
التفويض والمصادقة
التفويض هو منح الحقوق لتنفيذ إجراءات معينة ، بالإضافة إلى عملية التحقق من الحقوق عند محاولة تنفيذ هذه الإجراءات.
المصادقة هي إجراء مصادقة ، مثل التحقق من هوية المستخدم من خلال مقارنة كلمة المرور التي أدخلها.
من المهم فهم الفرق بين التفويض والمصادقة ، وكيف يتم تنفيذها باستخدام الجلسة وملفات تعريف الارتباط ، و JSON Web Tokens ( JWT ) ، وما إلى ذلك.
شبيبة
لا أعرف هذه اللغة حقًا ، لذلك لا أتظاهر أبدًا بكوني مناصب تحتاج فيها إلى معرفة أطر عمل js وأن تكون مكدسًا بالكامل ، ربما لهذا السبب في جميع المقابلات كانت هناك معرفة كافية موصوفة في المقالة - habr.com/ru/post/486820