Please, use this repository as a base for you training phase. The idea is to fork this project so everyone use the same folder structure for the exercises.
It's extremelly important to keep the key points easy to be verified by the reviewers, so don't mix the key points with the rest of the exercises
#JAVA Boot Camp
###Are you ready for it?
####Index
###Objective
This course teaches the basics of Java development applications.
→ index
###Who Should Attend
The training will start at a low level and does not require in depth knowledge of the platform in question. Desirable participant profile: trainees and outside Globant candidates. A basic knowledge on OOP is desired, though.
→ index
###Duration
Four weeks total.
Three weeks for guided learning and one week for app development.
→ index
###Technical Assistance
You can contact other bootcamp participants or any available tutor if you need technical assistance. We will create one chat for boot camp members only, and another one for boot camp members and tutors when boot camp starts.
###Performance Measurement
-
Code review after each practice.
-
Checkpoint completion after Learning stage with your assigned tutor
→ index
###Handling Advanced Developers
Developers that move faster than average can go ahead and complete as much exercises as wanted.
→ index
###Materials
-
Install Java SDK.
-
The IDE to use is Eclipse for Java Developers.
-
Skype Account + headset (audio calls)
-
Create your own GitHub account. Follow this guideline to setup your account. Also you can read further about Git in Try Git
-
Fork this repo https://github.com/juanpablopizarro/java-bootcamp to use as a base to host the project code.
→ index
###General Guidelines
The boot camp is organized in the following way:
-
The first three weeks will be used for intensive self learning. Each topic will have reading and practices parts. Tutors will be available to answer technical questions on a given chat room.
-
The next week will be used to develop an application following a life process.
-
One boot camp chat will be created for feedback and technical assistance:
Bootcamp HTML - ALL Every person participating in the bootcamp is present here (students, tutors and PMs). Here is the place to ask for technical assistance!
-
Team play is encouraged but the work will be evaluated per person.
-
The instructions will be vague as they generally are in real life projects. You must look for support and guidance from your PM, teammates and tutors.
-
All code and documentation must be in English.
-
Code must adhere to this eclipse code formatter.
→ index
###Proposed Test Applications
The test application will consist in a functional shopping cart (just REST api). The minimum features to be completed are:
- User registration and login.
- Buy products.
- Save Cart.
- Find products by category and name.
###Learning Days###
Each day you will grab the fundamentals of the key building blocks for usual Java applications.
On each learning day you will have to:
-
####Read:#### We will provide you with documentation related with current sprint content so you can have a background reference, guide and examples to complete the following practice.
-
####Practice:#### You will implement the previously gathered knowledge in simple coding activities. Most important task numbers are listed in the "Key Points" section for each day and they should get most of your attention; if you feel you don’t have enough time to complete all tasks, start with these ones when possible.
-
####Commit:#### You will commit all your code on a daily basis, when you finish your practice.
####Topic 0: Introduction to Object Oriented Programming Concepts (1 day)####
#####Reading:#####
-
Beginners: Java Concepts basic tutorial (in case you need it!)
-
Beginners: Have fun with Introduction to Java Programming.
-
Explore Design Patterns
#####Extra documentation:#####
#####Practice:#####
- OOP Exercises
- 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).
#####Key Points:#####
2,3
#####Commit:#####
Commit your practice code.
→ index
####Topic 1: Design Patterns (3 days)####
#####Reading:#####
-
Explore Design Patterns
#####Extra documentation:#####
#####Practice:#####
-
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.
#####Key Points:#####
1, 2, 3, 4, 5, 6, 7
#####Commit:#####
Commit your practice code.
→ index
####Topic 2: Maven (1 day)####
#####Reading:#####
-
Have fun with Maven in 5 minutes.
-
Maven: best practices
#####Practice:#####
(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.
#####Key Points:#####
1,4,5
#####Commit:#####
Commit your practice code.
→ index
####Topic 3: Test Driven Development (2 day)####
#####Reading:#####
-
Watch the following videos:
-
Have fun with Test Driven Development in Java using Eclipse.
#####Practice:#####
- 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 grow 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...
#####Key Points:#####
1,2,3,4
#####Commit:#####
Commit your practice code.
→ index
####Topic 4: Services (3 days)####
#####Reading:#####
#####Practice:#####
- Create a shopping cart API spec
- Implement the previous shopping cart using spring 4 & TDD.
- Document endpoints
- 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.
#####Key Points:#####
2,4,7
#####Commit:#####
Commit your practice code.
→ index
####Topic 5: SQL - MySql (1 day)####
#####Reading:#####
#####Practice:#####
-
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)
Notes:
- 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:
Course: <course-name> Teacher: <last-name>, <first-name> Students: <last-name>, <first-name> (ordered by alphabetically by last name)
-
List final course notes for a given student (the input could be last name or 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> Schedule: 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:
- Student name
- Course name
- Average Note
-
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).
#####Key Points:#####
1,2,3,4,5,8
#####Commit:#####
Commit your practice code.
→ index
####Topic 6: Sprint Core & REST (3 day)####
#####Reading:#####
-
Spring boot up to point III (included)
#####Practice:#####
- 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.
#####Key Points:#####
2
#####Commit:#####
Commit your practice code.
→ index
####Topic 7: ORM (1 day)####
#####Reading:#####
-
Spring Boot and JPA integration
#####Practice:#####
- 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.
#####Key Points:#####
1,2,3,4,5
#####Commit:#####
Commit your practice code.
→ index
####Topic 8: Spring Data & MongoDB (2 day)####
#####Reading:#####
#####Practice:#####
- 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.
#####Key Points:#####
1,2,3,5
#####Commit:#####
Commit your practice code.
→ index
###Your First Project Starts Now!
####Final Project Create a functional shopping cart (just REST api). The minimum features to be completed are:
- User registration and login.
- Buy products.
- Save Cart.
- Find products by category and name.
Thanks for reading!