├── .gitignore ├── design-movie-booking-system ├── README.md ├── src │ └── main │ │ └── java │ │ └── in │ │ └── innoskrit │ │ ├── model │ │ ├── BookingStatus.java │ │ ├── Seat.java │ │ ├── Show.java │ │ ├── Movie.java │ │ ├── Cinema.java │ │ ├── City.java │ │ └── Screen.java │ │ └── Main.java ├── target │ └── classes │ │ └── in │ │ └── innoskrit │ │ ├── Main.class │ │ └── model │ │ ├── City.class │ │ ├── Movie.class │ │ ├── Seat.class │ │ ├── Show.class │ │ ├── Cinema.class │ │ ├── Screen.class │ │ └── BookingStatus.class └── pom.xml ├── .idea ├── .gitignore ├── vcs.xml ├── modules.xml ├── CrackingMachineCodingRound.iml ├── jarRepositories.xml ├── compiler.xml └── misc.xml ├── design-meeting-scheduler ├── src │ └── main │ │ └── java │ │ └── in │ │ └── innoskrit │ │ ├── model │ │ ├── Notification.java │ │ ├── MeetingInviteResponse.java │ │ ├── Calender.java │ │ ├── User.java │ │ ├── Interval.java │ │ ├── MeetingRoom.java │ │ └── Meeting.java │ │ ├── service │ │ ├── CalenderService.java │ │ ├── MeetingRoomService.java │ │ ├── MeetingScheduler.java │ │ └── UserService.java │ │ ├── exception │ │ └── UserNotFoundException.java │ │ ├── Main.java │ │ ├── repository │ │ ├── MeetingRepository.java │ │ ├── MeetingRoomRepository.java │ │ └── UserRepository.java │ │ └── preloader │ │ ├── Preloader.java │ │ ├── DummyMeetingRoomsCreator.java │ │ └── DummyUserCreator.java ├── target │ └── classes │ │ └── in │ │ └── innoskrit │ │ ├── Main.class │ │ ├── model │ │ ├── User.class │ │ ├── Calender.class │ │ ├── Interval.class │ │ ├── Meeting.class │ │ ├── MeetingRoom.class │ │ ├── Notification.class │ │ └── MeetingInviteResponse.class │ │ ├── preloader │ │ ├── Preloader.class │ │ ├── DummyUserCreator.class │ │ └── DummyMeetingRoomsCreator.class │ │ ├── service │ │ ├── UserService.class │ │ ├── CalenderService.class │ │ ├── MeetingScheduler.class │ │ └── MeetingRoomService.class │ │ ├── repository │ │ ├── UserRepository.class │ │ ├── MeetingRepository.class │ │ └── MeetingRoomRepository.class │ │ └── exception │ │ └── UserNotFoundException.class └── pom.xml ├── design-coding-platform ├── src │ └── main │ │ └── java │ │ └── in │ │ └── innoskrit │ │ ├── service │ │ ├── IContestService.java │ │ ├── IQuestionService.java │ │ └── IUserService.java │ │ ├── constant │ │ ├── Difficulty.java │ │ └── ContestStatus.java │ │ ├── serviceImpl │ │ ├── QuestionService.java │ │ └── ContestService.java │ │ ├── Main.java │ │ └── model │ │ ├── User.java │ │ ├── Question.java │ │ └── Contest.java ├── target │ └── classes │ │ └── in │ │ └── innoskrit │ │ ├── Main.class │ │ ├── model │ │ ├── User.class │ │ ├── Contest.class │ │ ├── Question.class │ │ ├── User$UserBuilder.class │ │ ├── Contest$ContestBuilder.class │ │ └── Question$QuestionBuilder.class │ │ ├── constant │ │ ├── Difficulty.class │ │ └── ContestStatus.class │ │ ├── service │ │ ├── IUserService.class │ │ ├── IContestService.class │ │ └── IQuestionService.class │ │ └── serviceImpl │ │ ├── UserService.class │ │ ├── ContestService.class │ │ └── QuestionService.class └── pom.xml ├── design-cache ├── target │ ├── classes │ │ └── in │ │ │ └── innoskrit │ │ │ ├── Main.class │ │ │ ├── cache │ │ │ ├── Cache.class │ │ │ ├── storage │ │ │ │ ├── Storage.class │ │ │ │ └── HashMapStorage.class │ │ │ ├── constant │ │ │ │ └── Constant.class │ │ │ ├── factory │ │ │ │ └── CacheFactory.class │ │ │ ├── policy │ │ │ │ ├── ReplacementPolicy.class │ │ │ │ └── LRUReplacementPolicy.class │ │ │ └── exception │ │ │ │ ├── KeyNotFoundException.class │ │ │ │ └── StorageFullException.class │ │ │ └── algorithm │ │ │ ├── DLLNode.class │ │ │ ├── DoublyLinkedList.class │ │ │ └── exception │ │ │ └── UnexpectedElementFoundException.class │ └── test-classes │ │ └── in │ │ └── innoskrit │ │ └── cache │ │ └── CacheTest.class ├── src │ ├── main │ │ └── java │ │ │ └── in │ │ │ └── innoskrit │ │ │ ├── cache │ │ │ ├── policy │ │ │ │ ├── ReplacementPolicy.java │ │ │ │ └── LRUReplacementPolicy.java │ │ │ ├── constant │ │ │ │ └── Constant.java │ │ │ ├── exception │ │ │ │ ├── KeyNotFoundException.java │ │ │ │ └── StorageFullException.java │ │ │ ├── factory │ │ │ │ └── CacheFactory.java │ │ │ ├── storage │ │ │ │ ├── Storage.java │ │ │ │ └── HashMapStorage.java │ │ │ └── Cache.java │ │ │ ├── algorithm │ │ │ ├── exception │ │ │ │ └── UnexpectedElementFoundException.java │ │ │ ├── DLLNode.java │ │ │ └── DoublyLinkedList.java │ │ │ └── Main.java │ └── test │ │ └── java │ │ └── in │ │ └── innoskrit │ │ └── cache │ │ └── CacheTest.java └── pom.xml ├── design-api-ratelimiter ├── src │ ├── main │ │ └── java │ │ │ └── in │ │ │ └── innoskrit │ │ │ ├── RateLimiter.java │ │ │ └── algorithm │ │ │ ├── leakybucket │ │ │ ├── LeakyBucket.java │ │ │ └── LeakyBucketRateLimiter.java │ │ │ ├── slidingwindowlog │ │ │ ├── SlidingWindowLog.java │ │ │ └── SlidingWindowLogRateLimiter.java │ │ │ ├── tokenbucket │ │ │ ├── TokenBucket.java │ │ │ └── TokenBucketRateLimiter.java │ │ │ └── fixedwindow │ │ │ ├── FixedWindow.java │ │ │ └── FixedWindowRateLimiter.java │ └── test │ │ └── java │ │ └── in │ │ └── innoskrit │ │ └── TokenBucketRateLimiterTest.java ├── target │ ├── classes │ │ └── in │ │ │ └── innoskrit │ │ │ ├── Main.class │ │ │ ├── RateLimiter.class │ │ │ └── algorithm │ │ │ ├── fixedwindow │ │ │ ├── FixedWindow.class │ │ │ └── FixedWindowRateLimiter.class │ │ │ ├── leakybucket │ │ │ ├── LeakyBucket.class │ │ │ └── LeakyBucketRateLimiter.class │ │ │ ├── tokenbucket │ │ │ ├── TokenBucket.class │ │ │ └── TokenBucketRateLimiter.class │ │ │ └── slidingwindowlog │ │ │ ├── SlidingWindowLog.class │ │ │ └── SlidingWindowLogRateLimiter.class │ └── test-classes │ │ └── in │ │ └── innoskrit │ │ └── TokenBucketRateLimiterTest.class ├── ProblemStatement.md └── pom.xml ├── design-apply-coupons-on-shopping-cart ├── src │ └── main │ │ └── java │ │ └── in │ │ └── innoskrit │ │ ├── model │ │ ├── CartItem.java │ │ ├── DiscountDecorator.java │ │ ├── PercentageDiscount.java │ │ ├── FixedDiscount.java │ │ ├── Product.java │ │ └── ShoppingCart.java │ │ └── Main.java ├── target │ └── classes │ │ └── in │ │ └── innoskrit │ │ ├── Main.class │ │ └── model │ │ ├── CartItem.class │ │ ├── Product.class │ │ ├── FixedDiscount.class │ │ ├── ShoppingCart.class │ │ ├── DiscountDecorator.class │ │ └── PercentageDiscount.class ├── pom.xml └── ProblemStatement.md ├── design-doctor-appointment-system ├── src │ └── main │ │ └── java │ │ └── in │ │ └── innoskrit │ │ ├── mode │ │ ├── Print.java │ │ └── ConsolePrint.java │ │ ├── model │ │ ├── SlotAvailability.java │ │ ├── Specialization.java │ │ ├── Booking.java │ │ ├── Doctor.java │ │ ├── Patient.java │ │ └── TimeSlot.java │ │ ├── exception │ │ ├── SlotNotFoundException.java │ │ ├── DoctorNotFoundException.java │ │ ├── BookingNotFoundException.java │ │ ├── PatientNotFoundException.java │ │ ├── SlotAlreadyBookedException.java │ │ ├── DoctorAlreadyExistsException.java │ │ ├── PatientAlreadyExistsException.java │ │ └── SpecializationNotFoundException.java │ │ ├── service │ │ ├── BookingService.java │ │ └── PatientService.java │ │ ├── constant │ │ └── Constant.java │ │ └── repository │ │ └── PatientRepository.java ├── target │ └── classes │ │ └── in │ │ └── innoskrit │ │ ├── Main.class │ │ ├── mode │ │ ├── Print.class │ │ └── ConsolePrint.class │ │ ├── model │ │ ├── Booking.class │ │ ├── Doctor.class │ │ ├── Patient.class │ │ ├── TimeSlot.class │ │ ├── Specialization.class │ │ └── SlotAvailability.class │ │ ├── constant │ │ └── Constant.class │ │ ├── service │ │ ├── DoctorService.class │ │ ├── BookingService.class │ │ └── PatientService.class │ │ ├── repository │ │ ├── BookingRepository.class │ │ ├── DoctorRepository.class │ │ └── PatientRepository.class │ │ └── exception │ │ ├── SlotNotFoundException.class │ │ ├── BookingNotFoundException.class │ │ ├── DoctorNotFoundException.class │ │ ├── PatientNotFoundException.class │ │ ├── SlotAlreadyBookedException.class │ │ ├── DoctorAlreadyExistsException.class │ │ ├── PatientAlreadyExistsException.class │ │ └── SpecializationNotFoundException.class ├── pom.xml └── ProblemStatement.md ├── design-snake-game ├── target │ ├── classes │ │ └── in │ │ │ └── innoskrit │ │ │ ├── Main.class │ │ │ ├── Pair.class │ │ │ └── SnakeGame.class │ └── test-classes │ │ └── in │ │ └── innoskrit │ │ └── SnakeGameTest.class ├── src │ ├── main │ │ └── java │ │ │ └── in │ │ │ └── innoskrit │ │ │ ├── Pair.java │ │ │ └── Main.java │ └── test │ │ └── java │ │ └── in │ │ └── innoskrit │ │ └── SnakeGameTest.java └── pom.xml ├── design-file-system ├── target │ └── classes │ │ └── in │ │ └── innoskrit │ │ ├── Main.class │ │ ├── PathNode.class │ │ ├── FileSystem.class │ │ └── IFileSystem.class ├── src │ └── main │ │ └── java │ │ └── in │ │ └── innoskrit │ │ ├── IFileSystem.java │ │ ├── PathNode.java │ │ ├── Main.java │ │ └── FileSystem.java ├── ProblemStatement.md └── pom.xml ├── design-splitwise-application ├── src │ └── main │ │ └── java │ │ └── in │ │ └── innoskrit │ │ ├── model │ │ ├── ExpenseType.java │ │ ├── split │ │ │ ├── EqualSplit.java │ │ │ ├── Split.java │ │ │ ├── ExactSplit.java │ │ │ └── PercentageSplit.java │ │ ├── expense │ │ │ ├── ExpenseMetaData.java │ │ │ ├── EqualExpense.java │ │ │ ├── Expense.java │ │ │ ├── ExactExpense.java │ │ │ └── PercentageExpense.java │ │ └── User.java │ │ ├── exception │ │ ├── InvalidUserException.java │ │ └── UserNotFoundException.java │ │ ├── repository │ │ └── UserRepository.java │ │ ├── service │ │ ├── UserService.java │ │ └── ExpenseService.java │ │ └── Main.java ├── target │ └── classes │ │ └── in │ │ └── innoskrit │ │ ├── Main.class │ │ ├── model │ │ ├── User.class │ │ ├── ExpenseType.class │ │ ├── split │ │ │ ├── Split.class │ │ │ ├── EqualSplit.class │ │ │ ├── ExactSplit.class │ │ │ └── PercentageSplit.class │ │ └── expense │ │ │ ├── Expense.class │ │ │ ├── EqualExpense.class │ │ │ ├── ExactExpense.class │ │ │ ├── ExpenseMetaData.class │ │ │ └── PercentageExpense.class │ │ ├── service │ │ ├── UserService.class │ │ └── ExpenseService.class │ │ ├── repository │ │ ├── UserRepository.class │ │ └── ExpenseRepository.class │ │ └── exception │ │ ├── InvalidUserException.class │ │ └── UserNotFoundException.class ├── ProblemStatement.md └── pom.xml ├── design-middleware-router ├── target │ └── classes │ │ └── in │ │ └── innoskrit │ │ ├── Main.class │ │ ├── PathNode.class │ │ ├── MiddlewareRouter.class │ │ └── MiddlewareRouterImpl.class ├── src │ └── main │ │ └── java │ │ └── in │ │ └── innoskrit │ │ ├── MiddlewareRouter.java │ │ ├── PathNode.java │ │ ├── Main.java │ │ └── MiddlewareRouterImpl.java ├── ProblemStatement.md └── pom.xml ├── design-snake-and-ladder ├── target │ └── classes │ │ ├── in │ │ └── innoskrit │ │ │ ├── Main.class │ │ │ ├── model │ │ │ ├── Dice.class │ │ │ ├── Board.class │ │ │ ├── Ladder.class │ │ │ ├── Player.class │ │ │ └── Snake.class │ │ │ └── service │ │ │ └── GameService.class │ │ └── input.txt ├── src │ └── main │ │ ├── resources │ │ └── input.txt │ │ └── java │ │ └── in │ │ └── innoskrit │ │ ├── model │ │ ├── Dice.java │ │ ├── Ladder.java │ │ ├── Snake.java │ │ ├── Player.java │ │ └── Board.java │ │ └── service │ │ └── GameService.java └── pom.xml ├── design-ecommerce-application ├── target │ └── classes │ │ └── in │ │ └── innoskrit │ │ └── Main.class ├── src │ └── main │ │ └── java │ │ └── in │ │ └── innoskrit │ │ └── Main.java ├── ProblemStatement.md └── pom.xml ├── design-customer-resolution-system ├── src │ └── main │ │ └── java │ │ └── in │ │ └── innoskrit │ │ ├── model │ │ ├── issue │ │ │ ├── IssueState.java │ │ │ ├── GoldRelatedIssue.java │ │ │ ├── PaymentRelatedIssue.java │ │ │ ├── InsuranceRelatedIssue.java │ │ │ ├── MutualFundRelatedIssue.java │ │ │ └── Issue.java │ │ ├── Specialization.java │ │ ├── Customer.java │ │ └── Agent.java │ │ ├── constants │ │ └── Constant.java │ │ ├── exception │ │ ├── AgentNotFoundException.java │ │ └── CustomerNotFoundException.java │ │ ├── service │ │ ├── IAssignStrategy.java │ │ ├── CustomerService.java │ │ ├── AgentService.java │ │ └── DefaultStrategy.java │ │ └── repository │ │ ├── IssueManagementRepository.java │ │ ├── CustomerRepository.java │ │ └── AgentRepository.java ├── target │ └── classes │ │ └── in │ │ └── innoskrit │ │ ├── Main.class │ │ ├── model │ │ ├── Agent.class │ │ ├── Customer.class │ │ ├── issue │ │ │ ├── Issue.class │ │ │ ├── IssueState.class │ │ │ ├── GoldRelatedIssue.class │ │ │ ├── InsuranceRelatedIssue.class │ │ │ ├── PaymentRelatedIssue.class │ │ │ └── MutualFundRelatedIssue.class │ │ └── Specialization.class │ │ ├── constants │ │ └── Constant.class │ │ ├── service │ │ ├── AgentService.class │ │ ├── CustomerService.class │ │ ├── DefaultStrategy.class │ │ ├── IAssignStrategy.class │ │ └── IssueManagementService.class │ │ ├── repository │ │ ├── AgentRepository.class │ │ ├── CustomerRepository.class │ │ └── IssueManagementRepository.class │ │ └── exception │ │ ├── AgentNotFoundException.class │ │ └── CustomerNotFoundException.class └── pom.xml └── design-file-system-using-byte-array ├── target └── classes │ └── in │ └── innoskrit │ ├── Main.class │ ├── model │ └── File.class │ └── service │ ├── Encryptor.class │ ├── IEncryptor.class │ ├── FileSystemService.class │ └── IFileSystemService.class ├── src └── main │ └── java │ └── in │ └── innoskrit │ ├── service │ ├── IEncryptor.java │ ├── IFileSystemService.java │ └── Encryptor.java │ ├── model │ └── File.java │ └── Main.java └── pom.xml /.gitignore: -------------------------------------------------------------------------------- 1 | /.idea/ 2 | -------------------------------------------------------------------------------- /design-movie-booking-system/README.md: -------------------------------------------------------------------------------- 1 | ## Movie Booking System 2 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/model/Notification.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public class Notification { 4 | } 5 | -------------------------------------------------------------------------------- /design-coding-platform/src/main/java/in/innoskrit/service/IContestService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | public interface IContestService { 4 | } 5 | -------------------------------------------------------------------------------- /design-coding-platform/src/main/java/in/innoskrit/service/IQuestionService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | public interface IQuestionService { 4 | } 5 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/service/CalenderService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | public class CalenderService { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /design-coding-platform/src/main/java/in/innoskrit/constant/Difficulty.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.constant; 2 | 3 | public enum Difficulty { 4 | LOW, MEDIUM, HIGH 5 | } 6 | -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-api-ratelimiter/src/main/java/in/innoskrit/RateLimiter.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | public interface RateLimiter { 4 | boolean rateLimit(String customerId); 5 | } 6 | -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/src/main/java/in/innoskrit/model/CartItem.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public interface CartItem { 4 | double getPrice(); 5 | } 6 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/mode/Print.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.mode; 2 | 3 | public interface Print { 4 | public void printData(String data); 5 | } 6 | -------------------------------------------------------------------------------- /design-snake-game/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-snake-game/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-snake-game/target/classes/in/innoskrit/Pair.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-snake-game/target/classes/in/innoskrit/Pair.class -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/cache/Cache.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/cache/Cache.class -------------------------------------------------------------------------------- /design-file-system/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-file-system/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-api-ratelimiter/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-api-ratelimiter/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/src/main/java/in/innoskrit/model/DiscountDecorator.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public interface DiscountDecorator extends CartItem { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-file-system/target/classes/in/innoskrit/PathNode.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-file-system/target/classes/in/innoskrit/PathNode.class -------------------------------------------------------------------------------- /design-snake-game/target/classes/in/innoskrit/SnakeGame.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-snake-game/target/classes/in/innoskrit/SnakeGame.class -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/model/ExpenseType.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public enum ExpenseType { 4 | EXACT, 5 | EQUAL, 6 | PERCENTAGE 7 | } 8 | -------------------------------------------------------------------------------- /design-coding-platform/src/main/java/in/innoskrit/constant/ContestStatus.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.constant; 2 | 3 | public enum ContestStatus { 4 | IN_PROGRESS, 5 | STARTED, 6 | ENDED 7 | } 8 | -------------------------------------------------------------------------------- /design-file-system/target/classes/in/innoskrit/FileSystem.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-file-system/target/classes/in/innoskrit/FileSystem.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-middleware-router/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-middleware-router/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-movie-booking-system/src/main/java/in/innoskrit/model/BookingStatus.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public enum BookingStatus { 4 | CREATED, 5 | CONFIRMED, 6 | EXPIRED 7 | } 8 | -------------------------------------------------------------------------------- /design-snake-and-ladder/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-snake-and-ladder/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/algorithm/DLLNode.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/algorithm/DLLNode.class -------------------------------------------------------------------------------- /design-file-system/target/classes/in/innoskrit/IFileSystem.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-file-system/target/classes/in/innoskrit/IFileSystem.class -------------------------------------------------------------------------------- /design-movie-booking-system/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-movie-booking-system/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-api-ratelimiter/target/classes/in/innoskrit/RateLimiter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-api-ratelimiter/target/classes/in/innoskrit/RateLimiter.class -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/cache/storage/Storage.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/cache/storage/Storage.class -------------------------------------------------------------------------------- /design-cache/target/test-classes/in/innoskrit/cache/CacheTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/test-classes/in/innoskrit/cache/CacheTest.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/model/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/model/User.class -------------------------------------------------------------------------------- /design-ecommerce-application/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-ecommerce-application/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-file-system/src/main/java/in/innoskrit/IFileSystem.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | public interface IFileSystem { 4 | boolean createPath(String path, int value); 5 | int get(String path); 6 | } 7 | -------------------------------------------------------------------------------- /design-middleware-router/target/classes/in/innoskrit/PathNode.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-middleware-router/target/classes/in/innoskrit/PathNode.class -------------------------------------------------------------------------------- /design-snake-and-ladder/target/classes/in/innoskrit/model/Dice.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-snake-and-ladder/target/classes/in/innoskrit/model/Dice.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/cache/constant/Constant.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/cache/constant/Constant.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/model/Contest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/model/Contest.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/model/Question.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/model/Question.class -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/model/issue/IssueState.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.issue; 2 | 3 | public enum IssueState { 4 | OPEN, 5 | IN_PROGRESS , 6 | RESOLVED, 7 | } 8 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/model/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/model/User.class -------------------------------------------------------------------------------- /design-snake-and-ladder/target/classes/in/innoskrit/model/Board.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-snake-and-ladder/target/classes/in/innoskrit/model/Board.class -------------------------------------------------------------------------------- /design-snake-and-ladder/target/classes/in/innoskrit/model/Ladder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-snake-and-ladder/target/classes/in/innoskrit/model/Ladder.class -------------------------------------------------------------------------------- /design-snake-and-ladder/target/classes/in/innoskrit/model/Player.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-snake-and-ladder/target/classes/in/innoskrit/model/Player.class -------------------------------------------------------------------------------- /design-snake-and-ladder/target/classes/in/innoskrit/model/Snake.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-snake-and-ladder/target/classes/in/innoskrit/model/Snake.class -------------------------------------------------------------------------------- /design-snake-game/target/test-classes/in/innoskrit/SnakeGameTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-snake-game/target/test-classes/in/innoskrit/SnakeGameTest.class -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/algorithm/DoublyLinkedList.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/algorithm/DoublyLinkedList.class -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/cache/factory/CacheFactory.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/cache/factory/CacheFactory.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-ecommerce-application/src/main/java/in/innoskrit/Main.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | System.out.println("Hello world!"); 6 | } 7 | } -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/model/Calender.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/model/Calender.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/model/Interval.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/model/Interval.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/model/Meeting.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/model/Meeting.class -------------------------------------------------------------------------------- /design-movie-booking-system/src/main/java/in/innoskrit/Main.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | System.out.println("Hello world!"); 6 | } 7 | } -------------------------------------------------------------------------------- /design-movie-booking-system/target/classes/in/innoskrit/model/City.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-movie-booking-system/target/classes/in/innoskrit/model/City.class -------------------------------------------------------------------------------- /design-movie-booking-system/target/classes/in/innoskrit/model/Movie.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-movie-booking-system/target/classes/in/innoskrit/model/Movie.class -------------------------------------------------------------------------------- /design-movie-booking-system/target/classes/in/innoskrit/model/Seat.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-movie-booking-system/target/classes/in/innoskrit/model/Seat.class -------------------------------------------------------------------------------- /design-movie-booking-system/target/classes/in/innoskrit/model/Show.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-movie-booking-system/target/classes/in/innoskrit/model/Show.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/model/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/model/User.class -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/cache/policy/ReplacementPolicy.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.cache.policy; 2 | 3 | public interface ReplacementPolicy { 4 | void keyAccessed(Key key); 5 | Key evictKey(); 6 | } 7 | -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/cache/storage/HashMapStorage.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/cache/storage/HashMapStorage.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/constant/Difficulty.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/constant/Difficulty.class -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/model/Specialization.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public enum Specialization { 4 | PAYMENT, 5 | MUTUAL_FUND, 6 | GOLD, 7 | INSURANCE 8 | } 9 | -------------------------------------------------------------------------------- /design-file-system-using-byte-array/target/classes/in/innoskrit/Main.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-file-system-using-byte-array/target/classes/in/innoskrit/Main.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/model/MeetingRoom.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/model/MeetingRoom.class -------------------------------------------------------------------------------- /design-middleware-router/src/main/java/in/innoskrit/MiddlewareRouter.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | public interface MiddlewareRouter { 4 | void add(String path, String result); 5 | String route(String path); 6 | } 7 | -------------------------------------------------------------------------------- /design-middleware-router/target/classes/in/innoskrit/MiddlewareRouter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-middleware-router/target/classes/in/innoskrit/MiddlewareRouter.class -------------------------------------------------------------------------------- /design-movie-booking-system/target/classes/in/innoskrit/model/Cinema.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-movie-booking-system/target/classes/in/innoskrit/model/Cinema.class -------------------------------------------------------------------------------- /design-movie-booking-system/target/classes/in/innoskrit/model/Screen.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-movie-booking-system/target/classes/in/innoskrit/model/Screen.class -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/cache/policy/ReplacementPolicy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/cache/policy/ReplacementPolicy.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/service/IUserService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/service/IUserService.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/mode/Print.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/mode/Print.class -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/model/MeetingInviteResponse.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public enum MeetingInviteResponse { 4 | ACCEPT, 5 | DENIED, 6 | TENTATIVE, 7 | NO_RESPONSE 8 | } 9 | -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/model/Notification.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/model/Notification.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/preloader/Preloader.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/preloader/Preloader.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/service/UserService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/service/UserService.class -------------------------------------------------------------------------------- /design-snake-and-ladder/target/classes/in/innoskrit/service/GameService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-snake-and-ladder/target/classes/in/innoskrit/service/GameService.class -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/cache/policy/LRUReplacementPolicy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/cache/policy/LRUReplacementPolicy.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/constant/ContestStatus.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/constant/ContestStatus.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/model/User$UserBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/model/User$UserBuilder.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/service/IContestService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/service/IContestService.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/service/IQuestionService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/service/IQuestionService.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/serviceImpl/UserService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/serviceImpl/UserService.class -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/constants/Constant.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.constants; 2 | 3 | public class Constant { 4 | 5 | public static final String INITIAL_STATUS = "Issue has been raised."; 6 | } 7 | -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/model/Agent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/model/Agent.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/model/Booking.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/model/Booking.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/model/Doctor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/model/Doctor.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/model/Patient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/model/Patient.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/model/TimeSlot.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/model/TimeSlot.class -------------------------------------------------------------------------------- /design-file-system-using-byte-array/target/classes/in/innoskrit/model/File.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-file-system-using-byte-array/target/classes/in/innoskrit/model/File.class -------------------------------------------------------------------------------- /design-middleware-router/target/classes/in/innoskrit/MiddlewareRouterImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-middleware-router/target/classes/in/innoskrit/MiddlewareRouterImpl.class -------------------------------------------------------------------------------- /design-movie-booking-system/target/classes/in/innoskrit/model/BookingStatus.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-movie-booking-system/target/classes/in/innoskrit/model/BookingStatus.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/model/ExpenseType.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/model/ExpenseType.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/model/split/Split.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/model/split/Split.class -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/cache/exception/KeyNotFoundException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/cache/exception/KeyNotFoundException.class -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/cache/exception/StorageFullException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/cache/exception/StorageFullException.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/serviceImpl/ContestService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/serviceImpl/ContestService.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/model/Customer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/model/Customer.class -------------------------------------------------------------------------------- /design-file-system-using-byte-array/src/main/java/in/innoskrit/service/IEncryptor.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | public interface IEncryptor { 4 | byte[] encrypt(byte[] data); 5 | byte[] decrypt(byte[] encryptedData); 6 | } 7 | -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/service/CalenderService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/service/CalenderService.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/service/MeetingScheduler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/service/MeetingScheduler.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/service/UserService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/service/UserService.class -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/CartItem.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/CartItem.class -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/Product.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/Product.class -------------------------------------------------------------------------------- /design-coding-platform/src/main/java/in/innoskrit/serviceImpl/QuestionService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.serviceImpl; 2 | 3 | import in.innoskrit.service.IContestService; 4 | 5 | public class QuestionService implements IContestService { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/model/Contest$ContestBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/model/Contest$ContestBuilder.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/serviceImpl/QuestionService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/serviceImpl/QuestionService.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/constants/Constant.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/constants/Constant.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/model/issue/Issue.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/model/issue/Issue.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/model/SlotAvailability.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.ToString; 4 | 5 | @ToString 6 | public enum SlotAvailability { 7 | FREE, 8 | BOOKED 9 | } 10 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/constant/Constant.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/constant/Constant.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/mode/ConsolePrint.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/mode/ConsolePrint.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/model/MeetingInviteResponse.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/model/MeetingInviteResponse.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/preloader/DummyUserCreator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/preloader/DummyUserCreator.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/repository/UserRepository.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/repository/UserRepository.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/service/MeetingRoomService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/service/MeetingRoomService.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/model/expense/Expense.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/model/expense/Expense.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/model/split/EqualSplit.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/model/split/EqualSplit.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/model/split/ExactSplit.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/model/split/ExactSplit.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/service/ExpenseService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/service/ExpenseService.class -------------------------------------------------------------------------------- /design-api-ratelimiter/target/test-classes/in/innoskrit/TokenBucketRateLimiterTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-api-ratelimiter/target/test-classes/in/innoskrit/TokenBucketRateLimiterTest.class -------------------------------------------------------------------------------- /design-coding-platform/target/classes/in/innoskrit/model/Question$QuestionBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-coding-platform/target/classes/in/innoskrit/model/Question$QuestionBuilder.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/model/Specialization.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/model/Specialization.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/service/AgentService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/service/AgentService.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/model/Specialization.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/model/Specialization.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/service/DoctorService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/service/DoctorService.class -------------------------------------------------------------------------------- /design-file-system-using-byte-array/target/classes/in/innoskrit/service/Encryptor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-file-system-using-byte-array/target/classes/in/innoskrit/service/Encryptor.class -------------------------------------------------------------------------------- /design-file-system-using-byte-array/target/classes/in/innoskrit/service/IEncryptor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-file-system-using-byte-array/target/classes/in/innoskrit/service/IEncryptor.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/repository/MeetingRepository.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/repository/MeetingRepository.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/repository/UserRepository.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/repository/UserRepository.class -------------------------------------------------------------------------------- /design-api-ratelimiter/target/classes/in/innoskrit/algorithm/fixedwindow/FixedWindow.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-api-ratelimiter/target/classes/in/innoskrit/algorithm/fixedwindow/FixedWindow.class -------------------------------------------------------------------------------- /design-api-ratelimiter/target/classes/in/innoskrit/algorithm/leakybucket/LeakyBucket.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-api-ratelimiter/target/classes/in/innoskrit/algorithm/leakybucket/LeakyBucket.class -------------------------------------------------------------------------------- /design-api-ratelimiter/target/classes/in/innoskrit/algorithm/tokenbucket/TokenBucket.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-api-ratelimiter/target/classes/in/innoskrit/algorithm/tokenbucket/TokenBucket.class -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/FixedDiscount.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/FixedDiscount.class -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/ShoppingCart.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/ShoppingCart.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/model/issue/IssueState.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/model/issue/IssueState.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/service/CustomerService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/service/CustomerService.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/service/DefaultStrategy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/service/DefaultStrategy.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/service/IAssignStrategy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/service/IAssignStrategy.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/model/SlotAvailability.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/model/SlotAvailability.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/service/BookingService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/service/BookingService.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/service/PatientService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/service/PatientService.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/exception/UserNotFoundException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/exception/UserNotFoundException.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/repository/MeetingRoomRepository.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/repository/MeetingRoomRepository.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/model/expense/EqualExpense.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/model/expense/EqualExpense.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/model/expense/ExactExpense.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/model/expense/ExactExpense.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/model/split/PercentageSplit.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/model/split/PercentageSplit.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/repository/ExpenseRepository.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/repository/ExpenseRepository.class -------------------------------------------------------------------------------- /design-meeting-scheduler/target/classes/in/innoskrit/preloader/DummyMeetingRoomsCreator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-meeting-scheduler/target/classes/in/innoskrit/preloader/DummyMeetingRoomsCreator.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/exception/InvalidUserException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/exception/InvalidUserException.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/model/expense/ExpenseMetaData.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/model/expense/ExpenseMetaData.class -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/DiscountDecorator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/DiscountDecorator.class -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/PercentageDiscount.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-apply-coupons-on-shopping-cart/target/classes/in/innoskrit/model/PercentageDiscount.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/model/issue/GoldRelatedIssue.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/model/issue/GoldRelatedIssue.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/repository/AgentRepository.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/repository/AgentRepository.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/repository/BookingRepository.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/repository/BookingRepository.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/repository/DoctorRepository.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/repository/DoctorRepository.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/repository/PatientRepository.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/repository/PatientRepository.class -------------------------------------------------------------------------------- /design-file-system-using-byte-array/target/classes/in/innoskrit/service/FileSystemService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-file-system-using-byte-array/target/classes/in/innoskrit/service/FileSystemService.class -------------------------------------------------------------------------------- /design-file-system-using-byte-array/target/classes/in/innoskrit/service/IFileSystemService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-file-system-using-byte-array/target/classes/in/innoskrit/service/IFileSystemService.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/exception/UserNotFoundException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/exception/UserNotFoundException.class -------------------------------------------------------------------------------- /design-splitwise-application/target/classes/in/innoskrit/model/expense/PercentageExpense.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-splitwise-application/target/classes/in/innoskrit/model/expense/PercentageExpense.class -------------------------------------------------------------------------------- /design-cache/target/classes/in/innoskrit/algorithm/exception/UnexpectedElementFoundException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-cache/target/classes/in/innoskrit/algorithm/exception/UnexpectedElementFoundException.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/repository/CustomerRepository.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/repository/CustomerRepository.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/service/IssueManagementService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/service/IssueManagementService.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/exception/SlotNotFoundException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/exception/SlotNotFoundException.class -------------------------------------------------------------------------------- /design-api-ratelimiter/target/classes/in/innoskrit/algorithm/fixedwindow/FixedWindowRateLimiter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-api-ratelimiter/target/classes/in/innoskrit/algorithm/fixedwindow/FixedWindowRateLimiter.class -------------------------------------------------------------------------------- /design-api-ratelimiter/target/classes/in/innoskrit/algorithm/leakybucket/LeakyBucketRateLimiter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-api-ratelimiter/target/classes/in/innoskrit/algorithm/leakybucket/LeakyBucketRateLimiter.class -------------------------------------------------------------------------------- /design-api-ratelimiter/target/classes/in/innoskrit/algorithm/slidingwindowlog/SlidingWindowLog.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-api-ratelimiter/target/classes/in/innoskrit/algorithm/slidingwindowlog/SlidingWindowLog.class -------------------------------------------------------------------------------- /design-api-ratelimiter/target/classes/in/innoskrit/algorithm/tokenbucket/TokenBucketRateLimiter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-api-ratelimiter/target/classes/in/innoskrit/algorithm/tokenbucket/TokenBucketRateLimiter.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/exception/AgentNotFoundException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/exception/AgentNotFoundException.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/model/issue/InsuranceRelatedIssue.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/model/issue/InsuranceRelatedIssue.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/model/issue/PaymentRelatedIssue.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/model/issue/PaymentRelatedIssue.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/exception/BookingNotFoundException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/exception/BookingNotFoundException.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/exception/DoctorNotFoundException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/exception/DoctorNotFoundException.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/exception/PatientNotFoundException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/exception/PatientNotFoundException.class -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/cache/constant/Constant.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.cache.constant; 2 | 3 | public class Constant { 4 | public static final String STORAGE_FULL = "Cache is full."; 5 | public static final String KEY_NOT_FOUND = "Key not found."; 6 | } 7 | -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/exception/CustomerNotFoundException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/exception/CustomerNotFoundException.class -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/model/issue/MutualFundRelatedIssue.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/model/issue/MutualFundRelatedIssue.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/exception/SlotAlreadyBookedException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/exception/SlotAlreadyBookedException.class -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/cache/exception/KeyNotFoundException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.cache.exception; 2 | 3 | public class KeyNotFoundException extends RuntimeException { 4 | public KeyNotFoundException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/cache/exception/StorageFullException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.cache.exception; 2 | 3 | public class StorageFullException extends RuntimeException { 4 | public StorageFullException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-customer-resolution-system/target/classes/in/innoskrit/repository/IssueManagementRepository.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-customer-resolution-system/target/classes/in/innoskrit/repository/IssueManagementRepository.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/exception/DoctorAlreadyExistsException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/exception/DoctorAlreadyExistsException.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/exception/PatientAlreadyExistsException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/exception/PatientAlreadyExistsException.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/target/classes/in/innoskrit/exception/SpecializationNotFoundException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-doctor-appointment-system/target/classes/in/innoskrit/exception/SpecializationNotFoundException.class -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/exception/UserNotFoundException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class UserNotFoundException extends RuntimeException { 4 | public UserNotFoundException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/exception/InvalidUserException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class InvalidUserException extends RuntimeException { 4 | public InvalidUserException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/exception/UserNotFoundException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class UserNotFoundException extends RuntimeException { 4 | public UserNotFoundException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-api-ratelimiter/target/classes/in/innoskrit/algorithm/slidingwindowlog/SlidingWindowLogRateLimiter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aakashverma1124/Cracking-Machine-Coding-Round/HEAD/design-api-ratelimiter/target/classes/in/innoskrit/algorithm/slidingwindowlog/SlidingWindowLogRateLimiter.class -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/exception/SlotNotFoundException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class SlotNotFoundException extends RuntimeException { 4 | public SlotNotFoundException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/mode/ConsolePrint.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.mode; 2 | 3 | public class ConsolePrint implements Print { 4 | 5 | @Override 6 | public void printData(String data) { 7 | System.out.println(data); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/exception/AgentNotFoundException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class AgentNotFoundException extends RuntimeException { 4 | public AgentNotFoundException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/exception/DoctorNotFoundException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class DoctorNotFoundException extends RuntimeException { 4 | public DoctorNotFoundException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/exception/BookingNotFoundException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class BookingNotFoundException extends RuntimeException { 4 | public BookingNotFoundException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/exception/PatientNotFoundException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class PatientNotFoundException extends RuntimeException { 4 | public PatientNotFoundException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/exception/CustomerNotFoundException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class CustomerNotFoundException extends RuntimeException { 4 | public CustomerNotFoundException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/exception/SlotAlreadyBookedException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class SlotAlreadyBookedException extends RuntimeException { 4 | public SlotAlreadyBookedException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/exception/DoctorAlreadyExistsException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class DoctorAlreadyExistsException extends RuntimeException { 4 | public DoctorAlreadyExistsException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/exception/PatientAlreadyExistsException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class PatientAlreadyExistsException extends RuntimeException { 4 | public PatientAlreadyExistsException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/algorithm/exception/UnexpectedElementFoundException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.algorithm.exception; 2 | 3 | public class UnexpectedElementFoundException extends RuntimeException { 4 | public UnexpectedElementFoundException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/exception/SpecializationNotFoundException.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.exception; 2 | 3 | public class SpecializationNotFoundException extends RuntimeException { 4 | public SpecializationNotFoundException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/model/Specialization.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.ToString; 4 | 5 | @ToString 6 | public enum Specialization { 7 | CARDIOLOGIST, 8 | DERMATOLOGIST, 9 | ORTHOPEDIC, 10 | GENERAL_PHYSICIAN, 11 | DENTIST, 12 | } 13 | -------------------------------------------------------------------------------- /design-coding-platform/src/main/java/in/innoskrit/Main.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import in.innoskrit.model.Question; 4 | import in.innoskrit.model.User; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | public class Main { 10 | public static void main(String[] args) { 11 | 12 | } 13 | } -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/Main.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import in.innoskrit.preloader.Preloader; 4 | import in.innoskrit.service.MeetingScheduler; 5 | 6 | public class Main { 7 | public static void main(String[] args) { 8 | 9 | 10 | Preloader.preload(); 11 | 12 | } 13 | } -------------------------------------------------------------------------------- /design-middleware-router/src/main/java/in/innoskrit/PathNode.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class PathNode { 7 | String value; 8 | Map path; 9 | 10 | public PathNode() { 11 | this.path = new HashMap<>(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /design-snake-and-ladder/target/classes/input.txt: -------------------------------------------------------------------------------- 1 | Enter Board Size: 100 2 | Enter Number Of Players: 2 3 | --Enter Player Details-- 4 | Aakash 5 | Sarthak 6 | Enter Number Of Snakes: 4 7 | --Enter Snake Positions-- 8 | 27 5 9 | 40 3 10 | 66 45 11 | 99 41 12 | Enter Number Of Ladders: 3 13 | --Enter Ladder Positions-- 14 | 4 25 15 | 13 46 16 | 62 81 -------------------------------------------------------------------------------- /design-snake-and-ladder/src/main/resources/input.txt: -------------------------------------------------------------------------------- 1 | Enter Board Size: 100 2 | Enter Number Of Players: 2 3 | --Enter Player Details-- 4 | Aakash 5 | Sarthak 6 | Enter Number Of Snakes: 4 7 | --Enter Snake Positions-- 8 | 27 5 9 | 40 3 10 | 66 45 11 | 99 41 12 | Enter Number Of Ladders: 3 13 | --Enter Ladder Positions-- 14 | 4 25 15 | 13 46 16 | 62 81 -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/model/Calender.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | @AllArgsConstructor 12 | public class Calender { 13 | List meetings; 14 | } 15 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/model/User.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | @AllArgsConstructor 10 | public class User { 11 | private String name; 12 | private String email; 13 | private Calender calender; 14 | } 15 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/model/split/EqualSplit.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.split; 2 | 3 | import in.innoskrit.model.User; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class EqualSplit extends Split { 10 | public EqualSplit(String userId) { 11 | super(userId); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /design-file-system-using-byte-array/src/main/java/in/innoskrit/model/File.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | @AllArgsConstructor 10 | public class File { 11 | private String filename; 12 | private int startIndex; 13 | private int endIndex; 14 | } 15 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/model/split/Split.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.split; 2 | 3 | import in.innoskrit.model.User; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public abstract class Split { 10 | String userId; 11 | public Split(String userId) { 12 | this.userId = userId; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/service/IAssignStrategy.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.model.Agent; 4 | 5 | import java.util.List; 6 | 7 | public interface IAssignStrategy { 8 | Agent assignAgentBySpecialization(List agents, String issueId); 9 | Agent assignAgent(List agents, String issueId); 10 | } 11 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/repository/MeetingRepository.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.repository; 2 | 3 | import in.innoskrit.model.Meeting; 4 | 5 | import java.util.List; 6 | 7 | public class MeetingRepository { 8 | private List meetings; 9 | 10 | public void addMeeting(Meeting meeting) { 11 | meetings.add(meeting); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /design-movie-booking-system/src/main/java/in/innoskrit/model/Seat.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @AllArgsConstructor 8 | @Getter 9 | @Setter 10 | public class Seat { 11 | private final String id; 12 | private final int rowNumber; 13 | private final int seatNumber; 14 | } 15 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/model/expense/ExpenseMetaData.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.expense; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Setter 8 | @Getter 9 | @AllArgsConstructor 10 | public class ExpenseMetaData { 11 | private String title; 12 | private String description; 13 | } 14 | -------------------------------------------------------------------------------- /.idea/CrackingMachineCodingRound.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/model/issue/GoldRelatedIssue.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.issue; 2 | 3 | public class GoldRelatedIssue extends Issue { 4 | public GoldRelatedIssue(String issueId, String transactionId, String subject, String description, String createdBy) { 5 | super(issueId, transactionId, subject, description, createdBy); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/model/issue/PaymentRelatedIssue.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.issue; 2 | 3 | public class PaymentRelatedIssue extends Issue { 4 | public PaymentRelatedIssue(String issueId, String transactionId, String subject, String description, String createdBy) { 5 | super(issueId, transactionId, subject, description, createdBy); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-file-system-using-byte-array/src/main/java/in/innoskrit/service/IFileSystemService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | public interface IFileSystemService { 4 | void createFile(String filename, byte[] content); 5 | byte[] readFile(String filename); 6 | void updateFile(String filename, byte[] content); 7 | void deleteFile(String filename); 8 | void defragment(); 9 | } 10 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/model/issue/InsuranceRelatedIssue.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.issue; 2 | 3 | public class InsuranceRelatedIssue extends Issue { 4 | public InsuranceRelatedIssue(String issueId, String transactionId, String subject, String description, String createdBy) { 5 | super(issueId, transactionId, subject, description, createdBy); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/model/issue/MutualFundRelatedIssue.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.issue; 2 | 3 | public class MutualFundRelatedIssue extends Issue { 4 | public MutualFundRelatedIssue(String issueId, String transactionId, String subject, String description, String createdBy) { 5 | super(issueId, transactionId, subject, description, createdBy); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/model/Interval.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.time.LocalDateTime; 8 | 9 | @Getter 10 | @Setter 11 | @AllArgsConstructor 12 | public class Interval { 13 | private LocalDateTime startTime; 14 | private LocalDateTime endTime; 15 | } 16 | -------------------------------------------------------------------------------- /design-coding-platform/src/main/java/in/innoskrit/model/User.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.Builder; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | @Builder 12 | public class User { 13 | private Long id; 14 | private String username; 15 | private int score; 16 | private List contests; 17 | } 18 | -------------------------------------------------------------------------------- /design-coding-platform/src/main/java/in/innoskrit/model/Question.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import in.innoskrit.constant.Difficulty; 4 | import lombok.Builder; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | 8 | @Getter 9 | @Setter 10 | @Builder 11 | public class Question { 12 | private Long id; 13 | private String question; 14 | private Difficulty difficulty; 15 | private int score; 16 | } 17 | -------------------------------------------------------------------------------- /design-coding-platform/src/main/java/in/innoskrit/serviceImpl/ContestService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.serviceImpl; 2 | 3 | import in.innoskrit.model.Contest; 4 | import in.innoskrit.model.User; 5 | import in.innoskrit.service.IContestService; 6 | 7 | import java.util.HashMap; 8 | import java.util.Map; 9 | 10 | public class ContestService implements IContestService { 11 | Map contestData = new HashMap<>(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/model/split/ExactSplit.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.split; 2 | 3 | import in.innoskrit.model.User; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class ExactSplit extends Split { 10 | double amount; 11 | public ExactSplit(String userId, double amount) { 12 | super(userId); 13 | this.amount = amount; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/model/MeetingRoom.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | @AllArgsConstructor 12 | public class MeetingRoom { 13 | private int id; 14 | private int capacity; 15 | private boolean isAvailable; 16 | private List meetings; 17 | } 18 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/model/split/PercentageSplit.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.split; 2 | 3 | import in.innoskrit.model.User; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public class PercentageSplit extends Split { 10 | double percent; 11 | public PercentageSplit(String userId, double percent) { 12 | super(userId); 13 | this.percent = percent; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /design-movie-booking-system/src/main/java/in/innoskrit/model/Show.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | import java.time.LocalDateTime; 7 | 8 | @Getter 9 | @AllArgsConstructor 10 | public class Show { 11 | private final String id; 12 | private final Movie movie; 13 | private final Screen screen; 14 | private final LocalDateTime startTime; 15 | private final Integer durationInSeconds; 16 | } 17 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/model/Meeting.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.util.List; 8 | 9 | @Getter 10 | @Setter 11 | @AllArgsConstructor 12 | public class Meeting { 13 | private int id; 14 | private List participants; 15 | private Interval interval; 16 | private MeetingRoom meetingRoom; 17 | private User bookedBy; 18 | } 19 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/model/Booking.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import lombok.ToString; 7 | 8 | @Getter 9 | @Setter 10 | @AllArgsConstructor 11 | @ToString 12 | public class Booking { 13 | private Integer bookingId; 14 | private Doctor doctor; 15 | private Patient patient; 16 | private TimeSlot slot; 17 | private Boolean waitList; 18 | } 19 | -------------------------------------------------------------------------------- /design-coding-platform/src/main/java/in/innoskrit/service/IUserService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.model.Contest; 4 | import in.innoskrit.model.User; 5 | 6 | import java.util.List; 7 | 8 | public interface IUserService { 9 | User createUser(User user); 10 | List createMultipleUsers(List users); 11 | void assignContestToUser(User user, Contest contest); 12 | List findAllContestUsers(Long contestId); 13 | void delete(User user); 14 | } 15 | -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/cache/factory/CacheFactory.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.cache.factory; 2 | 3 | import in.innoskrit.cache.Cache; 4 | import in.innoskrit.cache.policy.LRUReplacementPolicy; 5 | import in.innoskrit.cache.storage.HashMapStorage; 6 | 7 | public class CacheFactory { 8 | public Cache getDefaultCache(final int capacity) { 9 | return new Cache<>(new LRUReplacementPolicy<>(), 10 | new HashMapStorage<>(capacity)); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/algorithm/DLLNode.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.algorithm; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * 8 | * @param type of element to be inserted into the node. 9 | */ 10 | @Getter 11 | @Setter 12 | public class DLLNode { 13 | DLLNode prev; 14 | DLLNode next; 15 | Key key; 16 | public DLLNode(Key key) { 17 | this.key = key; 18 | this.prev = null; 19 | this.next = null; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /design-file-system/src/main/java/in/innoskrit/PathNode.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class PathNode { 7 | int value; 8 | Map path; 9 | 10 | public PathNode() { 11 | this.path = new HashMap<>(); 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return "PathNode{" + 17 | "value=" + value + 18 | ", path=" + path + 19 | '}'; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /design-snake-and-ladder/src/main/java/in/innoskrit/model/Dice.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import java.util.Random; 4 | 5 | public class Dice { 6 | private final int numberOfDice; 7 | 8 | public Dice(int diceNumber) { 9 | this.numberOfDice = diceNumber; 10 | } 11 | 12 | public int rollDice() { 13 | Random random = new Random(); 14 | int min = this.numberOfDice; 15 | int max = this.numberOfDice * 6; 16 | return random.nextInt((max - min) + 1) + min; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/model/Doctor.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import lombok.ToString; 7 | 8 | import java.util.Map; 9 | 10 | @Getter 11 | @Setter 12 | @AllArgsConstructor 13 | @ToString 14 | public class Doctor { 15 | private Integer id; 16 | private String name; 17 | private Map slots; 18 | private Specialization specialization; 19 | private Double rating; 20 | } 21 | -------------------------------------------------------------------------------- /design-ecommerce-application/ProblemStatement.md: -------------------------------------------------------------------------------- 1 | ### Description 2 | Design a mini e-commerce application. 3 | 4 | ### Requirements: 5 | 6 | #### Product 7 | 1. Add Product 8 | 2. Update Product 9 | 3. Check Inventory 10 | 11 | #### Buyer 12 | 1. Add Buyer 13 | 2. Get Buyer 14 | 15 | #### Order 16 | 1. Add Order 17 | 2. Get Order 18 | 19 | #### Pincode Serviceability 20 | 1. Create Pincode Serviceability 21 | 2. Check is source and destination pincode matches for payment type. 22 | 23 | #### Payment Type 24 | 1. Prepaid 25 | 2. COD 26 | 3. Both 27 | -------------------------------------------------------------------------------- /design-coding-platform/src/main/java/in/innoskrit/model/Contest.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import in.innoskrit.constant.ContestStatus; 4 | import in.innoskrit.constant.Difficulty; 5 | import lombok.Builder; 6 | import lombok.Getter; 7 | import lombok.Setter; 8 | 9 | import java.util.List; 10 | 11 | @Getter 12 | @Setter 13 | @Builder 14 | public class Contest { 15 | private Long id; 16 | private String name; 17 | private Difficulty difficulty; 18 | private ContestStatus status; 19 | private List questions; 20 | } 21 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/model/Patient.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import lombok.ToString; 7 | 8 | import javax.print.Doc; 9 | import java.sql.Time; 10 | import java.util.List; 11 | import java.util.Map; 12 | import java.util.Set; 13 | 14 | @Getter 15 | @Setter 16 | @ToString 17 | @AllArgsConstructor 18 | public class Patient { 19 | private Integer id; 20 | private String name; 21 | Set bookedSlots; 22 | } 23 | -------------------------------------------------------------------------------- /design-movie-booking-system/src/main/java/in/innoskrit/model/Movie.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.time.LocalDateTime; 8 | 9 | @Getter 10 | @Setter 11 | @AllArgsConstructor 12 | public class Movie { 13 | private final String id; 14 | private final String title; 15 | private final String genre; 16 | private final LocalDateTime releaseDate; 17 | private final String language; 18 | private final Integer durationInSeconds; 19 | } 20 | -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/src/main/java/in/innoskrit/model/PercentageDiscount.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public class PercentageDiscount implements DiscountDecorator { 4 | private final CartItem cartItem; 5 | private final double percentage; 6 | 7 | public PercentageDiscount(CartItem cartItem, double percentage) { 8 | this.cartItem = cartItem; 9 | this.percentage = percentage; 10 | } 11 | 12 | public double getPrice() { 13 | return this.cartItem.getPrice() * (1 - this.percentage/100); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/repository/MeetingRoomRepository.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.repository; 2 | 3 | import in.innoskrit.model.MeetingRoom; 4 | 5 | import java.util.List; 6 | 7 | public class MeetingRoomRepository { 8 | private List rooms; 9 | 10 | public void addRoom(MeetingRoom room) { 11 | rooms.add(room); 12 | } 13 | 14 | public void addRooms(List roomList) { 15 | rooms.addAll(rooms); 16 | } 17 | 18 | public List getRooms() { 19 | return rooms; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/src/main/java/in/innoskrit/model/FixedDiscount.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public class FixedDiscount implements DiscountDecorator { 4 | private final CartItem cartItem; 5 | private final double fixedDiscountAmount; 6 | 7 | public FixedDiscount(CartItem cartItem, double fixedDiscountAmount) { 8 | this.cartItem = cartItem; 9 | this.fixedDiscountAmount = fixedDiscountAmount; 10 | } 11 | 12 | public double getPrice() { 13 | return cartItem.getPrice() - this.fixedDiscountAmount; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/preloader/Preloader.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.preloader; 2 | 3 | import in.innoskrit.service.MeetingRoomService; 4 | import in.innoskrit.service.UserService; 5 | 6 | public class Preloader { 7 | 8 | public static void preload() { 9 | UserService userService = new UserService(); 10 | userService.addUsers(DummyUserCreator.createUsers()); 11 | 12 | MeetingRoomService meetingRoomService = new MeetingRoomService(); 13 | meetingRoomService.addRooms(DummyMeetingRoomsCreator.createRooms()); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/src/main/java/in/innoskrit/model/Product.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import java.util.UUID; 4 | 5 | public class Product implements CartItem { 6 | private final String productId; 7 | private final double price; 8 | private String productName; 9 | 10 | public Product(double price, String productName) { 11 | this.productId = UUID.randomUUID().toString(); 12 | this.price = price; 13 | this.productName = productName; 14 | } 15 | 16 | public double getPrice() { 17 | return this.price; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/src/main/java/in/innoskrit/Main.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import in.innoskrit.model.*; 4 | 5 | public class Main { 6 | public static void main(String[] args) { 7 | ShoppingCart shoppingCart1 = new ShoppingCart(); 8 | shoppingCart1.addToCart(new Product(100, "A")); 9 | shoppingCart1.addToCart(new PercentageDiscount(new Product(200, "B"), 10)); 10 | shoppingCart1.addToCart(new FixedDiscount(new PercentageDiscount(new Product(300, "C"), 10), 20)); 11 | System.out.println(shoppingCart1.calculateTotalPrice()); 12 | } 13 | } -------------------------------------------------------------------------------- /design-snake-and-ladder/src/main/java/in/innoskrit/model/Ladder.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public class Ladder { 4 | private int start; 5 | private int end; 6 | 7 | public Ladder(int start, int end) { 8 | this.start = start; 9 | this.end = end; 10 | } 11 | 12 | public int getStart() { 13 | return start; 14 | } 15 | 16 | public void setStart(int start) { 17 | this.start = start; 18 | } 19 | 20 | public int getEnd() { 21 | return end; 22 | } 23 | 24 | public void setEnd(int end) { 25 | this.end = end; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /design-snake-and-ladder/src/main/java/in/innoskrit/model/Snake.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public class Snake { 4 | private int start; 5 | private int end; 6 | 7 | public Snake(int start, int end) { 8 | this.start = start; 9 | this.end = end; 10 | } 11 | 12 | public int getStart() { 13 | return start; 14 | } 15 | 16 | public void setStart(int start) { 17 | this.start = start; 18 | } 19 | 20 | public int getEnd() { 21 | return end; 22 | } 23 | 24 | public void setEnd(int end) { 25 | this.end = end; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/model/Customer.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import in.innoskrit.model.issue.Issue; 4 | import lombok.Data; 5 | import lombok.ToString; 6 | 7 | import java.util.HashSet; 8 | import java.util.Set; 9 | 10 | @Data 11 | @ToString 12 | public class Customer { 13 | private String customerEmail; 14 | private String customerName; 15 | private Set issues; 16 | 17 | public Customer(String email, String name) { 18 | this.customerEmail = email; 19 | this.customerName = name; 20 | this.issues = new HashSet<>(); 21 | } 22 | } -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/cache/storage/Storage.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.cache.storage; 2 | 3 | import in.innoskrit.cache.exception.KeyNotFoundException; 4 | import in.innoskrit.cache.exception.StorageFullException; 5 | 6 | /** 7 | * 8 | * @param the key that you want to store into the storage 9 | * @param the value corresponding to the key you want to store 10 | */ 11 | public interface Storage { 12 | void add(Key key, Value value) throws StorageFullException; 13 | void remove(Key key) throws KeyNotFoundException; 14 | Value get(Key key) throws KeyNotFoundException; 15 | boolean isStorageFull(); 16 | } 17 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/repository/IssueManagementRepository.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.repository; 2 | 3 | import in.innoskrit.model.issue.Issue; 4 | 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | public class IssueManagementRepository { 9 | 10 | Map issueMap; 11 | 12 | public IssueManagementRepository() { 13 | issueMap = new HashMap<>(); 14 | } 15 | 16 | public void createIssue(Issue issue) { 17 | issueMap.put(issue.getIssueId(), issue); 18 | } 19 | 20 | public Issue getIssueById(String issueId) { 21 | return issueMap.get(issueId); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /design-file-system/src/main/java/in/innoskrit/Main.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | IFileSystem fileSystem = new FileSystem(); 6 | System.out.println(fileSystem.createPath("/foo", 1)); // return true 7 | System.out.println(fileSystem.createPath("/foo/bar", 2)); // return true 8 | System.out.println(fileSystem.get("/foo/bar")); // return 2 9 | System.out.println(fileSystem.createPath("/c/d", 1)); // return false because the parent path "/c" doesn't exist. 10 | System.out.println(fileSystem.get("/c")); // return -1 because this path doesn't exist. 11 | } 12 | } -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/model/User.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.util.UUID; 8 | 9 | @Getter 10 | @Setter 11 | public class User { 12 | private String userId; 13 | private String userName; 14 | private String email; 15 | private String phoneNumber; 16 | 17 | public User(String userName, String email, String phoneNumber) { 18 | this.userId = UUID.randomUUID().toString(); 19 | this.userName = userName; 20 | this.email = email; 21 | this.phoneNumber = phoneNumber; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /design-snake-and-ladder/src/main/java/in/innoskrit/model/Player.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | public class Player { 4 | private String name; 5 | private int currentPosition; 6 | 7 | public Player(String name) { 8 | this.name = name; 9 | this.currentPosition = 0; 10 | } 11 | 12 | public void setCurrentPosition(int position) { 13 | this.currentPosition = position; 14 | } 15 | 16 | public int getCurrentPosition() { 17 | return currentPosition; 18 | } 19 | 20 | public String getName() { 21 | return name; 22 | } 23 | 24 | public void setName(String name) { 25 | this.name = name; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/src/main/java/in/innoskrit/model/ShoppingCart.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class ShoppingCart { 7 | private List cartItems; 8 | 9 | public ShoppingCart() { 10 | this.cartItems = new ArrayList<>(); 11 | } 12 | 13 | public void addToCart(CartItem cartItem) { 14 | this.cartItems.add(cartItem); 15 | } 16 | 17 | public double calculateTotalPrice() { 18 | double totalAmount = 0; 19 | for(CartItem cartItem : cartItems) { 20 | totalAmount += (cartItem.getPrice()); 21 | } 22 | return totalAmount; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/model/expense/EqualExpense.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.expense; 2 | 3 | import in.innoskrit.model.User; 4 | import in.innoskrit.model.split.EqualSplit; 5 | import in.innoskrit.model.split.Split; 6 | 7 | import java.util.List; 8 | 9 | public class EqualExpense extends Expense { 10 | 11 | public EqualExpense(double amount, String expenseBy, List splits, ExpenseMetaData expenseData) { 12 | super(amount, expenseBy, splits, expenseData); 13 | } 14 | 15 | @Override 16 | public boolean validate() { 17 | for(Split split : getSplits()) { 18 | if(!(split instanceof EqualSplit)) return false; 19 | } 20 | return true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /design-api-ratelimiter/src/main/java/in/innoskrit/algorithm/leakybucket/LeakyBucket.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.algorithm.leakybucket; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | import java.util.LinkedList; 7 | import java.util.Queue; 8 | 9 | @Getter 10 | @Setter 11 | public class LeakyBucket { 12 | private final int capacity; 13 | private final long leakInterval; 14 | private Queue requestQueue; 15 | private long lastLeakTimestamp; 16 | 17 | public LeakyBucket(int capacity, long leakInterval) { 18 | this.capacity = capacity; 19 | this.leakInterval = leakInterval; 20 | this.requestQueue = new LinkedList<>(); 21 | this.lastLeakTimestamp = System.currentTimeMillis(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /design-file-system-using-byte-array/src/main/java/in/innoskrit/service/Encryptor.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | public class Encryptor implements IEncryptor { 4 | public byte[] encrypt(byte[] data) { 5 | byte[] encryptedData = new byte[data.length]; 6 | for (int i = 0; i < data.length; i++) { 7 | encryptedData[i] = (byte) (data[i] ^ 0xFF); 8 | } 9 | return encryptedData; 10 | } 11 | 12 | public byte[] decrypt(byte[] encryptedData) { 13 | byte[] decryptedData = new byte[encryptedData.length]; 14 | for (int i = 0; i < encryptedData.length; i++) { 15 | decryptedData[i] = (byte) (encryptedData[i] ^ 0xFF); 16 | } 17 | return decryptedData; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/Main.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import in.innoskrit.cache.Cache; 4 | import in.innoskrit.cache.factory.CacheFactory; 5 | import in.innoskrit.cache.policy.LRUReplacementPolicy; 6 | import in.innoskrit.cache.storage.HashMapStorage; 7 | import in.innoskrit.cache.storage.Storage; 8 | 9 | public class Main { 10 | public static void main(String[] args) { 11 | Cache cache = new CacheFactory().getDefaultCache(3); 12 | cache.put(1, 1); 13 | cache.put(2, 2); 14 | cache.put(3, 3); 15 | cache.get(1); 16 | cache.get(2); 17 | cache.put(4, 4); 18 | cache.get(3); 19 | cache.put(2, 20); 20 | cache.get(2); 21 | } 22 | } -------------------------------------------------------------------------------- /design-file-system-using-byte-array/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-file-system-using-byte-array 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | org.projectlombok 14 | lombok 15 | 1.18.28 16 | provided 17 | 18 | 19 | -------------------------------------------------------------------------------- /design-movie-booking-system/src/main/java/in/innoskrit/model/Cinema.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.Getter; 4 | import lombok.NonNull; 5 | import lombok.Setter; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | @Getter 11 | @Setter 12 | public class Cinema { 13 | private final String id; 14 | private final String name; 15 | private final List screens; 16 | private final City city; 17 | 18 | public Cinema(@NonNull final String id, @NonNull final String name, @NonNull final City city) { 19 | this.id = id; 20 | this.name = name; 21 | this.city = city; 22 | this.screens = new ArrayList<>(); 23 | } 24 | 25 | public void addScreen(@NonNull final Screen screen) { 26 | screens.add(screen); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /design-movie-booking-system/src/main/java/in/innoskrit/model/City.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.Getter; 4 | import lombok.NonNull; 5 | import lombok.Setter; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | @Getter 11 | @Setter 12 | public class City { 13 | private final String name; 14 | private final String state; 15 | private final int zipCode; 16 | private final List cinemas; 17 | 18 | public City(@NonNull final String name, @NonNull final String state, @NonNull final int zipCode) { 19 | this.name = name; 20 | this.state = state; 21 | this.zipCode = zipCode; 22 | this.cinemas = new ArrayList<>(); 23 | } 24 | 25 | public void addCinema(Cinema cinema) { 26 | cinemas.add(cinema); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/model/Agent.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.LinkedHashSet; 6 | import java.util.LinkedList; 7 | import java.util.List; 8 | import java.util.Queue; 9 | 10 | @Data 11 | public class Agent { 12 | String agentEmail; 13 | String agentName; 14 | List specializations; 15 | Queue resolvedIssues; 16 | LinkedHashSet waitingQueue; 17 | 18 | public Agent(String email, String agentName, List specializations) { 19 | this.agentEmail = email; 20 | this.agentName = agentName; 21 | this.specializations = specializations; 22 | this.resolvedIssues = new LinkedList<>(); 23 | this.waitingQueue = new LinkedHashSet<>(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/service/MeetingRoomService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.model.MeetingRoom; 4 | import in.innoskrit.repository.MeetingRoomRepository; 5 | 6 | import java.util.List; 7 | 8 | public class MeetingRoomService { 9 | 10 | private MeetingRoomRepository meetingRoomRepository; 11 | 12 | public MeetingRoomService() { 13 | meetingRoomRepository = new MeetingRoomRepository(); 14 | } 15 | 16 | public void addRoom(MeetingRoom room) { 17 | meetingRoomRepository.addRoom(room); 18 | } 19 | 20 | public void addRooms(List roomList) { 21 | meetingRoomRepository.addRooms(roomList); 22 | } 23 | 24 | public List getRooms() { 25 | return meetingRoomRepository.getRooms(); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /design-movie-booking-system/src/main/java/in/innoskrit/model/Screen.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.Getter; 4 | import lombok.NonNull; 5 | import lombok.Setter; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | @Getter 11 | @Setter 12 | public class Screen { 13 | private final String id; 14 | private final String name; 15 | private final Cinema cinema; 16 | //Other screen metadata. 17 | 18 | private final List seats; 19 | 20 | public Screen(@NonNull final String id, @NonNull final String name, @NonNull final Cinema cinema) { 21 | this.id = id; 22 | this.name = name; 23 | this.cinema = cinema; 24 | this.seats = new ArrayList<>(); 25 | } 26 | 27 | public void addSeat(@NonNull final Seat seat) { 28 | seats.add(seat); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /design-snake-game/src/main/java/in/innoskrit/Pair.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import java.util.Objects; 4 | 5 | public class Pair { 6 | int row; 7 | int col; 8 | 9 | public Pair(int row, int col) { 10 | this.row = row; 11 | this.col = col; 12 | } 13 | 14 | @Override 15 | public boolean equals(Object o) { 16 | if (this == o) return true; 17 | if (o == null || getClass() != o.getClass()) return false; 18 | Pair pair = (Pair) o; 19 | return row == pair.row && col == pair.col; 20 | } 21 | 22 | @Override 23 | public int hashCode() { 24 | return Objects.hash(row, col); 25 | } 26 | 27 | @Override 28 | public String toString() { 29 | return "Pair{" + 30 | "row=" + row + 31 | ", col=" + col + 32 | '}'; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/model/TimeSlot.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import lombok.ToString; 7 | 8 | import java.time.LocalDateTime; 9 | import java.util.Objects; 10 | 11 | @Setter 12 | @Getter 13 | @AllArgsConstructor 14 | @ToString 15 | public class TimeSlot { 16 | private LocalDateTime start; 17 | private LocalDateTime end; 18 | 19 | @Override 20 | public boolean equals(Object o) { 21 | if (this == o) return true; 22 | if (!(o instanceof TimeSlot)) return false; 23 | TimeSlot timeSlot = (TimeSlot) o; 24 | return start.equals(timeSlot.start) && end.equals(timeSlot.end); 25 | } 26 | 27 | @Override 28 | public int hashCode() { 29 | return Objects.hash(start, end); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/repository/UserRepository.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.repository; 2 | 3 | import in.innoskrit.exception.InvalidUserException; 4 | import in.innoskrit.exception.UserNotFoundException; 5 | import in.innoskrit.model.User; 6 | 7 | import java.util.HashMap; 8 | import java.util.Map; 9 | 10 | public class UserRepository { 11 | Map userData; 12 | 13 | public UserRepository() { 14 | userData = new HashMap<>(); 15 | } 16 | 17 | public void addUser(User user) { 18 | if(user == null) throw new InvalidUserException("Invalid User."); 19 | userData.put(user.getUserId(), user); 20 | } 21 | 22 | public User getUser(String userId) { 23 | if(!userData.containsKey(userId)) throw new UserNotFoundException("User doesn't exist."); 24 | return userData.get(userId); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/model/expense/Expense.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.expense; 2 | 3 | import in.innoskrit.model.split.Split; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | import java.util.List; 8 | import java.util.UUID; 9 | 10 | @Getter 11 | @Setter 12 | public abstract class Expense { 13 | private final String id; 14 | private double amount; 15 | private String expenseBy; 16 | private List splits; 17 | private ExpenseMetaData expenseData; 18 | 19 | public Expense(double amount, String expenseBy, List splits, ExpenseMetaData expenseData) { 20 | this.id = UUID.randomUUID().toString(); 21 | this.amount = amount; 22 | this.expenseBy = expenseBy; 23 | this.splits = splits; 24 | this.expenseData = expenseData; 25 | } 26 | 27 | public abstract boolean validate(); 28 | } 29 | -------------------------------------------------------------------------------- /design-snake-game/src/main/java/in/innoskrit/Main.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | // BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 7 | SnakeGame snakeGame = new SnakeGame(3, 2, new int[][]{{1, 2}, {0, 1}}); 8 | System.out.println(snakeGame.move("R")); // return 0 9 | System.out.println(snakeGame.move("D")); // return 0 10 | System.out.println(snakeGame.move("R")); // return 1, snake eats the first piece of food. The second piece of food appears at (0, 1). 11 | System.out.println(snakeGame.move("U")); // return 1 12 | System.out.println(snakeGame.move("L")); // return 2, snake eats the second food. No more food appears. 13 | System.out.println(snakeGame.move("U")); // return -1, game over because snake collides with border 14 | 15 | } 16 | } -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/repository/CustomerRepository.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.repository; 2 | 3 | import in.innoskrit.exception.CustomerNotFoundException; 4 | import in.innoskrit.model.Customer; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | public class CustomerRepository { 10 | Map customerMap; 11 | 12 | public CustomerRepository() { 13 | customerMap = new HashMap<>(); 14 | } 15 | 16 | public void addCustomer(String email, String name) { 17 | Customer customer = new Customer(email, name); 18 | customerMap.put(customer.getCustomerEmail(), customer); 19 | } 20 | 21 | public Customer getCustomerByEmail(String email) { 22 | if(!customerMap.containsKey(email)) throw new CustomerNotFoundException("Customer Not Found"); 23 | return customerMap.get(email); 24 | } 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/model/expense/ExactExpense.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.expense; 2 | 3 | import in.innoskrit.model.User; 4 | import in.innoskrit.model.split.ExactSplit; 5 | import in.innoskrit.model.split.Split; 6 | 7 | import java.util.List; 8 | 9 | public class ExactExpense extends Expense { 10 | 11 | public ExactExpense(double amount, String expenseBy, List splits, ExpenseMetaData expenseData) { 12 | super(amount, expenseBy, splits, expenseData); 13 | } 14 | 15 | @Override 16 | public boolean validate() { 17 | double totalSplit = 0; 18 | for(Split split : getSplits()) { 19 | if(!(split instanceof ExactSplit)) return false; 20 | ExactSplit exactSplit = (ExactSplit) split; 21 | totalSplit += exactSplit.getAmount(); 22 | } 23 | return getAmount() == totalSplit; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /design-middleware-router/src/main/java/in/innoskrit/Main.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | MiddlewareRouter router = new MiddlewareRouterImpl(); 6 | router.add("/bar", "result"); 7 | System.out.println(router.route("/bar")); // -> "result" 8 | 9 | router.add("/bar/abc", "abc"); 10 | System.out.println(router.route("/bar/abc"));// -> "abc" 11 | System.out.println(router.route("/bar/abc/dd")); //-> null 12 | 13 | router.add("/bar/abc/dd", "dd"); 14 | router.add("/bar/abc1/cde/dd", "ee"); 15 | System.out.println(router.route("/bar/abc/dd"));// -> "dd" 16 | System.out.println(router.route("/bar/abc1/cde/dd")); // -> "ee" 17 | 18 | System.out.println(router.route("/bar/*/dd"));// -> "dd" 19 | System.out.println(router.route("/bar/*/cde/dd")); // -> "ee" 20 | } 21 | } -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /design-middleware-router/ProblemStatement.md: -------------------------------------------------------------------------------- 1 | # Design Middleware Router 2 | 3 | ### Duration - 1 Hour 4 | 5 | Design a middleware router. 6 | 7 | For example: 8 | ``` 9 | add("/bar", "result"); 10 | router.route("/bar"); -> Output: result 11 | add("/bar/abc", "abc"); 12 | route("/bar/abc"); -> Output: abc 13 | route("/bar/abc/dd"); -> Output: null 14 | add("/bar/abc/dd", "dd"); 15 | add("/bar/abc1/cde/dd", "ee"); 16 | route("/bar/abc/dd"); -> Output: dd 17 | route("/bar/abc1/cde/dd"); -> Output: ee 18 | ``` 19 | 20 | You need to complete the below method. 21 | ```java 22 | void add(String path, String result); 23 | String route(String path); 24 | ``` 25 | 26 | ## Follow-up 27 | The path can contain `*` which means match any segment in the path. 28 | 29 | For example: 30 | 31 | ``` 32 | add("/bar/abc/dd", "dd"); 33 | add("/bar/abc1/cde/dd", "ee"); 34 | route("/bar/*/dd"); -> Output: dd 35 | route("/bar/*/cde/dd"); -> Output: ee 36 | ``` -------------------------------------------------------------------------------- /design-api-ratelimiter/src/test/java/in/innoskrit/TokenBucketRateLimiterTest.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import in.innoskrit.algorithm.tokenbucket.TokenBucketRateLimiter; 4 | import org.junit.jupiter.api.Assertions; 5 | import org.junit.jupiter.api.Test; 6 | 7 | public class TokenBucketRateLimiterTest { 8 | 9 | @Test 10 | void testTokenBucketRateLimiter() throws InterruptedException { 11 | RateLimiter rateLimiter = new TokenBucketRateLimiter(5, 1000); 12 | for(int i = 0; i < 2; i++) { 13 | Assertions.assertTrue(rateLimiter.rateLimit("user1")); 14 | } 15 | 16 | Assertions.assertTrue(rateLimiter.rateLimit("user1")); 17 | 18 | Thread.sleep(7000); 19 | 20 | for(int i = 1; i <= 5; i++) { 21 | Assertions.assertTrue(rateLimiter.rateLimit("user1")); 22 | } 23 | 24 | Assertions.assertFalse(rateLimiter.rateLimit("user1")); 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.example 8 | design-apply-coupons-on-shopping-cart 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | org.apache.maven.plugins 14 | maven-compiler-plugin 15 | 16 | 8 17 | 8 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /design-api-ratelimiter/src/main/java/in/innoskrit/algorithm/slidingwindowlog/SlidingWindowLog.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.algorithm.slidingwindowlog; 2 | 3 | import java.util.LinkedList; 4 | import java.util.Queue; 5 | 6 | public class SlidingWindowLog { 7 | 8 | private final int capacity; 9 | private final long windowSize; 10 | 11 | private Queue requestsLog; 12 | 13 | public SlidingWindowLog(int capacity, long windowSize) { 14 | this.capacity = capacity; 15 | this.windowSize = windowSize; 16 | this.requestsLog = new LinkedList<>(); 17 | } 18 | 19 | public int getCapacity() { 20 | return capacity; 21 | } 22 | 23 | public long getWindowSize() { 24 | return windowSize; 25 | } 26 | 27 | public Queue getRequestsLog() { 28 | return requestsLog; 29 | } 30 | 31 | public void setRequestsLog(Queue requestsLog) { 32 | this.requestsLog = requestsLog; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/model/expense/PercentageExpense.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.expense; 2 | 3 | import in.innoskrit.model.User; 4 | import in.innoskrit.model.split.PercentageSplit; 5 | import in.innoskrit.model.split.Split; 6 | 7 | import java.util.List; 8 | 9 | public class PercentageExpense extends Expense { 10 | 11 | public PercentageExpense(double amount, String expenseBy, List splits, ExpenseMetaData expenseData) { 12 | super(amount, expenseBy, splits, expenseData); 13 | } 14 | 15 | @Override 16 | public boolean validate() { 17 | double totalSplitPercent = 0; 18 | for(Split split : getSplits()) { 19 | if(!(split instanceof PercentageSplit)) return false; 20 | PercentageSplit percentageSplit = (PercentageSplit) split; 21 | totalSplitPercent += percentageSplit.getPercent(); 22 | } 23 | return totalSplitPercent == 100; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/model/issue/Issue.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model.issue; 2 | 3 | import in.innoskrit.constants.Constant; 4 | import lombok.Data; 5 | 6 | @Data 7 | public abstract class Issue { 8 | private final String issueId; 9 | private final String transactionId; 10 | private final String subject; 11 | private final String description; 12 | private final String createdBy; 13 | 14 | private String assignedTo; 15 | private String statusMessage; 16 | 17 | private IssueState issueState; 18 | 19 | public Issue(String issueId, String transactionId, String subject, String description, String createdBy) { 20 | this.issueId = issueId; 21 | this.transactionId = transactionId; 22 | this.subject = subject; 23 | this.description = description; 24 | this.createdBy = createdBy; 25 | this.statusMessage = Constant.INITIAL_STATUS; 26 | this.issueState = IssueState.OPEN; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/service/CustomerService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.exception.CustomerNotFoundException; 4 | import in.innoskrit.model.Customer; 5 | import in.innoskrit.repository.CustomerRepository; 6 | 7 | public class CustomerService { 8 | 9 | private final CustomerRepository customerRepository; 10 | 11 | public CustomerService(CustomerRepository customerRepository) { 12 | this.customerRepository = customerRepository; 13 | } 14 | 15 | public void addCustomer(String email, String name) { 16 | customerRepository.addCustomer(email, name); 17 | System.out.println("Customer " + name + " created."); 18 | } 19 | 20 | public Customer getCustomerByEmail(String email) { 21 | try { 22 | return customerRepository.getCustomerByEmail(email); 23 | } catch (CustomerNotFoundException e) { 24 | System.out.println(e.getMessage()); 25 | } 26 | return null; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/preloader/DummyMeetingRoomsCreator.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.preloader; 2 | 3 | import in.innoskrit.model.MeetingRoom; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | public class DummyMeetingRoomsCreator { 9 | public static List createRooms() { 10 | List meetingRooms = new ArrayList<>(); 11 | MeetingRoom room1 = new MeetingRoom(1, 10, true, new ArrayList<>()); 12 | MeetingRoom room2 = new MeetingRoom(1, 20, true, new ArrayList<>()); 13 | MeetingRoom room3 = new MeetingRoom(1, 13, true, new ArrayList<>()); 14 | MeetingRoom room4 = new MeetingRoom(1, 15, true, new ArrayList<>()); 15 | MeetingRoom room5 = new MeetingRoom(1, 30, true, new ArrayList<>()); 16 | meetingRooms.add(room1); 17 | meetingRooms.add(room2); 18 | meetingRooms.add(room3); 19 | meetingRooms.add(room4); 20 | meetingRooms.add(room5); 21 | return meetingRooms; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/service/UserService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.exception.InvalidUserException; 4 | import in.innoskrit.exception.UserNotFoundException; 5 | import in.innoskrit.model.User; 6 | import in.innoskrit.repository.UserRepository; 7 | 8 | public class UserService { 9 | private final UserRepository userRepository; 10 | 11 | public UserService(UserRepository userRepository) { 12 | this.userRepository = userRepository; 13 | } 14 | 15 | public void addUser(User user) { 16 | try { 17 | userRepository.addUser(user); 18 | } catch(InvalidUserException e) { 19 | System.out.println(e.getMessage()); 20 | } 21 | } 22 | 23 | public User getUser(String userId) { 24 | try { 25 | return userRepository.getUser(userId); 26 | } catch(UserNotFoundException e) { 27 | System.out.println(e.getMessage()); 28 | } 29 | return null; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /design-cache/src/test/java/in/innoskrit/cache/CacheTest.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.cache; 2 | 3 | import in.innoskrit.cache.factory.CacheFactory; 4 | import in.innoskrit.cache.policy.LRUReplacementPolicy; 5 | import in.innoskrit.cache.storage.HashMapStorage; 6 | import in.innoskrit.cache.storage.Storage; 7 | import org.junit.jupiter.api.BeforeEach; 8 | import org.junit.jupiter.api.Test; 9 | 10 | import static org.junit.jupiter.api.Assertions.assertEquals; 11 | 12 | public class CacheTest { 13 | Cache cache; 14 | 15 | @BeforeEach 16 | public void setup() { 17 | cache = new CacheFactory().getDefaultCache(3); 18 | } 19 | 20 | @Test 21 | public void testCachePutAndGetFunctionality() { 22 | cache.put(1, 1); 23 | cache.put(2, 2); 24 | cache.put(3, 3); 25 | assertEquals(1, cache.get(1)); 26 | assertEquals(2, cache.get(2)); 27 | cache.put(4, 4); 28 | assertEquals(null, cache.get(3)); 29 | cache.put(2, 20); 30 | assertEquals(20, cache.get(2)); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/preloader/DummyUserCreator.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.preloader; 2 | 3 | import in.innoskrit.model.Calender; 4 | import in.innoskrit.model.User; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | public class DummyUserCreator { 10 | 11 | public static List createUsers() { 12 | List users = new ArrayList<>(); 13 | User user1 = new User("user1@gmail.com", "User 1", new Calender(new ArrayList<>())); 14 | User user2 = new User("user2@gmail.com", "User 2", new Calender(new ArrayList<>())); 15 | User user3 = new User("user3@gmail.com", "User 3", new Calender(new ArrayList<>())); 16 | User user4 = new User("user4@gmail.com", "User 4", new Calender(new ArrayList<>())); 17 | User user5 = new User("user5@gmail.com", "User 5", new Calender(new ArrayList<>())); 18 | users.add(user1); 19 | users.add(user2); 20 | users.add(user3); 21 | users.add(user4); 22 | users.add(user5); 23 | return users; 24 | } 25 | 26 | 27 | 28 | } 29 | -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/cache/policy/LRUReplacementPolicy.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.cache.policy; 2 | 3 | import in.innoskrit.algorithm.DLLNode; 4 | import in.innoskrit.algorithm.DoublyLinkedList; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | public class LRUReplacementPolicy implements ReplacementPolicy { 10 | DoublyLinkedList dll; 11 | private final Map> map; 12 | 13 | public LRUReplacementPolicy() { 14 | this.dll = new DoublyLinkedList<>(); 15 | this.map = new HashMap<>(); 16 | } 17 | 18 | @Override 19 | public void keyAccessed(Key key) { 20 | if(map.containsKey(key)) { 21 | dll.deleteNode(map.get(key)); 22 | dll.addAtFirst(map.get(key)); 23 | } else { 24 | DLLNode node = new DLLNode<>(key); 25 | dll.addAtFirst(node); 26 | map.put(key, node); 27 | } 28 | } 29 | 30 | @Override 31 | public Key evictKey() { 32 | DLLNode node = dll.deleteFromLast(); 33 | return node.getKey(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/service/MeetingScheduler.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.model.Interval; 4 | import in.innoskrit.model.Meeting; 5 | import in.innoskrit.model.MeetingRoom; 6 | import in.innoskrit.model.User; 7 | 8 | import java.util.List; 9 | 10 | public class MeetingScheduler { 11 | private static MeetingScheduler meetingScheduler; 12 | 13 | private MeetingScheduler() { 14 | 15 | } 16 | 17 | public static MeetingScheduler getMeetingScheduler() { 18 | if(meetingScheduler == null) { 19 | meetingScheduler = new MeetingScheduler(); 20 | } 21 | return meetingScheduler; 22 | } 23 | 24 | public Meeting scheduleMeeting(List users, Interval interval, MeetingRoom meetingRoom) { 25 | for(User user : users) { 26 | // TODO 27 | } 28 | return null; 29 | } 30 | 31 | public void cancelMeeting(Meeting meeting) { 32 | 33 | } 34 | 35 | public Meeting updateMeeting(Meeting meeting, List users, Interval interval, MeetingRoom meetingRoom) { 36 | return null; 37 | } 38 | 39 | 40 | } 41 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/service/ExpenseService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.model.ExpenseType; 4 | import in.innoskrit.model.expense.ExpenseMetaData; 5 | import in.innoskrit.model.split.Split; 6 | import in.innoskrit.repository.ExpenseRepository; 7 | 8 | import java.util.List; 9 | import java.util.Map; 10 | 11 | public class ExpenseService { 12 | private final ExpenseRepository expenseRepository; 13 | 14 | public ExpenseService(ExpenseRepository expenseRepository) { 15 | this.expenseRepository = expenseRepository; 16 | } 17 | 18 | public void createExpense(ExpenseType expenseType, double amount, String expenseBy, List splits, ExpenseMetaData expenseMetaData) { 19 | expenseRepository.createExpense(expenseType, amount, expenseBy, splits, expenseMetaData); 20 | } 21 | 22 | public void showBalanceByUser(String userId) { 23 | Map balance = expenseRepository.showBalanceByUser(userId); 24 | } 25 | 26 | public Map> showBalance() { 27 | return expenseRepository.showBalance(); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /design-apply-coupons-on-shopping-cart/ProblemStatement.md: -------------------------------------------------------------------------------- 1 | # Apply Coupons on Shopping Cart Products 2 | 3 | ### Problem Statement 4 | You are tasked with building a Shopping Cart Service API that calculates the total price for a given shopping cart, taking into account both products and discount coupons. The service should be capable of handling multiple products and discounts in a flexible manner. 5 | 6 | The Cart API should support the following types of discount coupons: 7 | 8 | - A percentage discount on a specific item. 9 | - A percentage discount on the next item added to the cart. 10 | - A fixed discount amount for a specific product type. 11 | 12 | The API should accept input in the form of product and discount information provided via external sources, such as product and discount APIs. The goal is to design a system that can dynamically calculate the total price of a shopping cart based on the given product and discount data. 13 | 14 | ### Design Pattern Used 15 | 16 | I've used Decorator Design Pattern here. It allows behavior to be added to an object dynamically. 17 | 18 | In our context, we should be able to apply multiple discounts on the products. 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /design-coding-platform/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-coding-platform 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | org.apache.maven.plugins 14 | maven-compiler-plugin 15 | 16 | 8 17 | 8 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | org.projectlombok 26 | lombok 27 | 1.18.28 28 | provided 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /design-file-system/ProblemStatement.md: -------------------------------------------------------------------------------- 1 | # Design File System 2 | ### Duration - 1 Hour 3 | 4 | Design a file system that allows you to create new paths and associate them with different values. 5 | 6 | The format of a path is one or more concatenated strings of the form: / followed by one or more lowercase English letters. For example, `"/foo"` and `"/foo/bar"` are valid paths while an empty string `""` and `"/"` are not. 7 | 8 | Implement the `FileSystem` class: 9 | 10 | `bool createPath(string path, int value)`: Creates a new path and associates a value to it if possible and returns `true`. Returns `false` if the path already exists or its parent path doesn't exist. 11 | 12 | `int get(string path)`: Returns the `value` associated with path or returns `-1` if the path doesn't exist. 13 | 14 | ```java 15 | fileSystem.createPath("/a", 1); // return true 16 | fileSystem.get("/a"); // return 1 17 | fileSystem.createPath("/foo", 1); // return true 18 | fileSystem.createPath("/foo/bar", 2); // return true 19 | fileSystem.get("/foo/bar"); // return 2 20 | fileSystem.createPath("/c/d", 1); // return false because the parent path "/c" doesn't exist. 21 | fileSystem.get("/c"); // return -1 because this path doesn't exist. 22 | ``` -------------------------------------------------------------------------------- /design-snake-and-ladder/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-snake-and-ladder 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | 14 | org.apache.maven.plugins 15 | maven-compiler-plugin 16 | 17 | 8 18 | 8 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.projectlombok 27 | lombok 28 | 1.18.28 29 | provided 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /design-movie-booking-system/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-movie-booking-system 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | 14 | org.apache.maven.plugins 15 | maven-compiler-plugin 16 | 17 | 8 18 | 8 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.projectlombok 27 | lombok 28 | 1.18.28 29 | provided 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /design-snake-game/src/test/java/in/innoskrit/SnakeGameTest.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import static org.junit.jupiter.api.Assertions.assertEquals; 6 | 7 | 8 | public class SnakeGameTest { 9 | 10 | @Test 11 | public void testRightMove() { 12 | SnakeGame snakeGame = new SnakeGame(3, 2, new int[][]{{1, 2}, {0, 1}}); 13 | assertEquals(0, snakeGame.move("R")); 14 | } 15 | 16 | @Test 17 | public void testDownMove() { 18 | SnakeGame snakeGame = new SnakeGame(3, 2, new int[][]{{1, 2}, {0, 1}}); 19 | snakeGame.move("R"); 20 | assertEquals(0, snakeGame.move("D")); 21 | } 22 | 23 | @Test 24 | public void testRightMoveAndEatFood() { 25 | SnakeGame snakeGame = new SnakeGame(3, 2, new int[][]{{1, 2}, {0, 1}}); 26 | snakeGame.move("R"); 27 | snakeGame.move("D"); 28 | assertEquals(1, snakeGame.move("R")); 29 | } 30 | 31 | @Test 32 | public void testOutOfBound() { 33 | SnakeGame snakeGame = new SnakeGame(3, 2, new int[][]{{1, 2}, {0, 1}}); 34 | snakeGame.move("R"); 35 | snakeGame.move("D"); 36 | assertEquals(-1, snakeGame.move("D")); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/algorithm/DoublyLinkedList.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.algorithm; 2 | 3 | import in.innoskrit.algorithm.exception.UnexpectedElementFoundException; 4 | 5 | public class DoublyLinkedList { 6 | DLLNode head; 7 | DLLNode tail; 8 | 9 | public DoublyLinkedList() { 10 | this.head = new DLLNode<>(null); 11 | this.tail = new DLLNode<>(null); 12 | this.head.next = tail; 13 | this.tail.prev = head; 14 | } 15 | 16 | public void addAtFirst(DLLNode node) { 17 | if(node == null) { 18 | throw new UnexpectedElementFoundException("Null node cannot be added."); 19 | } 20 | 21 | DLLNode headNext = head.next; 22 | node.next = headNext; 23 | headNext.prev = node; 24 | node.prev = head; 25 | head.next = node; 26 | } 27 | 28 | public DLLNode deleteFromLast() { 29 | DLLNode tailPrev = tail.prev; 30 | tailPrev.prev.next = tailPrev.next; 31 | tailPrev.next.prev = tailPrev.prev; 32 | return tailPrev; 33 | } 34 | 35 | public void deleteNode(DLLNode node) { 36 | node.prev.next = node.next; 37 | node.next.prev = node.prev; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /design-api-ratelimiter/src/main/java/in/innoskrit/algorithm/tokenbucket/TokenBucket.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.algorithm.tokenbucket; 2 | 3 | public class TokenBucket { 4 | private final int capacity; 5 | private final int refillRate; 6 | private long lastRefillTimestamp; 7 | private int tokens; 8 | 9 | public TokenBucket(int capacity, int refillRate) { 10 | this.capacity = capacity; 11 | this.refillRate = refillRate; 12 | this.lastRefillTimestamp = System.currentTimeMillis(); 13 | this.tokens = capacity; 14 | } 15 | 16 | public int getCapacity() { 17 | return capacity; 18 | } 19 | 20 | public long getLastRefillTimestamp() { 21 | return lastRefillTimestamp; 22 | } 23 | 24 | public void setLastRefillTimestamp(long lastRefillTimestamp) { 25 | this.lastRefillTimestamp = lastRefillTimestamp; 26 | } 27 | 28 | public int getTokens() { 29 | return tokens; 30 | } 31 | 32 | public void setTokens(int tokens) { 33 | this.tokens = tokens; 34 | } 35 | 36 | public long getRefillRate() { 37 | return refillRate; 38 | } 39 | 40 | @Override 41 | public String toString() { 42 | return "TokenBucket{" + 43 | "capacity=" + capacity + 44 | ", lastRefillTimestamp=" + lastRefillTimestamp + 45 | ", tokens=" + tokens + 46 | '}'; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/repository/UserRepository.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.repository; 2 | 3 | import in.innoskrit.exception.UserNotFoundException; 4 | import in.innoskrit.model.Meeting; 5 | import in.innoskrit.model.MeetingInviteResponse; 6 | import in.innoskrit.model.Notification; 7 | import in.innoskrit.model.User; 8 | 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | public class UserRepository { 13 | private List users; 14 | 15 | public void addUser(User user) { 16 | users.add(user); 17 | } 18 | 19 | public void addUsers(List userList) { 20 | users.addAll(userList); 21 | } 22 | 23 | public List getUsers() { 24 | return users; 25 | } 26 | 27 | public User getUser(String email) { 28 | for(User user : users) { 29 | if(user.getEmail().equals(email)) { 30 | return user; 31 | } else { 32 | throw new UserNotFoundException("No user found with email " + email); 33 | } 34 | } 35 | return null; 36 | } 37 | 38 | public MeetingInviteResponse respondInvitation(Notification notification) { 39 | return MeetingInviteResponse.ACCEPT; 40 | } 41 | 42 | public List getMeetings(User user) { 43 | if(user == null) return new ArrayList<>(); 44 | return user.getCalender().getMeetings(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /design-api-ratelimiter/src/main/java/in/innoskrit/algorithm/fixedwindow/FixedWindow.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.algorithm.fixedwindow; 2 | 3 | public class FixedWindow { 4 | private final int capacity; 5 | private final long windowSize; 6 | private int requests; 7 | private long windowStartTimestamp; 8 | 9 | public FixedWindow(int capacity, long windowSize) { 10 | this.capacity = capacity; 11 | this.windowSize = windowSize; 12 | this.requests = 0; 13 | this.windowStartTimestamp = System.currentTimeMillis(); 14 | } 15 | 16 | public int getCapacity() { 17 | return capacity; 18 | } 19 | public long getWindowSize() { 20 | return windowSize; 21 | } 22 | 23 | public int getRequests() { 24 | return requests; 25 | } 26 | 27 | public void setRequests(int requests) { 28 | this.requests = requests; 29 | } 30 | 31 | public long getWindowStartTimestamp() { 32 | return windowStartTimestamp; 33 | } 34 | 35 | public void setWindowStartTimestamp(long windowStartTimestamp) { 36 | this.windowStartTimestamp = windowStartTimestamp; 37 | } 38 | 39 | @Override 40 | public String toString() { 41 | return "FixedWindow{" + 42 | "windowSize=" + windowSize + 43 | ", requests=" + requests + 44 | ", windowStartTimestamp=" + windowStartTimestamp + 45 | '}'; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /design-api-ratelimiter/src/main/java/in/innoskrit/algorithm/fixedwindow/FixedWindowRateLimiter.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.algorithm.fixedwindow; 2 | 3 | import in.innoskrit.RateLimiter; 4 | 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | public class FixedWindowRateLimiter implements RateLimiter { 9 | private final int capacity; 10 | private final long windowSize; 11 | private final Map windows; 12 | 13 | public FixedWindowRateLimiter(int capacity, long windowSize) { 14 | this.capacity = capacity; 15 | this.windowSize = windowSize; 16 | windows = new HashMap<>(); 17 | } 18 | 19 | private boolean allowRequest(FixedWindow fixedWindow) { 20 | long now = System.currentTimeMillis(); 21 | long elapsed = now - fixedWindow.getWindowStartTimestamp(); 22 | if(elapsed > fixedWindow.getWindowSize()) { 23 | fixedWindow.setWindowStartTimestamp(now); 24 | fixedWindow.setRequests(0); 25 | } 26 | if(fixedWindow.getRequests() < fixedWindow.getCapacity()) { 27 | fixedWindow.setRequests(fixedWindow.getRequests() + 1); 28 | return true; 29 | } 30 | return false; 31 | } 32 | 33 | @Override 34 | public synchronized boolean rateLimit(String customerId) { 35 | FixedWindow fixedWindow = windows.computeIfAbsent(customerId, k -> new FixedWindow(capacity, windowSize)); 36 | return allowRequest(fixedWindow); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /design-snake-and-ladder/src/main/java/in/innoskrit/model/Board.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.model; 2 | 3 | import java.util.List; 4 | 5 | public class Board { 6 | private int size; 7 | private Dice dice; 8 | private List snakes; 9 | private List ladders; 10 | private List players; 11 | 12 | public Board(int size, Dice dice, List snakes, List ladders, List players) { 13 | this.size = size; 14 | this.dice = dice; 15 | this.snakes = snakes; 16 | this.ladders = ladders; 17 | this.players = players; 18 | } 19 | 20 | public int getSize() { 21 | return size; 22 | } 23 | 24 | public void setSize(int size) { 25 | this.size = size; 26 | } 27 | 28 | public Dice getDice() { 29 | return dice; 30 | } 31 | 32 | public void setDice(Dice dice) { 33 | this.dice = dice; 34 | } 35 | 36 | public List getSnakes() { 37 | return snakes; 38 | } 39 | 40 | public void setSnakes(List snakes) { 41 | this.snakes = snakes; 42 | } 43 | 44 | public List getLadders() { 45 | return ladders; 46 | } 47 | 48 | public void setLadders(List ladders) { 49 | this.ladders = ladders; 50 | } 51 | 52 | public List getPlayers() { 53 | return players; 54 | } 55 | 56 | public void setPlayers(List players) { 57 | this.players = players; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /design-splitwise-application/src/main/java/in/innoskrit/Main.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import in.innoskrit.model.User; 4 | import in.innoskrit.model.split.Split; 5 | import in.innoskrit.repository.UserRepository; 6 | import in.innoskrit.service.UserService; 7 | 8 | import java.io.BufferedReader; 9 | import java.io.IOException; 10 | import java.io.InputStreamReader; 11 | import java.sql.Array; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | public class Main { 16 | public static void main(String[] args) throws IOException { 17 | UserService userService = new UserService(new UserRepository()); 18 | userService.addUser(new User("u1", "u1@gmail.com", "9999999999")); 19 | userService.addUser(new User("u2", "u2@gmail.com", "9999999999")); 20 | userService.addUser(new User("u3", "u3@gmail.com", "9999999999")); 21 | userService.addUser(new User("u4", "u4@gmail.com", "9999999999")); 22 | 23 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 24 | String[] expenseDetails1 = reader.readLine().trim().split("\\s+"); 25 | String expenseCreatedBy = expenseDetails1[0]; 26 | double amount = Double.parseDouble(expenseDetails1[1]); 27 | int numberOfUsersInvolved = Integer.parseInt(expenseDetails1[2]); 28 | List splits = new ArrayList<>(); 29 | for(int i = 3; i < (i + numberOfUsersInvolved); i++) { 30 | String userInvolved = expenseDetails1[i]; 31 | } 32 | 33 | } 34 | } -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/service/AgentService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.model.Agent; 4 | import in.innoskrit.model.Specialization; 5 | import in.innoskrit.repository.AgentRepository; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | public class AgentService { 11 | 12 | private final AgentRepository agentRepository; 13 | 14 | public AgentService(AgentRepository agentRepository) { 15 | this.agentRepository = agentRepository; 16 | } 17 | 18 | public void addAgent(String email, String agentName, List specializations) { 19 | agentRepository.addAgent(email, agentName, specializations); 20 | System.out.println(agentName + " created."); 21 | } 22 | 23 | public List getAgentsBySpecialization(Specialization specialization) { 24 | return agentRepository.getAgentsBySpecialization(specialization); 25 | } 26 | 27 | public List getAllAgents() { 28 | return agentRepository.getAllAgents(); 29 | } 30 | 31 | public Agent getAgentByEmail(String email) { 32 | return agentRepository.getAgentByEmail(email); 33 | } 34 | 35 | public List viewAgentsWorkHistory(String email) { 36 | Agent agent = agentRepository.getAgentByEmail(email); 37 | List issues = new ArrayList<>(); 38 | issues.addAll(agent.getResolvedIssues()); 39 | issues.addAll(agent.getWaitingQueue()); 40 | return issues; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/service/BookingService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.constant.Constant; 4 | import in.innoskrit.exception.BookingNotFoundException; 5 | import in.innoskrit.exception.DoctorNotFoundException; 6 | import in.innoskrit.exception.PatientNotFoundException; 7 | import in.innoskrit.exception.SlotAlreadyBookedException; 8 | import in.innoskrit.mode.Print; 9 | import in.innoskrit.model.*; 10 | import in.innoskrit.repository.BookingRepository; 11 | import in.innoskrit.repository.DoctorRepository; 12 | 13 | import java.util.HashMap; 14 | import java.util.Map; 15 | 16 | public class BookingService { 17 | 18 | private final BookingRepository bookingRepository; 19 | private final Print print; 20 | public BookingService(BookingRepository bookingRepository, Print print) { 21 | this.bookingRepository = bookingRepository; 22 | this.print = print; 23 | } 24 | 25 | public Booking bookAppointment(Integer patientId, Integer doctorId, TimeSlot slot) { 26 | try { 27 | return bookingRepository.bookAppointment(patientId, doctorId, slot); 28 | } catch (Exception e) { 29 | print.printData(e.getMessage()); 30 | } 31 | return null; 32 | } 33 | 34 | public void cancelAppointment(Integer bookingId) { 35 | try { 36 | bookingRepository.cancelAppointment(bookingId); 37 | } catch (Exception e) { 38 | print.printData(e.getMessage()); 39 | } 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /design-file-system-using-byte-array/src/main/java/in/innoskrit/Main.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import in.innoskrit.service.Encryptor; 4 | import in.innoskrit.service.FileSystemService; 5 | 6 | public class Main { 7 | public static void main(String[] args) { 8 | FileSystemService fileSystemService = FileSystemService.getFileSystemService(1024, new Encryptor()); 9 | 10 | fileSystemService.createFile("file1.txt", "Hello, this is file 1.".getBytes()); 11 | fileSystemService.createFile("file2.txt", "This is file 2 content.".getBytes()); 12 | 13 | byte[] content1 = fileSystemService.readFile("file1.txt"); 14 | System.out.println("Reading file1.txt: " + new String(content1)); 15 | 16 | byte[] content2 = fileSystemService.readFile("file2.txt"); 17 | System.out.println("Reading file2.txt: " + new String(content2)); 18 | 19 | fileSystemService.updateFile("file1.txt", "Updated content for file 1.".getBytes()); 20 | byte[] updatedContent1 = fileSystemService.readFile("file1.txt"); 21 | System.out.println("Reading updated file1.txt: " + new String(updatedContent1)); 22 | 23 | fileSystemService.deleteFile("file2.txt"); 24 | byte[] deletedContent2 = fileSystemService.readFile("file2.txt"); 25 | System.out.println("Reading deleted file2.txt: " + (deletedContent2 == null ? "File not found." : new String(deletedContent2))); 26 | 27 | // Perform defragmentation (optional, but can be done periodically) 28 | fileSystemService.defragment(); 29 | } 30 | } -------------------------------------------------------------------------------- /design-meeting-scheduler/src/main/java/in/innoskrit/service/UserService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.exception.UserNotFoundException; 4 | import in.innoskrit.model.*; 5 | import in.innoskrit.repository.UserRepository; 6 | 7 | import java.util.List; 8 | 9 | public class UserService { 10 | private UserRepository userRepository; 11 | 12 | public UserService() { 13 | this.userRepository = new UserRepository(); 14 | } 15 | 16 | public void addUser(User user) { 17 | userRepository.addUser(user); 18 | } 19 | 20 | public void addUsers(List users) { 21 | userRepository.addUsers(users); 22 | } 23 | public List getUsers() { 24 | return userRepository.getUsers(); 25 | } 26 | 27 | public User getUser(String email) { 28 | try { 29 | return userRepository.getUser(email); 30 | } catch (UserNotFoundException e) { 31 | System.out.println(e); 32 | } 33 | return null; 34 | } 35 | 36 | public MeetingInviteResponse respondInvitation(Notification notification) { 37 | return MeetingInviteResponse.ACCEPT; 38 | } 39 | 40 | public List getMeetings(User user) { 41 | return userRepository.getMeetings(user); 42 | } 43 | 44 | public Meeting createBooking(List participants, Interval interval, MeetingRoom meetingRoom) { 45 | Meeting meeting = MeetingScheduler.getMeetingScheduler().scheduleMeeting(participants, interval, meetingRoom); 46 | return meeting; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/constant/Constant.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.constant; 2 | 3 | public class Constant { 4 | 5 | public static final String DOCTOR_NOT_FOUND_WITH_SPECIALIZATION = "No doctors found with given specialization"; 6 | public static final String DOCTOR_NOT_FOUND = "No doctors found with the given id."; 7 | public static final String PATIENT_NOT_FOUND = "No patient found with the given id."; 8 | public static final String BOOKING_NOT_FOUND = "No booking found with the given id."; 9 | public static final String DOCTOR_ALREADY_EXISTS = "Doctor already exists."; 10 | public static final String PATIENT_ALREADY_EXISTS = "Patient already exists."; 11 | public static final String PATIENT_REGISTERED_SUCCESSFULLY = "Patient is successfully registered."; 12 | public static final String PATIENT_SLOT_ALREADY_BOOKED = "Patient's slot is already booked."; 13 | public static final String DOCTOR_SLOT_ALREADY_BOOKED = "Doctor's slot is already booked."; 14 | public static final String DOCTOR_REGISTERED_SUCCESSFULLY = "Doctor is successfully registered."; 15 | public static final String SLOT_ADDED_SUCCESSFULLY = "New slot added successfully."; 16 | public static final String SLOT_NOT_FOUND = "No slot not found for the given doctor."; 17 | public static final String BOOKING_SUCCESSFUL = "Appointment is booked successfully."; 18 | public static final String BOOKING_ADDED_TO_WAIT_LIST = "Booking added to wait-list."; 19 | 20 | public static final String BOOKING_CANCELLED = "Booking got cancelled."; 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /design-api-ratelimiter/ProblemStatement.md: -------------------------------------------------------------------------------- 1 | # Design API Rate Limiter 2 | ### Duration - 1 Hour 3 | 4 | When an API becomes available to the public, there can be a large number of users and services. Anyone can use it at any time and as much as they want, potentially preventing other legitimate users. Moreover, the API providers have limited resources per unit of time provisioned, and they want their services to be fairly available to all of their customers. 5 | 6 | The API rate limiter throttles clients' requests that exceed the predefined limit in a unit time instead of disconnecting them. Throttling refers to controlling the flow by discarding some of the requests. It can also be considered a security feature to prevent bot and DoS attacks that can overwhelm a server by sending a burst of requests. 7 | 8 | ### Problem Statement 9 | 10 | Create a system for rate limit. 11 | 12 | Each customer can make X requests per Y seconds. 13 | Perform rate limiting logic for provided customer ID. Return `true` if the request is allowed 14 | and `false` if it is not. 15 | 16 | You need to complete the below method. 17 | ```java 18 | boolean rateLimit(int customerId) 19 | ``` 20 | 21 | - Your code should be scalable, extensible, and follow object-oriented principles if needed. 22 | - Completeness matters 23 | - More points will be given if you can implement thread safety. 24 | - More points will be given if you can write test cases. 25 | 26 | ### Note: 27 | 28 | I have implemented all 5 algorithms in this repository. But you will be expected to complete only one and if time permits you can talk about more. 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /design-api-ratelimiter/src/main/java/in/innoskrit/algorithm/slidingwindowlog/SlidingWindowLogRateLimiter.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.algorithm.slidingwindowlog; 2 | 3 | import in.innoskrit.RateLimiter; 4 | 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | public class SlidingWindowLogRateLimiter implements RateLimiter { 9 | 10 | private final int capacity; 11 | private final long windowSize; 12 | private final Map customerLog; 13 | 14 | public SlidingWindowLogRateLimiter(int capacity, long windowSize) { 15 | this.capacity = capacity; 16 | this.windowSize = windowSize; 17 | this.customerLog = new HashMap<>(); 18 | } 19 | 20 | private void cleanUp(long currTime, SlidingWindowLog log) { 21 | while(!log.getRequestsLog().isEmpty() && (currTime - log.getRequestsLog().peek()) > log.getWindowSize()) { 22 | log.getRequestsLog().poll(); 23 | } 24 | } 25 | 26 | private boolean allowRequest(SlidingWindowLog slidingWindowLog) { 27 | long now = System.currentTimeMillis(); 28 | cleanUp(now, slidingWindowLog); 29 | if(slidingWindowLog.getRequestsLog().size() < slidingWindowLog.getCapacity()) { 30 | slidingWindowLog.getRequestsLog().offer(now); 31 | return true; 32 | } 33 | return false; 34 | } 35 | 36 | @Override 37 | public synchronized boolean rateLimit(String customerId) { 38 | SlidingWindowLog slidingWindowLog = customerLog.computeIfAbsent(customerId, k -> new SlidingWindowLog(capacity, windowSize)); 39 | return allowRequest(slidingWindowLog); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /design-file-system/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-file-system 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 8 13 | 8 14 | UTF-8 15 | 16 | 17 | 18 | 19 | org.projectlombok 20 | lombok 21 | 1.18.28 22 | provided 23 | 24 | 25 | 26 | junit 27 | junit 28 | 4.13.2 29 | test 30 | 31 | 32 | 33 | 34 | org.junit.jupiter 35 | junit-jupiter-api 36 | 5.10.0-M1 37 | test 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /design-middleware-router/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-middleware-router 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 8 13 | 8 14 | UTF-8 15 | 16 | 17 | 18 | 19 | org.projectlombok 20 | lombok 21 | 1.18.28 22 | provided 23 | 24 | 25 | 26 | junit 27 | junit 28 | 4.13.2 29 | test 30 | 31 | 32 | 33 | 34 | org.junit.jupiter 35 | junit-jupiter-api 36 | 5.10.0-M1 37 | test 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/cache/storage/HashMapStorage.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.cache.storage; 2 | 3 | import in.innoskrit.cache.constant.Constant; 4 | import in.innoskrit.cache.exception.KeyNotFoundException; 5 | import in.innoskrit.cache.exception.StorageFullException; 6 | 7 | import java.util.HashMap; 8 | import java.util.Map; 9 | 10 | public class HashMapStorage implements Storage { 11 | 12 | Map map; 13 | private final Integer capacity; 14 | 15 | public HashMapStorage(Integer capacity) { 16 | map = new HashMap<>(); 17 | this.capacity = capacity; 18 | } 19 | 20 | public void add(Key key, Value value) throws StorageFullException { 21 | /* 22 | * The key might already be present, and if the existing key is being updated 23 | * then storage cannot be full. Hence, update and return directly. 24 | */ 25 | if(map.containsKey(key)) { 26 | map.put(key, value); 27 | return; 28 | } 29 | if(isStorageFull()) throw new StorageFullException(Constant.STORAGE_FULL); 30 | map.put(key, value); 31 | } 32 | 33 | public void remove(Key key) throws KeyNotFoundException { 34 | if(!map.containsKey(key)) throw new KeyNotFoundException(Constant.KEY_NOT_FOUND); 35 | map.remove(key); 36 | } 37 | 38 | public Value get(Key key) throws KeyNotFoundException { 39 | if(!map.containsKey(key)) throw new KeyNotFoundException(Constant.KEY_NOT_FOUND); 40 | return map.get(key); 41 | } 42 | 43 | public boolean isStorageFull() { 44 | return this.capacity == map.size(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /design-file-system/src/main/java/in/innoskrit/FileSystem.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | public class FileSystem implements IFileSystem { 4 | 5 | private final PathNode pathNode; 6 | 7 | public FileSystem() { 8 | this.pathNode = new PathNode(); 9 | } 10 | 11 | private boolean insert(String[] segments, int value) { 12 | PathNode rootNode = pathNode; 13 | for(int i = 1; i < segments.length; i++) { 14 | String segment = segments[i]; 15 | if(!rootNode.path.containsKey(segment)) { 16 | if(i != segments.length - 1) return false; 17 | rootNode.path.put(segment, new PathNode()); 18 | } 19 | rootNode = rootNode.path.get(segment); 20 | } 21 | rootNode.value = value; 22 | return true; 23 | } 24 | 25 | @Override 26 | public boolean createPath(String path, int value) { 27 | String[] segments = path.trim().split("/"); 28 | return insert(segments, value); 29 | } 30 | 31 | private int search(String[] segments, int index, PathNode rootNode) { 32 | if(index >= segments.length) return -1; 33 | String segment = segments[index]; 34 | if(!rootNode.path.containsKey(segment)) { 35 | return -1; 36 | } 37 | rootNode = rootNode.path.get(segment); 38 | if(index == segments.length - 1) { 39 | return rootNode.value; 40 | } 41 | return search(segments, index + 1, rootNode); 42 | 43 | } 44 | @Override 45 | public int get(String path) { 46 | String[] segments = path.trim().split("/"); 47 | return search(segments, 1, pathNode); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /design-api-ratelimiter/src/main/java/in/innoskrit/algorithm/tokenbucket/TokenBucketRateLimiter.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.algorithm.tokenbucket; 2 | 3 | import in.innoskrit.RateLimiter; 4 | 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | public class TokenBucketRateLimiter implements RateLimiter { 9 | 10 | private final int capacity; 11 | private final int refillRate; 12 | Map tokens; 13 | 14 | public TokenBucketRateLimiter(int capacity, int refillRate) { 15 | this.capacity = capacity; 16 | this.refillRate = refillRate; 17 | tokens = new HashMap<>(); 18 | } 19 | 20 | private void refillBucket(TokenBucket tokenBucket) { 21 | long currentTime = System.currentTimeMillis(); 22 | long elapsed = currentTime - tokenBucket.getLastRefillTimestamp(); 23 | if(elapsed > refillRate) { 24 | int tokens = Math.min(tokenBucket.getCapacity(), tokenBucket.getTokens() + (int) (elapsed/tokenBucket.getRefillRate())); 25 | tokenBucket.setTokens(tokens); 26 | tokenBucket.setLastRefillTimestamp(currentTime); 27 | } 28 | } 29 | 30 | private boolean allowRequest(TokenBucket tokenBucket) { 31 | refillBucket(tokenBucket); 32 | if(tokenBucket.getTokens() > 0) { 33 | tokenBucket.setTokens(tokenBucket.getTokens() - 1); 34 | return true; 35 | } 36 | return false; 37 | } 38 | 39 | @Override 40 | public synchronized boolean rateLimit(String userId) { 41 | TokenBucket tokenBucket = tokens.computeIfAbsent(userId, k -> new TokenBucket(this.capacity, refillRate)); 42 | return allowRequest(tokenBucket); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /design-api-ratelimiter/src/main/java/in/innoskrit/algorithm/leakybucket/LeakyBucketRateLimiter.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.algorithm.leakybucket; 2 | 3 | import in.innoskrit.RateLimiter; 4 | 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | public class LeakyBucketRateLimiter implements RateLimiter { 9 | 10 | private final int capacity; 11 | private final long leakInterval; 12 | Map customerMap; 13 | 14 | public LeakyBucketRateLimiter(int capacity, long leakInterval) { 15 | this.capacity = capacity; 16 | this.leakInterval = leakInterval; 17 | this.customerMap = new HashMap<>(); 18 | } 19 | 20 | private void leak(long currentTime, LeakyBucket leakyBucket) { 21 | long elapsed = currentTime - leakyBucket.getLastLeakTimestamp(); 22 | if(elapsed > leakyBucket.getLeakInterval()) { 23 | int leaks = (int) (elapsed/leakyBucket.getLeakInterval()); 24 | for(int i = 0; i < leaks; i++) { 25 | leakyBucket.getRequestQueue().poll(); 26 | } 27 | leakyBucket.setLastLeakTimestamp(currentTime); 28 | } 29 | } 30 | private boolean allowRequest(LeakyBucket leakyBucket) { 31 | long now = System.currentTimeMillis(); 32 | leak(now, leakyBucket); 33 | if(leakyBucket.getRequestQueue().size() < leakyBucket.getCapacity()) { 34 | leakyBucket.getRequestQueue().offer(now); 35 | return true; 36 | } 37 | return false; 38 | } 39 | 40 | @Override 41 | public synchronized boolean rateLimit(String customerId) { 42 | LeakyBucket leakyBucket = customerMap.computeIfAbsent(customerId, k -> new LeakyBucket(capacity, leakInterval)); 43 | return allowRequest(leakyBucket); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /design-splitwise-application/ProblemStatement.md: -------------------------------------------------------------------------------- 1 | ### Requirements: 2 | 3 | User: Each user should have a userId, name, email, mobile number. 4 | 5 | Expense: Could either be EQUAL, EXACT or PERCENT 6 | 7 | Users can add any amount, select any type of expense and split with any of the available users. 8 | 9 | The percent and amount provided could have decimals upto two decimal places. 10 | 11 | In case of percent, you need to verify if the total sum of percentage shares is 100 or not. 12 | 13 | In case of exact, you need to verify if the total sum of shares is equal to the total amount or not. 14 | 15 | The application should have a capability to show expenses for a single user as well as balances for everyone. 16 | 17 | When asked to show balances, the application should show balances of a user with all the users where there is a non-zero balance. 18 | 19 | The amount should be rounded off to two decimal places. Say if User1 paid 100 and amount is split equally among 3 people. Assign 33.34 to first person and 33.33 to others. 20 | 21 | ### Input 22 | 23 | You can create a few users in your main method. No need to take it as input. 24 | 25 | There will be 3 types of input: 26 | 27 | Expense in the format: EXPENSE 28 | 29 | Show balances for all: SHOW 30 | 31 | Show balances for a single user: SHOW 32 | 33 | ### Output 34 | 35 | When asked to show balance for a single user. Show all the balances that user is part of: 36 | 37 | Format: owes : 38 | s 39 | If there are no balances for the input, print No balances 40 | 41 | In cases where the user for which balance was asked for, owes money, they’ll be x. They’ll be y otherwise. -------------------------------------------------------------------------------- /design-cache/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-cache 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | 14 | org.apache.maven.plugins 15 | maven-compiler-plugin 16 | 17 | 8 18 | 8 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.projectlombok 27 | lombok 28 | 1.18.28 29 | provided 30 | 31 | 32 | 33 | junit 34 | junit 35 | 4.13.2 36 | test 37 | 38 | 39 | 40 | 41 | org.junit.jupiter 42 | junit-jupiter-api 43 | 5.10.0-M1 44 | test 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /design-snake-game/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-snake-game 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | 14 | org.apache.maven.plugins 15 | maven-compiler-plugin 16 | 17 | 8 18 | 8 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.projectlombok 27 | lombok 28 | 1.18.28 29 | provided 30 | 31 | 32 | 33 | junit 34 | junit 35 | 4.13.2 36 | test 37 | 38 | 39 | 40 | 41 | org.junit.jupiter 42 | junit-jupiter-api 43 | 5.10.0-M1 44 | test 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /design-splitwise-application/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-splitwise-application 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | org.apache.maven.plugins 14 | maven-compiler-plugin 15 | 16 | 8 17 | 8 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | org.projectlombok 26 | lombok 27 | 1.18.28 28 | provided 29 | 30 | 31 | 32 | junit 33 | junit 34 | 4.13.2 35 | test 36 | 37 | 38 | 39 | 40 | org.junit.jupiter 41 | junit-jupiter-api 42 | 5.10.0-M1 43 | test 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /design-api-ratelimiter/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.example 8 | design-api-ratelimiter 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | org.apache.maven.plugins 14 | maven-compiler-plugin 15 | 16 | 8 17 | 8 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.projectlombok 27 | lombok 28 | 1.18.28 29 | provided 30 | 31 | 32 | 33 | junit 34 | junit 35 | 4.13.2 36 | test 37 | 38 | 39 | 40 | 41 | org.junit.jupiter 42 | junit-jupiter-api 43 | 5.10.0-M1 44 | test 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /design-meeting-scheduler/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-meeting-scheduler 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | 14 | org.apache.maven.plugins 15 | maven-compiler-plugin 16 | 17 | 8 18 | 8 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.projectlombok 27 | lombok 28 | 1.18.28 29 | provided 30 | 31 | 32 | 33 | junit 34 | junit 35 | 4.13.2 36 | test 37 | 38 | 39 | 40 | 41 | org.junit.jupiter 42 | junit-jupiter-api 43 | 5.10.0-M1 44 | test 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-doctor-appointment-system 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | 14 | org.apache.maven.plugins 15 | maven-compiler-plugin 16 | 17 | 8 18 | 8 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.projectlombok 27 | lombok 28 | 1.18.28 29 | provided 30 | 31 | 32 | 33 | junit 34 | junit 35 | 4.13.2 36 | test 37 | 38 | 39 | 40 | 41 | org.junit.jupiter 42 | junit-jupiter-api 43 | 5.10.0-M1 44 | test 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /design-customer-resolution-system/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-customer-resolution-system 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | org.apache.maven.plugins 14 | maven-compiler-plugin 15 | 16 | 8 17 | 8 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | org.projectlombok 26 | lombok 27 | 1.18.28 28 | provided 29 | 30 | 31 | 32 | junit 33 | junit 34 | 4.13.2 35 | test 36 | 37 | 38 | 39 | 40 | org.junit.jupiter 41 | junit-jupiter-api 42 | 5.10.0-M1 43 | test 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /design-ecommerce-application/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | in.innoskrit 8 | design-ecommerce-application 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | 14 | org.apache.maven.plugins 15 | maven-compiler-plugin 16 | 17 | 8 18 | 8 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | org.projectlombok 27 | lombok 28 | 1.18.28 29 | provided 30 | 31 | 32 | 33 | junit 34 | junit 35 | 4.13.2 36 | test 37 | 38 | 39 | 40 | 41 | org.junit.jupiter 42 | junit-jupiter-api 43 | 5.10.0-M1 44 | test 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/repository/AgentRepository.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.repository; 2 | 3 | 4 | import in.innoskrit.exception.AgentNotFoundException; 5 | import in.innoskrit.model.Agent; 6 | import in.innoskrit.model.Specialization; 7 | 8 | import java.util.ArrayList; 9 | import java.util.HashMap; 10 | import java.util.List; 11 | import java.util.Map; 12 | 13 | public class AgentRepository { 14 | 15 | Map agentMap; 16 | 17 | public AgentRepository() { 18 | agentMap = new HashMap<>(); 19 | } 20 | 21 | public void addAgent(String email, String agentName, List specializations) { 22 | Agent agent = new Agent(email, agentName, specializations); 23 | agentMap.put(agent.getAgentEmail(), agent); 24 | } 25 | 26 | public List getAgentsBySpecialization(Specialization specialization) { 27 | List agentList = new ArrayList<>(); 28 | for(Map.Entry entry : agentMap.entrySet()) { 29 | Agent agent = entry.getValue(); 30 | List agentSpecializations = agent.getSpecializations(); 31 | for(Specialization sp : agentSpecializations) { 32 | if(sp == specialization) { 33 | agentList.add(agent); 34 | } 35 | } 36 | } 37 | return agentList; 38 | } 39 | 40 | public List getAllAgents() { 41 | List agentList = new ArrayList<>(); 42 | for(Map.Entry entry : agentMap.entrySet()) { 43 | agentList.add(entry.getValue()); 44 | } 45 | return agentList; 46 | } 47 | 48 | public Agent getAgentByEmail(String email) { 49 | if(!agentMap.containsKey(email)) throw new AgentNotFoundException("Agent Not Found"); 50 | return agentMap.get(email); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /design-cache/src/main/java/in/innoskrit/cache/Cache.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.cache; 2 | 3 | import in.innoskrit.cache.exception.KeyNotFoundException; 4 | import in.innoskrit.cache.exception.StorageFullException; 5 | import in.innoskrit.cache.policy.ReplacementPolicy; 6 | import in.innoskrit.cache.storage.Storage; 7 | 8 | /** 9 | * 10 | * @param 11 | * @param 12 | */ 13 | public class Cache { 14 | private final ReplacementPolicy replacementPolicy; 15 | private final Storage storage; 16 | 17 | public Cache(ReplacementPolicy replacementPolicy, Storage storage) { 18 | this.replacementPolicy = replacementPolicy; 19 | this.storage = storage; 20 | } 21 | 22 | public void put(Key key, Value value) { 23 | System.out.println("Adding key => " + key); 24 | try { 25 | storage.add(key, value); 26 | replacementPolicy.keyAccessed(key); 27 | } catch(StorageFullException e) { 28 | System.out.println(e.getMessage()); 29 | Key keyToRemove = replacementPolicy.evictKey(); 30 | System.out.println("Evicted the key => " + keyToRemove.toString()); 31 | storage.remove(keyToRemove); 32 | storage.add(key, value); 33 | } 34 | System.out.println("Successfully added => " + key); 35 | System.out.println("------------------------------"); 36 | } 37 | 38 | public Value get(Key key) { 39 | Value value = null; 40 | try { 41 | value = storage.get(key); 42 | replacementPolicy.keyAccessed(key); 43 | System.out.println("Successfully got the key => " + key + " and value => " + value); 44 | } catch (KeyNotFoundException e) { 45 | System.out.println(e.getMessage()); 46 | } 47 | System.out.println("------------------------------"); 48 | return value; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/repository/PatientRepository.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.repository; 2 | 3 | import in.innoskrit.constant.Constant; 4 | import in.innoskrit.exception.PatientAlreadyExistsException; 5 | import in.innoskrit.exception.PatientNotFoundException; 6 | import in.innoskrit.model.Patient; 7 | import in.innoskrit.model.TimeSlot; 8 | 9 | import java.util.HashMap; 10 | import java.util.Map; 11 | import java.util.Set; 12 | 13 | public class PatientRepository { 14 | Map patients = new HashMap<>(); 15 | 16 | public void registerPatient(Patient patient) { 17 | if(patients.containsKey(patient.getId())) { 18 | throw new PatientAlreadyExistsException(Constant.PATIENT_ALREADY_EXISTS); 19 | } 20 | patients.put(patient.getId(), patient); 21 | } 22 | 23 | public Patient getPatient(Integer patientId) { 24 | if(!patients.containsKey(patientId)) { 25 | throw new PatientNotFoundException(Constant.PATIENT_NOT_FOUND); 26 | } 27 | return patients.get(patientId); 28 | } 29 | 30 | public boolean isRegistered(Integer patientId) { 31 | return patients.containsKey(patientId); 32 | } 33 | 34 | public boolean isSlotFree(Integer patientId, TimeSlot slot) { 35 | if(!patients.containsKey(patientId)) { 36 | throw new PatientNotFoundException(Constant.PATIENT_NOT_FOUND); 37 | } 38 | Patient patient = patients.get(patientId); 39 | Set bookedSlots = patient.getBookedSlots(); 40 | 41 | return !bookedSlots.contains(slot); 42 | } 43 | 44 | public void releaseSlot(Integer patientId, TimeSlot slot) { 45 | if(!patients.containsKey(patientId)) { 46 | throw new PatientNotFoundException(Constant.PATIENT_NOT_FOUND); 47 | } 48 | Patient patient = patients.get(patientId); 49 | Set bookedSlots = patient.getBookedSlots(); 50 | bookedSlots.remove(slot); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/src/main/java/in/innoskrit/service/PatientService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.constant.Constant; 4 | import in.innoskrit.exception.PatientAlreadyExistsException; 5 | import in.innoskrit.exception.PatientNotFoundException; 6 | import in.innoskrit.mode.Print; 7 | import in.innoskrit.model.Patient; 8 | import in.innoskrit.model.TimeSlot; 9 | import in.innoskrit.repository.PatientRepository; 10 | 11 | public class PatientService { 12 | private final PatientRepository patientRepository; 13 | private final Print print; 14 | 15 | public PatientService(PatientRepository patientRepository, Print print) { 16 | this.patientRepository = patientRepository; 17 | this.print = print; 18 | } 19 | 20 | public void registerPatient(Patient patient) { 21 | try { 22 | patientRepository.registerPatient(patient); 23 | print.printData(Constant.PATIENT_REGISTERED_SUCCESSFULLY); 24 | } catch(PatientAlreadyExistsException e) { 25 | print.printData(e.getMessage()); 26 | } 27 | } 28 | 29 | public Patient getPatient(Integer patientId) { 30 | try { 31 | return patientRepository.getPatient(patientId); 32 | } catch (PatientNotFoundException e) { 33 | print.printData(Constant.PATIENT_NOT_FOUND); 34 | } 35 | return null; 36 | } 37 | 38 | public boolean isRegistered(Integer patientId) { 39 | return patientRepository.isRegistered(patientId); 40 | } 41 | 42 | public boolean isSlotFree(Integer patientId, TimeSlot slot) { 43 | try { 44 | return patientRepository.isSlotFree(patientId, slot); 45 | } catch (PatientNotFoundException e) { 46 | print.printData(e.getMessage()); 47 | } 48 | return false; 49 | } 50 | 51 | public void releaseSlot(Integer patientId, TimeSlot slot) { 52 | patientRepository.releaseSlot(patientId, slot); 53 | } 54 | 55 | 56 | } 57 | -------------------------------------------------------------------------------- /design-middleware-router/src/main/java/in/innoskrit/MiddlewareRouterImpl.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit; 2 | 3 | import java.util.Map; 4 | 5 | public class MiddlewareRouterImpl implements MiddlewareRouter { 6 | private final PathNode pathNode; 7 | 8 | public MiddlewareRouterImpl() { 9 | this.pathNode = new PathNode(); 10 | } 11 | 12 | private void insert(String[] segments, String result) { 13 | PathNode rootNode = pathNode; 14 | for(String segment : segments) { 15 | if(!rootNode.path.containsKey(segment)) { 16 | rootNode.path.put(segment, new PathNode()); 17 | } 18 | rootNode = rootNode.path.get(segment); 19 | } 20 | rootNode.value = result; 21 | } 22 | 23 | @Override 24 | public void add(String path, String result) { 25 | String[] segments = path.trim().split("/"); 26 | insert(segments, result); 27 | } 28 | 29 | private String search(String[] segments, int index, PathNode rootNode) { 30 | if(index >= segments.length) return null; 31 | String segment = segments[index]; 32 | if(segment.equals("*")) { 33 | for(Map.Entry entry : rootNode.path.entrySet()) { 34 | String tempResult = search(segments, index + 1, entry.getValue()); 35 | if(tempResult != null) { 36 | return tempResult; 37 | } 38 | } 39 | } else { 40 | if(!rootNode.path.containsKey(segment)) { 41 | return null; 42 | } 43 | rootNode = rootNode.path.get(segment); 44 | if(index == segments.length - 1) { 45 | return rootNode.value; 46 | } 47 | return search(segments, index + 1, rootNode); 48 | } 49 | return null; 50 | } 51 | 52 | @Override 53 | public String route(String path) { 54 | String[] segments = path.trim().split("/"); 55 | return search(segments, 0, pathNode); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /design-snake-and-ladder/src/main/java/in/innoskrit/service/GameService.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.model.Board; 4 | import in.innoskrit.model.Ladder; 5 | import in.innoskrit.model.Player; 6 | import in.innoskrit.model.Snake; 7 | 8 | import java.util.LinkedList; 9 | import java.util.Queue; 10 | 11 | public class GameService { 12 | private Board board; 13 | 14 | public GameService() { 15 | } 16 | 17 | public void startGame(Board board) { 18 | this.board = board; 19 | boolean isGameOver = false; 20 | Queue queue = new LinkedList<>(); 21 | for(Player player : board.getPlayers()) { 22 | queue.offer(player); 23 | } 24 | 25 | while(!isGameOver) { 26 | Player currentPlayer = queue.poll(); 27 | int move = board.getDice().rollDice(); 28 | assert currentPlayer != null; 29 | int newPosition = currentPlayer.getCurrentPosition() + move; 30 | 31 | if(newPosition > board.getSize()) { 32 | queue.offer(currentPlayer); 33 | continue; 34 | } 35 | 36 | for(Snake snake : board.getSnakes()) { 37 | if(snake.getStart() == newPosition) { 38 | newPosition = snake.getEnd(); 39 | } 40 | } 41 | 42 | for(Ladder ladder : board.getLadders()) { 43 | if(ladder.getStart() == newPosition) { 44 | newPosition = ladder.getEnd(); 45 | } 46 | } 47 | 48 | System.out.println(currentPlayer.getName() + " rolled a " + move + " and moved from " + currentPlayer.getCurrentPosition() + " to " + newPosition); 49 | 50 | currentPlayer.setCurrentPosition(newPosition); 51 | if(currentPlayer.getCurrentPosition() == board.getSize()) { 52 | System.out.println(currentPlayer.getName() + " wins the game"); 53 | isGameOver = true; 54 | } 55 | 56 | queue.offer(currentPlayer); 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /design-customer-resolution-system/src/main/java/in/innoskrit/service/DefaultStrategy.java: -------------------------------------------------------------------------------- 1 | package in.innoskrit.service; 2 | 3 | import in.innoskrit.model.Agent; 4 | 5 | import java.util.List; 6 | 7 | public class DefaultStrategy implements IAssignStrategy { 8 | 9 | public Agent assignAgentBySpecialization(List agents, String issueId) { 10 | 11 | if(agents == null || agents.size() == 0) { 12 | return null; 13 | } 14 | 15 | Agent suitableAgent = null; 16 | int queueSize = Integer.MAX_VALUE; 17 | for(Agent agent : agents) { 18 | if(agent.getWaitingQueue().size() < queueSize) { 19 | queueSize = agent.getWaitingQueue().size(); 20 | suitableAgent = agent; 21 | } 22 | } 23 | if(suitableAgent != null) { 24 | suitableAgent.getWaitingQueue().add(issueId); 25 | if(suitableAgent.getWaitingQueue().size() == 1) { 26 | System.out.println("Issue " + issueId + " assigned to " + suitableAgent.getAgentName()); 27 | } else { 28 | System.out.println("Issue " + issueId + " added to wait-list of " + suitableAgent.getAgentName()); 29 | } 30 | } 31 | return suitableAgent; 32 | } 33 | 34 | @Override 35 | public Agent assignAgent(List agents, String issueId) { 36 | Agent suitableAgent = null; 37 | int queueSize = Integer.MAX_VALUE; 38 | for(Agent agent : agents) { 39 | if(agent.getWaitingQueue().size() < queueSize) { 40 | queueSize = agent.getWaitingQueue().size(); 41 | suitableAgent = agent; 42 | } 43 | } 44 | assert suitableAgent != null; 45 | suitableAgent.getWaitingQueue().add(issueId); 46 | if(suitableAgent.getWaitingQueue().size() == 1) { 47 | System.out.println("Issue " + issueId + " assigned to " + suitableAgent.getAgentName()); 48 | } else { 49 | System.out.println("Issue " + issueId + " added to wait-list of " + suitableAgent.getAgentName()); 50 | } 51 | return suitableAgent; 52 | } 53 | 54 | 55 | } 56 | -------------------------------------------------------------------------------- /design-doctor-appointment-system/ProblemStatement.md: -------------------------------------------------------------------------------- 1 | ### Description: 2 | - Build an app that lets patients connect to doctors and book appointments. 3 | - The day is divided into time slots of 30 minutes each. 4 | - Doctors can login to the portal and declare their availability for the given day in terms of slots. Assume that login/logout functionalities are already implemented. 5 | - Patients can book appointments/ cancel existing appointments. 6 | - For simplicity you can assume that the doctors’ availability is declared for that particular day only. 7 | 8 | ### Features: 9 | - A new doctor should be able to register, and mention his/her speciality among (Cardiologist, Dermatologist, Orthopedic, General Physician, Dentist, etc). 10 | - A doctor should be able to declare his/her availability in each slot for the day. For example, the slots will be of 30 minutes like 9:00 to 9.30, 13:00 to 13:30. 11 | - Patients should be able to register. 12 | - Patients should be able to search available slots based on speciality. 13 | - The slots should be displayed in a ranked fashion. Default ranking strategy should be to rank by start time. But we should be able to plugin more strategies like Doctor’s rating etc in the future. 14 | - Patients should be able to book appointments with a doctor for an available slot. 15 | - A patient can book multiple appointments in a day. 16 | - A patient cannot book two appointments with two different doctors in the same time slot. 17 | - Patients can also cancel an appointment, in which case that slot becomes available for someone else to book. 18 | - Build a wait-list feature: 19 | - If the patient wishes to book a slot for a particular doctor that is already booked, then add this patient to the wait-list. 20 | - If the patient with whom the appointment was booked originally cancels the appointment, then the first in the wait-list gets the appointment. 21 | - A patient/doctor should be able to view his/her booked appointments for the day. 22 | 23 | ### Bonus requirements: 24 | #### Trending Doctor: 25 | 26 | - Maintain at any point of time which doctor has the most appointments. 27 | - Different ranking strategy can be used like rating of doctor as a strategy to display a list of available doctors for a given specialization. --------------------------------------------------------------------------------