<p>Lyft Engineering &mdash; Medium | Pierce Johnson Creative Commons 2.0 by etnyk Lyft is committed to building some of the most exciting and innovative products for our tens of millions of customers. We want to fundamentally change the way people get around cities, and improve the wellbeing of others by connecting people together. The Android team [&hellip;]</p>

Breakdown

Lyft Engineering — Medium | Pierce Johnson Creative Commons 2.0 by etnyk

Lyft is committed to building some of the most exciting and innovative products for our tens of millions of customers. We want to fundamentally change the way people get around cities, and improve the wellbeing of others by connecting people together. The Android team is focused on bringing these ideas to life, and if you are an enthusiastic app developer interested in building the future of transportation we’d love to talk more.

My name is Pierce and I work on the Android team at Lyft! I thought I’d document some really helpful tips that should provide clarity about our interview process and illustrate the core values that make up our Android engineering team. Our interviews aim to share a little bit more about Lyft, how our teams work, and give you a chance to show off your Android skills.

Stage 1: Initial screen

Our initial screen will be conducted by phone and broadly test knowledge of CS, Java, and Android fundamentals. If you would prefer to complete a homework problem instead, ask your recruiter and they should be able to accommodate your request.

Option 1: Phone Screen

Lyft’s Phone Screens typically last about an hour. We cover some basic Android quiz questions then ask some CS or Java programming questions. The following is the expected format for the initial screen:

  • Introductions — The first five minutes will be an introduction between you and our interviewer.
  • Coding — The next 40 minutes will be Java, CS design, and coding questions. Expect to receive at least one or two programming questions, design and evaluate solutions to these questions, implement your solution, and test your code.
  • Android — 10 minutes are dedicated to Android quiz questions. We may ask you to solve an Android puzzler, write some Android code, or design an Android solution.
  • Questions — The final five minutes are reserved to ask your interviewer some questions. Make sure to come prepared!

Tips

  • Ask clarifying questions — Understand the question before attempting a solution. Ask any questions that might help clarify the problem for you.
  • Design first — Don’t jump straight into implementation. Design a solution first so you know that it works. This might be in pseudocode or trial and error. Feel free to evaluate tradeoffs between different solutions.
  • Build a solution — Your code should compile, run, and solve the problem. If you’re solution isn’t completely optimized, that is OK. Get something working before moving on!
  • Test your code — Run through a base case and a few edge cases. Do they work? Can you add some more graceful error handling?
  • Optimize — Now that your code works, evaluate the runtime. What is the complexity of your solution? Can you improve it?
  • Design — Properly design your solution utilizing aspects of object oriented programming.
  • Code style — Your code style should be consistent and readable. If we can’t read it, neither can the rest of our team!
  • Speak out loud — Verbalize your thought process. Coding is collaborative! Include us in the conversation.

How to prepare

  • Brush up on CS/Java fundamentals — Know the common data structures, algorithms, CS concepts, and Java APIs.
  • Brush up on Android fundamentals — Research Android fundamentals and make sure you understand core concepts.
  • Practice problems in CoderPad — Our interviews are conducted in the online IDE known as CoderPad. Take a look at their website and try running through problems in the CoderPad IDE.

Option 2: Homework

As an alternative to the phone or onsite screen, we also provide you with the opportunity to complete a homework problem. This homework problem will be very similar to the onsite Android interview question, which will require you to build a working product. However, expect to spend about 12 hours finishing the problem.

The homework is due three days after we send you the problem. Please send back a zip file containing your solution. Feel free to reach out to your recruiter and ask for a homework question if you’d prefer.

Stage 2: Onsite interview

The onsite interview will be at the Lyft office in either San Francisco, Seattle, or New York. You will have five interviews across the following types of interviews:

  1. CS/Java interview — We’ll test your knowledge of CS and Java fundamentals. Expect a few coding questions either on a whiteboard or using IntelliJ.
  2. Android UI interview — You’ll be asked to build a new UI component using standard Android APIs.
  3. Android infrastructure interview — You’ll be asked to build some new piece of Android infrastructure.
  4. Design interview — You’ll be asked to design a solution for a new product or framework.
  5. Experience interview — You’ll be asked about your previous work experience, leadership characteristics, and other behavioral questions.

CS/Java interview

Computer Science experience is a prerequisite for all software engineering candidates at Lyft. This interview will be about one hour long, and is designed to test your knowledge of data structures, Java APIs, algorithms, and the fundamentals of software engineering. An expected structure for this interview:

  • Introductions — The first five minutes will be an introduction between you and our interviewer.
  • Coding — The next 50 minutes will be coding questions. Expect to receive at least one or two programming questions, design and evaluate solutions to these questions, implement your solution, and test your code.
  • Questions — The final five minutes will leave you some room to ask your interviewer some questions. Make sure to come prepared!

How to prepare

If you haven’t already, review our phone screen tips for information on how to succeed in the CS/Java interview. The onsite questions should be very similar to our phone screens.

  • Brush up on fundamentals — Know the common data structures, algorithms, CS concepts, and Java APIs.
  • Practice, practice, practice — Whether you use an IDE or a whiteboard, the best way prepare for a coding interview is to practice. Solving all types of challenging problems is the best way to learn.

Android UI interview

An Android UI interview focuses on your knowledge of Android UI APIs. You will be asked to implement a small feature that exposes your experience with views, Activities, fragments, animations, and more. The interview will be one hour long and will follow the format below:

  • Introductions — The first five minutes will be an introduction between you and the interviewer.
  • Coding — The next 50 minutes will be an Android UI question in Android Studio.
  • Questions — The last five minutes are reserved for questions from you.

Tips

  • Follow our tips for coding interviews — Design first then work through implementation. The format of your answers should be consistent throughout the interview.
  • Code format — Code format is consistent with best practices defined in our CS/Java interview.
  • Animations — Implement with ease using a variety of animation techniques (ValueAnimator, ObjectAnimator, etc.)
  • Custom views — Encapsulate view logic and limits business logic utilizing model view controller, model view presenter, or another common pattern that you like.
  • XML — Put all resources in proper resource directories. XML IDs and file names are eloquently formatted and defined with meaningful names.
  • Activities and Fragments — Make sure you don’t put all the logic in one place. Break up problems following the best practices of object oriented programming.
  • Lifecycles — View and Activity lifecycles are well managed and not neglected.

How to prepare

  • Practice solving problems in Android Studio — We will ask you to build and run your project in Android Studio, so make sure you are familiar with the IDE!
  • Create small UI tools and views — Take a look at some apps you like and try building some of the user interface. Try animating them for an extra challenge.

Android Infrastructure interview

An Android infrastructure interview focuses on building new infrastructure for Android applications. The interview will be one hour long and will follow the format below:

  • Introductions — The first five minutes will be an introduction between you and the interviewer.
  • Coding — The next 50 minutes will be an Android infrastructure question in Android Studio.
  • Questions — The last five minutes are reserved for questions from you.

Tips

  • Build framework — Demonstrate fluency in Gradle or a build framework of your choice.
  • Class design — Classes are properly encapsulated, immutable, and utilize clear OOP design principles. Use design patterns throughout and abstraction is key.
  • Server API — Evaluate tradeoffs for hitting our client-facing endpoints. Analyze different frameworks we could use (OkHTTP, Retrofit, etc).
  • Android API — Effectively use Services and Broadcasters.
  • Concurrency — Demonstrate concurrency handling with ease while understanding the need to navigate between main and background threads.
  • Code format — Code format is consistent with best practices defined in our CS/Java interview.
  • Storage — Clearly extract the storage layer and put thought into how we store items.
  • Libraries — Introduce libraries with care and demonstrate clear understanding of APIs for usage.

How to prepare

  • Practice solving problems in Android Studio — I can’t reiterate this enough. Make sure you are familiar with Android studio and comfortable with the environment you will be coding in.
  • Try building infrastructure — How would you architect an app? Practice building an app from start to finish that demonstrate strong architecture design principles.

Design interview

The design interview will be one hour. You will be asked to design a solution for a new product of framework. This interview will take place entirely on the white board and will not include any live coding. The goal of this interview is to assess how you design solutions to complex engineering problems. The structure of this interview will look like the following:

  • Introductions — The first five minutes will be an introduction between you and the interviewer.
  • Design — The next 50 minutes will required designing a new product on a whiteboard. It may include API design, class hierarchy design, and more.
  • Questions — The last five minutes are reserved for questions from you.

Tips

  • Clarifying questions — Ask the right questions to clarify the product specifications, and address anything missing.
  • Logical breakdown of complex problem — Break down the problem into smaller more manageable problems.
  • Explore tradeoffs — Analyze tradeoffs between various solutions. Identify the simplest and clearest solution.
  • Incorporate analytics — Understand how you will analyze the success of the product out in the wild.
  • Interface design — Identify needs that satisfy Android, iOS, web, and public platforms. We don’t design for one platform.
  • Android design — Once the interface is designed between platforms, design Android application structure. Utilize clear OOP design principles.
  • Testing — Clear and documented plan for testing the solution.
  • Communication — Throughout the interview, demonstrate clear experiential practice in documenting solutions. API and structure of documentation is very clear and communication of process is collaborative with our engineer.

How to prepare

  • Review our blog post on writing awesome tech specs — Take a look at this blog post written by a couple of our backend engineers. These are some really great tips on how to write awesome tech specs!
  • Brush up on Android fundamentals — Research Android fundamentals and make sure you understand core concepts. Don’t be afraid to try out popular libraries that might aid you during the interview.
  • Build with Android! — Release apps, create frameworks, build features, and contribute to open source projects. If you are consistently working within the Android ecosystem, this interview should really straightforward and fun!

Experience Interview

The experience interview is designed to assess your Android background and soft skills. We want to know how much software engineering experience you have and how familiar you are with software engineering processes. The interview will be about an hour long, and a typical interview may look like the following:

  • Introductions — The first five minutes will be an introduction between you and the interviewer.
  • Experience questions — The rest of the interview will consist of behavioral and background questions. Expect questions that assess your communication, leadership, collaboration, learning, impact, and motivation.

Tips

  • Structured responses — Outline the situation, explain actions you took, and lastly, describe the result. Keep your answers clear and straightforward.
  • Be concise yet specific — We want to understand both the breadth and depth of your knowledge. If you mention that you’ve built some client/server interaction, mention some classes you used to make the service call.
  • Citations and support — Provide concrete support for some of the questions you are answering by citing examples from your previous work.

How to prepare

  • Review your resume — Review previous teams and companies you’ve worked for and identify challenging problems you’ve faced. What do you do on your current team? What are your responsibilities on your current team?
  • Review old projects — Check out that GitHub project you worked on years ago. Take a look at some of the APIs you used and familiarize yourself with some of the decisions you made. What is the process you use to solve tough problems? What are some high impact projects you have worked on in the past? How do you measure impact?
  • Motivation — We want to get a great sense of who your are. We want to understand what drives you to be a software engineer, and why you chose Lyft as a place to interview. Why are you interested in Lyft? What excites you about Android? What do you want to be doing in five years?

Study Guide

Here’s a list of important concepts that we try to cover during our interview process. We grade candidates based on technical abilities, communication, and expected level of impact, so make sure to review these concepts before the initial screen and onsite interview!

CS/Java

  • Classes and objects
  • Java generics
  • Primitive vs. reference variables
  • Instantiation
  • Methods and functions
  • Static and non static methods
  • Constructors
  • Inheritance
  • Composition
  • Abstract classes and interfaces
  • Method overriding and overloading
  • Polymorphism
  • Method and variable visibility
  • Data structures — lists, maps, arrays, stacks, queues, sets, heaps, and trees
  • Object oriented programming/encapsulation
  • Algorithms — search (depth first, breadth first, etc.), sort (insertion, merge, etc.)
  • Complexity (big O notation)

Android

  • IntelliJ and Android Studio
  • Activities (lifecycle, intents, implementation)
  • Services (lifecycle and implementation)
  • Custom views
  • Animations
  • Concurrency (main/background threads)
  • Storage
  • API (design and implementation)
  • Adapters/ListView/RecyclerView
  • Analytics
  • Open source projects — RxJava, Butterknife, OkHttp, Retrofit, Dagger, Picasso, and Gson

Experience

  • Projects you’ve worked on
  • Teams you’ve worked on
  • Code ownership
  • Release management
  • Testing
  • Analytics
  • Motivation
  • Behavioral questions (given a situation how would you proceed)
  • Android experience
  • Java/CS experience

Resources

This section contains some resources that we feel are really helpful to interview here at Lyft! There are many resources out there, but these are some that we think are really key to successful interviewing.

Lyft Engineering

Books

  • Cracking the Coding Interview by Gayle Laakmann McDowell
  • Effective Java by Joshua Bloch
  • Code Complete by Steve Mcconnell
  • Design Patterns: Elements of Reusable Object-Oriented Software by Grady Booch
  • Clean Architecture by Robert C. Martin
  • Refactoring: Improving the Design of Existing Code by Martin Fowler
  • The Art of Unit Testing by Roy Osherove

Online

Are You as Excited as We Are?

Head over to our careers page and check out some of the job listings. Check out our @lyfteng Twitter page for more details on some of the exciting projects we are currently working on.

stat?event=post.clientViewed&referrerSou


Interviewing Tips for Android Engineers was originally published in Lyft Engineering on Medium, where people are continuing the conversation by highlighting and responding to this story.

Curated

Dec 22, 8:52 AM

Source

Tags

Tomorrow's news, today

AI-driven updates, curated by humans and hand-edited for the Prototypr community