diff --git a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionRepository.java b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..0f924cd5794fbfb300a826813de050a1dc7b4222
--- /dev/null
+++ b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionRepository.java
@@ -0,0 +1,20 @@
+package org.fuseri.moduleexercise.question;
+
+import org.fuseri.moduleexercise.common.DomainRepository;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+
+/**
+ * A repository interface for managing Question entities
+ */
+public interface QuestionRepository extends DomainRepository<Question, String> {
+
+    /**
+     * Find a page of questions associated with the exercise with the specified ID
+     *
+     * @param exerciseId  the ID of the exercise to find questions for
+     * @param pageRequest the page request specifying the page number and page size
+     * @return a page of questions associated with the specified exercise
+     */
+    Page<Question> findByExerciseId(String exerciseId, PageRequest pageRequest);
+}
\ No newline at end of file
diff --git a/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionRepositoryImpl.java b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionRepositoryImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..7085bca8d6fdb215184e50678176811e6e211bea
--- /dev/null
+++ b/application/module-exercise/src/main/java/org/fuseri/moduleexercise/question/QuestionRepositoryImpl.java
@@ -0,0 +1,36 @@
+package org.fuseri.moduleexercise.question;
+
+import org.fuseri.moduleexercise.common.DomainRepositoryImpl;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * An implementation of the QuestionRepository interface
+ * Provides access to Question entities stored in a data source
+ */
+@Repository
+public class QuestionRepositoryImpl extends DomainRepositoryImpl<Question, String> implements QuestionRepository {
+
+    /**
+     * Find a page of questions associated with the exercise with the specified ID
+     *
+     * @param exerciseId  the ID of the exercise to find questions for
+     * @param pageRequest the page request specifying the page number and page size
+     * @return a page of questions associated with the specified exercise
+     */
+    @Override
+    public Page<Question> findByExerciseId(String exerciseId, PageRequest pageRequest) {
+        List<Question> filteredQuestions = getItems()
+                .stream()
+                .filter(e -> e.getExerciseId().equals(exerciseId))
+                .skip(pageRequest.getOffset())
+                .limit(pageRequest.getPageSize())
+                .toList();
+
+        return new PageImpl<>(filteredQuestions, pageRequest, filteredQuestions.size());
+    }
+}