SDET Daily’s::Backtracking Part 2::My Microsoft Interviews

I’d like to dedicate this post to talk about my Microsoft interviews. I`ve learnt a lot from it, and I will list some of what I learnt  through the post.

Before I begin, I’d like to write my definition for Interviews trials, especially for fresh-graduates:

Interviews trials are like a chain of failures, that ends with a success link.

The most thing I don’t like is …

كفاية عنجليزي, حبة عربي بقي, تحيا مصر يا عم

meme-faces-white-background-epic-win-HD-Wallpapers

التجربة الأولي في بلاد الأتراك

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

سافرت تركيا و كانت فسحة كميلة جدا, الواحد كان مفحوت في وسط المشاريع و خصوصا مشروع التخرج و شغل الإي سي إم و كانت فرصة الواحد يغير جو, ميكروسوفت تقولك إنت هتسافر بلد معينه عشان تعمل إنترفيو إعرف إن الست الوالدة دعيالك بضمير, لأنك هتتفسح ببلاش, طيارة, فندق, أكل, تاكسيهات و غيره, كل ده علي حساب ميكروسوفت, يعني إنت رايح باشا, تقول الكلمتين اللي عندك و ترجع بيتكم تاني تكمل اللي كنت بتعمله. مؤخرا ميكروسوفت كانت بتسفر دبي و تركيا و المكانين أنضف من بعض

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

المبرمج الصح هو اللي يعرف يهري في أي جوافة 

إتسألت سؤالين تيستنج و 3 أسئلة إكتب كود و إعمله تست, و أكتر انترفيو فيهم معلمه معايا اللي الراجل فتح قدامي لابتوب عليه و يندوز 7 و قالي أتست إن حاجة معينه شغاله و عايز يعرف أعملها تست إذاي, الفكرة إني كنت أول مرة أشوف ويندوز 7 في حياتي و مكنتش منزله عندي علي الجهاز و لا جربته, فاللي هو شعور: أنا سعيد إنك سألت السؤال ده, طبعا الراجل إتقفل مني لأني قعدت أهري كتير و موصلتش لحاجة, لأني مش فاهم هو عايز إيه, و ده أول حاجة إتعلمتها

متجاوبش علي سؤال غير لما تتأكد إنك فاهمه كويس, و مش عيب تسأل و إعمل هندي

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

  • 1st Problem: Find the duplicate number in a sorted array of size N where only one number is duplicate. The numbers will be in the range 0 to N-1 inclusive
  • Input 1: 1 2 3 4 5 6 6 7 8
  • Output 1: 6
  • Input 2: 1 1 3 4 5 6 7 8 9
  • Output 2: 1
  • I wrote the O(N) which uses the sequence sum mathematical formula,  and the interviewer asked me to get a O(log N) solution, I figured one that uses the binary search and I was asked to test my O(log N) solution extensively.
  • 2nd Problem: Convert a binary search tree to a doubly circular linked-list by setting the Next, Prev pointer fields of the Node struct of each tree node.
  • 3rd Problem: It was somehow complex, and It was related to a problem in MS Word application – remember that I was being interviewed with MS Office team -, in the text Encoding detection module, and I was asked to write something in which I deal with a byte buffer, and I had to deal with these bytes and make some dirty bit-masking work to detect some patterns.
  • 4th Problem: Test the Font dialog in the Notepad.exe application.
  • 5th Problem: Test the Screen Lock feature of MS Windows 7 (the one with “Press Alt+Ctrl+Delete to log in).

جاوبت علي قد ما أقدر, بس إترفضت و أنا كنت حاسس, بس الجميل إني لما سألت الريكروتر إيه المشكلة اللي عندي, قالتلي مش هينفع أقولك, دي بولسي في ميكروسوفت,  سابتني كده, مفرقتش معايا كتير لأني كنت حاسس إيه اللي عكيت فيه

و طبعا إترفضت, و أنا مكنتش زعلان لأن مستوايا مكنتش راضي عنه, و عكيت شوية, و مكنتش فت نت, خيرها في غيرها

مشاكل التجربة التركية

المشاكل اللي كانت عندي في التجربة دي تتلخص في إني كنت بتسرع في الإجابة قبل ما أتأكد إني فاهم السؤال كويس, و إني مكنتش كفاءة في إني أحل مسائلة برمجة معقدة علي السبورة و أنا وقافع لأني متعود علي الفيجوال ستوديو أو علي ورق و أنا قاعد براحتي و كنت بتلخم ساعات

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

    التجربة التانية في شرم الشيخ

    بعد ما اتخرجت قدمت تاني, و المرة دي عملت إتش أر فون انترفيو و كالعادة الكام سؤال المحفوظين بتوع الإتش أر, الحمد لله عديت و بعد كده قالولي هتعمل تيكنكال انترفيو في فندق ماريوط الزمالك, و دي كانت في الحارة المزنوقة ذي ما بيقولوا, لأننا كنا بنعمل إنترفيو في الأوضة بتاعة كل إنترفيور, ميكروسوفت كانت معفنة في الحركة دي, بس عديها

    عملت إتنين إنترفيو في ماريوط واحدة إتش أر و واحدة تيكنكال و عديت منهم الحمد لله و اللي فاكره إني إتسألت سؤال واحد تيكنيكال و كان سؤال تقليدي

  • Problem: Write a function that reverses a sentence in-place
  • Input: Hello World I am EPIC
  • Output: EPIC am I World Hello

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

    Programming Interviews Exposed: Secrets to Landing Your Next Job, Second Edition

    و حليت كل المسائل اللي فيه الحمد لله, الكتاب مفيد جدا و أنصح بيه أي حد مش هيندم, ممكن تلاقي كلام إنته عارفه قبل كده, بس في العموم هتستفاد.

    إتعودت إن عندي فولدر كده فيه كل الإستعدادات لأي إنترفيو, مجمع فيه الحاجاتي اللي منها أراجع و أسترجع معظم الحاجات الواقعة, في أخر البوست هحط لينك عليه الفولدر ده عشان الفايدة تعم برضه

    المرة دي أنا راح الإنترفيو و أنا واحد مختلف تماما عن البني أدم اللي عمل إنترفيو في تركيا. ليه؟ ليــه؟ ليــــــه؟ قولتلي ليه, جميل, أقولك أنا

    في الفترة دي كنت شغال في شركة إن تي بي سوفتوير, و كنت بقالي بتاع 3 شهور شغال يعني كنت بدأت أفهم أنا شغال في إيه, و دي فرصة إني الاقي حاجة كبيرة أتكلم عليها بجانب مشاريع الكلية, و في نفس الوقت جنب الشغل كنت بقرا كتاب

    Windows via C and C++, Fifth Edition

    الكتاب ده بيتكلم عن حاجات فضائية في الويندوز ذي

    User/Kernel Objects, Process and Threads, Thread Synchronization Techniques, Windows Memory Architecture including dealing with Virtual Memory in details, DLLs and DLL Injection Techniques (Was the most OMG part for me), Windows Structured Exception Handling, etc..

    الكتاب ده غير مفهومي عن البرمجة, لأول مرة بقيت فاهم البرنامج اللي أنا بكتبه الويندوز بيشغله إذاي لمستوي من التفاصيل أنا مكنتش أتخيله, الكتاب ده أنا بعتبره الزتونة للويندوز بروجرامنج – أنا قفلت من كلمة “بروجرامنج” و أنا بكتبها, أنا أسف, نصيحة لأي شاب جييك ليه في قلة الأدب و السفالة في البروجرامنج إنه يتجه علي الكتاب ده و هيدعيلي كتير

    التالي هو سرد لل 5 إنترفيوهات اللي عملتها حسب ما أنا متذكر

    First Interview:

  • Talk about a project you are proud of, what have you learnt and problems faced you
  • A developer in the company wrote a SHUFFLE function that shuffles an array of integers, and we don’t have access to its source code, implement a function with the following definition bool TEST_SHUFFLE(int inArray[], int outArray[]); to test the SHUFFLE function which returns TRUE if outArray is a real shuffle of inArray, and FALSE otherwise. The inArray is the original array provided to the SHUFFLE function and outArray is the output of the SHUFFLE function.

    Second Interview:

  • Discussion about my graduation project and artificial intelligence
  • Design and Implement a string class to be used by Microsoft developers Third Interview:
  • Discussion about a certain project I have been interested in
  • Write a pseudo-code of a Driver for hard-disk that acts as a request dispatcher, the driver should accepts I/O requests from the file system and dispatch them to the hard disk, the hard disk receives I/O requests on 4 registers (R1, R2, R3 and R4), and is able to process 4 requests only at a time, the sequence that the hard-disk process the requests is not depending on the sequence of adding the requests in the registers, and it’s the hard-disk job to optimize the order of requests processing.
  • The hard-disk will fire a software interrupt (callback) to the driver indicating the completion of one of the requests place in one of its 4 registers.

image

    Fourth Interview:

  • You are a member of the CLR team and you want to decide the triggers that fires the garbage collector, i.e the events on which the CLR engine asks the garbage collector to work. Fifth Interview:
  • You are to write the program for a land telephone that accepts a string of characters and convert them to the corresponding numbers

    الحمد لله مستوايا كان أفضل بكتير من أول مرة, لكن في نفس الوقت مكنتش راضي عن نفسي 100% بس كنت حاسس إني أديت كويس في العام و كنت متوقع إني بنسبة كبيرة إتقبلت و هيدوني أوفر لأن كذا إنترفيور كانوا مبسوطين حسب ما كان واضحلي و أنا كنت بجاوب كويس إلي حد ما, بس في وسط كل ده أنا عارف أنا عكيت في إيه و إيه الحاجات اللي عايزة تتظبط, و عارف إني لو متقبلتش إيه الحاجة المؤثرة اللي وقعتني, و دي أهم ملكة في كل الليلة دي, إن الواحد يعرف يحس بنفسه, و دي بتبقي نعمة و فضل من ربنا علي الواحد. إترفضت برضه مرضيوش يقولولي إيه المشكلة اللي عندي كالعادة, بس قالولي إن الأماكن الموجودة مش مناسبه, و مش راضيين يوضحوا أي تفاصيل, طيب أنا كويس ولا وحش؟ أنا عكيت ولا إيه نظام؟ طب أنا مستوايا أقل ولا أعلي من المطلوب؟ معرفتش أخرج منهم بأي حاجة مفيدة, قالولي إنهم لو فضي مكان في حتة في ميكروسوفت مناسب ليا هيكلموني, و دمتم, أنا اعتبرته رفض بس بالذوق و قلت فيهم الخير مش عايزين يقولولي في وشي

    المشاكل اللولبية في التجربة المهلبية

    المشكلة بكل بساطة إني كنت أوفر Open-mouthed smile

    اللي حصل إني كنت قاري الكتاب المذكور سابقا بتاع الويندوز بروجرامنج و إتعلمت حاجات جديدة كتير في الشغل الجديد, فكان عندي كمية معلومات كتيرة عرفتها في وقت قصير و ده من فضل ربنا عليا, و كان نفسي بأي طريقة أوصل لميكروسوفت إني كويس و أستحق أشتغل عندهم عشان أعرف كل المعلومات التنينية دي, و ده عبط طبعا, و ده إنعكس إني كنت ببقي أوفر و أنا بجاوب, كنت بحاول أستغل كل الحاجات المتقدمة – مرضتش أقول أدفانسد, خليني ساكت – اللي قريتها مؤخرا في حلولي حتي لو هي مش مستاهلة, و طبعا ده مش صح, هقول أمثله أحسن هتوصل أنا قصدي إيه أفضل من 100 وصف

    Design and Implement a string class to be used by Microsoft developers

    سؤال بسيط و سهل و محفوظ و مش محتاج أي تحور, أي بني أدم عاقل واعي هيعمل مثلا

  • Default and Non-trivial constructors, e.g MyString(const char*)
  • Copy constructor
  • Equality operator ==
  • Assignment operator =
  • Indexing operator []
  • Append string method
  • Length property

و يكتب الهيدر بتاع الكلاس و ي إمبليمينت 3 او 4 حاجات و هو و وقته, و اللي ميلحقش يعمله يتناقش فيه مع الإنترفيور

العبد لله بقي كتب الهيدر بتاع الكلاس و قفش في ال كونستركتر و قعد يكتب فيه طول الإنترفيو و مخلصهوش, واحد يقولي إيه الهبل ده, أقولك عندك حق و أنا مش زعلان منك, أنا فعلا بستهبل, ليه؟ قولتلي ليه؟ جميل, أقولك

الحتة الجاية دي محتاجة إنجليزي معلش عشان الصورة توصل, فاصل و نعود

  • I tried to show him that I know Windows Programming, and I trated characters as TCHAR, which is defined as char (1 byte) if code compiled in ASCII or unsigned short (2 bytes) if code compiled as UNICODE, and this implies using the generic string _t*  functions, (e.g _tcscpy instead of strcpy), and the _T( ) or TEXT( ) macros
  • I tried to show him how I write secure code by using the _t*_s functions (e.g _tcscpy_s instead of _tcscpy)
  • I tried to use the Windows Programming Hungarian notation and coding convention (m_pszStr, p_pszSrcStr, etc..)
  • I raised the discussion of how will I allocate memory to hold the copied string in case of the Non-trivial, Copy constructors and the assignement operator, and spent a lot of time discussing and writing its code. Consider the following constructor which initializes MyString object with a copy of src string through MyString::MyString(char* src)
    A simple straightforward implementation would be:

    MyString(const char* src) : buffer(NULL), length(0)

    {

      if (src != NULL)

      {

        size_t srcLen = strlen(src)

        if (srcLen > 0)

        {
          buffer = new char[srcLen + 1];
          strcpy(buffer, src);
          length = srcLen;
        }
      }
    }

Simple enough, and could do the work. But I went beyond simplicity and forgot myself. Simply:

أنا عديت الفلنكات

I spent the whole interview discussing how to write the memory allocation line:

buffer = new char[strLen + 1];

I told the interviewer that there are many ways to perform this memory allocation. I told him that we can use:

  • Windows Virtual Memory (VirtualAlloc)
  • C Run Time library (new and malloc)
  • Process Heap (HeapAlloc) and raised the issue of whether to use process default heap or create a dedicated heap for string allocations.

He discussed with me the advantages and disadvantages of each method, and I told him that I will choose VirtualAlloc over the others and told him my reasons. I started to write the constructor code but unfortunately I spent the rest of the interview writing the constructor implementation, and I didn’t implement any other MyString method.

نرجع عربي بقي, العربي حلو مفيش كلام

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

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

طبعا نفس الموضوع كان في السؤال التاني بتاع الهارد درايفر, أفورت برضه في الحل و التفكير, و إتباعي لنفس الإسلوب الأوفر في أكتر من إنترفيو إدي إنطباع إني مش بعرف أرتب تفكيري و مش بعرف أوظف قدراتي كويس, و ده مش مقبول طبعا

أنا كنت متأثر كتير بإني عندي معلومات كتير و كنت عايز أظهرها كلها, بس للأسف طريقة العرض مكانتش مناسبه, و الموضوع جه بالعكس

التجربة الأخيرة في بيتنا بالترنك

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

عملت الإنترفيوهات كلها علي حاجة إسمها ميكروسوفت ميتنج صوت بس من غير صورة, و كان فيه بورد برسم عليها لو عايز أوضح أي حاجة و مكان أكتب فيه كود, كانت حاجة ظريفة جدا

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

السؤال الوحيد اللي فاكره في الإنترفيو هو

  • Problem: Design and implement a board class to be used by board games like chess that acts as a container for the board objects (e.g for chess the board is container for Pawns, Bishop, Queen, etc..)
  • I consider this question an open-ended question, because you have a lot of design decisions to take, and everything is possible
  • I decided to write a generic template abstract board class and implement its concrete methods.

الحمد لله الموضوع كان سلس و إتقبلت و صار بيا الحال إلي ما أنا إليه دلوقتي و لله الفضل

سنك كــــام؟

lanshonالتجارب دي أكدتلي علي أهمية الخبرة العملية, أنا قريت كتير عن الإنترفيوهات و حضرت كورسات و عملت إنترفيوهات لناس في الأنشطة الطلابية, و كنت معتقد إن ده هيساعد لما أبقي في موقف اللي بيتسأل و هعرف أسد و الموضوع محتاج بس الواحد يحط التتش بتاعته و الموضوع هيعدي بالسنس, بس طلع إعتقادي مش صحيح, مفيش شيء يغني عن التجربة العملية مهما حصل

كان لازم أترفض مرة و إتنين و أعك كتير عشان أعرف مشاكلي و عيوبي, لأني طول ما أنا قاعد في بيتنا مش بجرب نفسي مش هفرق كتير عن كوز اللانشون

 

الزتونة

oliveالمحصلة من كل اللي أنا بهري فيه, إنك متقعدش في بيتكم و إبدأ قدم في الشركة اللي نفسك فيها, و إترفض و إعرف عيوبك, طور من نفسك, و قدم و إترفض تاني موراكش حاجة, و إترفض تالت و رابع طالما كل مرة بتطور من نفسك و حاسس إن فيه تطور, و ربنا مش هيضيع سعيك و جهدك و خليك واثق في كده

و حط في بالك إن الشغل ده رزق, المهم تسعي, و متبقاش متسرع و عايز تشوف نواتج بسرعة, لما تبقي مستعد هتلاقي الشغل جايلك مستريح

اللينك ده أنا مجمع فيها حبة حلويات, دي الحاجات اللي كنت براجع منها قبل الإنترفيوهات

إعتذار واجب

أنا بعتذر عن إني كتبت كلمات إنجليزي بالعربي (ذي إتش أر, بروجرامنج, إنترفيور, و غيرها من الكلمات الفصيلة) بس الغاية تبرر الوسيلة, اللي يهمني إن المعني يوصل و أتمني إنه يكون وصل فعلا, للأسف مكنش قدامي غير كده لأن “وورد بريس” عنده مشاكل في ميكس عربي من إنجليزي

من المرة الجاية إن شاء الله هبدأ أتكلم عن شغلي الجديد

دعواتكم بقي

Advertisements
%d bloggers like this: