{"id":26022962,"url":"https://github.com/agrison/springboot-backend-interview","last_synced_at":"2026-05-29T08:31:50.765Z","repository":{"id":145285721,"uuid":"421707413","full_name":"agrison/springboot-backend-interview","owner":"agrison","description":"Spring Boot Backend interview exercise","archived":false,"fork":false,"pushed_at":"2021-10-27T06:51:49.000Z","size":11,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-06T10:43:03.904Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/agrison.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-27T06:49:31.000Z","updated_at":"2025-02-11T20:38:27.000Z","dependencies_parsed_at":"2023-04-21T09:46:35.925Z","dependency_job_id":null,"html_url":"https://github.com/agrison/springboot-backend-interview","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/agrison/springboot-backend-interview","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agrison%2Fspringboot-backend-interview","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agrison%2Fspringboot-backend-interview/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agrison%2Fspringboot-backend-interview/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agrison%2Fspringboot-backend-interview/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/agrison","download_url":"https://codeload.github.com/agrison/springboot-backend-interview/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agrison%2Fspringboot-backend-interview/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33644228,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-06T10:37:36.295Z","updated_at":"2026-05-29T08:31:50.759Z","avatar_url":"https://github.com/agrison.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring Boot Backend interview exercise\n\nInterviewers: see [Interviewer.md](Interviewer.md)\n\n## Exercise 1\n\n### REST API\n\nYou have a REST API located in class `sample.exercise1.api.ApiController`, it has no implementation.\n\nPlease tell us what you think about this REST API:\n\n- verbs\n- paths\n- whatever comes to your mind\n\nDo you think it can be improved, and if so, in which way?\n\n## Exercise 2 \n\nThe code is located in `src/main/java/sample/exercise2`, tests are in `src/test/java/sample`.\n\n### API structure\n\nThe application uses an in-memory repository to avoid losing time with JPA.\n\nYou can use any Java library you want. Vavr and Lombok are already built-in the original `pom.xml`\n\n* `GET /quotes`: List all the quotes.\n* `GET /quotes/statistics`: Return some statistics about the code.\n* `GET /quotes/{author}`: List all quotes by author.\n* `GET /quotes/search?q=foo`: List all quotes by `foo` or talking about `foo`.\n* `POST /quotes`: Create a new quote, the backend should check for duplicates before inserting. \n                  In case of duplicate the backend should return a `409 CONFLICT`.\n* `DELETE /quotes/{id}`: Remove a quote from the in-memory repository. Should return a `404 NOT FOUND` when no such quote found.\n\n### Refactoring\n\nPlease refactor the code to make it better. \nYou have full power, you can refactor whatever you want and as you see fit.\n\nMost of the work you have to do is in the `QuotesRepository`, `QuotesService`, `FizzBuzzService` and `AppController` classes.\nHowever, the whole code can be improved in almost all parts.\n\n### Performance\n\nIf you take a look at the `sample.exercise2.service.PerformanceService`, it includes two methods which are believed to be naive and slow.\nPlease make them faster, these can be checked using the test class `sample.PerfTest`.\n\n### Make the tests PASS\n\nSome parts are not implemented and have to be implemented so that the tests are **all green**.\n\nComplete as much as you can during the allotted time 😃\n\n### Bonus\n\n1) Improve performance\n2) What if I finally want some JPA?\n3) Do you like Vavr? I do like Vavr. How can it improves the code?\n4) I want my server to use SSL.\n5) Secure both POST \u0026 DELETE endpoints with a JWT.\n\n----\n\nGood luck \u0026 have fun!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagrison%2Fspringboot-backend-interview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagrison%2Fspringboot-backend-interview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagrison%2Fspringboot-backend-interview/lists"}