Design a building like a house and provide a builder to build it.
Design a hospital and provide classes to build it (builder, factories, etc).
Commit your practice code.
Topic 1: Design Patterns (3 days)
Design Patterns Card
Refactoring to Patterns Catalog
Create a ShoppingCart where a user can buy different items and then decide how to pay them:
by Credit Card: where a Name and a Credit Number is required.
By Paypal: where an email and a password is needed.
Cash: no information is required.
Add the following discount depending on the payment type
10% by Credit Card.
The cheapest item is for free when the user pay by Paypal.
90% of the most expensive item is free if the user pays by Cash.
Create a counter to provide unique sequential numbers and use it to set an identification to each payment transaction.
Add functionality to display information about the list of items. The item should be displayed as:
Item Name ....... $ Price
Add an offer that includes other individual items or other offers. Take into account that when an offer is displayed, it should say:
Offer Name ....... $ Price
Item Name ...... $ Price
Add a mailist List where the market manager is notified when:
A new item/offer is added
A price is changed
A new transaction was made
Audio Player: Modelate an application for listening music. You can play, stop and pause tracks.
Topic 2: Maven
(It is assumed that Maven is already installed and working. I think it is not needed as an excercise to install maven locally).
Create a simple Maven project:
Here, the idea is to use the Maven Archetype plugin from the command line. Run the archetype:generate goal, selecting default archetype suggested by pressing "Enter". Create a simple a simple application that takes a name from console and print a greeting using the given name.
Building a Simple Project:
Create, compile, test, and install the Maven project created on the previous point. To prove that this program works, run it from the command line.
Customizing a Maven Project Expand the project created on point 2. The idea is to start playing with adding some dependencies, adding some source code, and customizing the project to suit specific needs.
A Simple Web Application
A Multi-module Project. Create a multi-module project that combines work done on previous points (2 and 5). The idea when completing this point is to be able to use Maven to develop complex, multi-module projects.
Commit your practice code.
Topic 3: Test Driven Development (2 day)
Convert an amount on a check to appropiate text. For example:
2523.04 --> Two thousand five hundred twenty-three and 04/100 dollars
Develop a word-wrapping algorithm, which is given a string and a row-length, returns a list of word-wrapped rows. For example:
If the row-length is 60 and the input string is 30, the result is just the input string
If the row-length is 7 and the input string is "Hello Word!", the result should be: "Hello", "Word!"
If the row-length is 3 and the input string is "a b c d e f", the result should be "a b", "c d", "e f"
If the row-length is 5 and the input string is "Excelent", the result should be "Excel", "ent"
Use TDD to create the 'Recent file list' behaviour.
Some examples of this behaviour is:
When the program is run for the first time, the list is empty.
When a file is opened, it is added to the recent file list.
If an opened file already exists in the recent file list, it is bumped to the top, not duplicated in the list. *If the recent file list gets full (typical number of items is 15), the oldest item is removed when a new item is added.
Create a Roman Number conversion (both ways, either int to Roman or Roman to int). All rules can be found on wikipedia: Roman numerals.
American Soundex: This algorithm encodes words using a phonetic algorithm that promotes convergence of similar-sounding words. For more information about algorithm please read American Soundex. Create a function to return the proper soundex code.
Using TDD techniques such as mocking, faking and stubs, try to develop your own blog software featuring:
Post new entry
Delete existing entry
Update existing entry
Show 10 most recent entries
Tag an entry
Show all tags
Show blog entry with a certain tag
And so on...
Topic 4: Services (3 days)
Create a shopping cart API spec
Implement the previous shopping cart using TDD.
Design a UserService for CRUD operations.
Implement and document previous UserService.
Add a uploadPhoto to the UserService
Add friends and likes (photos) to previous UserService.
Note: you can choose any endpoint documentation standard. As an example you can use the twitter format
Note 2: Do not implement jpa or orm. Services should return in memory data only.
Topic 5: SQL - MySql (1 day)
Optimizaciones en MySql
Create a database named 'high-school' and modelate:
Student: first name, last name, registration number, date of birth)
Teacher: first name, last name, date of birth)
Course: name, assigned teacher, hours by week, schedule time (they can be dictated several times during the week)
An student can assist several courses during the same year.
A teacher can be assigned to several courses.
For each course, each student has 3 partial notes and a final note.
Create all relationship that you think they are required
Insert information for 3 teachers, 5 courses and 20 students per course
List students and teachers for a given course. The output format should be:
Teacher: <last-name>, <first-name>
<last-name>, <first-name> (ordered by alphabetically by last name)
List final course notes for a given student (the input should be the registration number). They should be ordered by highest notes and course name)
Percentage of students that passed/failed a given course.
For a given teacher, list the timeline for each course that he is assigned to (ordered by date), and the course name. The format should be:
Teacher: <last-name>, <first-name>
Monday 09:00 - 11:00: <course-name>
Monday 15:00 - 17:30: <course-name>
Friday 08:45 - 10:40: <course-name>
Identify and Optimize all queries
Create a table for students that have more than 1 partial note with a value less than 7. The table should contain the following information:
Add a new column to the previous table (assigned teacher) and update it with the proper information.
Delete the oldest teacher (courses assigned to her should be empty).
Topic 6: Spring Core & REST (3 day)
Expose the shopping cart created in the topic 4.
Create a rest api to create, update and remove meetings. Note that a meeting has attendees, room and a time slot. Attendees and rooms exists in the system and must be retrieved by an endpoint to create the meeting.
You must provide the following features: create meetings, query existing ones, cancel and update meetings.
Topic 7: ORM (1 day)
Configure Spring orm to connect to the db created on topic 5.
Implement JPA objects for the entities you created on Topic 5.
Create one or more DAO or repository with methods to:
Store a student, teacher and course.
Fetch all students, fetch all teachers, fetch all courses.
Create a method to fetch all courses of a given student.
Create a method to fetch all students of a given course.
Topic 8: Spring Data & MongoDB (2 day)
SQL to MongoDB Mapping Chart
Getting Started With MongoDB
Java And MongoDB
Spring and Mongo
Spring boot and MongoDB
Using the same SQL-MySql data model, map it to the corresponding database, collections and documents.
Fetch all students whose notes in a specific course were greater than 4.
Fetch all courses ordered by name for a given teacher.
Add a new field to “courses” collection to identify which courses are finished.
Create a new project using Spring Data for MongoDB framework and translate items 2, 3 and 4.
Create a functional shopping cart (just REST api). The minimum features to be completed are:
User registration and login.
Find products by category and name.
Category IT & Programming
Is this a project or a position? Project
Required availability As needed
Deadline: Not specified