My Behavioral Interview Notes
Use the STAR answer format
- Situation - The interviewer wants you to present a recent challenge and situation which you found yourself in
- Task - What were you required to achieve? The interviewer will be looking to see what you were trying to achieve from the situation. Some performance development methods use "Target" rather than "Task". Job interview candidates who describe a "Target" they set themselves instead of an externally imposed "Task" emphasize their own intrinsic motivation to perform and to develop their performance
- Action - What did you do? The interviewer will be looking for information on what you did, why you did it, and what the alternatives were
- Results - What was the outcome of your actions? What did you achieve through your actions and did you
1. Tell me a little bit about yourself.
时长 1 分半,高度概括经验,不要太细节。回答包含三个部分: 过去、现在、未来。
个人版
I am a Software Engineer with 3 years of hands-on experience. I am very familiar with Java, Spring Framework, Spring Boot as well as Python, JavaScript and TypeScript. I am also familiar with microservices architecture and system design. I love coding and I did various personal project that you can see on my resume.
For my educational experience, I got my bachelor's degree in Electrical Engineering in 2019 and I graduated from Tulane University this year.
For my professional experience, I worked as a Software Engineer for contractor and a Machine Leanring Engineer for internship in China. I participated in developing the algorithms on Recommender Systems, Coupons Distribution System in the e-commerce scenario, and as a team member, I also designed and maintained a Push Notification System, which is used to send messages, email, and push to users.
My tech stack includes SQL, NoSQL, CI/CD, Cloud Native platform, Message Queue, Redis, and Big Data Tools. So with strong skills in Programming, I believe I can help to contribute to your products to improve user experience.
工作版
I'm a Java Developer with 6 years of working experience. I'm familiar with Java, Spring Boot, SQL/NoSQL database, Message Queue like Kafka, CI/CD tools such as Docker and K8s, and Cloud Platforms. Additionally, I master other programming languages such as Golang, Javascript, and Python.
My most recent project was at Walmart, where our team maintained and developed an internal Push Notification System, which was not customer-facing. This system was used to send messages to internal Walmart staff. A typical scenario is like when a customer places an order or comes to pickup, we send a message to notify our staff to prepare in advance and let them know when and where the customer will come.
Our system, which is based on a microservice architecture, utilizes Java, Spring Boot, Kafka, SQL database, K8s, and Google Cloud Platform. Our system handles a daily message volume of more than 20 million with a TPS of 300.
I am responsible for 3 main areas, the first is developing back-end RESTful APIs for new features, such as recording the behavior of users using our system and recording the data of messages sent by users. The second is to discuss with manager, tech lead and optimize the system features, for example, we need mass push features, because our current system takes a long time to do a mass push, so we need to refactor certain features. The third one is operation and on-call, handling issues from internal users and fixing bugs.
I have a passion for programming and problem-solving, and I am confident that I can bring these skills to contribute to your team. Additionally, I am a strong team player and willing to work collaboratively to achieve common goals.
2. Describe your favorite/most proud/most challenging project
你觉得项目里最难的点是什么?为什么?
- Situation:
- An E-commerce live stream is a scenario where a streamer is selling products, and users come in to watch the live streams and place some orders. Our task was to develop a model to distribute personalized coupons to different users who enter the live stream to push them to order as much as possible.
- Task: We have several tasks to do:
-
- define the technology stack for model.
-
- develop the design of the system.
-
- develop the schedule for the project development, which was scheduled by the leader.
-
- when the feature is released, how do we evaluate the system? This is the metrics we need to care about when we do online A/B Testing. We choose GMV, conversion rate, and usage rate as our evaluation metrics.
-
- Action:
- I was new to this area meanwhile no person in our team have experience in it.
- We tried to find some similar implementations online. We reviewed some classic papers in this area , and I tried to search and read Engineering blogs from other companies, such as TikTok, Alibaba and Uber.
- We finally chose to use the uplift model, which was a causal inference model, used to predict the impact of different treatment effects on different users.
- We need to estimate the number of users that will come into a live stream and the QPS from previous traffic records. This data helped us to design the system. We needed to get the results within 200ms. To achieve low latency, we used Redis to store feature data for all active users in advance. In this way, we can reduce the load of our service.
- However, we still needed to choose the model branch, because the uplift model has different model ideas. To choose a model with higher accuracy or a model that was faster and simple. I was responsible for testing the performance of different model ideas on our data. I modified the code, queried the data, trained the model over and over again. Finally, I found the better model branch named Meta-Learner and our team decided to use it.
- Results:
- How did it work online? When a user’s request comes, we will go to retrieve the user’s feature from the feature database in real time, and combine the current features like device and location to predict the real sensitivity of current user. Based on this sensitivity, the distribution module will distribute coupons.
- Considering the possible increase in QPS, we planed to predict the sensitivity of active users in advance and saved them in Redis database, to reduce the load of service.
- We implemented the model successfully within the given time, and our solution received positive feedback because it is working well. Our online performance was better than the baseline model, including GMV(total sales amount) and ROI. Throughout this process, I learned that it is important to be curious and keep learning, try to read as many technical blogs or articles as you can, the more you read, the better you’ll ace a problem. Never say “I don’t know how to do it". The feeling of ownership is very important.
Push Notification System
- Situation:
- The most challenging project I've done is a Push Notification Platform during my contractor career. The platform is used for sending messages, email, and push to users, and we will store the tracking data in the database. The operators in our company can send messages to customers according to some business requirements and check the delivery of push notifications by searching in the database and logging system.
- Task:
- It is a microservices system with multiple services like API service, Processor service, Logging service, Data Pipeline service. The core idea of the system is use Kafka as the Message Queue for sending push requests, and we implement the Processor service for each message method, like call the Public Cloud Service like Ali Cloud, in US, it's like Google's FCM service or Apple's push service. We also use Flink which is a Stream data computing framework for clean and analyze the records. Then my role is to develop and maintain the backend APIs for searching and tracking records. We store message records into both Database and Redis, then develop RESTful APIs for operators to track the performance of push.
- I think the challenging parts of the project was that it's a big microservice project that included multiple service modules. We need to design the system carefully and then take into account various situations. There are so many business and system issues we need to think about.
- Actions:
- First, system always start small and sclae up. We had Architecture Discussion Meeting, to discuss the traffic and QPS. It started out as a Spring framework project, we made a version plan, released new features every 2 weeks, and planned to upgrade from 1.0 to 2.0, which was a SpringBoot framework project.
- Second, we need to keep the system with hign availability, like to prevent sending to duplicate users, like we use a traffic limiters to keep the API secure and prevent from being called many times in a very short period of time, which maybe a common attack method from outside.
- Third thing, when using Kafka, we still have a lot of questions to be assured. Like, how to prevent consuming duplicate messages? how to do if we have error messages in our Kafka.
- Although I was mainly responsible for the developing the back-end APIs, I also did some things, such as CI/CD, testing, deployment, debugging.
- After the message request is consumed, we need to record and track the message and store it into the storage. This requires us to use big data technologies like Flink and Hive. Both team members and I have no experience in this area, so we need to learn the similar implementation Online, like other company’s documentation and GitHub.
- Results:
- Finally, we successfully completed the project and updated it from version 1.0 to version 2.0. Our system can keep high performance and high availability. Our operations can use it well, both in regular days and holidays.
3. Tell me about a time you had to make a decision to make short-term sacrifices for long-term gains.
-
Situation: The example that comes to my mind is that I was an intern in the data science department. At that time we were doing analysis about user data, we collected the user's behavior data in the process of using the app, and we needed to analyze the user's statistics each month based on the data.
-
Task: We would change some metrics every month, but in general it's much the same. The previous process was to do the calculations and analysis manually through a software, which usually took a few hours or a day. We want to improve this process by writing a Python program that we also can use in the future.
-
Action: I had another project I was working on, but since I was familiar with Python, I came to do this task. First, I went through the documentation to learn the reason behind analyzing the metrics, the business logic, and why we needed to analyze the metrics such as active users, NPS, ROI, and so on, and then the process of calculating most of the metrics was complex but reusable. I finished developing the code by testing and searching on Github in 3 days.
-
Result: Finally, to verify, we did the calculations manually and with my program respectively, and the final results were the same. I successfully reduced the process time from several hours or even a day to 5 minutes. We can all use this program again in the future. I think this is a time that I make a decision to make short-term sacrifices for long-term gains.
4. Why us? Why this position?
- 描述对公司的了解
- 文化认同
- 描述对岗位的了解
- 说明自己的能力足以胜任这份工作
- Amazon is a top internet company with a strong focus on customer experience. And there are a lot of talented people in amazon creating amazing products to make people’s life better.
- Amazon web service is an online platform that provides scalable and cost-effective cloud computing solutions, prividing a number of services like Storage, Computing, Networking, CDNs and so on.
- AWS has a about 40% market share, making it the king of cloud computing service providers.
- Like one of the leadership principles Learn and Be Curious. I'm always seeking the ways to learn new knowledge and improve myself. I can learn and use groundbreaking technologies in AWS.
- Another one is Ownership, I never say "that’s not my job.". I faced a number of issues and problems. I fixed so many bugs. I learned a wide range of knowledge from Machine Learning, front end, to back end, from Python to Java, I configured databases, servers, containers like Docker, I deployed web applications, set up load balancing servers. I also performed a load test via JMeter.
- I know this position's job is to
- SDE: Develop back-end services and create everything possible.
- SDE: Develop great system that can be successfully delivered to customers.
- SRE: Help customer to use Big Data services and Machine Learning solutions.
- SRE: Communicate with customers and resolve customer issues.
- In addition, My skills match well with your company's tech stack, including Java, Python, SQL, NoSQL, JavaScript, Docker, Redis, Message Queue, microservices and so on. So I want to join to make contributions to your product.
5. 为什么离开上一家公司? 通常是大小公司,为什么想离开大公司来小公司?
- 充分肯定之前的工作
- I did learn a lot from my last job.
- I want to change to a new environment to learn something new.
- I have a great passion for exploring new areas.
- Start-up
- I love the culture and atmosphere of a startup. People have a lot of passion to do meaningful challenges.
- Startups have a faster product cycle than large companies, and I can go through the full product development lifecycle, from design to development to testing to release.
- Large scope of work. I have more opportunities to be exposed to different technologies at the same time, such as front-end and back-end collaboration, such as testing and system design. I can contribute more to our app.
- Big Tech
- Better technical blogs and documentation. It's a larger platform.
- I will have small scope of work. Maybe I can only design and develop a service or API in a huge system.
- I can access system scenarios with very high traffic and very many users. For example, our product has 100 million users, which will create more difficult problems for the system design and upgrade. This is a scenario that is not available in smaller companies.
6. My expectation about this position career goals? What's do you see yourself in 5 years?
- In the first 3 years, I see myself becoming a passionate learner as a software engineer. I plan to deep dive into development, understand areas that can be improved on, and keep learning and improving myself.
- First, I will get a solid foundation in coding, review and documentation.
- Second, I will read more tech books and get in touch with different projects
- Third, I will learn more about system design and complex scenarios. So that I can take on better challenges, and grow with the company in the future.
- For the next five years, I see myself becoming a solution provider in my team.
- First, I will build the team's technical sharing and documentation.
- Second, I can participate in tech stack selection and guide the direction of project iteration in the future.
- Third, I want to say that I am one of the best SDEs on the team. My job is to not only contribute my skills but also mentor other SDE to improve their skills and growth.
7. Tell me about a time when you took on something significant outside your area of responsibility. Why was it important? What was the outcome?
对应 Dive Deep. 如何做好职责之外的事情.
Team Documentation
-
At that time, I was an intern at short video platform company. Our team's business was relatively new, so we had a lot of information that was not very complete. I was willing to work on the team documentation.
-
I documented our tools, including how to use them and how to apply them at the company, like servers and Redis, and I documented the details of our database and tables, like which tables were used for what. I collected our previous projects as a summary and set up a space for our knowledge sharing. I also recorded our APIs and code format.
-
After that, we faced similar problems and we always can find solutions in the documentation. New team members can get familiar with our business logic and technology quickly through the team documentation.
Team Database Management
-
At that time, I was an intern at short video platform company. Our team was working on a machine learning project in e-commerce scenario. In e-commerce scenario, there are always a lot of databases and tables, and we also need to maintain a lot of feature tables and data for training.
-
However, the memory and computational resources given by the company to each team are limited, we cannot increase our database, we have to optimize the database we maintain.
-
I am willing to do this task. I created a document and a form for my team members to fill in their database information, then I checked and summarized the information, we discussed and deleted the unneeded databases, and categorized the remain data tables.
-
In the end, we kept enough useful databases to save a lot of resources for the company. And we didn't have to maintain data tables that weren't in use, which also saved us work time.
8. Tell me about a time when you missed a deadline?
Yes, definitely. Personally I think the primary purpose of a deadline is to be used as a guideline and effort estimation. Deadline should never be used to measure the quality of your work.
When I was a Software Engineer contractor in China, I was assigned a ticket to build a Input validator for our Push Notification System. The ticket is complicated because it involves understanding of business requirements and usage of Regular Experssion Library. I was given a week to do that so I guess that was my deadline. It took about the same amount of time to complete the ticket itself. However when I report my progress to the team's standup, I asked for additional 2 days because the functionality was missing unit test and unit test was not part of the estimate at first.
I made it very clear that, without unit test I am not confident to release this feature and maintain it going forward in the future. As a result, I spent more time to make it product-environment ready.
Did I miss the deadline? Yes. But it was't necessarily a bad thing. Often time people are scared by deadlines because they think that missing deadlines is like a low performer. But in my opinion, we should focus on the quality of work and how to deliver a better product to our customers. So don't be negatively inspired by deadlines.
9. Tell me about a time you successfully worked with a difficult coworker to complete a task
10. Provide a specific example of a time you had to juggle multiple projects simultaneously
11. Give your steps to problem-solving
- Step 1: Understand the problem: The first step is to make sure that I fully understand the problem at hand. I read and read the problem description until I have a clear understanding of what is being asked.
- Step 2: Gather information: I gather all the necessary information and requirements that may be needed to solve the problem. Typically, resolving complex problems in development involves collaborating with multiple teams, gathering input from their unique perspectives, and communicating and discussing with each team.
- Step 3: Break down the problem: I break the problem down into smaller, more manageable sub-problems or tasks, like tickets. This helps me to focus on specific parts of the problem and also makes it easier to track my progress.
- Step 4: Consider different solutions: Once I have a good understanding of the problem and have broken it down into manageable tasks, I brainstorm different solutions to the problem. I try to think of both traditional and out-of-the-box solutions, weighing the pros and cons of each.
- Step 5: Choose the best practice: I evaluate the different solutions I have brainstormed and choose the best one based on the requirements, constraints, and any other relevant factors.
- Step 6: Implement the solution: Once I have chosen the best solution, I start implementing it. I start with the most critical parts first and iterate as needed until the solution is complete.
- Step 7: Test and refine the solution: I test the solution thoroughly, identifying and fixing any issues that arise. I also refine the solution, optimizing it for performance, usability, and other factors as needed.
- Step 8: Document the solution: Finally, I document the solution, including any code, diagrams, or other relevant information. This makes it easier for others to understand and maintain the solution in the future.
12. Tell me 1 thing you have learned within the past 6 months
- Item 1: Reflect on your experience 反思过去的经历
- Item 2: Explain what you've learned
回答思路
- Example 1: Learned new technology
- Example 2: Gained leadership skills