people decides whether I’m cool enough to work for them A business meeting where a vendor (you) and a customer (company) evaluate whether each of you can fulfill a business need
No Friendly, gauge general fit for job 2 Phone screen Yes (often) Generally 30 mins, meant to weed out obviously unfit candidates 3 Virtual coding session (optional) Yes Generally 60 mins, meant to get a handle on candidate’s coding ability 4 Coding challenge (optional) Yes Meant to get a handle on candidate’s coding ability 5 Onsite Yes and also behavioral 4-6 hour gauntlet of technical, algorithmic, systems knowledge as well as culture fit and behavioral/communication ability 6 Offer! No Haggle over the details - salary, equity, start date, work hours, location, etc
look for? Does the candidate know how to program comfortably and fluently? Do they have a handle on object-oriented paradigms? Can they translate theoretical problems to code? Do they show good (clean) coding practices? (we’ll handle the content of these coding challenges in a minute)
prep? Get fluent. Practice. 1. Make simple side projects (and upload them to Github). a. Preferably Android apps. 2. Coding challenges on HackerRank 3. Read about “clean” coding and design patterns a. Effective Java b. Head First Design Patterns
real questions I’ve gotten): 1. Create a function that will take parameters: a) integer k and b) list of integers. Return kth smallest integer 2. Find the largest mirror image of integers in an array of integers 3. Write a function to reverse a linked list with iteration and then again with recursion 4. Given a set of strings separated by a delimiter, how would you separate the unique strings? You’ll probably do this on something like CoderPad
creating a very simple Android app, with some basic features: • Multiple screens • Lists • Network fetches For example: Create an app that hits the sample IMDB API. Show the results of the API in a list view. When you tap on a list item, launch a new screen with more details on that item.
candidate know how the basics of making Android apps? Do they have a handle on big no-no’s like long-running threads? Can they explain why they chose certain libraries or tools? Are they familiar working with Android-specific tools?
Android Activity and Fragment lifecycle 2. The relationship between Activities and Fragments 3. Kotlin 4. Android Architecture Components (aka Jetpack) a. In particular, ViewModels 5. How to create a list view 6. How to do a network fetch 7. Local data storage (SharedPreferences, local DB, in-memory cache) 8. What happens on rotation, and why is it important? 9. What can cause ANRs or app crashes?
3. ADB and how to test apps on emulators and real phones 4. Debugging with built in debugging tools 5. How is an app released to the Play Store? 6. The common networking libraries- (Okhttp, Retrofit) 7. The common threading libraries - (RxJava, Kotlin coroutines) (this is intermediate, don’t worry about this if you’re a beginner) 8. Unit-testing basics and libraries - (JUnit, Mockito)
Activities; how would you architect the use of each and why? 2. How would you do Fragment to Fragment communication? 3. What are the different launch modes? 4. Which Activity lifecycle calls cancel background tasks? 5. What are the downsides of AsyncTasks and why?
feature - how would you architect the UI, data and networking layers? How would you handle several hundred messages a second? How would you cache the data? How would you update the UI without overloading the main thread? 2. Build out a custom findViewById() (these are real questions I’ve gotten)
to not know everything, especially if you’re trying for your first Android job. So what should I say if I don’t know something? • I don’t know • But here is how I would tackle something I don’t know (usually Android developer docs, talking to a senior dev, source code, etc) The good news is - if you make a couple of very basic Android apps, you will be able to answer a lot of these questions.
candidate familiar with common data structures and algorithms? Can they create an algorithm from a theoretical problem? Can they handle multiple layers of abstraction at once? Can they clearly communicate their thought process? Their problem-solving process? How they approach a difficult problem?
• HashMaps and HashTables • LinkedLists (Trees and graphs are less common, though used more by FAANGs) Be comfortable with how these work in your language of choice
First search ◦ Breadth first search • Sort: Quicksort, Bubble Sort, MergeSort • Dynamic Programming • Recursion (usually this is the “reversing a linkedlist” question)
of common operations in each data structure, in Big O notation? ◦ Common operations: Insert, Remove, Search, Sort Example questions: What is the time complexity of adding items to a list vs array? What is the time complexity of sorting an array with bubble sort?
2. Can you reverse a LinkedList using recursion? 3. Insert a Node at a given position in a list Often, you’re expected to use data structures and algorithms in your coding challenges
Do some research. If you learn nothing else, learn: • What are arrays and how to create/use them in code (and why) • Hashmaps and how to create/use them in code (and why) • Knowing something will go a long way further than not having any knowledge at all. A little effort will demonstrate “ability to learn”. Focus on learning ability!
candidate shown themselves to be a quick learner? (this is especially important if you’re just starting out) Is this person a good team player? Can the candidate clearly communicate when they’re stuck, what they don’t know, and how they think? Has the candidate shown independence and ambition?
focuses on your resume and past experience Have anecdotes ready about: • Learning ability: ◦ How fast you went from 0 to pushing up working code to Git • Times when you figured out solutions to hard problems • Times when you had difficult conversations and resolved them
it gets better with practice and feedback. • Interviewing is a skill - it gets better with practice and feedback Do both of these as much as you can. Take notes on every interview you go on. Write down the questions you got, how you approached it, what the answers were. This will become an invaluable prep guide for the next round. Volunteering is a great way to put coding on your resume.
are you looking for in a candidate? • What feedback do you have for me? • What kind of work culture do you have here? • What keeps you here at this job? Remember, it is illegal for interviewers to ask about your race, ethnicity, gender, sexual orientation, pregnancy status, marital status, country of origin, native language. If you get asked any questions about the above, don’t be afraid to push back.
as little training time as possible Rejection is very common! For many reasons! Companies will often err on the side of rejection to save themselves from an expensive “bad hire” situation
• Banks and financial institutions with apps for clients • Healthcare institutions/clinics that use patient portals • Smart home/smart device product companies • Utility and internet companies • And lots more