Bird
Raised Fist0
LLDsystem_design~20 mins

Class design (Book, Member, Librarian, Loan) 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
🎖️
Library System Design Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
1:30remaining
Identify the correct relationship between classes
In a library system, which relationship best describes how the Loan class relates to the Book and Member classes?
ALoan is unrelated to Book and Member and operates independently.
BLoan has a composition relationship with Book and Member, meaning Loan owns them and controls their lifecycle.
CLoan inherits from both Book and Member classes to combine their properties.
DLoan has an association relationship with Book and Member, meaning Loan references them but does not own them.
Attempts:
2 left
💡 Hint
Think about whether Loan should control the existence of Book or Member objects.
Architecture
intermediate
1:30remaining
Choose the best class to handle book availability status
In the library system, which class should be responsible for tracking whether a book is currently available for loan?
AThe Loan class should track availability by checking if a book is loaned out.
BThe Member class should track availability of books they want to borrow.
CThe Book class should track its availability status directly.
DThe Librarian class should maintain a separate list of available books.
Attempts:
2 left
💡 Hint
Consider which class naturally owns the state of the book itself.
scaling
advanced
2:00remaining
Design consideration for handling thousands of loans
If the library system must handle thousands of simultaneous loans, which design choice improves scalability and performance?
AUse a database to store Loan records and query only active loans when needed.
BStore all Loan objects in memory within the Librarian class for quick access.
CCreate a new Loan object for each request and keep them permanently in a list inside Member objects.
DSerialize all Loan objects to a file after each loan creation.
Attempts:
2 left
💡 Hint
Think about memory usage and data retrieval efficiency for large data.
tradeoff
advanced
1:30remaining
Tradeoff in making Member class responsible for loan history
What is a potential downside of storing all loan history inside each Member object?
AIt can cause high memory usage if members have many loans.
BIt simplifies querying loan history across all members.
CIt improves performance by avoiding database queries.
DIt prevents members from borrowing multiple books.
Attempts:
2 left
💡 Hint
Consider what happens when a member has a very long loan history.
component
expert
2:00remaining
Identify the correct sequence of actions when a book is loaned
What is the correct order of actions when a member borrows a book from the library?
A3, 1, 2, 4
B1, 2, 3, 4
C2, 1, 3, 4
D1, 3, 2, 4
Attempts:
2 left
💡 Hint
Think about the logical order to ensure the book can be loaned before creating records.

Practice

(1/5)
1. Which class should be responsible for storing information about a book's title, author, and ISBN in a library system?
easy
A. Member
B. Book
C. Librarian
D. Loan

Solution

  1. Step 1: Identify the class representing a book

    The class named Book logically holds details about books such as title, author, and ISBN.
  2. Step 2: Confirm other classes' roles

    Member is for library users, Librarian manages operations, and Loan tracks borrowing, so they don't store book details.
  3. Final Answer:

    Book -> Option B
  4. Quick Check:

    Book class stores book info [OK]
Hint: Book class holds book details like title and author [OK]
Common Mistakes:
  • Confusing Member with Book class
  • Assigning book details to Loan class
  • Thinking Librarian stores book info
2. Which of the following is the correct way to define a method named borrowBook inside the Member class in Python?
easy
A. def borrowBook():
B. def borrowBook(book):
C. def borrowBook(self):
D. def borrowBook(self, book):

Solution

  1. Step 1: Understand method definition in Python classes

    Instance methods must have self as the first parameter to access object data.
  2. Step 2: Check method parameters for borrowing a book

    The method needs the book to borrow, so it should accept a book parameter after self.
  3. Final Answer:

    def borrowBook(self, book): -> Option D
  4. Quick Check:

    Instance method with self and book param [OK]
Hint: Instance methods always start with self parameter [OK]
Common Mistakes:
  • Omitting self parameter
  • Not passing book argument
  • Defining method without parameters
3. Given the following Python code snippet, what will be the output?
class Loan:
    def __init__(self, book, member):
        self.book = book
        self.member = member

loan = Loan('1984', 'Alice')
print(loan.book, loan.member)
medium
A. 1984 Alice
B. book member
C. Loan object memory address
D. Error: missing parameters

Solution

  1. Step 1: Analyze the Loan class constructor

    The constructor __init__ assigns book and member to instance variables.
  2. Step 2: Check the print statement output

    Printing loan.book and loan.member outputs the strings '1984' and 'Alice' separated by space.
  3. Final Answer:

    1984 Alice -> Option A
  4. Quick Check:

    loan.book and loan.member print values [OK]
Hint: Print instance variables to see stored values [OK]
Common Mistakes:
  • Expecting object memory address output
  • Confusing variable names with strings
  • Assuming error due to parameters
4. Identify the error in this Python class design snippet for the Librarian class:
class Librarian:
    def __init__(self, name):
        self.name = name
    def addBook(book):
        print(f"Adding {book} to library")
medium
A. Missing self parameter in addBook method
B. Incorrect print statement syntax
C. Constructor missing return statement
D. Class name should be lowercase

Solution

  1. Step 1: Check method parameters in class

    Instance methods must include self as the first parameter to access instance data.
  2. Step 2: Verify addBook method signature

    addBook lacks self, so it will cause an error when called on an instance.
  3. Final Answer:

    Missing self parameter in addBook method -> Option A
  4. Quick Check:

    Instance methods need self param [OK]
Hint: Instance methods always start with self parameter [OK]
Common Mistakes:
  • Thinking print syntax is wrong
  • Expecting constructor to return value
  • Believing class names must be lowercase
5. In designing a library system, which class should handle the logic to check if a book is currently loaned out before allowing a member to borrow it?
hard
A. Book
B. Member
C. Loan
D. Librarian

Solution

  1. Step 1: Understand responsibilities of each class

    Book stores book info, Member represents users, Loan tracks borrow records, and Librarian manages library operations.
  2. Step 2: Identify who controls borrowing rules

    The Loan class should handle checking if a book is currently loaned out before allowing borrowing, as it tracks loan records.
  3. Final Answer:

    Loan -> Option C
  4. Quick Check:

    Loan class tracks loan status [OK]
Hint: Loan class tracks if a book is loaned out [OK]
Common Mistakes:
  • Putting borrowing logic inside Book class
  • Assigning loan status check to Member
  • Expecting Librarian class to enforce borrowing rules