0% found this document useful (0 votes)
14 views14 pages

Phone Interview Preparation

The document outlines a structured approach for preparing for an interview, including how to initiate a conversation, discuss background and skills, express motivation for the role, and demonstrate passion for the company. It also covers key technical knowledge such as REST APIs, open source contributions, and problem-solving experiences from past internships. Additionally, it provides insights into personal strengths, challenges faced, and lessons learned during previous work experiences.

Uploaded by

mguan2002
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views14 pages

Phone Interview Preparation

The document outlines a structured approach for preparing for an interview, including how to initiate a conversation, discuss background and skills, express motivation for the role, and demonstrate passion for the company. It also covers key technical knowledge such as REST APIs, open source contributions, and problem-solving experiences from past internships. Additionally, it provides insights into personal strengths, challenges faced, and lessons learned during previous work experiences.

Uploaded by

mguan2002
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14

How to start the phone conversation:

- Hello, this is Matthew. May I know who is speaking?


- I’m doing well, thank you. I am excited about the opportunity to interview with [company]
OR Nice to speak with you. How are you today?

If someone else initiates the conversation:


- Yes, this is Matthew. Nice to speak with you.

1. Tell me about yourself (Type: Your background/skills)

I am a graduate student at UIUC studying Computer Science. I previously had a software


engineering internship and have a solid foundation in technologies such as REST APIs,
JavaScript, and Java. I have several internship and project experiences regarding designing,
implementing, and testing REST API.

Centric Software really caught my interest because of its mission to enhance the product
development process for the consumer goods industry.

2. What are you looking for in your next role? (Type: Motivation)

I look for an opportunity to further refine my skills in software development and API development
in order to help build innovative PLM software solutions for your company. After reading the job
description for the role, I feel this role is a great match for what I’m looking for, so I am excited to
interview for this position and learn more.

3. Why are you interested in company? (Type: Passion for company)

Virtru is the industry leader in data-centric security and encryption.

I have a strong interest in using technology for digital privacy, so your company’s
mission to make data-centric security easy really inspires me.

I also really like your company’s products such as Virtru Data Security Platform and
Virtru for Google Workspace. It’s really impressive how many leading universities and
schools report success using Virtru products for email encryption.

Therefore, I am very interested in joining Virtru as an intern.

5. Salary expectations (Type: Motivation, passion for company):


I am open. My primary motivation is really my passion for your company’s products and
services.

3. Please walk me through your resume. (Type: Your background/skills)

Sure, I’ll be happy to walk you through my resume.

I'm currently pursuing a Master of Computer Science at UIUC with an expected


graduation date in May 2025. Prior to this, I earned my bachelor's degree at UCLA,
graduating in June 2023.

In terms of technical skills, I have a strong foundation in technologies such as Java,


Node.js, and AWS.

For my most recent work experience, I am a frequent contributor to the Ruby on Rails
open source project since September 2023. In this role, I collaborated with the team
using version control to enhance core functionality of the framework. I resolved over 30
critical bugs , and contributed extensively to the documentation.

I also worked as a Software Engineer Intern at Pullscription. There, I built and


maintained the backend using JavaScript. One of my most notable accomplishments
was initiating and implementing from scratch a subscription billing feature using the
NodeJS framework, leading to a $20,000 increase in company revenue.

Overall, my experiences and technical skills make me well-equipped for the


responsibilities outlined in your job description. I am looking forward to contributing to
your web development team.

3. Open Source

Why open source?

Open source projects offer an opportunity to work on real-world, impactful software.


The sense of contributing to something larger than myself and knowing that my work is
accessible and beneficial to a wider community is incredibly rewarding.
Additionally, contributing to open source has allowed me to strengthen my technical
skills. I am grateful to receive feedback on my code during code reviews from
experienced developers. This has pushed me to write cleaner, more efficient code.

Why Ruby?

One of my friends works at a company that uses Ruby as its technology stack. He has
mentioned many pros of the Ruby programming language, such as its elegance and
simplicity. This made me more interested to learn more about the language.

After doing some research on the Ruby language itself, I liked its readability and
simplicity. It is a very expressive language. This in addition to the vibrant Ruby
community solidified my decision to contribute to Ruby open source.

3. Internship

What was the most important takeaway from the internship?

Besides acquiring several technical skills, I learned the impact of effective collaboration
as well as the iterative nature of the software development process.

During my time at Pullscription, I had the opportunity to work closely alongside other
teams besides my own towards a common goal. The experience taught me the
importance of clear communication, not only within my own development team but also
with other team members as well as customers.

Additionally, the internship exposed me to the iterative nature of the software


development process. Good software cannot just be written in one go. We frequently
engaged in agile methodologies, conducting frequent code reviews and receiving
feedback from other developers as well as customers. This iterative process not only
improved the quality of our code but also fostered a culture of continuous improvement.

4. Why are you interested in company? (Type: Passion for company)

Beckman Coulter Diagnostics is the world’s leader in clinical diagnosis. I am someone


who really cares about using technology to advance the quality of healthcare, so your
company’s mission to improve patient outcomes really attracts me.
I am also impressed by your company’s products, such as when your urine chemistry
analyzer saved turnaround time by over 60% and saved countless lives at a leading U.S.
hospital.

Therefore, I am very interested in joining Beckman Coulter as an intern.

9. Describe your most challenging project? (Type: Problem solving)

Situation: I developed a messaging application using Spring Boot for people to exchange their
feelings about the pandemic. The project was done for a hackathon in early 2021, at the height of
the Covid pandemic. The frontend framework I used was React. The backend framework was
Java Spring Boot,

Task: The most interesting part was when I wanted to deploy this web app onto AWS,
the generated website js build file was very large, over 10 KB, which would make
deployment very slow.

Action: To solve this issue, I read a lot of source code on Github, particularly regarding
the open source libraries I had used. I consulted with my teammates to see what ideas
they had, and tried many times. After digging deep, I found the problem lied in a React
third party component (used React as prod instead of dev dependency). I carefully
studied the code used to create that component and rewrote the component to better fit
the needs of my app.

Result: generated file size shrunk from 10KB to 7KB, which reduced deployment time
by a factor of 10. Successful deployment of web app to cloud. From this experience, I
learned about the process of solving challenging technical problems.

10. Do you have any questions for me?

- When hiring for this role, what are some of the most important qualities you look for in a
candidate?
- Next steps: if I am selected to move forward, what would be the next steps in the
interview process?
- What are some examples of intern projects in past years?
- What challenges do you see ahead for this role?
- If I am hired for this position, what would the expectations be of me in 30/60/90 days?

11. Strengths/”Describe yourself”


I'm a quick learner and eager to learn new technologies. An example of when I was a quick
learner was when I was preparing for my internship at Pullscription. Pullscription’s website is
mainly implemented using Typescript programming language. Since I had never used
Typescript in my university courses, I needed to learn Typescript quickly in order to make
meaningful contributions in my internship.
To address this challenge, I created a detailed learning plan. I began by researching the
Typescript documentation and taking online courses on Udemy to gain a foundational
understanding of the technology. I also joined relevant mailing lists and forums to connect with
other developers using the same technology, enabling me to ask questions and share
knowledge.

Recognizing the importance of hands-on learning, I completed a few small projects using
Typescript on my own and published them on Github. I gained a lot of confidence working with
Typescript. In my internship, I was very comfortable in Typescript and made several major
contributions.

12. What do you know about this role?


From reading the job description, I understand that I will have the opportunity to collaborate
with the development team to build world-class innovative solutions that will move healthcare
forward. I also understand that you are looking for experience in NodeJS, version control, and
database management systems, which I have.

15. Biggest mistake and what you learned from it

Challenge: In my internship, I was in charge of creating a demo for a new feature that would
correctly recommend products for customers to buy based on their past purchases. The
deadline was very tight, and I needed to finish it within a week. I paid too much attention to the
details, specifically model runtime performance, because I wanted to make the classification
system perfect. However, I did not notice I wouldn’t have sufficient time to finish all the details.

Action: When the manager pointed this out, I apologized to him and proposed a way to keep the
demo. I explained that it was okay to prioritize getting the demo ready before the deadline over
runtime performance. The customer would not notice the slow inference time because this was
a demo. After I presented the demo, I rewrote the model code to improve the performance.

Result: At this point, the customers really liked the demo and it was a success. Although I was
able to finish the demo before the deadline, I learned the importance of focusing on the bigger
picture from this experience. While details are definitely important, I also need to pay attention
to the entire project schedule. As always, I need to keep good communication with my manager
and update them frequently about my plans.

16. Tell me about a time you received criticism from a manager? How did you react?
I don’t receive criticism often, but when I do, I take it positively and think about how to improve
my performance at work.

Challenge: In my internship, I was working on releasing my project code to another team in the
form of a PR. However, my manager told me he is not satisfied with the documentation.
Although they are suitable for teams familiar with our feature, they are not easy to understand in
general.

Action: I proceeded to reflect on what he said. I agreed that I should not just improve code
quality but that documentation is just as important. I then implemented my manager’s feedback
by providing more examples of how to use the new API. I rewrote parts of the documentation
using simpler language. I consulted with my manager to update him with my progress and
ensure he was able to easily understand my descriptions.

Result: Finally, there are no more issues with my PR and it was successfully merged. I received
an official thanks from the other team and my manager for my work.
MVC: design pattern used in defining architecture of a web application. Treat web
application as three parts, model view controller
Model: interacts with database and manages data
View: frontend
Controller: glue between M and V. Handles business logic, fetch data from M and send
to V.
Ensures separation of concerns, modularity for easy testing

Terraform:
IaC tool to provide an automated way to manage cloud infrastructure resources, such as
VMs.
Install AWS CLI, Terraform will do its job by making API calls on the CLI
Create terraform files provider.tf and main.tf./
Link Terraform with AWS using required providers aws source=”hashicorp/aws

Run terraform init, will initialize plugin system to interact with AWS
Create file to create new EC2 instance and then run terraform apply
Terraform.tfstate file to view instance state

Kubernetes:
I have a solid understanding of the fundamentals of Kubernetes when it comes to
managing application deployments. In my Bed & Breakfast project, I implemented and
managed a Kubernetes cluster to orchestrate containerized applications for a
microservice architecture. This included working with Pods, Deployments, Services, as
well as scaling resources based on demand. Additionally, I have started contributing to
the Kubernetes open-source project using Golang to further sharpen my knowledge of
this technology. I am eager to learn more during this internship.

Pods : smallest deployable unit, one or more containers with same Ip address
Services: provide endpoints for external access of containers, also load balances client
requests within the pods of a deployment

Create a docker image for each microservice. Create kubernetes deployments for each
microservice. Create Kubernetes service to denote how external clients will access the
microservice.

REST API Interview preparation


How would you design a REST API?
- Clarify requirements of the application (purpose, what resources will be exposed)
- Define meaningful URI/endpoints for each resource. Specify HTTP verb for each API
- Clearly define the representation format for the resource (JSON, XML)
- Test API using Curl or Postman
- Document the API using Swagger

What do you know about REST API?


- Architectural style that provides a uniform interface for the client to communicate with
web server to access resources
- Resource oriented architecture, where each resource corresponds to a unique URI and
HTTP verbs are utilized to perform CRUD actions on those resources
- Stateless: server does not store information about the client between requests. This
improves scalability and cacheability of the system design
- Resources can have multiple representations (JSON, XML) depending on client

How to improve rest API performance?


- Caching: On client-side, using HTTP caching headers such as ‘Cache-control’ and on
server side, use proxy servers and CDN
- Compress payloads using gzip
- Implement load balancing to distribute requests among multiple servers
- Optimize database queries using indices

What are the disadvantages of REST?


- Not suitable for real-time or persistent connections (e.g. instant messaging)
- Long polling is inefficient and consumes system resources, WebSocket would be better

How would you test a REST API?


- Use curl or Postman
- Create new request, enter HTTP verb and url endpoint, add request body, inspect HTTP
response
- Use environment variables (base_url, api_key) to reuse values across multiple requests

Tell me about open source experience

Kubernetes: In my open source contributions to Kubernetes, I collaborated closely with


the development team, using my skills in Golang and AWS to implement both feature
enhancements and bug fixes.One of my most notable contributions was Integrating
AWS Lambda and DynamoDB services into Kubernetes applications which expanded my
skills in cloud-native development. In order to implement the bug fixes, I used
problem-solving and debugging skills. I have become adept at analyzing and diagnosing
the cause of issues and implementing effective solutions. I also became proficient in
using version control. I gained expertise in managing branches, resolving conflicts, and
collaborating effectively within a distributed version control system.
Ruby: I used my problem solving and debugging skills to resolve 8 critical issues with
the RoR framework. One of my most notable contributions was implementing database
transaction logic to resolve data consistency bugs with the ORM. I have become adept
at the problem solving process for solving challenging technical problems. I also
became proficient in using version control. I gained expertise in managing branches,
resolving conflicts, and collaborating effectively within a distributed version control
system.

Problem solving process:

- Issue analysis (work together with the end user to understand the problem)
- Reproduction in environment
- Carefully examine relevant parts of the code to identify potential causes
- Debugging tools and logs
- Propose solution, have discussion with members of the team
- Implement change with unit tests
- Code reviews, update as needed

Specific time you solved challenging problem:

Challenge: In my experience with contributing to RoR open source, I faced a challenging


issue with the nested database transaction logic of the Active Record module. There
was unexpected behavior when deleting an item from the database after a nested
transaction rollback, leading to a lack of data consistency.

Action: In order to solve this issue, I dove deep into the Active Record source code on
the Github to gain a better understanding. I engaged in discussions with the team to
gather their insights and tried many times. After inspecting the relevant source files and
using debugging tools, I realized the method for database deletion did not handle
savepoint transactions. I proposed to the team a solution to add callbacks to the
deletion logic, taking into account nested transactions. After getting their approval, I
implemented the proposed change and throughout the process, I maintained constant
communication with both team and the end user to keep him updated about my
progress.
Result: After testing and code review, the change was successfully merged into the
codebase. From this experience, I learned about the process of solving challenging
technical problems.

Internship experience overview:

Last summer I worked as a software engineer intern at Pullscription. My main role was
managing the backend of the comic subscription tools portion of the company website,
which provides business automation tools for comic book retailers to manage inventory,
customer invoices, and payments. One of my major contributions was implementing a
credit card authorization feature using Node.js and Stripe API to securely process 500+
credit card payments from subscribers. Throughout the internship, I sharpened my skills
in AWS and JavaScript as well as gained valuable experience in implementing best
software engineering practices.

REST API:

- Objective: Efficiently upload 10,000 product images from bookstores to the AWS
cloud
- Design REST API with performance considerations
- Implement AWS IAM for access control/to ensure bookstores could only upload
items to their own S3 bucket

Challenge: When uploading images to the cloud, some comic retailers have reported it
was taking them over 20 seconds to upload each image.

Solutions: Implement a chunking mechanism to break down large files into smaller
pieces, and use multithreading on the backend to process each chunk in parallel.

Steps: Setup and configure AWS SDK, define REST API endpoint for image upload,
determine chunk size, create array of tasks for parallel process, async parallel to
process the tasks

Each task will have s3 bucket, payload, content type. It will call s3.upload.

Payment authorization:

- Security, error handling, and testing


- Design payment form using Stripe Elements library, the payment form will have
fields to enter card information as well as validation. Button will trigger a REST
API call to the backend to process payment with payload: card number, cvv,
payment amount. The information will be tokenized for security.
- Backend will have a rest api to process payment. It will create a Charge object in
Stripe using the passed in token and amount. It will handle errors and return
them to the user as appropriate.
- Testing: Postman, Stripe

Search optimization:

REST API vs RPC:

REST used for client/server interaction, RPC for microservice interaction


REST advantage is simplicity, ease of use, (JSON is human readable) but increased
payload size
RPC has efficient and more compact binary data serialization formats(protobuf), leading
to fast performance, although REST has built in caching support due to HTTP

MVC: design pattern used in defining architecture of a web application. Treat web
application as three parts, model view controller
Model: interacts with database and manages data
View: frontend
Controller: glue between M and V. Handles business logic, fetch data from M and send
to V.
Ensures separation of concerns, modularity for easy testing

Terraform:
IaC tool to provide an automated way to manage cloud infrastructure resources, such as
VMs.
Install AWS CLI, Terraform will do its job by making API calls on the CLI
Create terraform files provider.tf and main.tf./
Link Terraform with AWS using required providers aws source=”hashicorp/aws

Run terraform init, will initialize plugin system to interact with AWS
Create file to create new EC2 instance and then run terraform apply
Terraform.tfstate file to view instance state
Kubernetes:
I have a solid understanding of the fundamentals of Kubernetes when it comes to
managing application deployments. In my Bed & Breakfast project, I implemented and
managed a Kubernetes cluster to orchestrate containerized applications for a
microservice architecture. This included working with Pods, Deployments, Services, as
well as scaling resources based on demand. Additionally, I have started contributing to
the Kubernetes open-source project using Golang to further sharpen my knowledge of
this technology. I am eager to learn more during this internship.

Pods : smallest deployable unit, one or more containers with same Ip address
Services: provide endpoints for external access of containers, also load balances client
requests within the pods of a deployment

Create a docker image for each microservice. Create kubernetes deployments for each
microservice. Create Kubernetes service to denote how external clients will access the
microservice.

Microservice communication:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;

@Service
public class BookingService {

private static final String TOPIC = "room-booked-topic";

@Autowired
private KafkaTemplate<String, String> kafkaTemplate;

public void makeBooking(Booking booking) {


// Logic to make booking
// Once booking is made, publish an event to Kafka
kafkaTemplate.send(TOPIC, "Room booked: " + booking.getRoomId());
}
}

import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;
@Service
public class AvailabilityService {

private static final String TOPIC = "room-booked-topic";

@KafkaListener(topics = TOPIC, groupId = "availability-group")


public void consume(String message) {
// Logic to update availability based on the booking event
received
System.out.println("Received booking event: " + message);
}
}

Vague specifications:

Challenge: During a software development project, I encountered vague specifications


surrounding the user interface requirements for a new feature. The client had a general
idea of what they wanted but had not provided detailed requirements regarding design
preferences.

Action: I took initiative to schedule a meeting with the customer to better understand
their needs. During the meeting, I carefully listened to what he was saying and asked
probing questions to uncover specific functionalities they wanted. I clarified my
understanding of his expectations to confirm we were on the same page.

I then communicated with the development team the key takeaways from the meeting
to guide the implementation. Throughout the development process, I maintained
constant communication with the client, providing demos and seeking feedback on the
implemented features to ensure the end product aligned closely with the client’s
evolving vision.

Result: This iterative process resulted in a final product that closely matched the
customer’s expectations. It reinforced the importance of effective communication in
overcoming vague specifications.

Career plans:

I plan to leverage this internship opportunity to enhance my skills in software


development and deepen my understanding of the technologies relevant to the projects
here. During this internship, I plan to actively engage with the development team,
contributing to projects that expand my technical abilities.

Looking ahead, I envision myself a few years from now as a more experienced engineer in this
company taking on more complex projects. I hope to have a stronger understanding of how the
frontend and backend of applications work together. I also hope to use my skills to mentor
others.

You might also like