كيف تستعد بسرعة للمقابلة ، والتي سيكون لديك أسئلة حول الخوارزميات وتقنيات معالجة المعلومات؟

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

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

1. عادة ما يتم إجراء مقابلات مع أسئلة حول تقنيات معالجة البيانات مع مجموعة من فرق المحللين والمطورين الذين لديهم خبرة سابقة في تطوير اللغات التعريفية والضرورية والموجهة نحو الكائن والوظيفية.

التحدي. تحديد لغة البرمجة بواسطة قطعة من البرنامج.



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



التحدي. ما اللغات التي تدعم الحساب باستخدام الأعداد الصحيحة الطويلة؟

هل فكرت؟ قائمة العينة:
  • C ، C ++ - مكتبة libgmp
  • Lisp المشتركة - لا يحد من طول الأعداد الصحيحة
  • إرلانج - نوع رقمي مدمج (عدد صحيح ())
  • اذهب - أنواع كثافة العمليات والجرذ من المكتبة الكبيرة.
  • هاسكل - نوع صحيح عدد صحيح
  • جافا - فئة java.math.BigInteger (فبراير 1997)
  • مكتبة OCaml - الأسطوانات
  • مكتبة باسكال / دلفي
  • بيرل - وحدات كبيرة وبيغرات
  • PHP - وحدة BCMath
  • بيثون - نوع طويل مدمج (منذ أن تم إنشاء اللغة ، فبراير 1991)
  • روبي من النوع Bignum
  • سكالا - فئة BigInt
  • مخطط - مع R6RS
  • لغات .NET - فئة System.Numerics.BigInteger (ظهرت في .NET Framework 4.0 ، منذ ما يقرب من 10 سنوات)


2. إذا قام صاحب العمل بتجميع قائمة مسبقاً ، فمن الضروري عزل الأجزاء الشائعة للغات التي سيتم مناقشتها في المقابلة.

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

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

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



3. بضع كلمات عن الجزء الرياضي. في الحياة ، نادراً ما نتجاوز حدود الحساب العادي. تستخدم وحداتنا إنجازات الجبر والتحليل الرياضي. دع العبارات التالية تساعدك على تذكر ، حتى لو لم تكن سطحية ، حيث يتم استخدام المعرفة المنسية عمليًا.

التحدي. لماذا كانت أرقام الهواتف خمسة أو ستة أرقام لفترة طويلة؟ بالنظر إلى سلسلة من الأرقام - أي واحد ليس مربعًا كاملاً؟ كم عدد الحافلات في مدينتك التي لديها أرقام مربعة كاملة؟ كم عدد الأعداد الأولية حتى 100 هل تعرف؟ كم تبلغ نسبة جميع الأرقام من 1 إلى 100؟ اسمحوا 2 ، 3 ، 5 ، 7 تكون الأعداد الأولية ، والعثور على عدد الأعداد الأولية يصل إلى 100. كم عدد العمليات الحسابية التي كان عليك القيام به؟ حل نفس المشكلة على MS Excel للاختبار الذاتي بطريقتين.

التحدي. كيف يتم استخدام الانتفاخات والتقرحات في الممارسة؟ إعطاء 2-3 أمثلة على استخدام التقعر المحدب.



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

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

5. يُنصح بفهم اتجاه المقابلة: هل تكتب الخوارزميات بنفسك أم ستضطر إلى الاحتفاظ بمجموعة من خوارزميات الطرف الثالث ، والتي سيتعين ترتيبها في النهاية؟

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



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

التحدي. كم عدد إصدارات لغة Pascal التي ظهرت خلال السنوات الـ 25 الماضية؟ وضح نقاط القوة والضعف لكل نسخة.



7. يُنصح بحضور حلقة دراسية واحدة على الأقل حول الخوارزميات وتنفيذها في حلول معلومات جاهزة في مجال معين.

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

8. للمورد للمبرمجين مهام لتدريب القدرة على معالجة المعلومات والخوارزميات المعقدة للبرنامج. نقدم أدناه الحل "وجهاً لوجه" ، لكنه ليس مثاليًا ولا يمثل سوى بيان الحالة من وجهة نظر لغة برمجة عالية المستوى. نظرًا للصياغة غير الدقيقة بدقة لنص المهمة نفسه ، قد لا تتوافق إجاباتك مع الإجابات التي قدمها مؤلفو هذه المهمة.

المهمة 489 من مشروع أويلر


هيا G(a،b)هو أصغر عدد صحيح غير سالب نمن اجل ذلك GCD $ (n ^ 3 + b ، (n + a) ^ 3 + b) $ لديه أكبر قيمة ممكنة.
على سبيل المثال G(1،1)=5منذ ذلك الحين GCD $ (n ^ 3 + 1 ، (n + 1) ^ 3 + 1) $ يصل إلى الحد الأقصى للقيمة 7 دولارات في ن=5دولاراولديه قيم أصغر في 0n<5. هيا H(m،n)=ΣG(a،b)ل 1am، 1bn.
ومن المعروف ذلك H(5،5)=128878دولاو H(10،10)=32936544. البحث H (18 ، 1900) دولار .

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

بضع كلمات أخرى إذا لم تستطع حلها.
إذا كنا نتحدث عن الحد الأقصى المحلي ، فيجب أن تكون الإجابات أقل ، ولكن بعد العمليات الحسابية ، يتضح فجأة أننا نتحدث عن الحد الأقصى العالمي ، والذي لا توجد حوله كلمة في نص المشكلة.
وحتى الآن ، هناك شك في ذلك GCD $ (n ^ 3 +1444 ، (n + 1) ^ 3 + 1444) = 1 $ لأي ن. أي نسوف تتناسب مع واضعي المشكلة؟

رمز لمثال الحل
public class Start { static BigInteger[] GcdExtended(BigInteger a, BigInteger b) { BigInteger res[] = new BigInteger[3]; if (b == BigInteger.valueOf(0)) { res[0] = a; res[1] = BigInteger.valueOf(1); res[2] = BigInteger.valueOf(0); return res; } res = GcdExtended(b,a.divideAndRemainder(b)[1]); BigInteger s = res[2]; res[2] = res[1].subtract((a.divideAndRemainder(b)[0]).multiply(res[2])); res[1] = s; return res; } public static void main(String[]args) throws IOException { BigInteger i; BigInteger j; int n,n1; BigInteger temp; BigInteger temp1; BigInteger count; FileWriter fileWriter = new FileWriter("c:/temp/terribleanswer.txt"); n1=1; count=BigInteger.ZERO; i=BigInteger.ZERO; j=BigInteger.ZERO; temp1=BigInteger.ZERO; temp=BigInteger.ZERO; for (int a=1;a<19;a++) { for (int b=1;b<1901;b++) { for(n=1;n<;n++) { j=((BigInteger.valueOf(n)).pow(3)); j=j.add(BigInteger.valueOf(b)); i=(((BigInteger.valueOf(n)).add(BigInteger.valueOf(a))).pow(3)); i=i.add(BigInteger.valueOf(b)); int comparevalue = j.compareTo(i); if (comparevalue==0) { temp=GcdExtended(i,j); } else if (comparevalue == 1) { temp=GcdExtended(j,i); } else { temp=GcdExtended(i,j); } int compareTemp = temp.compareTo(temp1); if (compareTemp == 1) { temp1=temp; n1=n; continue; } } String fileContent = a + ";" + b +";"+ temp1 +";"+ n1 + "\n"; temp1=BigInteger.ZERO; count=count.add(BigInteger.valueOf(n1)); n1=1; try { fileWriter.append(fileContent); } catch (IOException e) { } } } String fileContent = count + "\n"; try { fileWriter.append(fileContent); } catch (IOException e) { } fileWriter.close(); } } 


9. أتمنى لك إجراء مقابلة على مستوى جيد!

محدث قبل نشر النسخة الإنجليزية من المقال ، نعطي بعض غير تافهة
نسب وجدت بعد التحديث العميق للحل أعلاه. عند حساب ما يصل إلى ن=500،000،000دولا.
GCD $ (n ^ 3 +1444 ، (n + 1) ^ 3 + 1444) = 56298673 ، n = 28147170 $ ؛ GCD $ (n ^ 3 +1445 ، (n + 1) ^ 3 + 1445) = 14094169 ، n = 14092001 $ ؛ GCD $ (n ^ 3 +1446 ، (n + 1) ^ 3 + 1446) = 56454733 ، n = 28225197 $ ؛ GCD $ (n ^ 3 +1447 ، (n + 1) ^ 3 + 1447) = 14133211 ، n = 14131040 $ .

Source: https://habr.com/ru/post/ar438498/


All Articles