Uploaded by hassanramadan4443

Internship Interview Notes for Apple

advertisement
MY
INTERNSHIP
INTERVIEW
FOR
APPLE
Getting the First Mail to Signing the Offer
Rudrank Riyam
© Rudrank Riyam, 2023
All rights reserved. This book or any portion thereof may not be
reproduced or used in any manner whatsoever without the publisher's
express written permission except for the use of brief quotations.
Rudrank Riyam
Twitter: https://twitter.com/rudrankriyam
Blog: www.rryam.com
Prologue
I interviewed with Apple twice, once in December 2019 and the second
around March 2020. I was rejected in the final round of the first attempt,
cleared the latter interview, and successfully interned (remotely) with
Apple Cupertino in July-Sept 2020.
This book contains my experience during both interviews and the notes I
created. It has behavioral, iOS-related, data structures, algorithms
questions, and how I tackled each section.
I hope you learn something from my experience, crack your next
interview and successfully get the internship!
Applying
This part goes back to the fifth semester, around December 2019, when
my final semester exams were going on. I didn’t plan to interview
anywhere for the following summer. Instead, I wanted to apply to
Google Summer of Code again while working on my apps.
Before the second last exam, someone at Apple posted on Twitter that
they wanted to hire interns for summer 2020. With a note that their DMs
were open for a referral. I sent them a subtle introduction and waited for
their reply. The message was:
Hi! I saw this tweet, and I'm truly interested in an internship with the
Applications Accessibility team!
I did a three months summer program under Google Summer of Code
this year to work with an open-source organization. The project I chose
was implementing VoiceOver accessibility for their iOS application,
and I loved the work.
I have applied through the job link provided in the next tweet!
The person asked me to mail them the info (basically my resume) and
provided me with the mail.
First Mail
A few hours later, I got a mail that Apple wanted to interview me. At this
point, I hadn’t given a single coding interview nor prepared for it. So I
asked them to keep the interview eleven days later so that I could finish
my exams. As they mentioned there might be a coding round, I wanted
to start grinding LeetCode as soon as possible.
Resume Grilling
In all the interviews, the interviewer asked me questions from my
resume. Knowing every bit of your resume is a must, so I made notes
about my experiences and how I can gracefully talk about the impact I
made.
Experiences
I interned with a small startup and Google Summer of Code with
Rocket.Chat. I wanted to emphasize the experience gained by GSoC as
it was in the same field as the role of my internship:
Project: VoiceOver Accessibility to Rocket.Chat iOS Application
Primary Purpose: make RC for everyone so their customers can fully
use and enjoy the service while enhancing the experience for low or
no-vision users.
VoiceOver and Screen reader
Allows blind & low-vision users to use a touchscreen
Audibly describing elements of the screen
Pan or swipe
Without this, they’re not able to use the iPhone
Not only for the blind community
Prone to motion sickness in moving car
Benefits
Easier to write tests
Broadening the market and user base
Feels honorable to make a noticeable difference in someone’s life
with my code
Why?
Something to work on that aligns with my interests
Make a difference with my code
Brilliant community
Accessibility Inspector
Displays information properties and values
Action methods and position in the accessibility hierarchy
Scholarships
I won the Apple WWDC Scholarship and Layers Design Scholarship in
2019, which I mentioned after my previous internship experiences.
You’ve to submit essays for it, and I made a few notes from them:
Children with an autism spectrum disorder.
Teach fundamental education about matching, identification, and
naming colors and shapes using assistive games.
Play in 3D and Augmented Reality
Matching identification and naming, used by Special Educators.
Buttons and geometries were visually bigger.
Pre-school students can also play.
I am intrigued to develop exclusively for Apple platforms.
I want to build Apple products to empower others for the rest of my
life.
It's been a year developing iOS applications, and my passion is to
bring technology to create a difference in my own life and the lives of
others; it is growing daily.
The course curriculum is carried out through the traditional
blackboard teaching method, which is problematic for the mother
and the students.
Invests her time to write on board to teach
It uses teaching-learning material (TLM), consumes time to create,
and is expensive.
Not able to give attention per the level of teaching required by a
particular student if they lack behind.
I felt I should work on solving this problem.
And the idea of creating an Augmented Reality game for children
with autism to help them learn struck me.
And I started working on it, putting my soul into designing a solution
for this.
The opportunity to showcase my work came along with the launch of
this scholarship.
The value of education is one thing that I believe.
My parents instilled in my life to do everything with love for learning
and an understanding of the importance of hard work and
dedication.
Talks
I gave a few talks at my local city meet-ups regarding accessibility and
took notes from the presentations I created.
Behavioral Questions
I found online through the interview experiences that behavioral
questions form a good chunk of an internship interview process. This
belief was validated when I was asked similar questions in the interview.
I aligned my answers with the leadership principles at Apple, similar to
what you’ve for Amazon. These are:
Great Products
Simple, not Complex
Ecosystem
Collaboration
Say No
Accept Mistakes
Excellence
Here are the notes I made for the behavioral part of the interview:
Tell Me About Yourself
College - I’m a pre-final year undergraduate majoring in Information
Technology and minors in Economics and Management.
I started my App Development career as an iOS intern at a startup. I
handled the whole responsibility of their main product, creating an
iOS application from scratch for the Android counterpart—
collaborating with the designer and the backend engineer.
I was also involved in developing their second product, for which the
initial codebase was from the first application, which has more than
one million downloads.
I took the application from scratch to the final TestFlight prototype
for three months to showcase to the investors.
After that, I started preparing for WWDC Scholarship. I worked on
building an augmented reality game for children with autism. It was
inspired by my mother, a special educator with 14 children with
autism.
Then, in Google Summer of code, I chose an organization that
valued privacy, and the project I decided on was VoiceOver
Accessibility.
After the program, I was invited to speak at two of my city’s meetups, one on VoiceOver Accessibility at Expedia and one on Dynamic
Type at Tokopedia.
Outside of work, I love writing technical articles and following the
rule of learning by doing a project and then writing a tutorial or
experience to help the iOS community.
I know that the internship requires someone who believes technology
is most powerful when it empowers everyone and is driven to create
an accessible user experience for the Apple Productivity
Applications.
Due to my experience working with Accessibility technology,
collaborating with different teams in my previous internship, and
being a user of the technologies myself (Voice Control) and
empathizing with the customers, I am confident I’ll succeed in this
particular role.
Why Apple?
-
Apple values Accessibility in every aspect of designing their software
and hardware, and I value this a lot, being the user of many
accessibilities features myself. Working in an environment with topnotch Apple engineers who take this as utmost importance is where I
want to grow as a thinker and a programmer.
I love Apple products and applications. I have witnessed how reliable
both the hardware and software are. I have been an Apple user for
five years and have never gone to a service center. My iPod is still
running flawlessly on iOS 9.3
The idea at Apple that technology is most powerful when it
empowers everyone fascinates me.
I have always been excited about helping to ensure that everyone regardless of their ability - has a great experience with Apple’s
products.
I want to intern at a place with an encouraging and growth-focused
workplace culture.
Lastly, my goal aligns with the company to make the best products on
earth and leave a world better than I was born in it.
Why Accessibility?
Accessibility is a critical aspect of the operating system and part of the
user experience for many, myself included. It feels impossible, magical—
but it’s entirely real. And the best part is this game-changing feature that
will immensely enhance many's experiences.
And I believe Accessibility is a human right. And everyone should have
provision to access the software and hardware created.
De ne Empathy
I feel that empathy is the capacity and ability to understand or feel what
another person is experiencing from their point of view—the ability to
put ourselves in someone else's shoes and feel like they do. The many
definitions of empathy revolve around emotional states. I think empathy
is the key to success in anything in life.
Empathy lets you understand and realize, and feel about the customer's
issue and a willingness to help and resolve it. The feeling of connecting
to the customer at an emotional level helps software engineers think
beyond their perspective.
Con ict in Workplace
A conflict at the workplace was during the internship at the startup. The
lead Android developer disliked me and was hesitant that I may not
handle two whole iOS projects on my own as an intern.
He would have much feedback on my implementations, which was
amazing for my growth, but sometimes he needed to be more
moderate.
fl
fi
I was calm in this situation and understood his huge expectations, and I
had to meet those standards.
So, I put in extra effort on my own, ensuring I could work on every
feedback on my code.
One day, after work, we had a lengthy discussion. Putting the
differences aside, I convinced him about my skills with my work, meeting
the deadlines on time, and results.
And he did accept that he had conflicts with my ability as a student, but
my work assured him well, and we were able to create and maintain a
friendly working relationship to date.
It is important to be calm in situations like these, reach a positive
outcome, and have a healthy work culture.
Tell Me About a Mistake
During my internship with rocket chat, I was working on a framework of
the mobile view controller, a mobile player, so we were working on
implementing accessibility. Still, the work that we did was different. It
was another framework, so we had to send a full request to eat first, and
then we did a pod update to the major area in the main repository in the
main project but in the main project.
So I sent a few pull requests in the major project itself, which was for the
mobile player, and it got merged into the better. It resulted in a conflict
in the mobile play, which was now outdated. There was a broken link
between the two frameworks, and I was fortunate enough to realize this
mistake a day before it was merged into master the master branch. I
worked overtime to undo the work, and after this, I made sure that every
time I was sent a pull request, I read ready and did the film work again. I
reviewed the framework again to review my cold myself, so I don’t make
such a mistake again.
I did a framework, and it resulted in redundant work. I was fortunate that
I could close that pull request, and it was still in the alpha request.
And my mentor was patient in this, and he was thankful that we could
point it out beforehand.
Weaknesses
So, during the summer program, I worked as an independent developer
and enjoyed working quickly in my own space. But, sometimes, I find it
difficult to know when to ask for help when I am stuck on an issue. I
learned that it is beneficial for the organization and me if I reach out
early to understand something after my unsuccessful attempts. My
mentors were helpful and had the specific knowledge and skills to help
me with some hints.
I worked a lot on this weakness and produced a higher quality of work
by asking for help when needed.
Strengths
One of my major strengths is that I can give attention to detail while
managing deadlines. For example, I was on my last project during the
summer program, which was the most difficult one. I wanted to replicate
the accessibility experience of WhatsApp Voice Recorder, where you
swipe left to cancel and swipe to lock and record. And also the
recording player where the time is spelled out correctly.
I had one week to complete this project. But, I wanted to finish it
beforehand to test the feature extensively and refactor the code to use it
in the framework. I worked hard during this week and was able to have a
beautiful swipe left to cancel. I tested it continuously manually with the
screen curtain on to achieve an exceptional accessibility experience.
The result was that I could complete the whole feature in one sitting in a
single day, and I loved the work.
Believe in Work-Life Balance?
I believe in a responsible work-life balance, where I prioritize the work
whenever necessary, like near deadlines or a huge event like WWDC.
Toughest Decision in the Past Six Months
The toughest decision I had to make in the past six months was whether
to go into Apple‘s newest framework, SwiftUI.
It was buggy in the beginning, as I heard from the developers in the
community. However, I still gave it a go because of its features and the
simplicity of just focusing on writing the code for the problem you are
solving.
I took the risk and created a portfolio of apps using this framework. I’m
proud of my decision because I could work on the problem I am solving
rather than the nitty-gritty of creating an application using UIKit, like
thinking about implementing dynamic type with the constraints myself.
Ambiguity in Workplace
In the first start-up, they didn’t have their APIs documented, so it was
ambiguous when I had to go and understand their backend.
I was responsible for creating API documentation and system
requirement specification for building the iOS application in
collaboration with the backend engineer when he was not working or
during a break.
So the hard work to create the complete API documentation step-bystep helped me deal with the ambiguity of the API calls and held me in
my three months of internship.
Time When You Were Curious
I was showing a restaurant’s menu to my mother on a specific iOS app
that didn’t support changing the font size, so I was curious about how to
do it and why they didn’t implement this feature. I went through Apple's
documentation and learned about Dynamic Font. Then I was able to talk
about it in a quick meet-up.
fi
De ne Productivity
It makes the user or customer more efficient by allowing them to access
functions like taking notes, mail, calendar, reminders, and shortcuts. +
Word processing, Spreadsheet, and presentation.
It is about the convenience of the best utilization of the time.
For example, I used only the iPad for this semester's examination to
prepare for the exams. In the end, I realized I was more efficient than
using a MacBook and a notebook to take notes and read presentations
and books, compared to having multi-windows on the iPad with the
Apple Pencil. I leveraged the features of iPadOS with floating windows,
which I used for notes, reminders, and music applications.
I think Productivity isn't much about Time Management but about
Attention Management.
Swift & iOS Questions
For iOS-related questions, my aim source of knowledge was Sean Allen
and Brian’s YouTube channel. They’ve detailed videos on the most asked
interview questions for an iOS developer role and some on data
structures.
Apart from that, I just searched the most asked ones on Google. I made
notes on a few of them:
What is Concurrency? Multiple things at the same time. Executed at a
thread. Main thread. All this management is done with Grand Central
Dispatch & NSOperation Queues. Serial & Concurrent Queue. Serial
in one order, Concurrent at the same time, downloading images and
text. Pros & Cons. Serial - Prevents Race Condition. Faster but
unpredictable. 1 Serial, 4 Concurrent. DispatchQueue.main.async
{ self.tableView.reloadData() }
Class REFERENCE, SHARING SAME NOTES, STRUCTS VALUE TYPE,
SENDING MY NOTES TO MY FRIENDS AS A PDF
Delegates and Protocols - Boss and Intern Analogy, one-to-one
communication
Frames vs. Bounds - Frame is superview, Bounds is own view.
Palindrome -> Sets, insert and remove characters.
Most common element -> Keep count of them, and return the array
of the maximum.
Merge Sort -> first split, then merge the results
Two Sum -> Hash table, compliment
Binary Search -> mid index, check value, slice the array.
MVC is a software development pattern made up of three main
objects:
The Model is where your data resides. Things like persistence, model
objects, parsers, managers, and networking code live there.
The View layer is the face of your app. Its classes are often reusable
as they don't contain any domain-specific logic. For example, a
UILabel is a view that presents text on the screen and is reusable and
extensible.
The Controller mediates between the view and the Model via the
delegation pattern. In an ideal scenario, the controller entity won't
know the concrete view it's dealing with. Instead, it will communicate
with an abstraction via a protocol. A classic example is how a
UITableView communicates with its data source via the
UITableViewDataSource protocol.
Why Swift
Open Source.
Swift is easy to learn.
It is approachable.
Built-in error handling.
Memory is managed automatically.
Variables are always initialized before use.
Integers are checked for overflow.
Provides modern programming features.
The switch function can be used instead of the “if” statement.
High Speed & safer performance, Code complexity.
Support of dynamic libraries.
Features of Swift
More impressive structs and enums
Protocol oriented
Optional Types
Type Safety and Type inference language
Not required to use semicolons
Enforced initializers
Safe by default
Less code, fewer files
Forced Unwrapping
Tuples
Closures
Much faster when compared to other languages.
Common Execution State
fi
Not Running: This is a simple state where our App is not launched,
no code is being executed and terminated by the system, and the
application is completely switched off.
Inactive: This state is just a transitional state. An inactive state means
our application runs in the background but cannot receive events.
Active: Active state is the main execution state, where our App is
running in the background and can receive events.
Background: This is the state where our App is running in the
background and still can execute the code in the background.
Suspended: This state means that our app is in the background state,
and the system suspends this App, and the application cannot
execute any code.
application:willFinishLaunchingWithOptions — This method is
called after your application successfully launches. It is the first
method from our AppDelegate, which will be called. You could
execute your code if the launch were successful.
application:didFinishLaunchingWithOptions — This method is
called before the App’s window is displayed. You can finalize your
interface and provide the root ViewController to the window.
applicationDidBecomeActive — This method is called to let your
App know that it moved from the inactive to active state or your App
was launched by the user or the system, or in case the user ignores
an interruption (such as an incoming phone call or SMS message)
that sent the application temporarily to the inactive state. Use this
method to restart any paused tasks (or not yet started) while the App
is inactive.
applicationWillResignActive — This method lets your App know
that it is about to move from an active to an inactive state. This can
happen in case of interruptions (such as an incoming phone call, SMS
message, or Calendar alerts) or when the user quits the App. You
should use this method to pause any ongoing tasks, disable timers,
etc.
applicationDidEnterBackground — This method lets the App know
t h a t i t i s n o t r u n n i n g i n t h e f o r e g r o u n d . Yo u h a v e
approximately ve seconds to perform many tasks and return. If you
need additional time, you can request additional execution time from
the system by calling beginBackgroundTask(expirationHandler:). If
the method does not return before time runs out, your App is
terminated and purged from memory.
applicationWillEnterForeground — This method is a part of the
transition from the background to the active state. It would be best
to use this to undo any changes to your App upon entering the
background. applicationDidBecomeActive method is called soon
after this method has finished its execution which then moves the
App from the inactive to the active state.
applicationWillTerminate — This method is called to inform you that
your App is about to terminate. You should use this method to
perform any final clean-up task. You have approximately ve seconds
to perform many tasks and return. The system may kill the process
altogether if the method does not return before the time expires.
This method may be called in situations where the App is running in
the background (not suspended), and the system needs to terminate
it for some reason. It would be best to wait for
applicationWillTerminate to be called to save your data. There are
some cases when applicationWillTerminate isn’t called before app
termination. For example, the system will not
call applicationWillTerminate when the device reboots.
PLIST
PLIST is a dictionary of values and keys that can be stored in our file
system with a .plist file extension. The property list is used as a portable
and lightweight means to store a lesser amount of data. They are
normally written in XML.
Protocol
A protocol defines a blueprint of properties, methods, and other
suitable requirements for a particular task.
fi
Interface reuse.
Implementation reuse.
Supporting modular design.
Provides points for customization.
Delegates
Delegate is a design pattern used to pass the data or communication
between structs or classes. Delegate allows sending a message from
one object to another when a specific event happens and is used to
handle table view and Collection View events.
D e l e g a t e s h a v e o n e - t o - o n e re l a t i o n s h i p s a n d o n e - t o - o n e
communication.
Tuple
A tuple is a group of different values in a single compound value. It is an
ordered list of elements. There are two ways of accessing the object
data in a tuple, i.e., by name or position.
Class
Reuse implementation
Subclass provides dynamic dispatch.
Subclass provides the reuse interface.
Modularity
Overriding provides the mechanism for customization.
Class Vs. Structure
Classes are reference types, whereas structs are value types.
Classes can be built on other classes, whereas a struct cannot inherit
from another.
Classes have an inheritance, whereas structs cannot have an
inheritance.
In class, we can create an instance with “let” keywords and attempt
to mutate its property, whereas there is no Mutability in Structs.
Classes have Type Casting, whereas struct doesn’t have Type Casting.
Passing Data B/W View Controllers
Using Segue, in prepareForSegue method (Forward).
Setting the variable directly (Backword).
Using Delegate (Backword).
Grand Central Dispatch
GCD (Grand Central Dispatch) is a low-level API for managing
concurrent operations. This concept is used to help in improving
application performance. This process is used to manage multiple tasks
at the same time. Grand Central Dispatch (GCD) is the most useful API
for multitasking with Async and Sync programming in iOS.
Dispatch Queue: The Dispatch Queue manages the task in FIFO(First
in, First out) order. Dispatch queues are thread-safe, as we can access
them from multiple threads simultaneously.
Concurrent: This process has started multiple tasks at the same time
but is not the surety for the termination at the same time. It can be
finished in any order. They execute one or more tasks at the same
time concurrently. The task is completed according to the complexity,
not by the queue's order.
Serial: Only one task will execute at a time. It can be used to
synchronize access to a specific resource.
Sync: Asynchronous function has return control to the caller after the
task is complete.
Async: An asynchronous function returns immediately by ordering the
task to start but will not wait for it to complete.
DS & Algorithm Questions
I searched particular topics on YouTube to revise the fundamentals and
did their implementation in Swift, as I was most comfortable with this
language. I prepared the following:
Binary Search
Merge Sort
Quick Sort
Bit Manipulation
Recursion
Breadth-First Search
Depth First Search
Dynamic Programming
Linked List
Arrays
Stacks
Queues
Heaps
Hash Tables
Trees
LeetCode has a package with Apple-related questions with a premium
membership. At that time, it was divided into the following:
Arrays and Strings
Linked Lists
Trees and Graphs
Recursion
Sorting and Searching
Dynamic Programming
Design
Others
Under these, they had questions ranging from easy to hard that were
asked in Apple interviews (according to them). I only focused on easy
and medium-level questions for the initial round for internship purposes.
I sorted the questions based on their success ratio. I was solving those
and boosted my confidence with every successful compilation.
While solving the questions, I gave two to three attempts to every
question. I would jump on YouTube to find an explanatory video if I
couldn't.
I referred to the following YouTubers Nick White
Kevin Naughton Jr.
Their solutions are in Java; however, I focused on the concept of the
solution in layman's terms instead. This helped me to understand the
problem and the solution in a more generalized way. And then, I used
my Swift skills to code down the answer in Swift.
If you do not have much time, you can focus on the premium
membership offered by LeetCode. The subscription provides lists where
the questions are sorted by the company. (I am in no way affiliated with
LeetCode)
I focused little on Tries and Graphs as I found that these questions are
rarely asked in Apple interviews based on the premium membership,
but I do prepare for it nonetheless.
Stipend
I talked about negotiating internship stipends in this
Specifically, I mentioned that internships are for learning
one should focus more on the learning aspect instead of
one. But, I saw internships as a learning journey and
materialistic needs.
blog post.
and all, and
the financial
fulfilling my
One thing I should have covered in that article is the stipend amount I
got. When I was looking for internships and grinding my ass off in the
first few, I felt underpaid but had no idea how much the standard pay
was and wished posts or comments were covering that.
During the Apple negotiation, the recruiter told me a range of $40 to
$44 per hour and offered me $44 per hour. This is a huge amount in my
country. I was expecting around $35 per hour at max, so I instantly took
that offer. Later, I learned that many interns were offered much higher, as
much as $50-55 per hour.
Due to COVID-19, I interned remotely with the team in Cupertino but
got a new contract with Apple India instead. They paid 65,000 INR
instead. That translates to $800 per month. A lot lesser than what was
earlier offered. But I took that offer because it was already July, and I
had no other option.
Based on my research across Reddit and other forums, companies/
startups in the Bay Area usually pay $30 to $55 per hour for SWE interns
and 20,000 INR to 90,000 INR (or sometimes more) for iOS dev interns.
You mostly are not going to find specific roles like iOS development
internships in a bigger company as they do not expect you to specialize
in college. Still, it is much easier to find such roles in a startup.
Conclusion
The content of this book should provide value and information
regarding the preparation for an Apple internship interview that may be
helpful for other SDE-related interviews as well. I did not find much
information about Apple interviews because of the nature of the
confidential culture there when I prepared, and I wish I had something
like this back then.
I hope to help you succeed in your internship preparation journey!
I’m also working on a book about all my internship experiences,
freelancing, and technical writing, especially during the recession, and
you’ll get a notification about it when it’s out!
For any typos or feedback, reach out to me at contact@rudrank.com.
Cheers,
Rudrank Riyam
Download