Phone Interview Preparation
Phone Interview Preparation
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.
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.
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.
3. Open Source
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
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.
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.
- 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?
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.
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.
- 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
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.
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:
Search optimization:
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 {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;
@Service
public class AvailabilityService {
Vague specifications:
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:
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.