Design Uber Eats - iOS System Design Interview

Поділитися
Вставка
  • Опубліковано 5 вер 2024

КОМЕНТАРІ • 82

  • @BABEENGINEER
    @BABEENGINEER 11 місяців тому +20

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

    • @andrey_tech
      @andrey_tech  11 місяців тому +2

      Thanks for the comment, Valerie! Will do =)

  • @zen_prog
    @zen_prog Рік тому +13

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

  • @dharshanj9931
    @dharshanj9931 24 дні тому +1

    SSE is not suited for individual user specific updates, because server will send a topic push notification to all devices and for order tracking purpose server will have overhead sending push every 5 seconds to all users. SSE is suited for features like example streaming updates, say a creator is about to stream, started streaming, streaming ended. These will be generic events and it is same for all users. For order tracking purposes better to use HTTP polling with 10 seconds interval

    • @timofeldur
      @timofeldur 9 днів тому +1

      This statement about SSE has some valid points but also some misconceptions. SSE can be effectively used for user-specific updates. The server can maintain separate connections and push personalized data to each user, avoiding the overhead of broadcasting to all users. SSE is more efficient than HTTP polling for real-time updates because it only sends data when there are changes, reducing unnecessary server requests. Polling every 10 seconds could actually increase server load and latency, especially if updates are frequent. While SSE works well for generic events, it can also be optimized for individual user updates with proper implementation.

  • @ShivamKumar-rp8kr
    @ShivamKumar-rp8kr 2 місяці тому +1

    Very informative

  • @adarshbinjola4069
    @adarshbinjola4069 4 місяці тому +4

    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

  • @RohitPatil_Tech
    @RohitPatil_Tech 11 місяців тому +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. 🙂

  • @user-code
    @user-code 10 днів тому +1

    awesome work ❤

  • @alex_flyce
    @alex_flyce 3 місяці тому +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:[]`

    • @andrey_tech
      @andrey_tech  Місяць тому +1

      It totally makes sense, I agree!
      (I didn't have time to look more closely before)

  • @dragonzhao433
    @dragonzhao433 8 місяців тому

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

    • @dragonzhao433
      @dragonzhao433 8 місяців тому

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

  • @fufuhu148
    @fufuhu148 11 місяців тому

    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  11 місяців тому +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 11 місяців тому

      @@andrey_tech Thank you so much for the detailed explanation

    • @Kevzavier1
      @Kevzavier1 9 місяців тому

      @@fufuhu148 its basically JSONDecoder

  • @CodeByNSR
    @CodeByNSR Рік тому

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

  • @HumbleHustle101
    @HumbleHustle101 10 місяців тому

    Nice video, can you make a system design video for an iOS app like Google Lens ? as once I was asked this in system design interview. It would be interesting to watch how you can attempt to cater this scenario. 🙂

  • @abymathew575
    @abymathew575 10 місяців тому

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

  • @winniethepupil5942
    @winniethepupil5942 2 місяці тому

    Great video as always! Please keep going!

  • @g0tcha06
    @g0tcha06 Рік тому

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

  • @kobedai921
    @kobedai921 9 місяців тому +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 8 місяців тому +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  8 місяців тому

      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.

  • @sashkinsashka447
    @sashkinsashka447 Рік тому +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  Рік тому +4

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

    • @igorvedeneev386
      @igorvedeneev386 8 місяців тому

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

  • @ibrahimcetin
    @ibrahimcetin Рік тому

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

  • @user-fg4nn5rb3d
    @user-fg4nn5rb3d Рік тому +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  Рік тому +2

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

  • @fuxlud
    @fuxlud 3 місяці тому

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

    • @andrey_tech
      @andrey_tech  3 місяці тому

      Thank you, that sounds very flattering.

    • @fuxlud
      @fuxlud 3 місяці тому

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

  • @hariharan-sv4fj
    @hariharan-sv4fj 10 місяців тому +7

    Bruh they gonna sue you for breaching NDA😆

  • @LyricalPanda
    @LyricalPanda 3 місяці тому

    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?

  • @JunaidKhan-ny8tu
    @JunaidKhan-ny8tu Місяць тому

    super amazing :)

  • @Kevzavier1
    @Kevzavier1 9 місяців тому

    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

  • @OmfgItsSteven
    @OmfgItsSteven 7 місяців тому +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?

    • @483SGT
      @483SGT 2 місяці тому

      Websockets are for two way communication which isn't necessary here

  • @fuxlud
    @fuxlud 3 місяці тому

    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  3 місяці тому +1

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

  • @roh9934
    @roh9934 Рік тому +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  Рік тому +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.

  • @NavneetKaur123
    @NavneetKaur123 2 місяці тому

    Could you please make video on Designing Twitter for Android/iOS

    • @andrey_tech
      @andrey_tech  Місяць тому

      I'm working on System Design - Authorisation atm. Maybe I'll do Twitter as well. Thanks for the comment = )

    • @NavneetKaur123
      @NavneetKaur123 Місяць тому

      @@andrey_tech Thanks 🙂

  • @Quassar18
    @Quassar18 11 місяців тому +1

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

  • @xtu373
    @xtu373 11 місяців тому +1

    What focus on swiftui or uikit for faang company

    • @andrey_tech
      @andrey_tech  11 місяців тому

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

  • @xtu373
    @xtu373 11 місяців тому +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  11 місяців тому

      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 11 місяців тому +1

      @@andrey_tech but I'm interested in their products

    • @andrey_tech
      @andrey_tech  11 місяців тому +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).

  • @ivarun
    @ivarun Рік тому

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

  • @omar-nw1wg
    @omar-nw1wg Рік тому

    amazing , we need alot of this video ❤

  • @dragonzhao433
    @dragonzhao433 8 місяців тому

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

  • @CrackersGUI
    @CrackersGUI Рік тому

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

    • @andrey_tech
      @andrey_tech  Рік тому +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 3 місяці тому

      ​@@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!

  • @Kevzavier1
    @Kevzavier1 9 місяців тому

    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  8 місяців тому

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

  • @translatingIdeasIntoCoding
    @translatingIdeasIntoCoding Рік тому

    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  Рік тому +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 Рік тому +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  Рік тому +1

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

  • @guitaripod
    @guitaripod Рік тому +1

    Cool

  • @subinrevi2268
    @subinrevi2268 11 місяців тому

    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  11 місяців тому

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

    • @subinrevi2268
      @subinrevi2268 11 місяців тому

      @@andrey_tech Thank you. Will check this out.

  • @rezaravanipour489
    @rezaravanipour489 Рік тому

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

    • @andrey_tech
      @andrey_tech  Рік тому

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