Design Uber Eats - iOS System Design Interview

แชร์
ฝัง
  • เผยแพร่เมื่อ 8 มิ.ย. 2024
  • In this TH-cam video, I share my recent interview experience with Uber for the position of Staff iOS Engineer. The interview focused on mobile system design, and one of the questions asked was to design a simplified version of the Uber Eats app. Join me as I walk through the question, the requirements, the data model, API design, real-time updates using Server-Sent Events, storage options, and the high-level application structure. If you're interested in system design and app architecture, this video is a must-watch! Don't forget to like and subscribe for more content. Thank you for watching, and have a great day!
    Chapters:
    0:00 Intro
    0:30 Problem description
    1:48 Requirements
    2:25 Solution plan
    2:38 Data model
    4:28 API
    8:04 Storage
    8:40 High level design
    12:28 Example service implementation
    13:16 Outro
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 71

  • @BABEENGINEER
    @BABEENGINEER 8 หลายเดือนก่อน +13

    I’m so so grateful you made this video, please make more iOS system design videos!!!

    • @andrey_tech
      @andrey_tech  8 หลายเดือนก่อน +1

      Thanks for the comment, Valerie! Will do =)

  • @zen_prog
    @zen_prog 10 หลายเดือนก่อน +12

    Love your videos, structured and very helpful for prepping for interviews.

    • @andrey_tech
      @andrey_tech  10 หลายเดือนก่อน

      So glad!

  • @RohitPatil_Tech
    @RohitPatil_Tech 8 หลายเดือนก่อน +1

    Hi Andrey, Great video and clearly explained. Thank you!
    It would be great to see more interview questions solving & Mobile system design videos from you. 🙂

    • @andrey_tech
      @andrey_tech  8 หลายเดือนก่อน

      Thanks. Coming soon!

  • @alex_flyce
    @alex_flyce 8 วันที่ผ่านมา +1

    Thank you Andrey, gold content! I loved the video.
    basket POST looks a bit inaccurate though. it's not clear we're actually posting an array of dishes with the quantity of it.
    I'd do something like:
    `POST /basket/userId:&restaurantId:&foodArticles:[]`

  • @ibrahimcetin
    @ibrahimcetin 10 หลายเดือนก่อน

    Your videos are awesome! I’ve learned so much from them. Thanks a lot!

    • @andrey_tech
      @andrey_tech  10 หลายเดือนก่อน

      Happy to hear that

  • @adarshbinjola4069
    @adarshbinjola4069 หลายเดือนก่อน +2

    Hi @Andrey Please cover topic that are related to creating a mobile SDK ,
    Design Payment SDK
    Design Network SDK
    Design Analytics SDK
    Design Image cache SDK
    Design File Downloader SDK
    the reason I am saying these topic because these topics require more focus on architecting instead of simply following MVVM because there is no UI layer involved into these topic

  • @abymathew575
    @abymathew575 7 หลายเดือนก่อน

    really good video. thanks for these much detailed explanations . expecting more from your sided

  • @g0tcha06
    @g0tcha06 10 หลายเดือนก่อน

    Thanks for the video, and good luck for your potential new role !

    • @andrey_tech
      @andrey_tech  10 หลายเดือนก่อน

      Thank you!

  • @omar-nw1wg
    @omar-nw1wg 10 หลายเดือนก่อน

    amazing , we need alot of this video ❤

    • @andrey_tech
      @andrey_tech  10 หลายเดือนก่อน

      thanks!!

  • @CodeByNSR
    @CodeByNSR 9 หลายเดือนก่อน

    Hey bro. good content. Keep on continue it. Its create a wave in iOS community definetly.

    • @andrey_tech
      @andrey_tech  9 หลายเดือนก่อน

      A wave! Sounds cool ahaha

  • @HumbleHustle101
    @HumbleHustle101 7 หลายเดือนก่อน

    Nice video, can you make a system design video for an iOS app like Google Lens ?

  • @dragonzhao433
    @dragonzhao433 5 หลายเดือนก่อน

    hI Andrey, was wondering the service you mentioned are like service component running background for long running operations right?

  • @OmfgItsSteven
    @OmfgItsSteven 4 หลายเดือนก่อน +1

    Would it be better for basket to use PUT instead of PATCH so you don't need to call the api multiple times for any item changes?
    Also what is the advantage of using SSE over Websocket in this case?

  • @fufuhu148
    @fufuhu148 8 หลายเดือนก่อน

    Awesome video Andrey!!!
    I was a bit lost when you explained the purpose of that Mapper Component in your High-Level Design, would you mind sharing a bit more of your insights on that?
    😀

    • @andrey_tech
      @andrey_tech  8 หลายเดือนก่อน +2

      Cool, thanks! Mapper is responsible for mapping json recieved from the backend to model objects. You can do it right in the Service itself or create a separate object called Mapper.

    • @fufuhu148
      @fufuhu148 8 หลายเดือนก่อน

      @@andrey_tech Thank you so much for the detailed explanation

    • @Kevzavier1
      @Kevzavier1 7 หลายเดือนก่อน

      @@fufuhu148 its basically JSONDecoder

  • @ivarun
    @ivarun 10 หลายเดือนก่อน

    Great video! I think DI library you are talking about is Swinject, right?

    • @andrey_tech
      @andrey_tech  10 หลายเดือนก่อน

      Yes, that's correct!

  • @dragonzhao433
    @dragonzhao433 5 หลายเดือนก่อน

    Also some different topic you can choose are like File Uploader which focus more on post rather than fetch/get and display

    • @dragonzhao433
      @dragonzhao433 5 หลายเดือนก่อน

      another great topic to do is map related design like support offline along with recommendations given location on map

  • @kobedai921
    @kobedai921 6 หลายเดือนก่อน +2

    Love the video! I am wondering if leetcode problems are still the main part of the interview for a senior iOS engineer? I am preparing for iOS engineer interview, and I am preparing a lot on iOS specific questions such as concurrency, swiftUI, iOS architecture, but not sure if those questions will be asked during an iOS engineer interview or they will focus on solving leetcode problems.

    • @SaamZanessa
      @SaamZanessa 6 หลายเดือนก่อน +1

      It depends on the company! The recruiter should be able to answer you if the technical part is leetcode or iOS specific.

    • @andrey_tech
      @andrey_tech  5 หลายเดือนก่อน

      Hey, thanks. It depends on the company. iOS specific staff is more probable to encounter on the interview. But at big tech companies they go for both or for algorithms only.

  • @CrackersGUI
    @CrackersGUI 10 หลายเดือนก่อน

    Great video and walkthrough as always! What’s your response if interviewers ask why not SwiftUI or async/await?

    • @andrey_tech
      @andrey_tech  10 หลายเดือนก่อน +2

      Good question! It's totally fine to use SwiftUI here. I even want to make a system design video with SwiftUI in the future. And about async / await I can say that most of the APIs are available only starting from iOS 15. So it's probably too soon to use it because there're lots of clients with outdated iOS versions.

    • @user-uv1nr6gv5s
      @user-uv1nr6gv5s 17 วันที่ผ่านมา

      ​@@andrey_tech Async await is available from iOS 13. I've succesfully used it in production. Code is much cleaner and actors solve data races as a charm.
      Highly recommend to try it!

  • @sashkinsashka447
    @sashkinsashka447 9 หลายเดือนก่อน +5

    Hey Andrey, nice channel you have here! Let me disagree with the statement that the topic is drying out. How about the system design of libraries/frameworks? I.e. payment system? authentication system? or analytics library? or any library which employs the OS functionality, like Push Notifications? Or any kind of graphic editor app, like photoshop?

    • @andrey_tech
      @andrey_tech  9 หลายเดือนก่อน +4

      Hey, great ideas!! I'll write them down somewhere. A really valuable comment, thanks a lot =)

    • @igorvedeneev386
      @igorvedeneev386 5 หลายเดือนก่อน

      @@andrey_tech how about a 'design a crash reporting tool'

  • @fuxlud
    @fuxlud 25 วันที่ผ่านมา

    That’s just amazing!! How did you get to this level of crisp and clear articulation of your thought?

    • @andrey_tech
      @andrey_tech  10 วันที่ผ่านมา

      Thank you, that sounds very flattering.

    • @fuxlud
      @fuxlud 10 วันที่ผ่านมา

      You’re welcome 😇 but you didn’t answer the question 😅

  • @roh9934
    @roh9934 10 หลายเดือนก่อน +2

    I have one question, Suppose first i mentioned Data Models and then i mentioned API Details and in API Details, i realized that new parameters are required which i didnt mentioned in the Data Model part, Can i go back and add it there? What will the Interviewer may think?

    • @andrey_tech
      @andrey_tech  10 หลายเดือนก่อน +2

      Sure, you can go back and change smth or just say it. It's important to show your thought proccess and overall approach in this interview. Nobody's expecting you to do everything perfectly.

  • @fuxlud
    @fuxlud 25 วันที่ผ่านมา

    Regarding the API implementation: Is there a need for an escaping completion block nower days? I could just return the Result and make the function async. Correct?

    • @andrey_tech
      @andrey_tech  10 วันที่ผ่านมา +1

      Yes, absolutely. Async / await approach is much more flexible and clear

  • @Kevzavier1
    @Kevzavier1 7 หลายเดือนก่อน

    These videos are so helpful. Also... your videos are a bit hard to search up on youtube. I keep forgetting how to spell your name

  • @translatingIdeasIntoCoding
    @translatingIdeasIntoCoding 10 หลายเดือนก่อน

    Perfect video. Is position in US?
    Most companies are doing backend style system design interviews. Do you know what are other companies that make mobile system design interview?

    • @andrey_tech
      @andrey_tech  10 หลายเดือนก่อน +1

      I interviewed for the position at Uber Amsterdam as I'm based in Europe. You're absolutely right about the backend system design interviews. They are sometimes asked even if you're a mobile engineer. But also there're lots of companies who focus on mobile system design like Meta / Uber / HelloFresh.

    • @JP-jf1oc
      @JP-jf1oc 9 หลายเดือนก่อน +1

      @@andrey_tech That has to be really stupid no? Like I get it a Mobile dev should know how the backend works but it's not their domain.

    • @andrey_tech
      @andrey_tech  9 หลายเดือนก่อน +1

      @@JP-jf1oc Yes, it's strange, but it happens not really often

  • @user-fg4nn5rb3d
    @user-fg4nn5rb3d 9 หลายเดือนก่อน +1

    I guess for real project will be better to use different presenters for each screen. Also, I would like to replace a router to a coordinator. It's more flexible approach

    • @andrey_tech
      @andrey_tech  9 หลายเดือนก่อน +2

      Yeah, sure. The architecture is showcased for just one screen, so there would be multiple routers

  • @rezaravanipour489
    @rezaravanipour489 9 หลายเดือนก่อน

    Love your videos, super helpful. Do you have a discord group? If not you should definitely make one

    • @andrey_tech
      @andrey_tech  9 หลายเดือนก่อน

      I've never thought about it. What should I do in that group? I have no idea how it usually works = )

  • @guitaripod
    @guitaripod 10 หลายเดือนก่อน +1

    Cool

  • @LyricalPanda
    @LyricalPanda 16 วันที่ผ่านมา

    Why have an array of selected dishes in your basket? Why not use a bridgingtable BasketOrder so you don't constantly have to update a row and have an array of items in selectedDishes, that would have to be modified multiple times over the course of an order?

  • @xtu373
    @xtu373 8 หลายเดือนก่อน +1

    Someone young trying to get his first job in Meta what would you advice would you give like what to prepare? Should i prepare leetcode style questions or build projects and be good in development, my current skill set it React, React Naitve Node.js Mongodb. Learning Swift with SwiftUI

    • @andrey_tech
      @andrey_tech  8 หลายเดือนก่อน

      Hello, I would highly recommend to target multiple companies instead of going for Meta. Try Google, Microsoft, Uber, Spotify, Booking.com etc. In my opinion, Meta isn't even the best choice.

    • @xtu373
      @xtu373 8 หลายเดือนก่อน +1

      @@andrey_tech but I'm interested in their products

    • @andrey_tech
      @andrey_tech  8 หลายเดือนก่อน +1

      And in terms of preparation I would recommend doing 75 most popular leetcode problems + choose one tech area and be good in it (let's say iOS in Swift or frontend React JS).

  • @xtu373
    @xtu373 8 หลายเดือนก่อน +1

    What focus on swiftui or uikit for faang company

    • @andrey_tech
      @andrey_tech  8 หลายเดือนก่อน

      For FAANG it doesn't matter. Be good with one approach you prefer and familiar with another one

  • @Kevzavier1
    @Kevzavier1 7 หลายเดือนก่อน

    What exactly are we storing in CoreData? And why do we need to do that? Can't we just get away with storing things in memory?

    • @andrey_tech
      @andrey_tech  5 หลายเดือนก่อน

      If you need an offline mode or retain data between app launches, then use CoreData to store metadata.

  • @subinrevi2268
    @subinrevi2268 8 หลายเดือนก่อน

    How can we create a persistent http connection in iOS? Since the video mentions about SSE does anyone have any good article or videos which describes creating this form of communication in an iOS app

    • @andrey_tech
      @andrey_tech  8 หลายเดือนก่อน

      Good question. Looks like this library is widely used for that - github.com/launchdarkly/swift-eventsource

    • @subinrevi2268
      @subinrevi2268 8 หลายเดือนก่อน

      @@andrey_tech Thank you. Will check this out.

  • @Quassar18
    @Quassar18 9 หลายเดือนก่อน +1

    You used plain address model properties (lat, lon), while using addressId in the nearby restaurants request. Otherwise, good job.

  • @hariharan-sv4fj
    @hariharan-sv4fj 7 หลายเดือนก่อน +5

    Bruh they gonna sue you for breaching NDA😆