Microsoft SDE Intern Interview Experience
💼 LTIMindtree Interview Experience (On-Campus) | Fresher | 2026
Salesforce SMTS | Interview Experience | Rejected
JPMC | SDE2 (Associate) - Java Backend - Interview Experience + Compensation
Microsoft - SDE2 - Coding Round
Avalara | SSE | Pune | April 2024 [Offer]
Summary
I recently interviewed for a Senior Software Engineer position at Avalara in Pune and successfully received an offer. The interview process comprised a hiring manager discussion focusing on system design and behavioral aspects, followed by an in-depth technical round covering project architecture, object-oriented design, data structures, and Java/SpringBoot specifics.
Full Experience
My interview process for the Senior Software Engineer role at Avalara consisted of two main rounds.
Hiring Manager Round (1 hour)
This round began with standard behavioral questions and a detailed walkthrough of my resume. We delved into various architectural decisions, discussing the trade-offs between microservices and monolithic architectures. I was also asked about database design principles for microservices, specifically when to choose SQL versus NoSQL databases. The interviewer also questioned me on SOLID design principles, asking how I had applied them in my past projects, and challenged me to design a singleton class.
Tech Round (1.5 hours)
The technical round was quite comprehensive. It started with a deep dive into my projects, where I discussed topics like SQL sharding and indexing trade-offs. We then moved onto Kafka, covering concepts like offset IDs, scaling Kafka in an ECS environment, and a comparison between SQS and Kafka. A practical scenario was presented: "How would you debug a production bug?" for which I had to provide a detailed approach.
Next, we revisited SOLID principles with a specific problem: Given concrete classes Savings and Current Account extending an abstract Account class (with abstract withdraw and invest methods), what changes would be required if a new Fixed Deposit class only supports invest but not withdraw? I had to identify the relevant SOLID principle and also confirm if multiple inheritance is possible in Java.
For Data Structures, I was asked to discuss different ways to find a loop in a linked list and to implement the "Integer to Roman" conversion for numbers from 1 to 1000.
The discussion also covered SpringBoot, focusing on annotations, the difference between constructor vs. annotation autowiring, and Junit tests. Finally, in Java, we talked about core OOPS concepts, the distinction between interfaces and abstract classes, and a scenario to identify method overloading vs. overriding.
I was ultimately selected for the position.
Interview Questions (21)
Discuss the advantages and disadvantages, and appropriate use cases for microservices architecture compared to a monolithic architecture.
Explain considerations and best practices for designing databases specifically for microservices architectures, including data ownership and consistency.
Compare SQL and NoSQL databases in the context of microservices, outlining scenarios where each would be a more suitable choice.
Design a thread-safe singleton class, demonstrating different implementation approaches and discussing their pros and cons.
Explain the concept of SQL sharding, its benefits, challenges, and different strategies for implementation.
Discuss the trade-offs associated with using database indexes, including their impact on read/write performance and storage.
Explain what an "offset ID" signifies in Apache Kafka, its role in consumer groups, and how it is managed.
Describe strategies and considerations for scaling a Kafka cluster when deployed within an Amazon ECS (Elastic Container Service) environment.
Provide a comparative analysis of Amazon SQS and Apache Kafka, highlighting their architectural differences, use cases, and when to choose one over the other.
Outline a detailed, systematic approach for identifying, diagnosing, and resolving a bug that has occurred in a production environment.
Given an abstract Account class with withdraw and invest methods, extended by Savings and Current Account. If a new Fixed Deposit class only supports invest, describe the necessary changes to the class hierarchy to adhere to SOLID principles.
Identify which specific SOLID principle is primarily addressed or violated by the described account class design scenario, and how to rectify it.
Discuss whether multiple inheritance is supported in Java for classes, and if not, explain the mechanisms Java provides to achieve similar functionality (e.g., interfaces).
Explain and compare different algorithms to detect the presence of a cycle (loop) in a singly linked list and potentially find the starting node of the loop.
Implement a function that converts an integer (within the range of 1 to 1000, inclusive) to its Roman numeral representation.
Discuss common and important annotations used in SpringBoot applications, explaining their purpose and how they facilitate development.
Compare and contrast constructor-based dependency injection with annotation-based autowiring (@Autowired, @Qualifier) in the Spring framework, discussing their advantages and disadvantages.
Explain how to write effective unit tests using JUnit in a SpringBoot application, covering aspects like test setup, assertions, and mocking.
Discuss the fundamental concepts of Object-Oriented Programming (OOP), including encapsulation, inheritance, polymorphism, and abstraction, with examples.
Explain the key differences between interfaces and abstract classes in Java, their use cases, and when to choose one over the other.
Given examples of methods with similar names or signatures, identify whether they represent method overloading or method overriding, and explain the rules governing each.