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