Posts

Showing posts from 2021

Design a notification system

Image
Design a notification system Functional Requirements Users receive notifications as the events happen within the platform Users can subscribe to a channel to receive all relevant notifications Users can receive notifications in their respective client app (Mobile, web, integrations) Notification can be rate-limited Non-Functional Requirements Always available Easy to add new clients Scalable: Linearly scalable What is the scale of the system? Average of 50k notifications a day  — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —  Could there be Some Questions — Answers? What kind of notifications? Push notification, SMS, EMail What have supported devices? IOS, Android, Laptop / Device Design Constraints Average of 50K notifications a day. Per notification would be 100 chars. Every char 2 Byte. 100 chars X 2 Byte = 200 Byte And we need to store some metadata(Id, user_id, date, device_type etc. ) for notification , and we assume 100 bytes : 200 * 1000 = 20000 bayt 50.000 * 2000

Leetcode - 6. ZigZag Conversion

6. ZigZag Conversion Medium 2171 5481 Add to List Share The string  "PAYPALISHIRING"  is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) P A H N A P L S I I G Y I R And then read line by line:  "PAHNAPLSIIGYIR" Write the code that will take a string and make this conversion given a number of rows: string convert(string s, int numRows);   Example 1: Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR" Example 2: Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" Explanation: P I N A L S I G Y A H R P I Example 3: Input: s = "A", numRows = 1 Output: "A" Solution :  numRows will keep our base structure by using multiple numRows time. we can keep an output array :  output = [""] * numrows means output will be = [ " " ,"
Image
  Google Docs High-Level System design Multiple users work on the same copy of the document. The document could be text, rich text, painting, drawing. Let multiple users collaborate on the same copy of the document. Functional Requirement Users can change a document at the same time without any conflict Users can give permission(view, editor) for a document Users can make import and export a document A user can add a comment to the document Could be a notification (Email, GCM notification) Design Constraint Concurrency : A lot of people are working on the same document Latency : People are working in different places and they connect throughout the internet, so there is a latency between each and every know clients or users when they are sharing the same document. 200M User, Daily active % 10 = 20M User  Average 1 MB usage  ~ 1MB x 20M user = 20 BP per day usage Google Docs users get a lot of storage space with their accounts, but it's not unlimited. Each account can have up to: