Bird
Raised Fist0
LLDsystem_design~20 mins

Notification on state change in LLD - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
State Change Notification Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
1:30remaining
Understanding Observer Pattern for State Change Notification

Which design pattern is best suited to notify multiple components when an object's state changes?

AObserver pattern
BSingleton pattern
CFactory pattern
DDecorator pattern
Attempts:
2 left
💡 Hint

Think about a pattern where one object informs many others about changes.

Architecture
intermediate
2:00remaining
Choosing Components for State Change Notification System

In a system where multiple services need to be notified of a state change in a central component, which architecture component is best to decouple the sender and receivers?

ADirect synchronous API calls
BMessage broker (e.g., Kafka, RabbitMQ)
CShared database polling
DMonolithic service with internal callbacks
Attempts:
2 left
💡 Hint

Look for a component that enables asynchronous communication and loose coupling.

scaling
advanced
2:30remaining
Scaling Notification Delivery for High Volume State Changes

Your system must notify thousands of clients instantly when a state changes. Which approach best ensures scalability and low latency?

AStore notifications in a database and let clients query on demand
BUse a polling mechanism where clients frequently check the state
CUse a push-based pub/sub system with partitioned topics and consumer groups
DSend individual HTTP requests to each client synchronously
Attempts:
2 left
💡 Hint

Consider how to handle many clients efficiently without overloading the server.

tradeoff
advanced
2:00remaining
Tradeoffs Between Synchronous and Asynchronous Notifications

What is a key tradeoff when choosing synchronous notifications over asynchronous notifications for state changes?

ASynchronous notifications provide immediate feedback but reduce system availability under load
BAsynchronous notifications guarantee delivery order but increase coupling
CSynchronous notifications improve scalability but increase message delay
DAsynchronous notifications require clients to block until notification arrives
Attempts:
2 left
💡 Hint

Think about system responsiveness and reliability under heavy load.

component
expert
3:00remaining
Designing a Reliable Notification System with Exactly-Once Delivery

Which component or technique is essential to ensure exactly-once delivery of notifications on state change in a distributed system?

ARelying on client-side retries without server tracking
BSimple fire-and-forget message sending without acknowledgments
CUsing UDP protocol for faster message delivery
DIdempotent message processing combined with unique message IDs and persistent storage
Attempts:
2 left
💡 Hint

Consider how to avoid duplicate processing despite retries or failures.

Practice

(1/5)
1. What is the main purpose of a notification system on state change in software design?
easy
A. To inform interested components immediately when data changes
B. To store data permanently in a database
C. To increase the size of the application
D. To delay updates until the user refreshes manually

Solution

  1. Step 1: Understand the role of notifications

    Notifications alert parts of a system or users when something important changes.
  2. Step 2: Identify the purpose of state change notifications

    They ensure components get updates immediately without waiting or manual refresh.
  3. Final Answer:

    To inform interested components immediately when data changes -> Option A
  4. Quick Check:

    Notification = Immediate update [OK]
Hint: Notifications alert on change, not store or delay [OK]
Common Mistakes:
  • Confusing notification with data storage
  • Thinking notifications delay updates
  • Assuming notifications increase app size
2. Which of the following is the correct method name to notify observers in a typical observer pattern implementation?
easy
A. unsubscribe()
B. updateState()
C. subscribe()
D. notifyObservers()

Solution

  1. Step 1: Recall observer pattern methods

    Common methods include subscribe, unsubscribe, and notifyObservers.
  2. Step 2: Identify the method that sends updates

    notifyObservers() is used to alert all subscribed observers about changes.
  3. Final Answer:

    notifyObservers() -> Option D
  4. Quick Check:

    Notify method = notifyObservers() [OK]
Hint: Notify method usually named notifyObservers() [OK]
Common Mistakes:
  • Confusing subscribe with notify
  • Using updateState() which changes state, not notify
  • Mixing unsubscribe with notification
3. Consider this simplified code snippet for a notification system:
class Subject:
    def __init__(self):
        self.observers = []
    def subscribe(self, observer):
        self.observers.append(observer)
    def notify(self, message):
        for obs in self.observers:
            obs.update(message)

class Observer:
    def update(self, message):
        print(f"Received: {message}")

subject = Subject()
obs1 = Observer()
subject.subscribe(obs1)
subject.notify("State changed")
What will be the output when subject.notify("State changed") is called?
medium
A. Error: update method missing
B. No output
C. Received: State changed
D. Received: None

Solution

  1. Step 1: Trace subscription and notification

    Observer obs1 is subscribed to subject, so it is in the observers list.
  2. Step 2: Check notify method behavior

    notify calls update on each observer with the message "State changed".
  3. Final Answer:

    Received: State changed -> Option C
  4. Quick Check:

    Observer prints message on notify [OK]
Hint: Subscribed observers receive and print messages [OK]
Common Mistakes:
  • Assuming notify does nothing without explicit call
  • Thinking update method is missing
  • Expecting no output if observers list is empty
4. In the following code, what is the main issue that prevents observers from receiving notifications?
class Subject:
    def __init__(self):
        self.observers = set()
    def subscribe(self, observer):
        self.observers.add(observer)
    def notify(self, message):
        for obs in self.observers:
            obs.receive(message)

class Observer:
    def update(self, message):
        print(f"Got: {message}")

subject = Subject()
obs1 = Observer()
subject.subscribe(obs1)
subject.notify("Update")
medium
A. Observers are stored in a set instead of a list
B. Method notify calls obs.receive but Observer has update method
C. subscribe method uses add instead of append
D. Observer class is missing

Solution

  1. Step 1: Check method called in notify

    notify() calls obs.receive(message).
  2. Step 2: Check Observer class methods

    Observer defines update(message), but no receive() method.
  3. Final Answer:

    Method notify calls obs.receive but Observer has update method -> Option B
  4. Quick Check:

    Method name mismatch causes AttributeError [OK]
Hint: Check method names called vs defined in observers [OK]
Common Mistakes:
  • Confusing set vs list for storing observers
  • Ignoring method name mismatches
  • Assuming missing class when it exists
5. You are designing a scalable notification system for state changes in a distributed application. Which design choice best supports efficient notifications to thousands of subscribers without blocking the main process?
hard
A. Use asynchronous message queues to dispatch notifications
B. Notify all subscribers synchronously in a loop
C. Store notifications in a database and poll subscribers
D. Send notifications only when the system restarts

Solution

  1. Step 1: Understand scalability needs

    Thousands of subscribers require non-blocking, efficient notification delivery.
  2. Step 2: Evaluate design options

    Synchronous loops block main process; polling adds delay; restart notifications are impractical.
  3. Step 3: Identify best practice

    Asynchronous message queues decouple notification sending, allowing scalable, fast delivery.
  4. Final Answer:

    Use asynchronous message queues to dispatch notifications -> Option A
  5. Quick Check:

    Async queues = scalable notifications [OK]
Hint: Async queues handle many subscribers efficiently [OK]
Common Mistakes:
  • Using synchronous loops causing delays
  • Relying on polling which is slow
  • Sending notifications only on restart