كيف يجب أن يكون مطور الويب الخلفي؟ مطور الواجهة الخلفية - من هو؟ ماذا يفعل مطور الواجهة الخلفية؟

13.06.2021

نقطة بنقطة: ما يحتاج المبتدئ في تطوير الويب إلى معرفته حول الواجهة الخلفية

  1. لا تنسى الحالة السابقة- يتم تنفيذها باستخدام الجلسات. يقوم المستخدم بتسجيل الدخول مرة واحدة، ثم يمكنه التحرك بحرية حول التطبيق والوصول إلى الموارد الآمنة (مثل المعاملات المصرفية أو صور شخصية Snapchat) دون الحاجة إلى إرسال بيانات اعتماد تسجيل الدخول مرة أخرى.
  2. لا يتذكر الحالة السابقة - يتم تنفيذها باستخدام الرموز المميزة. يقوم المستخدمون بنفس الشيء، ولكن كل طلب HTTP يتطلب من المستخدم إرسال بيانات الاعتماد. يتم ذلك عادةً باستخدام REST APIs. المعيار الذهبي الحالي لمصادقة الرمز المميز عديم الجنسية هو JWT.

هناك أيضًا سيناريو أكثر تقدمًا - المصادقة متعددة العوامل. فهو يزيد من أمان التطبيق عن طريق إضافة طبقات إضافية من الحماية لتسجيل الدخول وكلمة المرور. هناك أمثلة جيدة للتنفيذ جوجلوأمازون.

ملحوظة ترجمة ولدينا حول المصادقة الثنائية وبروتوكول FIDO U2F.

لاحظ أنه بالنسبة لمهام CRUD، ستحتاج أيضًا إلى معرفة كيفية التحقق من صحة البيانات الواردة والتحقق من الأذونات قبل القيام بأي شيء بهذه البيانات.

4. الراحة

لإدارة الموارد في تطبيقك (مثل الكتب أو الحسابات)، تحتاج إلى تنفيذ طبقة برمجية تقبل الطلبات وتولد الاستجابات. هنا سوف تتمكن من العمل مع المسارات ووحدات التحكم. إنهم يفرضون القيود التي يفرضها أسلوب الهندسة المعمارية REST برمجةللأنظمة الموزعة.

في تطبيق روبي النموذجي، يبدو المسار كما يلي:

احصل على "/photos/:id"، إلى: "photos#show"

ماذا يحدث في النظام في هذا الوقت:

  1. يصل طلب صورة بهذا المسار ويتم تمريره إلى وحدة التحكم باستخدام التابع show.
  2. تقوم هذه الطريقة، عند الوصول إلى مورد من قاعدة بيانات أو واجهة برمجة تطبيقات أخرى، بإنشاء وإرسال استجابة بتنسيق HTML أو JSON.
  3. العميل (في في هذه الحالةمتصفح الكمبيوتر) يتلقى الرد ويعرض الصورة على الشاشة.

يمكن أن تأتي الطلبات من عدة مصادر (تسمى العملاء). في أغلب الأحيان، يتم تشكيل طلبات تطبيق الويب في شكل إدخال المتصفح. ولكن، إذا كنت تكتب خلفية لـ تطبيق الهاتف المحمولثم يكون العميل هو واجهة برمجة التطبيقات (API) الخاصة بالتطبيق ويرسل طلبات GET وPOST وPUT وDELETE من التطبيق.

5. النماذج والحالات

النماذج هي الطريقة الأكثر شيوعًا لتواصل المستخدمين مع التطبيق. في الأساس، يقوم المستخدمون بإدخال جميع البيانات من خلالهم.

تحتاج إلى إنشاء نماذج للتفاعل مع الواجهة الخلفية: إذا طلب المستخدم تذكرة لحضور حفل موسيقي، فيجب أن يبدو النموذج كشبكة من المقاعد:

عندما يبدأ المستخدم بالتفاعل مع النموذج، عليك القيام بما يلي:

  1. استنادًا إلى قواعد التطبيق، تحقق من صحة إدخال المستخدم وإظهار الأخطاء أو رسالة النجاح.
  2. قم بتغيير اسم الحالة أو النموذج اعتمادًا على من يحاول القيام بماذا.
  3. السماح بنقل البيانات التي أدخلها مستخدم تم التحقق منه ويتمتع بحقوق كافية إلى الواجهة الخلفية للمعالجة.

6.API

لكي يحظى تطبيقك بشعبية حقيقية، يتعين عليك البدء في مشاركة البيانات مع التطبيقات الأخرى. على سبيل المثال، لنفترض أنك شركة موسيقى وتريد أن تقوم خدمات البث مثل SoundCloud بتقديم المحتوى الخاص بك حتى يتمكن المستخدمون من شراء الموسيقى الخاصة بك مباشرة من التطبيق الخاص بهم. هذا هو المكان الذي تأتي فيه واجهة برمجة التطبيقات (API).

17. سطر الأوامر

تحتوي الواجهة المتاحة للمستخدم على عدد محدود من الأزرار، وهي غير كافية للتحكم الكامل في التطبيق على جميع المستويات. ولكن لهذا هناك سطر الأوامر، والتي ستساعدك على إضافة وحدات إلى البنية التحتية لتطبيقك واختبارها وتحميلها إلى خادم بعيد.

إدوارد جورسكي، القائد الفني في فريق التطوير الداخلي

ما هي المعرفة والمهارات التي يجب أن يتمتع بها مطور الويب الخلفي؟

مطور الويب الخلفي هو في الأساس الشخص الذي يطور المنطق من جانب الخادم ويفهم السياق الذي سيتم تنفيذه فيه - في سياق تطبيقات الويب. إذا تم تنفيذ تطبيقات الويب الخلفية في Java، وفي معظم الحالات، فإن جميع متطلبات المعرفة والمهارات تنطبق على مثل هذا المتخصص مثل مطور Java العادي: معرفة اللغة، وفهم عمل وأجهزة مكونات المكتبة الرئيسية لـ Java SDK وما إلى ذلك. ومع ذلك، تمت إضافة الخبرة مع أطر الويب المختلفة (تبسيط تنفيذ حقن التبعية، وmvc، وما إلى ذلك)، والقدرة على تقييم أداء التطبيق وتحسينه، وقابلية التوسع. من الضروري أن نأخذ في الاعتبار ونفهم مدى سرعة حصول مستخدم التطبيق على نتيجة تنفيذ رمز الخادم، وكذلك مدى أمان وعقلانية إتاحة وظيفة الخادم هذه أو تلك من خلال متصفح المستخدم.

يستخدم كل تطبيق ويب تقريبًا نوعًا ما من تخزين البيانات. لذلك، يجب أن يتمتع الشخص الذي يقوم بتطوير منطق الخادم بمهارات في العمل مع قواعد البيانات، بالإضافة إلى خبرة في استخدام آليات ORM.

غالبًا ما يتطلب تطبيق الويب الخلفي التكامل مع خدمات الطرف الثالثأو قم بتصدير وظائفك كواجهة برمجة تطبيقات خارجية. يجب على المطور أن يفهم كيفية تنفيذ هذه المهام، وما هي البروتوكولات والآليات المستخدمة لذلك.

على الرغم من حقيقة أن مثل هذا الشخص يشارك بشكل أساسي في تطوير منطق التطبيق من جانب الخادم، إلا أن هناك حاجة إلى تصحيح الأخطاء أو إنشاء نماذج أولية باستخدام جانب العميل من التطبيق. وهذا يعني الحاجة إلى فهم تشغيل TCP/IP، ومكدس بروتوكول HTTP، ومبادئ التفاعل بين المتصفح وتطبيق الويب، والمعرفة الأساسية بالتخطيط، وأنماط CSS، وقدرات JavaScript.

ما هي مجموعة أدوات مطور الويب الخلفي؟

هذا عادة ما يكون IDE للتطوير. هناك أيضًا أوقات تحتاج فيها إلى استخدام ملف التعريف لحل مشكلات الأداء والاستهلاك المفرط للموارد وما إلى ذلك. في فريقنا، نستخدم .

ما هي متطلبات الشركة بالنسبة للمستوى التعليمي للموظفين المحتملين؟

نحن لا نفرض أي متطلبات رسمية على المستوى التعليمي للمرشحين. والأهم من ذلك هو الخبرة والفهم والذكاء وبالطبع دافع الشخص.

ما هي متطلبات الخبرة في العمل؟

أي خبرة في تطوير تطبيقات الويب الخاصة بالإنتاج تعد بالطبع ميزة إضافية. المعرفة والمهارات الموصوفة أعلاه لا يمكن أن تكون موجودة في أخصائي في غياب الخبرة ذات الصلة. خلال المقابلات، نهتم عادة بتفاصيل المشاركة في المشاريع المختلفة الموضحة في السيرة الذاتية من أجل تقييم الخبرة التي قد يكون المرشح قد اكتسبها من خلال تنفيذ مثل هذه المهام. يعد المتخصص الذي جرب أساليب وتقنيات مختلفة لحل مشكلات مماثلة عند تطوير تطبيقات الويب، ويكون قادرًا على تحليل إيجابيات وسلبيات كل نهج، مرشحًا مثيرًا للاهتمام للغاية.

هل هناك أي متطلبات خاصة تحددها خصوصية نشاط الشركة؟

يفضل الخبرة في تطوير التطبيقات باستخدام منتجات JetBrains. نحاول جميعًا في الشركة استخدام منتجاتنا لأنها مريحة ولأننا نريد أن نجعلها أكثر ملاءمة!

أيضا في مؤخرانحن نمارس تطوير تطبيقات الويب في Kotlin. يوفر هذا عددًا من المزايا المهمة، ويجعل أيضًا عملية كتابة التعليمات البرمجية عليها أكثر متعة. يتم الترحيب برغبة المرشح في تعلم لغات جديدة وأساليب جديدة لتنفيذ تطبيقات الويب.

  • ترجمة

جاءت هذه القائمة بمثابة تذكير شخصي للمواضيع التي ناقشتها مع الزملاء والأصدقاء والتي أردت فهمها بشكل أعمق...

أنا لست من أشد المعجبين بطرح الأسئلة الفنية في المقابلات: بالنسبة لي، من الأفضل الجلوس مع المرشح (أو المرشح) على لوحة المفاتيح والتحدث عن بعض التعليمات البرمجية الحقيقية، وهي مشكلة حقيقية - والقيام بالبرمجة الزوجية طوال اليوم، ويفضل أن يكون ذلك بالتناوب مع بقية الفريق. لكنني أعتقد أن بعض الأسئلة الفنية يمكن أن تكون نقطة انطلاق جيدة لبدء محادثة ممتعة وممتعة وتسمح لكما بالتعرف على بعضكما البعض بشكل أعمق.

يحتوي هذا المستودع على عدد من الأسئلة المتعلقة بالواجهة الخلفية والتي يمكن استخدامها عند فحص المرشحين المحتملين. لا ينصح بالسؤال تحت أي ظرف من الظروف الجميعالأسئلة الموجهة لمرشح واحد: ستستغرق هذه الأسئلة عدة ساعات وتكون غير مجدية بشكل عام لأنها تغطي نطاقًا واسعًا جدًا من المواضيع. لا أحد يستطيع أن يعرف كل شيء. اختر القسم الأكثر صلة والأسئلة الأكثر إثارة للاهتمام لتوسيع المحادثة.

تحذير

معظم الأسئلة مفتوحة، وبعضها ببساطة ليس كذلك. صحيحأو خطأإجابة. على العكس من ذلك، يجب أن تصبح نقطة البداية للمحادثة، والتي، من الناحية النظرية، يجب أن تظهر قدرات الشخص بشكل أفضل من إجابة بسيطة. أنا شخصياً أفضّل عمومًا طرح الأسئلة التي لا أعرف الإجابات عليها.

مرة أخرى، أؤكد أن مجرد طرح الأسئلة ليس كافيا. اختتم المقابلة بجلسة برمجة زوجية طويلة: هذه واحدة من أفضل الخياراتلفهم أسلوب ونهج بعضهم البعض - والسماح للمرشحين بمعرفة ما يمكن توقعه في العمل المستقبلي.

تم تصميم هذا المشروع على غرار "أسئلة المقابلة لوظائف الواجهة الأمامية" بواسطة @darcyclarke.

أين الإجابات؟

عاجلاً أم آجلاً سأكمل المقال بالإجابات ذات الصلة. سأكون ممتنا لأية مساعدة!

أسئلة حول أنماط التصميم:

لماذا تعتبر الكائنات العالمية والإحصائيات شريرة؟ هل يمكنك أن تريني مثالاً على الكود؟

تحدث عن عكس التحكم وكيف يعمل على تحسين تنظيم التعليمات البرمجية.

ينص قانون ديميتر (مبدأ الحد الأدنى من المعرفة) على أن كل وحدة برمجية يجب أن يكون لديها معرفة محدودة بالوحدات الأخرى ويجب أن تتفاعل فقط مع "أصدقائها" المباشرين (يُشار إليها أحيانًا باسم "لا تتحدث إلى الغرباء"). هل يمكنك كتابة كود ينتهك هذا المبدأ؟ لماذا لديه منظمة سيئة وكيفية اصلاحها؟

Active-Record هو نمط تصميم يشجع على تضمين وظائف مثل الإدراج والتحديث والحذف في الكائن نفسه، والخصائص التي تتوافق مع أعمدة بعض الجداول الأساسية في قاعدة البيانات. في رأيك وتجربتك، ما هي القيود و المزالقهذا القالب؟

Data-Mapper هو نمط تصميم يشجع على استخدام طبقة من مصممي الخرائط الذين ينقلون البيانات بين الكائنات وقاعدة البيانات مع الحفاظ على استقلالهم عن بعضهم البعض وعن مصمم الخرائط نفسه. وعلى النقيض من هذا النمط، تتضمن كائنات Active-Record مباشرة عمليات تخزين نفسها في قاعدة البيانات وخصائص تتوافق مع الجداول الأساسية في قاعدة البيانات. هل لديك رأي في هذه الأنماط؟ في أي الحالات تختار واحدة على الأخرى؟

لماذا يتم ذكر "خطأ المليار دولار" كثيرًا عند تقديم NULL؟ هل تريد مناقشة تقنيات منع ذلك، مثل نمط الكائن الفارغ المقدم في كتاب GOF، أو الأنواع الاختيارية؟

لماذا غالبا ما يكون التركيب أفضل من الميراث؟

ما هي طبقة مكافحة الفساد؟

Singleton هو نمط تصميم يقوم بإنشاء مثيل واحد لفئة لكائن واحد. إن كتابة مفردة صحيحة وآمنة للخيط ليست بهذه السهولة. هل ستجربه؟

القدرة على تغيير التنفيذ دون التأثير جزء العميليسمى تمثيل البيانات المجردة (تجريد البيانات). اكتب مثالاً يخالف هذه الخاصية، ثم صححه.

اكتب جزءًا من التعليمات البرمجية التي تنتهك مبدأ عدم تكرار نفسك (DRY) ثم قم بإصلاحه.

كيف ستحارب جحيم التبعية؟

لماذا جوتو الشر؟

مبدأ الموثوقية - القاعدة العامةمنظمة التعليمات البرمجية التي توصي "كن محافظاً فيما ترسل وليبرالياً فيما تستقبل". غالبا ما يتم صياغتها على أنها "كن قارئاً متسامحاً وكاتباً حذراً". هل ترغب في مناقشة معنى هذا المبدأ؟

فصل المسؤوليات - مبدأ التصميم للفصل برنامج كمبيوترإلى مناطق منفصلة، ​​كل منها مسؤول عن مهمته الخاصة. هناك العديد من الآليات المختلفة لفصل المسؤوليات (باستخدام الكائنات أو الوظائف أو الوحدات النمطية أو الأنماط مثل MVC وما شابه). هل تريد مناقشة هذا الموضوع؟

أسئلة حول تصميم الكود:

يُقال غالبًا أن أحد أهم أهداف التصميم الموجه للكائنات (وتنظيم التعليمات البرمجية بشكل عام) هو الاقتران القوي والاقتران السائب. ماذا يعني ذلك؟ لماذا هي مهمة جدا وكيفية تحقيقها؟

لماذا تبدأ فهارس المصفوفة عند الصفر في معظم اللغات؟

كيف تؤثر الاختبارات وTDD على تنظيم الكود؟

اكتب جزءًا من التعليمات البرمجية التي تنتهك مبدأ "لا تكرر نفسك (DRY)" واشرح سبب سوء تنظيمها وأصلحها.

ما الفرق بين التماسك والتماسك؟

ما فائدة إعادة الهيكلة؟

هل التعليقات في الكود مفيدة؟ يقول البعض إنه يجب تجنبها إن أمكن، ومن الأفضل ألا تكون هناك حاجة إليها على الإطلاق. هل توافق؟

ما الفرق بين تنظيم الكود والهندسة المعمارية؟

لماذا تتم كتابة الاختبارات قبل الكود في TDD؟

يدعم C++ الوراثة المتعددة، وتسمح Java للفئة بتنفيذ واجهات متعددة. ما هو تأثير استخدام هذه الأدوات على التعامد؟ هل هناك فرق في التأثير بين استخدام الوراثة المتعددة والواجهات المتعددة؟ هل هناك فرق بين استخدام التفويض والميراث؟ [هذا السؤال مأخوذ من كتاب المبرمج العملي للكاتب أندرو هانت ودافيد توماس]

إيجابيات وسلبيات تخزين منطق المجال في الإجراءات المخزنة.

في رأيك، لماذا هيمنت المنظمات الموجهة للكائنات على السوق لسنوات عديدة؟

إذا كانت التعليمات البرمجية الخاصة بك سيئة التنظيم، فكيف ستتعرف عليها؟

أسئلة حول لغات البرمجة:

أخبرنا عن أهم ثلاثة عيوب للغة البرمجة المفضلة لديك.

لماذا هناك اهتمام متزايد بالبرمجة الوظيفية؟

ما هو الإغلاق وما فائدته؟ ما هو الشيء المشترك بين عمليات الإغلاق والطبقات؟

متى يكون من المناسب استخدام الأدوية الجنيسة؟

ما هي وظائف الترتيب العالي؟ لماذا هم؟ اكتب مثل هذه الوظيفة بأي لغة.

اكتب حلقة، ثم قم بتحويلها إلى دالة عودية باستخدام بنيات غير قابلة للتغيير فقط (أي بدون متغيرات). وصف ذلك.

ماذا يعني عندما تتعامل اللغة مع الوظائف ككائنات من الدرجة الأولى؟

اعرض مثالاً على الحالات التي يمكن أن تكون فيها الوظيفة المجهولة مفيدة.

ما هي مساحة الاسم ل؟ التوصل إلى بديل.

تحدث عن التوافق بين Java وC# (أو اختر لغتين عشوائيتين أخريين).

لماذا لا يحب العديد من المطورين جافا؟

ماذا يفعل لغة جيدةلغة جيدة وسيئة - سيئة؟

اكتب دالتين، واحدة شفافة مرجعيًا والأخرى معتمة مرجعيًا. دعونا نناقشها.

ما هو المكدس وما هو الكومة؟ ما هو تجاوز سعة المكدس؟

لماذا من المهم أن تكون الوظائف كائنات من الدرجة الأولى في اللغة؟

تسمح بعض اللغات، خاصة تلك التي تتبع نهجًا وظيفيًا، بتقنية تسمى مطابقة الأنماط. هل هي مألوفة بالنسبة لك؟ كيف تختلف مطابقة الأنماط عن تصميم Switch؟

لماذا لا تنفذ بعض لغات البرمجة استثناءات؟ ما هي مزايا وعيوب هذا النهج؟

إذا كانت القطة حيوانًا، فهل صحيح أن TakeCare - هذا هو TakeCare ?

لماذا لا تكون المنشئات جزءًا من الواجهة في Java وC# والعديد من اللغات الأخرى؟

كان هناك الكثير من الضجيج حول Node.js في السنوات الأخيرة. ما هي أفكارك حول استخدام لغة تم تصميمها في الأصل للتشغيل في المتصفح في الواجهة الخلفية؟

تخيل أن لديك آلة زمنية وأن تكون قادرًا على العودة إلى نقطة زمنية معينة في تاريخ Java (C# أو Python أو Go أو أي شيء آخر) والتحدث مع بعض منشئي JDK. ما الذي ستحاول إقناعهم به؟ هل ترغب في إزالة الاستثناءات المحددة؟ إضافة أنواع بدائية غير موقعة؟ تعدد الميراث؟

أسئلة تطوير الويب:

لماذا يتم التعامل مع ملفات تعريف الارتباط الأصلية وملفات تعريف الارتباط التابعة لجهات خارجية بشكل مختلف تمامًا؟

كيف يمكنك إدارة إصدار Web Services API؟

من منظور الواجهة الخلفية، هل هناك أي عيوب أو عوائق أمام اعتماد تطبيقات الصفحة الواحدة؟

لماذا نسعى عادة جاهدين لكي تكون الخدمة عديمة الجنسية؟ ما هو الشيء الرائع في الكود عديم الجنسية؟ لماذا ومتى تكون حالة الدولة سيئة؟

الراحة والصابون: في أي المواقف ستختار أحد هذه الأساليب وفي أي المواقف ستختار الآخر؟

في تطوير الويب، تتشابه أساليب Model-View Controller وModel-View-View-Model إلى حد كبير في كل من الواجهة الخلفية والواجهة الأمامية. ما هي ولماذا ينصح باستخدامها؟

أسئلة قاعدة البيانات:

كيف يمكنك ترحيل تطبيق من قاعدة بيانات إلى أخرى، على سبيل المثال من MySQL إلى PostgreSQL؟ إذا كنت لإدارة مثل هذا المشروع، ما هي المشاكل التي تتوقعها؟

لماذا تتعامل قواعد البيانات مع NULL كحالة خاصة؟ على سبيل المثال، لماذا في SQL SELECT * FROM table WHERE field = null لا يُرجع السجلات ذات الحقل الفارغ؟

ACID هو اختصار للذرية والاتساق والعزلة والمتانة. تضمن معظم محركات قواعد البيانات هذه الخصائص الأربع لمعاملات قاعدة البيانات. ماذا تعرف عن هذا؟ هل تريد أن تخبرنا المزيد؟

كيف يمكنك التعامل مع ترحيل مخطط قاعدة البيانات، أي كيف يمكنك أتمتة تغييرات مخطط قاعدة البيانات مع تطور التطبيق من إصدار إلى إصدار؟

كيفية تنفيذ التحميل البطيء؟ متى يكون مفيدا؟ ما هي المزالق؟

تحدث ما يسمى بـ "مشكلة N+1" عندما يجب على التعليمات البرمجية تحميل الأطفال من العلاقات بين الوالدين والطفل إلى ORM ذي التحميل البطيء، وبالتالي إرسال طلب للسجل الأصلي، ثم طلب واحد لكل سجل فرعي. كيفية حل المشكلة؟

كيف تكتشف أغلى الاستعلامات في تطبيقك؟

في رأيك، هل تطبيع قاعدة البيانات ضروري دائمًا؟ متى يكون من المناسب استخدام قواعد البيانات غير الطبيعية؟

إحدى طرق التكامل المستمر تسمى النشر الأزرق والأخضر. وهو يتألف من استخدام بيئتي إنتاج متشابهتين قدر الإمكان - والنشر في إحداهما أثناء تشغيل الأخرى، ثم تحويل حركة المرور بأمان من بيئة إلى أخرى بعد الاختبار في بيئة مناسبة. تصبح هذه الطريقة أكثر تعقيدًا إذا كان النشر يتضمن تغيير بنية قاعدة البيانات أو محتوياتها. أود أن أناقش هذا الموضوع معك.

أسئلة NoSQL:

ما هو الاتساق في نهاية المطاف؟

فيما يتعلق بنظرية CAP، أعط أمثلة على أنظمة CP وAP وCA.

كيف تفسر الزيادة الأخيرة في الاهتمام بـ NoSQL؟

كيف تحل NoSQL مشاكل قابلية التوسع؟

متى تختار نظام إدارة قواعد البيانات الموجه نحو المستندات مثل MongoDB بدلاً من نظام إدارة قواعد البيانات العلائقية مثل MySQL أو PostgreSQL؟

أسئلة حول إصدار الكود:

لماذا يكون التفرع في Mercurial أو Git أسهل منه في SVN؟

ما هي إيجابيات وسلبيات أنظمة التحكم في الإصدار الموزع مثل Git مقابل VCSs المركزية مثل SVN؟

هل يمكنك وصف سير عمل GitHub Flow وGitFlow؟

ما هو إعادة الأساس؟

لماذا يكون الدمج في Mercurial أو Git أسهل من الدمج في SVN وCVS؟

أسئلة التزامن:

لماذا نحتاج إلى التوازي على الإطلاق؟ يشرح.

لماذا يصعب اختبار الكود متعدد الخيوط/المتوازي؟

ما هي حالة السباق؟ اكتب مثالاً بأي لغة.

ما هو الجمود؟ هل يمكنك كتابة أي رمز يعاني من الجمود؟

ما هو تجويع الموارد (تجويع العملية)؟ إذا لزم الأمر، دعونا نلقي نظرة على تعريفه.

ما هي خوارزمية المزامنة غير المحظورة بدون انتظار؟

أسئلة حول الأنظمة الموزعة:

كيفية اختبار النظام الموزع؟

متى تستخدم الاتصال غير المتزامن بين نظامين؟

ما هي المخاطر الرئيسية لاستدعاءات الإجراءات عن بعد؟

إذا كنت تقوم ببناء نظام موزع من أجل قابلية التوسع والموثوقية، فما هي المشاكل المختلفة التي قد تنشأ في بيئة شبكة مغلقة وآمنة - وفي نظام عام وموزع جغرافيًا؟

كيفية ضمان التسامح مع الخطأ في تطبيق الويب؟ تطبيق سطح المكتب؟

كيفية التعامل مع الفشل في الأنظمة الموزعة؟

لنتحدث عن الطرق المختلفة لاستعادة الوظائف (التسوية) بعد فشل الاتصال بالشبكة.

ما هي المفاهيم الخاطئة حول الحوسبة الموزعة؟

متى تستخدم الطلب/الرد ومتى تقوم بالنشر/الاشتراك؟

لنفترض أن النظام الذي تعمل معه لا يدعم المعاملات. كيف يمكنك تنفيذها من الصفر؟

أسئلة حول دورة حياة البرنامج وإدارة الفريق:

ما هي المرونة؟

كيف ستعمل مع الكود القديم؟

لنفترض أنني مدير مشروعك ولست خبيرًا في البرمجة. حاول أن تشرح لي ما هو الكود القديم ولماذا تحتاج إلى الاهتمام بجودة الكود.

أنا المدير التنفيذي لشركتك. اشرح لي كانبان وأقنعني بالاستثمار فيه.

ما هو الفرق الرئيسي بين منهجية التطوير الرشيقة ونموذج الشلال؟

كقائد للفريق، كيف يمكنك حل مشكلة كثرة الاجتماعات؟

كيف ستتعامل مع مشروع تأخر كثيرًا؟

"الناس والتعاون أكثر أهمية من العمليات والأدوات" و"تعاون العملاء أكثر أهمية من مفاوضات العقود" - هذه هي نصف القيم المعلنة في بيان Agile. دعونا نناقشها.

أخبرنا بالقرارات التي ستتخذها إذا كنت المدير الفني لشركتك.

هل مديرو البرامج مفيدون؟

قم بتنظيم جدول عمل فريقك باستخدام ساعات العمل المرنة (أي لا توجد ساعات عمل محددة) وسياسات الإجازات "خذها عندما تحتاج إليها".

كيف يمكنك التعامل مع معدل دوران مرتفع للغاية وإقناع المطورين بعدم مغادرة الفريق دون زيادة في الراتب؟ ما الفائدة التي يمكن أن تفعلها الشركة لإبقائهم؟

ما هي الصفات الثلاث الرئيسية التي تقدرها في زملائك، إلى جانب البرمجة؟

ما هي في رأيك أهم ثلاثة أشياء تحتاج التخصصات الإنسانية إلى معرفتها حول البرمجة؟

تخيل أن إحدى الشركات تمنحك شهرًا واحدًا وميزانية لتحسين نوعية الحياة اليومية لك ولزملائك. ماذا ستفعل؟

أسئلة حول المنطق والخوارزميات:

اكتب قائمة انتظار FIFO باستخدام مكدسات LIFO فقط. ثم قم بإنشاء مكدس LIFO باستخدام قوائم انتظار FIFO فقط.

اكتب جزءًا من التعليمات البرمجية التي تكون عرضة لتجاوز سعة المخزن المؤقت.

اكتب مضروبًا مع التكرار النهائي.

بأي لغة، اكتب REPL الذي يعرض القيم المدخلة على الفور. تطويره إلى آلة حاسبة RPN.

كيف يمكنك تصميم أداة إلغاء التجزئة؟

اكتب برنامجاً يولد متاهات عشوائية.

اكتب مثالاً للتعليمات البرمجية التي تؤدي إلى حدوث تسرب للذاكرة.

إنشاء سلسلة من الأرقام العشوائية الفريدة.

اكتب مثالاً لنظام بسيط لجمع القمامة.

اكتب وسيط رسائل بسيط بأي لغة.

اكتب خادم ويب بسيطًا جدًا. ضع خطة للميزات التي يجب تنفيذها في المستقبل.

كيف يمكنك فرز ملف 10GB؟ كيف ستتعامل مع إجراء تغييرات على ملف بحجم 10 تيرابايت؟

كيف يمكنك العثور على الملفات المكررة برمجيا؟

أسئلة هندسة البرمجيات:

متى تكون ذاكرة التخزين المؤقت غير ضرورية وحتى ضارة؟

لماذا تعمل البنية المبنية على الأحداث على تحسين قابلية التوسع؟

ما الذي يجعل التعليمات البرمجية قابلة للقراءة؟

ما الفرق بين التصميم الناشئ والهندسة المعمارية التطورية؟

القياس الأفقي والرأسي: ما الفرق بينهما؟ متى نستخدم أحدهما ومتى نستخدم الآخر؟

كيفية التعامل مع الفشل وجلسات المستخدم؟

ما هو CQRS (فصل مسؤولية استعلام الأوامر)؟ كيف يختلف عن مبدأ فصل الأوامر والاستعلام القديم؟

ما هي الهندسة المعمارية ثلاثية المستويات؟

كيف ستقوم بتصميم نظام برمجي قابل للتوسع؟

ما هي الاستراتيجيات لحل مشكلة C10k؟

كيف يمكنك تصميم نظام P2P لامركزي (أي بدون خادم مركزي)؟

لماذا لا يتم قياس CGI؟

كيف ستحمي أنظمتك من تقييد البائع؟

ما هي عيوب نمط تصميم الناشر-المشترك عند القياس؟

ما الجديد في تصميم المعالجات منذ الثمانينات وما أهميته للبرمجة؟

في أي مرحلة من دورة الحياة ينبغي النظر في الأداء وكيف؟

كيف يمكن ألا تكون مشكلة رفض الخدمة بسبب هجوم حجب الخدمة، ولكن بسبب سوء التصميم أو مشكلة معمارية؟

ما هي العلاقة بين الأداء وقابلية التوسع؟

متى يكون من المقبول استخدام أدوات التوصيل الضيقة؟

ما هي الخصائص التي يجب أن يتمتع بها النظام للانتقال إلى السحابة؟

هل وحدة التصميم تعني النخبوية بين المهندسين المعماريين؟ ببساطة: هل يمكن للتصميم الجيد أن ينشأ من الجهود الجماعية لجميع المطورين؟

ما الفرق بين التصميم والهندسة المعمارية والوظيفة والصفات الجمالية؟ دعونا نناقش هذا.

أسئلة حول البنية الموجهة نحو الخدمة والخدمات الصغيرة:

لماذا لا تشجع SOA المعاملات الطويلة وتشجع Saga بدلاً من ذلك؟

ما الفرق بين SOA والخدمات الصغيرة؟

دعونا نتحدث عن ترقيم إصدارات خدمات الويب، وتوافق الإصدارات، وكسر التغييرات التي تؤدي إلى كسر التوافق مع الإصدارات السابقة.

ما الفرق بين المعاملة والمعاملة التعويضية في Saga في SOA؟

متى تكون الخدمات الصغيرة صغيرة جدًا؟

ما هي إيجابيات وسلبيات بنية الخدمات المصغرة؟

أسئلة الأمان:

كيفية كتابة رمز آمن؟ برأيك هل هذه مسؤولية المطور أم يجب أن يكون هناك متخصص مستقل في الشركة لذلك؟ ولماذا؟

لماذا يقال أنه لا ينبغي عليك أن تحاول اختراع أو تصميم قواعد التشفير الخاصة بك؟

ما هي المصادقة الثنائية؟ كيف يمكنك تنفيذها في تطبيق ويب موجود؟

إذا لم تتعامل مع السجلات بعناية، فهناك دائمًا خطر وصول المعلومات السرية، بما في ذلك كلمات المرور، هناك. كيف يمكنك منع مثل هذه المشكلة؟

اكتب جزءًا من التعليمات البرمجية المعرضة لحقن SQL وقم بإصلاحه.

كيف يمكنك اكتشاف ثغرات حقن SQL باستخدام تحليل التعليمات البرمجية الثابتة؟ لا أتوقع منك أن تكتب خوارزمية كاملة، لأن هذا موضوع كبير جدًا، لكن دعنا نناقش النهج العام.

ماذا تعرف عن البرمجة النصية عبر المواقع؟ إذا كنت لا تتذكر، دعنا نلقي نظرة على وصفه على الإنترنت ونتحدث عنه.

ماذا تعرف عن تزوير الطلبات عبر المواقع؟ إذا كنت لا تتذكر، دعنا نلقي نظرة على وصفه على الإنترنت ونتحدث عنه.

كيف يعمل HTTPS؟

ما هو هجوم الرجل في الوسط؟ ولماذا يساعد HTTPS في الحماية منه؟

كيف يمكنك منع سرقة جلسة المستخدم؟ على الأرجح، تتذكر ما هي الجلسة أو سرقة ملفات تعريف الارتباط، وإلا فلنقرأ صفحة ويكيبيديا حول هذا الموضوع معًا.

أسئلة عامة:

لماذا تعتبر البرمجة الوظيفية مهمة؟ متى يجب عليك استخدام لغة برمجة وظيفية؟

كيف تجني شركات مثل Microsoft وGoogle وOpera وMozilla الأموال من متصفحاتها؟

لماذا يتطلب فتح مقبس TCP الكثير من الحمل؟

لماذا من المهم استخدام التغليف؟

ما هو نظام الوقت الحقيقي وكيف يختلف عن النظام التقليدي؟

ما هي العلاقة بين لغات البرمجة في الوقت الحقيقي وتخصيص الكومة؟

الثبات هو ممارسة تحديد القيم مرة واحدة في وقت إنشاء الكائن، ثم لا تتغير هذه القيم أبدًا. كيف تساعدك الثبات على كتابة تعليمات برمجية أكثر أمانًا؟

إيجابيات وسلبيات القيم المتغيرة والثابتة.

ما هو عدم تطابق المعاوقة العلائقية للكائن؟

ما هي المبادئ التي ستستخدمها لتحديد حجم ذاكرة التخزين المؤقت؟

ما الفرق بين TCP و HTTP؟

ما هي المفاضلات بين اختيار العرض من جانب العميل مقابل العرض من جانب الخادم؟

كيفية تطوير بروتوكول اتصال موثوق يعتمد على بروتوكول غير موثوق؟

قال مخترع المؤشر الفارغ، توني هور، ذات مرة: "يمكنني أن أسمي هذا خطأ مليار دولار"، لأنه ينطوي على "عدد لا يحصى من الأخطاء، ونقاط الضعف، وفشل النظام الذي من المحتمل أن يتسبب في معاناة وأضرار بقيمة مليار دولار على مدار العام". الأربعين سنة الماضية." لنفترض أنك تريد التخلص من إمكانية استخدام المؤشرات الفارغة في لغة البرمجة الخاصة بك: كيف تحل هذه المشكلة؟ ما هي العواقب التي قد تترتب على ذلك؟

أسئلة مفتوحة:

لماذا يقاوم الناس التغيير؟

اشرح مفهوم الخيوط لجدتك.

كمطور، تريد أن تكون مبتكرًا ويمكن التنبؤ به. فكيف يمكن أن يتواجد هذين الهدفين جنباً إلى جنب ضمن نفس الإستراتيجية؟

ما الذي يجعل الكود الجيد جيدًا؟

اشرح كيفية عمل البث وكيفية تنفيذه.

لنفترض أن شركتك تمنحك أسبوعًا واحدًا لتحسين حياتك أنت وزملائك: كيف تستغل هذا الأسبوع؟

ماذا تعلمت في الأسبوع الماضي؟

هناك عنصر جمالي في أي تصميم. السؤال هو هل هذه الجمالية هي صديقتك أم عدوتك؟

قم بتسمية آخر خمسة كتب قرأتها.

كيف يمكنك تنفيذ نهج التسليم المستمر للبرامج في شركة كبيرة وناجحة يكون فيها الانتقال من نموذج الشلال إلى نهج التسليم المستمر أمرًا غير تافه نظرًا لحجمه وتعقيد أعماله؟

متى يكون من المنطقي إعادة اختراع العجلة؟

لنتحدث عن إعادة اختراع العجلة، ومتلازمة رفض تطوير شخص آخر، وممارسة شركة أو فريق من المطورين استخدام خدماتهم ومنتجاتهم الخاصة (Eating Your Own Food).

ما هو أول شيء تقوم بأتمتة سير عملك الحالي؟

ما هي تحديات كتابة البرمجيات؟ ما الذي يجعل صيانة البرمجيات صعبة؟

هل تفضل العمل في مشاريع جديدة تمامًا (المجال الأخضر) أم الاستمرار في المشاريع الحالية (المجال البني)؟ لماذا؟

ماذا يفعل نظام التشغيلعندما لا يكون هناك أمر لتنفيذ تعليمات برمجية محددة ويبدو خاملاً؟ أرغب في بدء محادثة حول المقاطعات، والشياطين، وخدمات الخلفية، والاستطلاعات، والتعامل مع الأحداث، وما إلى ذلك.

اشرح معاملات Unicode أو DBMS لطفل يبلغ من العمر خمس سنوات.

جعل القضية للهندسة المعمارية متجانسة.

ماذا يعني أن تكون "مطورًا محترفًا"؟

هل البرمجة فن أم حرفة أم هندسة؟ رأيك.

لماذا الشركات أسوأ في الابتكار من الشركات الناشئة؟

ما هو آخر إنجاز حققته وتفتخر به؟

الأسئلة المتعلقة بمقتطفات التعليمات البرمجية:

ما هو ناتج وظيفة جافا سكريبت هذه؟

دالة ربط الأحداث () (لـ (var i = 0; i< 3; i++) { document.getElementById("button" + i) .addEventListener("click", function() { alert(i); }); } }
فيما يتعلق بمحو النوع، ما الذي سينتجه كود Java هذا ولماذا؟

ArrayList li = new ArrayList ()؛ ArrayList lf = new ArrayList ()؛ if (li.getClass() == lf.getClass()) // يتم التقييم على أنه صحيح System.out.println("Equal");
هل يمكنك اكتشاف تسرب الذاكرة؟

مكدس فئة عامة (عناصر كائن خاصة؛ حجم int خاص = 0؛ int نهائي ثابت خاص DEFAULT_INITIAL_CAPACITY = 16؛ public Stack() (عناصر = كائن جديد؛) public void Push(Object e) (تضمن السعة ()؛ العناصر = e؛) public Object pop() ( if (size == 0) throw new EmptyStackException(); return items[--size]; ) /** * ضمان وجود مساحة لعنصر آخر واحد على الأقل، تقريبًا * مضاعفة السعة في كل مرة يتم فيها استخدام المصفوفة يحتاج إلى النمو */ التأكد من الفراغ الخاص () ( if (elements.length == size) items = Arrays.copyOf(elements, 2 * size + 1); ) )
هل يمكنك التخلص من المفتاح وكتابة المزيد من التعليمات البرمجية الموجهة للكائنات؟

منسق الطبقة العامة (خاص خدمة الخدمة;
المنسق العام (خدمة الخدمة) ( this.service = الخدمة؛ ) public String doTheJob (String theInput) ( استجابة السلسلة = Service.askForPermission()؛ التبديل (الاستجابة) (الحالة "FAIL": إرجاع "خطأ"؛ الحالة "موافق" : return String.format("%s%s", theInput, theInput default: return null;

هل يمكنك التخلص من عبارات if وكتابة المزيد من التعليمات البرمجية الموجهة للكائنات؟
فئة عامة TheService ( خاص نهائي FileHandler fileHandler؛ نهائي خاص FooRepository fooRepository؛ public TheService(FileHandler fileHandler, FooRepository fooRepository) ( this.fileHandler = fileHandler; this.fooRepository = fooRepository; ) تنفيذ سلسلة عامة (ملف سلسلة نهائي) ( Final String rewriterUrl = fileHandler.getXmlFileFromFileName(file); rewriterUrl); if (knownFoo == null) ( return ""; ) returnknownFoo.DoThat(file))

الوظيفة () ( خطأ HRESULT = S_OK؛ إذا (SUCCEEDED(Operation1())) ( if(SUCCEEDED(Operation2())) ( if(SUCCEEDED(Operation3())) ( if(SUCCEEDED(Operation4())) ( ) آخر ( خطأ = OPERATION4FAILED؛ ) ) آخر ( خطأ = OPERATION3FAILED؛ ) ) آخر ( خطأ = OPERATION2FAILED؛ ) ) آخر ( خطأ = OPERATION1FAILED؛ ) خطأ في الإرجاع )

- لقد تحدثنا بالفعل عن الأشخاص الذين أنشأوا مساحة الإنترنت الحديثة في المدونة. سنتعمق اليوم في مهنتهم ونتحدث بمزيد من التفاصيل حول تخصصات مطوري الويب - الواجهة الأمامية والخلفية والمكدس الكامل.

مطور الواجهة الأمامية

الواجهة الأمامية هي الجزء "الأمامي" من الموقع: كل ما يراه المستخدم. القوائم والنصوص والصور واللافتات الإعلانية المزعجة (أو، إذا تم تنفيذها بشكل جيد، ليست مزعجة) - يتم التعامل مع كل هذا بواسطة مطور الواجهة الأمامية. كما أنه يشارك في تطوير التصميم: فهو "يرسم" كل شيء بالطبع، لكن الواجهة الأمامية هي التي تتحكم في عمله.

مهام مطور الواجهة الأمامية

في النهاية، يكون مطور الواجهة الخلفية مسؤولاً عن كل ما لا ينتمي إلى الجزء “الأمامي” من الموقع.

أدوات مطور الواجهة الخلفية: جافا، SQL، C#، بايثون.

يمتلك مطورو الواجهة الخلفية عشرات اللغات في ترسانتهم. ولكل منها بعض الإيجابيات والسلبيات: بعضها مناسب تمامًا للمشاريع الكبيرة، والبعض الآخر للمشاريع الصغيرة. لذلك تختار الواجهة الخلفية طريقة التنفيذ نفسها، بناءً على رغبات العميل ومهامه.

مطور مكدس كامل

وفقًا لـ My Circle، يحصل مطورو البرامج الكاملة والخلفية على ما يصل إلى 140 ألف روبل في عام 2018. الواجهة الأمامية – ما يصل إلى 125 ألفًا.

هل يمكن لنفس الشخص القيام بتطوير الواجهة الأمامية والخلفية؟ إذا كان يفهم كليهما، فلماذا لا: يسمى هذا المطور Full Stack.

إنه يعرف كيفية حل أي مشاكل في تطوير خدمات الويب ومواقع الويب: يعرف لغات الخادم وجافا سكريبت وHTML وCSS، ويمكنه تحسين موقع الويب لمحركات البحث وتحويل تخطيط التصميم الذي تم إجراؤه في Photoshop إلى رمز واجهة فعال ( هل تتذكر أن واجهة موقع الويب يتم رسمها بواسطة مصمم، ولكن في الموقع نفسه سيتم وصف كل شيء في الكود؟).

عادة، يتم تعيين مطور متكامل للمشاريع الصغيرة التي يمكن لشخص واحد التعامل معها. مثل هؤلاء المبرمجين، كقاعدة عامة، لا يصبحون خبراء في الواجهة الأمامية أو الخلفية، لكن لديهم فهم جيد للمنطق العام للموقع وتفاعل جزء المستخدم مع جزء الخادم. هذا، بالمناسبة، مهم للغاية: العديد من مطوري الواجهة الأمامية والخلفية ببساطة لا يفهمون بعضهم البعض ويقومون بتعيين مهام مستحيلة، ويمكن للمتخصص الكامل أن يصبح رابطًا متصلاً.

لا فائدة من دراسة المكدس الكامل على الفور: عادةً ما يتقن المبرمج أولاً جزءًا واحدًا من الوظيفة - الواجهة الأمامية أو الواجهة الخلفية - وبعد ذلك فقط يضيف مهارات في مجال ذي صلة إلى قاعدة معارفه.

من أين تبدأ؟

لكي تصبح مطورًا متكاملاً للواجهة الأمامية أو الخلفية أو المطور الكامل، يستغرق الأمر سنوات من الممارسة وعشرات المشاريع. ولكن يمكنك أن تبدأ الطريق إلى هذه المهنة حتى لو لم تكن قد أنهيت دراستك بعد: ادرس HTML وCSS وJavaScript ومارس مهاراتك واصقلها بمساعدة.

يحتاج مطور الواجهة الخلفية إلى الحصول على تعليم تقني أساسي جيد. يتم توفير التعليم الجيد من قبل MIPT أو MSTU أو MSU أو ITMO أو MEPhI. لكن الكثير يعتمد على الشخص وعلى رغبته واهتمامه. إذا كنت ترغب في ذلك، يمكنك الحصول على تعليم جيد في جامعات أقل شهرة.

كليات الملف الشخصي

سيؤدي الافتقار إلى التعليم المتخصص إلى حقيقة أنه عندما لا يعمل شيء ما مع شخص ما، فهو ببساطة لن يفهم السبب. التخصص مهم جدًا: هناك خوارزميات وهياكل بيانات ومفهوم آلة الحالة المحدودة. الأشخاص الذين ليس لديهم تعليم خاص لا يعرفون ذلك، ولديهم العديد من الأسئلة. للمطور مهارة خاصة مهمة - ألا يعرف كل شيء (هذا مستحيل بداهة)، ولكن أن يعرف وجود أشياء معينة، وأين يمكن العثور عليها وكيفية استخدامها.

أطلقت مجموعة Mail.Ru برنامجًا تعليميًا إضافيًا مجانيًا "Technopark" لطلاب جامعة MSTU. Bauman، حيث يمكنك الحصول على كل ما تحتاجه لمطور الواجهة الخلفية المعرفة النظريةوالمهارات العملية.

كتب

رمز مثالي. درجة الماجستير

وبالاعتماد على البحث الأكاديمي من ناحية والخبرة العملية من ناحية أخرى، قام المؤلف بتجميع التقنيات الأكثر فعالية والمبادئ الأكثر فعالية في إرشادات واضحة وعملية. مهما كان مستواك المهني، ومهما كانت أدوات التطوير التي تعمل بها، ستجدها في هذا الكتاب المعلومات الضرورية، سوف يجعلك تفكر وتساعدك على إنشاء كود مثالي.

تقنيات التصميم الموجهة للكائنات. أنماط التصميم

يصف الكتاب حلولاً بسيطة وأنيقة للمشكلات الشائعة التي تواجه التصميم الموجه للكائنات. بالإضافة إلى ذلك، يحل الكتاب في الوقت نفسه مشكلتين ملحتين. أولاً، يوضح دور الأنماط في إنشاء بنية الأنظمة المعقدة. ثانيًا، باستخدام الأنماط الواردة في الكتاب المرجعي، يستطيع المصمم تطوير تطبيقاته الخاصة بسهولة.