Steam Friends List App - iOS System Design Interview

แชร์
ฝัง
  • เผยแพร่เมื่อ 31 พ.ค. 2024
  • I'm explaining how to implement an architecture for a Steam Friends List Application. It's an example of a Mobile System Design interview / Mobile Architecture interview for iOS and Android Software Engineers.
    Chapterts:
    0:00 Intro
    2:42 Plan
    4:20 Data Model
    7:53 API
    13:08 Data Storage
    14:58 Architecture
    25:14 Image Processing

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

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

    It is so hard to find a decent example of System design interview online. They are mostly for backend not iOS. Thank you for making this video!

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

    Thank you so much for these videos. It's so awesome that you are thinking and talking through the options available for each section in your plan!

  • @kulfie
    @kulfie 5 ชั่วโมงที่ผ่านมา

    Please continue making videos :) They are really helpful!

  • @raunaksingh7512
    @raunaksingh7512 3 วันที่ผ่านมา +1

    Crystal clear explanation!

  • @everyontech2716
    @everyontech2716 11 หลายเดือนก่อน +8

    Havent seen this kind of clearly explained video...hats off to you..keep it up Andrey !!! 💯

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

      Thanks a lot!!

  • @hastewave1816
    @hastewave1816 2 ปีที่แล้ว +1

    Well done. I'd love to see more of these videos

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

    10:11 this idea is really wise and fresh for me, thank you

  • @amirtirza3428
    @amirtirza3428 2 ปีที่แล้ว +1

    Thanks for the video! good luck with your channel!

  • @germansimosoler3734
    @germansimosoler3734 2 ปีที่แล้ว +1

    Excellent video. Thank you.

  • @KatyM
    @KatyM 2 ปีที่แล้ว

    Thanks for the video! Great explanation

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

    This is one of the bests I have seen till now for System Design for Mobile.
    The way you explain Andrey is amazing. You clearly explain each bit well enough. I just saw 2 videos only for now but It cleared so many things for me.
    Thanks for your effort man 👌🩷. Love from India

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

      Wow!! Thanks a lot, this is a very nice comment👍

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

    Great & simple explanation. Thanks

  • @anweshannu2518
    @anweshannu2518 ปีที่แล้ว +1

    Thanks for the explanation. Expecting Many more

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

    The solution to connect a socket with the App to get status was kind of new for me, I will dive in that concept to learn how to implement. thanks for sharing this

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

      Sure, thanks

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

    Great work Andrey.

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

    Very nice video, this was really very clear and concise explanation!

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

      Awesome, thanks!

  • @user-gu2xw9qr3z
    @user-gu2xw9qr3z 2 ปีที่แล้ว +1

    Thanks for the explanation from the interviewer's point of view. Hope it helps you get a job ))

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

    Thanks for the video, it was very interesting. Keep posting this kind of content!

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

      Thanks!!

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

    Thank you so much !!!!!

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

    Very good system design I appreciate this.

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

      Awesome!=)

  • @alexanderkukharev5654
    @alexanderkukharev5654 2 ปีที่แล้ว +1

    cool video, can you tell a little more about api requests and how the synchronization of large databases between the client and the server works?

    • @andrey_tech
      @andrey_tech  2 ปีที่แล้ว +1

      Thanks for the question. I'll do a video on this topic in the future

  • @PavelPalancica
    @PavelPalancica ปีที่แล้ว

    Hey Andrey. Useful info. Much appreciated. What UI architecture(s) you use at the company you work at?

    • @andrey_tech
      @andrey_tech  ปีที่แล้ว

      We use ComponentKit UI framework instead of UIKit. It is a completely different approach. So the architecture is specific for ComponentKit, mix of everything.

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

    Andrey, superb demonstration. I'll be sure to rewatch this everytime I am interviewing. Is there any reason you didn't list or opt for SSE (server side events) to receive the status info?

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

      Hey, thanks! Yes, it's ok to use SSE here as well.

  • @FromBelarusWithLoveM
    @FromBelarusWithLoveM ปีที่แล้ว +1

    Real gem.

    • @andrey_tech
      @andrey_tech  ปีที่แล้ว +1

      Thanks! I'm glad it's useful to someone

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

    Would someone still use bare-bones sockets at this point? With web sockets built into URLSession these days that seems like a better choice almost always?

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

    Nice video! Thank you! Friend service represent "Repository", am I right? I still not truly understand NS User Default Module what is that? Is it previous pagination timestamp recorder? Please give more explain. Tks!

  • @medved892
    @medved892 2 ปีที่แล้ว +2

    Great video! But what if we do not make requests with checking the status of a friend every 5 seconds, spending server and device resources on this? After all, information about the statuses of all users is stored in a database on the server, therefore information about status changes is automatically sent to it. If the server has data about all the user's friends, it will be able to send an API request to the application to change the state. After, the application will count the time since the last login offline.

    • @andrey_tech
      @andrey_tech  ปีที่แล้ว

      Thanks for the comment. Yes, this solution makes sense

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

    Also the part when you send GET request with timestap to get only updated list is interesting to me, do you get only like list of people that have updated data(avatar and name) and also if friend is getting deleted from your friend list how do you get that update ?

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

      If I recall correctly, getFriendsList method returns a list of Friend models + statuses and websockets are used to get status updates later.
      If the friend is deleted, in this architecture you would see that only next time you load the screen. But it could be improved by polling / websockets.

  • @matvelius
    @matvelius ปีที่แล้ว +4

    Андрей, спасибо, очень полезный контент! Молодец! Конструктивный фидбэк: плиз донт хёрт аур иарз виз «аймадж» и «бинд» - «имидж» и «байнд» 😂
    Ну а если по делу, интересно, знаком ли ты с материалом канала essential developer? Было бы интересно от тебя услышать что-нибудь в этом роде подробнее об iOS архитектуре.

    • @andrey_tech
      @andrey_tech  ปีที่แล้ว

      Спасибо за комментарий и фидбек) С каналом знаком, хороший, да. На счет тем следующих видео пока думаю, много разных опций)

  • @sebasyanni1258
    @sebasyanni1258 17 วันที่ผ่านมา

    7:09 shouldn’t be a boolean?

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

    so why we cache it in both disk and memory?

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

      Thanks for the comment. Disk caching is to retain data in offline mode or between app launches. Memory caching just to speed up things because accessing disk every time is too slow.

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

    At what level would this be a question for? Jr, Mid, Senior?

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

      The question is for all levels. I was asked very similar question at my interview with Meta for a senior role. And in this video I tried to showcase a template answer to this question. I would say the overall answer would be enough for a senior role, but expect a lot of follow-up questions.

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

    Never heard anyone pronounce 'image' that way 😊

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

      That was more than a year ago. I already fixed my pronunciation, but still getting comments every other day about that 🥲

  • @nickaxenov3587
    @nickaxenov3587 13 วันที่ผ่านมา

    Ты везде пишешь - svinject, но фреймворк - Swinject

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

      Да, писали уже, поправлю в будущем, спс

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

    Swinject. You have this mistake in several videos. Also, I'm wondering why SSE is omitted as update mechanism

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

      Thanks for the feedback, I’ll update it in future videos 👍 SSE is a good one, indeed.

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

    what if the friends list is long like 1000 or 2000? how should we integrate pagination to it? probaly add 1 more api with pagination along the getFriendList(timeStamp) you were talking about?

  • @zhangeric7588
    @zhangeric7588 ปีที่แล้ว

    ex-colleague here. Really good stuff! Keep it going bro!