Back in November 2014, I went through some round of interviews with Microsoft Hyderabad (MSIT). Sharing that experience with you all.
Microsoft has the following business units in India –
- Microsoft Corporation (India) Pvt. Ltd. – It has offices in Bangalore, Ahmedabad, Gurgaon, Chennai, Hyderabad, Kochi, New Delhi, Pune, Mumbai, and Kolkata. Mainly deals with the Marketing/Sales of it’s products and services.
- Microsoft IT (MSIT) – It has only one office in Hyderabad. Deals with internal IT projects. Internal doesn’t mean only internal to MSIT but can cater to projects for customers of MS who are using MS offerings e.g. a website dealing with Windows Azure licensing.
- Microsoft India Development Centre (MSIDC) – It has two offices in India, Hyderabad and Bangalore. Deals with Development of some of the products offered by MS.
- Microsoft Services Global Delivery (MSGD) – It has two offices in India, Bangalore and Hyderabad. Deals with consultancy and providing solutions to different industrial sectors like Banking and Financial Services, Insurance, Retail, Health Care, Life Science, Manufacturing and Logistics etc.
- Microsoft India Global Technical Support Centre (IGTSC) – It has two offices in Bangalore. Deals with the Technical Customer Support for various products and services.
- Microsoft Research India (MSR) – It has only office in India, Bangalore. Deals with Research in almost all the areas of Computer Science and Engineering.
When I got the call from MSIT Hyderabad for an interview, for an opportunity to work with Microsoft, I was not sure what role was I supposed to play if I get selected(one true confession – I did not ask for the role since I wanted to go through the interview process to know about MS interviews and I did not want to miss my first opportunity to get drilled by one of the Software Giants and believe me, “the experience was quite different” – forget about “I got selected or not”).
They will mostly ask questions related to the skill-set and projects you have mentioned in your resume. There were 4 rounds of interview (each, of around 1 hour) – 2 telephonic and 2 face to face. Now, let me give you a brief about the sort of questions I was asked –
1) 1st round (telephonic) –
a) ASP. NET(Web Forms,MVC & RESTful Web API) – Questions on ASP .NET pipeline, differences between ASP.NET Web Forms and ASP.NET MVC w.r.t the pipeline, In which scenarios one is better over the other. In ASP.NET Web API (or any Restful Service implementation), is it recommended to use PUT and Delete verbs? Why not? How would you then implement functionalities provided by these verbs? Also w.r.t REST, questions might be asked related to the Richardson Maturity Model.
N.B. -> Some more ASP.NET MVC questions
b) .NET Core Framework – Differences between Dispose and Finalize, How the Garbage Collector works, Brief about Garbage Collection Algorithms, Garbage Collection Generations etc.
c) Concurrent Programming – What is TPL(Task Parallel Library), Explain the Concurrent Programming Evolution in .NET and the rationale behind the design choices. Given a chance to redesign TPL, how would you go about it.
d) LINQ and Entity Framework – When to use IQueryable over IEnumerable and vice versa, Are the number of query operators in IEnumerable and IQueryable same?(yes or no and you need to justify your answer about why do you think so i.e yes or no). Impact of Deferred execution in IEnumerable and IQueryable, Best Practices for IQueryable and IEnumerable.Does Entity Framework handle Transactions by default and if not then how to handle Transactions while using EF, What is something in EF that you don’t like and how would you go about re-designing EF to mitigate the flaw?
N.B. -> Some more EF questions
e) Architecture – Some basic questions on Extensibility and Maintainability. Questions on Enterprise Application Architectural Patterns like Repository Pattern, Unit of Work Pattern etc. Questions on Domain Driven Design (including CQRS and Event Sourcing – scenarios where these should be used). Relation between DDD Bounded Context and Entity Framework DBContext. What is Eventual Consistency and explain a scenario where Eventual Consistency should be the optimized way to go (providing proper rationale for the same)?
2) 2nd round (telephonic)-
a) WCF – Some scenario based questions on WCF Instancing, Concurrency and Security(including certificates). Also some questions on WCF Architecture and Extensibility(again scenario based).
b) Software Design – You will be given a scenario (fictitious or non-fictitious) and you need to design that. Basically what Object Oriented Principles (including S.O.L.I.D principles) and Design Patterns you will use to design the scenario and you will have to give proper rationale for your design decisions (mainly the Design Pattern choices). Also you might be asked, why you opted for Design Pattern A rather than Design Pattern B for some given scenario.Also you might be asked questions on IoC/DI like have you ever used IoC to implement something other then DI? If yes, why did you opt the IoC approach rather then some simple approach and how did you do that?
c) Performance – How do you analyze a performance issue end to end, Tools to find Performance bottlenecks (mainly what sort of Profilers you have used, although Fiddler also acts as a good tool to some extent to troubleshoot Performance related issues), questions on out-proc Session usages,Which one is better – Session State Server or SQL Server based Session Server and why. CDNs & JS Minifiers. ADO.NET and Entity Framework related Performance issues, Tackling DB Performance issues(indexing, sql hints, execution plan, hardware scaling etc),Even after applying proper indexing, sql hints, your DB is performing slow – what could be the reason? Optimistic and Pessimistic Concurrency related questions and their relation to Performance as a whole.
3) 3rd round (face to face) –
a) Current Project Architecture – Explaining the architecture of the most recent project you have mentioned in your resume. Will ask you questions based on the architectural and design decisions taken and any flaw found somewhere, you need to give proper justification for the same. If both of you agree that there was a design flaw then need to give the solution that will refactor that design flaw.
b) Technology Selection in your Current Project – Why did you use LINQ in your project? In which scenarios LINQ should not be used? Why Entity Framework and not ADO.NET? In which scenarios you should use only Multi Threading and not Parallel Programming? When is it really beneficial to use Parallel Programming? Is there any advantage of using Parallel Programming in a single core machine? Why did you use MQs and why not ESBs or Brokers(& why not Microservices approach)?
N.B. -> Although during Nov 2014 I was part of a pure Web Application project(using some custom proprietary UI and App Frameworks, which was challenging) but was there for just around 3-4 months only, so I just did a cursory mention about this project in my resume but strongly mentioned about the project that I had worked before the Web Application project extensively(for almost 2 and a half years), which was a Workflow and Integration based project(although this project also had UIs, but was developed using normal ASP.NET MVC, I feel the challenging part in this project was the Long Running Processes and Integration with other Java and Mainframe based applications via MQs). In the Workflow and Integration project, the technologies mentioned in the aforementioned questions (section 3b) were used and that’s why I was asked these questions (section 3b). As I already mentioned earlier as well, they mostly ask you questions related to whatever you have mentioned in your resume.
c) Performance – Questions asked were almost similar to questions asked in interview round 2(c). Also another question asked was – What is the significance of SQL Server Stats?
d) Process, Project Delivery and Team Handling – What is so great about Agile and TDD? In what kind of Projects would you opt for them? How to handle changing requirements? Questions on Automated Testing. How would you handle a project where your team is not that competent but you still need to deliver it on time?
4) Final round (face to face) –
a) Architectural Discovery – When you analyze an Architecture, what is the checklist you check? How do you ensure Performance and Scalability? How do you ensure Maintainability and Extensibility? How do you ensure Reliability?
b) Architectural Alternatives– Explain the architecture of your current project (here again Design flaws, if any, will be discussed – reason for choosing an asynchronous architecture over synchronous etc) and suggest some alternative architecture(s), stating the pros and cons of your alternative architecture(s).
c) PoCs – When and why do you need to perform PoCs?
d) Patterns – Have you developed something in any of your earlier Project which you can say is a Pattern (Architectural or Design) of it’s own? Have you refactored any existing pattern to suit your project needs?
e) MS Technology you don’t like -Which MS Technology you don’t like and why? Given a chance to improve that technology, what suggestions you would give to MS to improve it? How would you actually architect/design/implement those suggestions?
f) MS Design/Code Refactorings – Have you ever felt that if MS could provide “this offering” in the Core .NET Framework or any other Frameworks, it would be great? What are those offerings and why do you think those offerings would be beneficial? What suggestions would you give MS about how to design/implement those offerings?
g) Risks – What type of Risks (Technical, Process or Delivery) did you face in your Project(s) and how did you mitigate those risks?
h) Value Added Service – Has there been a scenario wherein you proactively suggested the client to follow approach A (say some Architectural or Design Decision) rather than following approach B? Basically, how did you add value to any of your Project by going against the wave? How was your suggested approach better (architecturally or design wise) than the other approaches?
i) Strength and Weakness – What are your strengths and what are your weaknesses? How do you handle your weaknesses and your over-strengths?
j) Why MS? – Why do you want to join MS? What do you think, why MS should hire you?
k) An Idea can change yours or someone else’s life – Given 1M$ to you, how would you invest it in some unique idea which will use technology? Details of the idea and how technology will be beneficial to implement that idea. How would that idea be beneficial for the Society as a whole? Need to tell about the technologies that will be used and rationale behind the Architectural/Design/Implementation choices to implement the idea.
That’s all I have for now.
P.S. -> I think the MS interview process has been one of the best experiences in my career. They not only test your technical skills(depths as well as breadths, to certain extent) but also your creative and imaginative skills. And I think most of the Software/IT firms should drill candidates in some similar way and why only firms, in fact, it’s beneficial for the candidates as well since such a process ultimately leads to their(including mine) overall growth.
And by the way, if you are a Computer Science fresher and want to join firms like Microsoft or Google or the like, you need to be very well prepared in Mathematics for Computer Science(questions here might be asked in the form of puzzles), Data Structures, Algorithms and basics of Distributed Computing for sure.In fact, these streams lay the foundation for AI(Artificial Intelligence) and it’s allied branches. Some firms test your skills in other areas like SDLC, Estimation(e.g. How many windows are there in India? – don’t worry, they just want to check your approach/thought process, you need not know even the approx number since they also don’t know that 🙂 ), C Programming/C++ Programming, DB Design, SQL and Software Design (OOAD/Design Patterns/UML) (as far as this link is concerned, you can go through the resources mentioned in the Basics and Design Patterns sections to have some level of understanding of OOAD and Design Patterns, skipping the Inversion of Control/Dependency Injection part, since as a fresher, I don’t think you need to know that but if you have interest you can – for UML you can refer UML Guide from Source Making while for questions on UML, you can refer UML Interview Questions Part 1 and Part 2). And by any chance, if you have interest in Computer Science in general and want to have basic understanding of almost all the breadths, you can refer NANDToTetris site or Invitation to Computer Science (I love the title given to this text – another text I love, atleast by the name given to it is How would you move Mount Fuji – God knows from where on Earth they come up with such an intriguing title for a puzzle book and by the way, this is also a form of creativity and imagination 🙂 ).